Carcigenicate

Parallel Test

Nov 11th, 2014
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import Control.Parallel.Strategies
  2. import Control.Monad
  3. import Control.DeepSeq
  4.  
  5. sums :: [Int] -> Int
  6. sums xs = s + ds
  7.     where
  8.         s = foldl (+) 0 xs
  9.         ds = foldl (\x acc -> (x*2) + acc) 0 xs
  10.        
  11. sumsP :: [Int] -> Int
  12. sumsP xs = let fXs = force xs in
  13.     (\(x,y) -> x + y) . runEval $ do
  14.         s'  <- rpar $ foldl (+) 0 fXs
  15.         ds' <- rpar $ foldl (\x acc -> (x*2) + acc) 0 fXs
  16.         rseq s'; rseq ds'
  17.         return (s',ds')
  18.  
  19. main = print $ sumsP [1..5000000]
Advertisement
Add Comment
Please, Sign In to add comment