parallel-io-0.2: Control/Concurrent/ParallelIO/Benchmark.hs
module Main where
import Data.IORef
import Data.Time.Clock
import Control.Concurrent.ParallelIO.Global
n :: Int
n = 1000000
main :: IO ()
main = do
r <- newIORef (0 :: Int)
let incRef = atomicModifyIORef r (\a -> (a, a))
time $ parallel_ $ replicate n $ incRef
v <- readIORef r
stopGlobalPool
print v
time :: IO a -> IO a
time action = do
start <- getCurrentTime
result <- action
stop <- getCurrentTime
print $ stop `diffUTCTime` start
return result