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...