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)