view test/runEvalTest/ParSum.hs @ 26:02e7f2f50bdc

add test2
author Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
date Tue, 04 Feb 2014 02:33:27 +0900
parents efb4e880ac7f
children
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) 

test2 :: Eval (Integer, Integer)
test2 = rpar (sum' 0 num) >>= (\a ->
       rpar (sum' num (num*2)) >>= (\b ->
       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)