-
Notifications
You must be signed in to change notification settings - Fork 0
/
SeqPerfComparison.hs
106 lines (96 loc) · 2.8 KB
/
SeqPerfComparison.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
-----------------------------------------------------------------------------
-- |
-- Module : SeqPerfComparison.hs
-- Author : Prabhat Totoo 2011
--
-- Sequential performance comparison between RAList and standard list.
-- The operations include a number of benchmark applications.
-----------------------------------------------------------------------------
import RAList
import StdList
import System
import System.IO
import System.Random
import Data.Time.Clock
import Text.Printf
import Data.List as List (take,sum,minimum,elem)
import Control.DeepSeq
printTime name start = do
ct <- getCurrentTime
putStrLn $ printf "%s: %s" name (show $ diffUTCTime ct start)
randomlist n = List.take (5 * n) $ randomRs (0,n-1) (mkStdGen n)
main = do
args <- getArgs
let n = read (args!!0) :: Int
let list = (randomlist n)::[Int]
let ralist = fromDataList list
deepseq list $ return ()
deepseq ralist $ return ()
let z = read (args!!1) :: Int
--run_bench n list ralist z
ralist_cons_cost n
list_cons_cost n
run_bench n list ralist 1
run_bench n list ralist 2
run_bench n list ralist 3
run_bench n list ralist 4
run_bench n list ralist 1 = bench_lookup (n `div` 2) list ralist
run_bench n list ralist 2 = bench_update (n `div` 2) list ralist
run_bench n list ralist 3 = bench_qsort list ralist
run_bench n list ralist 4 = bench_histo n list ralist
ralist_cons_cost n = do
--print "ralist cons cost"
--print n
ct <- getCurrentTime
let ralist = fromDataList [1..n]
deepseq ralist $ return ()
printTime "RAList" ct
list_cons_cost n = do
--print "list cons cost"
--print n
ct <- getCurrentTime
let list = [1..n]
deepseq list $ return ()
printTime "List" ct
bench_lookup i list ralist = do
print "lookup"
ct <- getCurrentTime
print $ list !! i
printTime "List.!!" ct
hFlush stdout
ct <- getCurrentTime
print $ RAList.lookup i ralist
printTime "RAList.lookup" ct
bench_update i list ralist = do
print "update"
ct <- getCurrentTime
let res1 = StdList.update i 0 list
deepseq res1 $ return ()
printTime "StdList.update" ct
hFlush stdout
ct <- getCurrentTime
let res2 = RAList.update i 0 ralist
deepseq res2 $ return ()
printTime "RAList.update" ct
bench_qsort list ralist = do
print "qsort"
ct <- getCurrentTime
let res1 = StdList.qsort list
deepseq res1 $ return ()
printTime "StdList.qsort" ct
hFlush stdout
ct <- getCurrentTime
let res2 = RAList.quicksort ralist
deepseq res2 $ return ()
printTime "RAList.quicksort" ct
bench_histo n list ralist = do
print "histo"
ct <- getCurrentTime
let res1 = StdList.histo n list
deepseq res1 $ return ()
printTime "StdList.histo:" ct
hFlush stdout
ct <- getCurrentTime
let res2 = RAList.histo n list
deepseq res2 $ return ()
printTime "RAList.histo:" ct