Session 4: Program Optimisation (Chair: John Launchbury)<\/span><\/h4>\nPractical and Effective Higher-Order Optimizations
\nSpeaker: Lars Bergstrom (Mozilla Research)<\/h4>\n
Many CFA-based optimizations addressed in other ways, but higher-order inlining is the missing optimization. In practice, high performance functional programs avoid functions, e.g. OCaml compiler example.<\/p>\n
What is the concrete function called from some computed function call ? (handled by 0CFA)<\/p>\n
We have come up with a new analysis to see when can do higher-ordering inlining. We see if any free variables have been rebound between the closure capture location and the call site.<\/p>\n
Technique:
\n- Normalize and number soure code
\n- Build control-flow graph
\n- Add CFA-infromed edges
\n- Perform rebinding<\/p>\n
Q: How can I as a programmer understand when the optimisation will kick in ?
\nA: If your the compiler writer, yes, otherwise we don't yet have a story for this<\/p>\n
Q: What happens with things like List.map and List.map ?
\nA: This are often special case in the compiler to inline<\/p>\n
Worker\/Wrapper\/Makes It\/Faster
\nSpeaker: Jennifer Hackett (University of Nottingham)<\/h4>\n
Research focus on correctness of optimisations but there's a lot less work on how we check that the transformation is actually an improvement.
\nExample of adding an accumulator to th
\ne List.rev function<\/p>\n
The worker wrapper theroms captures induction.<\/p>\n
I'm headiing off and direct the reader over to Leo at http:\/\/www.syslog.cl.cam.ac.uk\/2014\/09\/01\/icfp-2014-day-1\/<\/p>\n","protected":false},"excerpt":{"rendered":"
This is day 1 of the 19th International Conference on Functional Programming. Leo and I (Heidi) are here live blogging from Gothenburg, Sweden. He posts is here, we will combine them (with photos :)) in the coming weeks. Opening Good morning and time to get started. Official definition of ICPF: its a forum for discussion […]<\/p>\n","protected":false},"author":35,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6,29],"tags":[],"_links":{"self":[{"href":"https:\/\/www.syslog.cl.cam.ac.uk\/wp-json\/wp\/v2\/posts\/1773"}],"collection":[{"href":"https:\/\/www.syslog.cl.cam.ac.uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.syslog.cl.cam.ac.uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.syslog.cl.cam.ac.uk\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.syslog.cl.cam.ac.uk\/wp-json\/wp\/v2\/comments?post=1773"}],"version-history":[{"count":10,"href":"https:\/\/www.syslog.cl.cam.ac.uk\/wp-json\/wp\/v2\/posts\/1773\/revisions"}],"predecessor-version":[{"id":1844,"href":"https:\/\/www.syslog.cl.cam.ac.uk\/wp-json\/wp\/v2\/posts\/1773\/revisions\/1844"}],"wp:attachment":[{"href":"https:\/\/www.syslog.cl.cam.ac.uk\/wp-json\/wp\/v2\/media?parent=1773"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.syslog.cl.cam.ac.uk\/wp-json\/wp\/v2\/categories?post=1773"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.syslog.cl.cam.ac.uk\/wp-json\/wp\/v2\/tags?post=1773"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}