In Search of a Map: using Program Slicing to Discover Potential Parallelism in Recursive Functions
Recursion schemes, such as the well-known map, can be used as loci of potential parallelism, where, e.g., map is replaced with an equivalent parallel implementation. This paper formalises a novel technique, using program slicing, that automatically and statically identifies computations in recursive functions that can be lifted out of the function and potentially performed in parallel. We define a new program slicing algorithm, and show the soundness and completeness of our algorithm. We have built a prototype implementation, and demonstrated its use on 12 Haskell examples, including benchmarks from the NoFib suite and functions from the standard Haskell Prelude. In all cases, we obtain the expected results in terms of finding potential parallelism. Moreover, we have tested our prototype against synthetic benchmarks, demonstrating our prototype has quadratic time complexity. For the NoFib benchmark examples we demonstrate that real parallel speedups can be obtained (up to 32.93 times the sequential performance on 56 hyperthreaded cores).
Thu 7 SepDisplayed time zone: Belfast change
14:00 - 15:00
|In Search of a Map: using Program Slicing to Discover Potential Parallelism in Recursive Functions
|Strategies for Regular Segmented Reductions on GPU