The Eval monad and strategies
The first abstraction we will look at is the Control.Parallel.Strategies
module from the parallel
package. The core Strategy API consists of the following:
data Eval a instance Monad Eval type Strategy a = a → Eval a runEval :: Eval a → a using :: a → Strategy a → a rseq :: Strategy a rdeepseq :: NFData a => Strategy a rpar :: Strategy a
The principle is to use using
or runEval
to evaluate a lazy data structure in parallel, using some strategy. Essentially we have separated the algorithm (a lazy data structure) from the parallel evaluation (a strategy).
As a simple example, consider calculating the minimum and maximum elements of many lists in parallel. We write an algorithm, which doesn't encode any parallelism, called ...
Get Haskell High Performance Programming now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.