Data parallel programming – Repa
Repa (regular parallel) is a Haskell library providing regular parallel arrays. Repa performs very well in image processing, for example. Doing computations on large data structures in parallel is Repa's specialty. Repa is installed with:
stack install repa
The parts on Repa in this chapter are written for version 3.4.0.2 of the Repa library. The main interface is exported by the Data.Array.Repa module.
At first glance, the library perhaps looks a bit complex. For instance, the parallel sum function has this daunting type signature:
sumAllP:: (Shape sh, Source r a, Elt a, Unbox a, Num a, Monad m)=> Array r sh a -> m a
Repa uses a lot of classes to overload functionality over different types of array. The type of immutable arrays in Repa contains three type variables:
data Array r sh e
Here, r defines representation, sh defines shape, and e defines the array elements' type. For example, a one-dimensional array of unboxed Int is given by:
Array U DIM1 Int
Mutable...