# Parallel Processing with Haskell

Download Haskell now. It's a pure functional language with built-in support for parallel processing. That means it is more Lispy than Lisp and faster than C.

import Text.Printf (printf) import Control.Parallel (par, pseq) main :: IO () main = a `par` b `par` c `pseq` printf "A = %d\nB = %d\nC = %d\n" a b c where a = ack 3 10 b = fac 42 c = fib 34 fac :: Integer -> Integer fac 0 = 1 fac n = n * fac (n-1) ack :: Integer -> Integer -> Integer ack 0 n = n + 1 ack m 0 = ack (m-1) 1 ack m n = ack (m-1) (ack m (n-1)) fib :: Integer -> Integer fib 0 = 0 fib 1 = 1 fib n = fib (n-1) + fib (n-2)

#### Compile

$ ghc -O2 --make maths.hs -threaded -rtsopts [1 of 1] Compiling Main ( maths.hs, maths.o ) Linking maths ...

#### Run

$ time ./maths +RTS -N A = 8189 B = 1405006117752879898543142606244511569936384000000000 C = 5702887 real 0m0.774s user 0m1.201s sys 0m0.014s

#### Debriefing

This program computes the ackermann, factorial, and fibonacci functions in parallel. `par` instructs Haskell to calculate a, b, and c independently. `pseq` instructs Haskell to calculate the values before printing them.

##### Compilation options

`--make`compiles the binary`-O2 optimizes the binary``-threaded`provides the parallel processing feature

##### Runtime options

`time`runs our Haskell program and prints the time it requires to run.`+RTS`installs signals capabilities, so that we can cancel the program with`Control+C`if we have to.`-N`specifies multicore, with an optional manual specification of the number of cores. If you specify more cores than you actually have, the program stalls, and the*cores*`+RTS`option becomes crucial.

So there you have it. A parallel processing program with no threading headaches. Haskell does the grunt work for you so you can be more a productive programmer.

#### Resources

Haskell.org is the official Haskell website.

Try Haskell is an online, interactive tutorial for learning Haskell.

Learn You a Haskell is a funny tutorial explaining *list comprehensions*.

Haskell in 5 steps inspired this tutorial.