In English

Better Implicit Parallelism; Improving ApplicativeDo Heuristics Through Weight Annotations

Edvard Hübinette ; Fredrik Thune
Göteborg : Chalmers tekniska högskola, 2018. 109 s.
[Examensarbete på avancerad nivå]

ApplicativeDo tries to remove the monad binds where possible when desugaring Haskells’ do-notation. It does this by looking at inter-statement dependencies and connecting them with applicative operations when possible; this introduces implicit parallelism in the code. Deciding which structure to generate is tricky, since many different are usually possible. Currently, this is solved with simple minimum cost analysis with an unit cost model, assuming each statement takes the same amount of time to evaluate. By extending the cost model inside the ApplicativeDo algorithm for variable evaluation costs, we perform smarter generation of code by prioritising parallelisation of heavy statements. At Facebook, Marlow et al. developed Haxl, a data-fetching library that can use applicative structure in expressions for free parallelism. To our knowledge, it is the only library that can do automatic parallelism on applicative expressions. We observe significant wall-clock speedups in many cases when running benchmarks with Haxl, compared to the original ApplicativeDo-desugared programs, given relative costs of statements. The ApplicativeDo extension is agnostic to the source of costs, but one way of providing them is investigated as optional weight annotations on do-statements. This works well when the relative costs are known, but this kind of run-time estimation is notoriously difficult, particularly in Haskell. We suggest different directions for future work relating to sources of costs.

Nyckelord: Computer science, engineering, MSc thesis, functional programming, Haskell, inferred parallelism, Haxl, ApplicativeDo



Publikationen registrerades 2018-11-02. Den ändrades senast 2018-11-02

CPL ID: 256249

Detta är en tjänst från Chalmers bibliotek