Parallelizing pure functions using the Par monad
The Par monad from the Control.Monad.Par
package is used to speed up pure functions using parallel threads. Information flow is guided by variables called IVar
. We can put
values to IVar
in parallel or get
values from it.
Getting ready
Install the Par monad on cabal as follows:
$ cabal install monad-par
How to do it…
- Import the Par monad as follows:
import Control.Monad.Par
- Run a computation in parallel, and perform some interesting function such as counting the number of digits and printing it out.
main = print $ length $ show $ runPar mypar
- Define an I/O type action as follows:
mypar = do v1 <- new :: Par (IVar Integer) v2 <- new :: Par (IVar Integer) fork $ put v1 task1 fork $ put v2 task2 v1' <- get v1 v2' <- get v2 return (v1' + v2')
- Perform a time-consuming task as follows:
task1 = 8^8^8
- Perform another time-consuming task as follows:
task2 = 8^8^7
- Compile the code with the
threaded
andrtsopts...