Mercurial > hg > Members > toma > Jungle-haskell
comparison 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 |
comparison
equal
deleted
inserted
replaced
24:278bd0dcec51 | 25:efb4e880ac7f |
---|---|
1 {-# LANGUAGE OverloadedStrings #-} | |
2 | |
3 import Control.Parallel | |
4 import Control.Parallel.Strategies | |
5 import Text.Printf | |
6 import Data.Time.Clock | |
7 import Control.Exception | |
8 import System.Environment | |
9 | |
10 num = 1000000 | |
11 | |
12 main = do | |
13 t0 <- getCurrentTime | |
14 printTimeSince t0 | |
15 --a <- evaluate $ runEval test3 | |
16 --a <- evaluate $ runEval (test1 100) | |
17 a <- evaluate $ ((map (\x -> (sum' (x*num) ((x+1)*num))) [0..10]) `using` parList' rpar) | |
18 print a | |
19 printTimeSince t0 | |
20 | |
21 parList' s [x] = do | |
22 a <- s x | |
23 return [a] | |
24 parList' s (x:xs) = do | |
25 a <- s x | |
26 b <- parList' s xs | |
27 return (a:b) | |
28 | |
29 test = do | |
30 a <- rpar (sum' 0 num) | |
31 b <- rpar (sum' num (num*2)) | |
32 return (a,b) | |
33 | |
34 test1 i = do | |
35 a <- rpar (sum' (i*num) ((i+1) * num)) | |
36 if i == 0 | |
37 then (return [a]) | |
38 else do b <- test1 (i-1) | |
39 return (a:b) | |
40 test3 = do | |
41 a <- rpar (sum' 0 num) | |
42 b <- rpar (sum' num (if a < num then a else (num*2))) | |
43 return (a,b) | |
44 | |
45 sum' begin end = if begin < end | |
46 then begin + (sum' (begin + 1) end) | |
47 else begin | |
48 | |
49 printTimeSince t0 = do | |
50 t1 <- getCurrentTime | |
51 printf "time: %.2fs\n" (realToFrac (diffUTCTime t1 t0) :: Double) |