Mercurial > hg > Members > toma > Jungle-haskell
view test/runEvalTest/ParSum.hs @ 25:efb4e880ac7f
add simple parallel execution test
author | Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 03 Feb 2014 20:38:07 +0900 |
parents | |
children | 02e7f2f50bdc |
line wrap: on
line source
{-# LANGUAGE OverloadedStrings #-} import Control.Parallel import Control.Parallel.Strategies import Text.Printf import Data.Time.Clock import Control.Exception import System.Environment num = 1000000 main = do t0 <- getCurrentTime printTimeSince t0 --a <- evaluate $ runEval test3 --a <- evaluate $ runEval (test1 100) a <- evaluate $ ((map (\x -> (sum' (x*num) ((x+1)*num))) [0..10]) `using` parList' rpar) print a printTimeSince t0 parList' s [x] = do a <- s x return [a] parList' s (x:xs) = do a <- s x b <- parList' s xs return (a:b) test = do a <- rpar (sum' 0 num) b <- rpar (sum' num (num*2)) return (a,b) test1 i = do a <- rpar (sum' (i*num) ((i+1) * num)) if i == 0 then (return [a]) else do b <- test1 (i-1) return (a:b) test3 = do a <- rpar (sum' 0 num) b <- rpar (sum' num (if a < num then a else (num*2))) return (a,b) sum' begin end = if begin < end then begin + (sum' (begin + 1) end) else begin printTimeSince t0 = do t1 <- getCurrentTime printf "time: %.2fs\n" (realToFrac (diffUTCTime t1 t0) :: Double)