Skip to content

Instantly share code, notes, and snippets.

@derekmcloughlin
Created May 26, 2014 14:54
Show Gist options
  • Save derekmcloughlin/f35b09e3a30b563594c7 to your computer and use it in GitHub Desktop.
Save derekmcloughlin/f35b09e3a30b563594c7 to your computer and use it in GitHub Desktop.
module Main where
import Control.Parallel
import Control.Parallel.Strategies (rseq, rpar, Strategy, using, runEval)
import Data.Time.Clock
import Text.Printf
import System.Environment
-- <<fib
fib :: Integer -> Integer
fib 0 = 1
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
-- >>
--
main = do
t1 <- getCurrentTime
let fib_one = fib 40
printTimeSince t1
print fib_one
printTimeSince t1
t2 <- getCurrentTime
let pair = (fib 40, fib 40) `using` parPair
printTimeSince t2
print pair
printTimeSince t2
parPair :: Strategy (a,b)
parPair (a,b) = do
a' <- rpar a
b' <- rpar b
return (a',b')
printTimeSince t0 = do
t1 <- getCurrentTime
printf "time: %.2fs\n" (realToFrac (diffUTCTime t1 t0) :: Double)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment