@@ -31,26 +31,16 @@ data BenchType
3131 | ParserD
3232 | ParserK
3333 | Parser
34− | Base
3534 | FileIO
36− | Array
37− | ArrayCmp
38− | UnpinnedArray
39− | SmallArray
40− | PrimArray
4135 | Concurrent
4236 | Parallel
4337 | Adaptive
44− | FoldO1Space
45− | FoldOnHeap
46− | UnfoldO1Space
47− | UnfoldOnSpace
38+ | Compare String
4839 | Standard String
4940 deriving Show
5041
5142data Options = Options
5243 { genGraphs :: Bool
53− , groupDiff :: Bool
5444 , benchType :: BenchType
5545 } deriving Show
5646
@@ -60,10 +50,6 @@ setGenGraphs val = do
6050 (args, opts) <- get
6151 put (args, opts { genGraphs = val })
6252
63−setGroupDiff val = do
64− (args, opts) <- get
65− put (args, opts { groupDiff = val })
66−
6753setBenchType val = do
6854 (args, opts) <- get
6955 put (args, opts { benchType = val })
@@ -87,20 +73,11 @@ parseBench = do
8773 Just "parserD" -> setBenchType ParserD
8874 Just "parserK" -> setBenchType ParserK
8975 Just "parser" -> setBenchType Parser
90− Just "base" -> setBenchType Base
9176 Just "fileio" -> setBenchType FileIO
92− Just "array-cmp" -> setBenchType ArrayCmp
93− Just "array" -> setBenchType Array
94− Just "unpinned-array" -> setBenchType UnpinnedArray
95− Just "small-array" -> setBenchType SmallArray
96− Just "prim-array" -> setBenchType PrimArray
9777 Just "concurrent" -> setBenchType Concurrent
9878 Just "parallel" -> setBenchType Parallel
9979 Just "adaptive" -> setBenchType Adaptive
100− Just "fold-o-1-space" -> setBenchType FoldO1Space
101− Just "fold-o-n-heap" -> setBenchType FoldOnHeap
102− Just "unfold-o-1-space" -> setBenchType UnfoldO1Space
103− Just "unfold-o-n-space" -> setBenchType UnfoldOnSpace
80+ Just str | "_cmp" `isSuffixOf` str -> setBenchType (Compare str)
10481 Just str -> setBenchType (Standard str)
10582 Nothing -> do
10683 liftIO $ putStrLn "please provide a benchmark type "
@@ -119,7 +96,6 @@ parseOptions = do
11996 parseOpt opt =
12097 case opt of
12198 "--graphs" -> setGenGraphs True
122− "--group-diff" -> setGroupDiff True
12399 "--benchmark" -> parseBench
124100 str -> do
125101 liftIO $ putStrLn $ "Unrecognized option " <> str
@@ -239,71 +215,21 @@ makeGraphs name cfg@Config{..} inputFile =
239215-- Arrays
240216------------------------------------------------------------------------------
241217
242−showArrayComparisons Options{..} cfg inp out =
243− let cfg' = cfg { classifyBenchmark = classifyArray }
244− in if genGraphs
245− then ignoringErr $ graph inp "Arrays Comparison"
246− cfg' { outputDir = Just out
218+showComparisons Options{..} cfg inp out =
219+ let cfg1 = cfg { classifyBenchmark = classifyComparison }
220+ in if genGraphs
221+ then ignoringErr $ graph inp "comparison"
222+ cfg1 { outputDir = Just out
247223 , presentation = Groups Absolute
248224 }
249− else ignoringErr $ report inp Nothing cfg'
225+ else ignoringErr $ report inp Nothing cfg1
250226
251227 where
252228
253− classifyArray b
254− -- SmallArray uses a small number of elements therefore cannot be
255− -- compared
256− -- | "SmallArray/" `isPrefixOf` b = ("SmallArray",) <$> stripPrefix "SmallArray/" b
257− | "Data.Prim.Array/" `isPrefixOf` b = ("Data.Prim.Array",) <$> stripPrefix "Data.Prim.Array/" b
258− | "Data.Array/" `isPrefixOf` b = ("Data.Array",) <$> stripPrefix "Data.Array/" b
259− | "array/" `isPrefixOf` b = ("array",) <$> stripPrefix "array/" b
260− | otherwise = Nothing
261−
262−------------------------------------------------------------------------------
263−-- Reports/Charts for base streams
264−------------------------------------------------------------------------------
265−
266−showStreamDVsK Options{..} cfg inp out =
267− let cfg' = cfg { classifyBenchmark = classifyBase }
268− in if genGraphs
269− then ignoringErr $ graph inp "streamD-vs-streamK"
270− cfg' { outputDir = Just out
271− , presentation = Groups Absolute
272− }
273− else ignoringErr $ report inp Nothing cfg'
274−
275− where
276−
277− classifyBase b
278− | "streamD/" `isPrefixOf` b = ("streamD",) <$> stripPrefix "streamD/" b
279− | "streamK/" `isPrefixOf` b = ("streamK",) <$> stripPrefix "streamK/" b
280− | otherwise = Nothing
281−
282−showStreamD Options{..} cfg inp out =
283− let cfg' = cfg { classifyBenchmark = classifyStreamD }
284− in if genGraphs
285− then ignoringErr $ graph inp "streamD"
286− cfg' {outputDir = Just out}
287− else ignoringErr $ report inp Nothing cfg'
288−
289− where
290−
291− classifyStreamD b
292− | "streamD/" `isPrefixOf` b = ("streamD",) <$> stripPrefix "streamD/" b
293− | otherwise = Nothing
294−
295−showStreamK Options{..} cfg inp out =
296− let cfg' = cfg { classifyBenchmark = classifyStreamK }
297− in if genGraphs
298− then ignoringErr $ graph inp "streamK"
299− cfg' {outputDir = Just out}
300− else ignoringErr $ report inp Nothing cfg'
301−
302− where
303−
304− classifyStreamK b
305− | "streamK/" `isPrefixOf` b = ("streamK",) <$> stripPrefix "streamK/" b
306− | otherwise = Nothing
229+ classifyComparison b = Just $
230+ ( takeWhile (/= '/') b
231+ , dropWhile (== '/') $ dropWhile (/= '/') b
232+ )
307233
308234------------------------------------------------------------------------------
309235-- text reports
@@ -385,30 +311,6 @@ main = do
385311 (makeGraphs "fileIO")
386312 "charts/fileio/results.csv"
387313 "charts/fileio"
388− Array -> benchShow opts cfg
389− { title = Just "Array" }
390− (makeGraphs "array")
391− "charts/array/results.csv"
392− "charts/array"
393− UnpinnedArray -> benchShow opts cfg
394− { title = Just "Unpinned Array" }
395− (makeGraphs "unpinned-array")
396− "charts/unpinned-array/results.csv"
397− "charts/unpinned-array"
398− SmallArray -> benchShow opts cfg
399− { title = Just "Small Array" }
400− (makeGraphs "small-array")
401− "charts/small-array/results.csv"
402− "charts/small-array"
403− PrimArray -> benchShow opts cfg
404− { title = Just "Prim Array" }
405− (makeGraphs "prim-array")
406− "charts/prim-array/results.csv"
407− "charts/prim-array"
408− ArrayCmp -> showArrayComparisons opts cfg
409− { title = Just "Arrays Comparison" }
410− "charts/array-cmp/results.csv"
411− "charts/array-cmp"
412314 Concurrent -> benchShow opts cfg
413315 { title = Just "Concurrent Ops" }
414316 (makeGraphs "Concurrent")
@@ -424,39 +326,10 @@ main = do
424326 (makeGraphs "adaptive")
425327 "charts/adaptive/results.csv"
426328 "charts/adaptive"
427− Base -> do
428− let cfg' = cfg { title = Just "Base stream" }
429− if groupDiff
430− then showStreamDVsK opts cfg'
431− "charts/base/results.csv"
432− "charts/base"
433− else do
434− showStreamD opts cfg'
435− "charts/base/results.csv"
436− "charts/base"
437− showStreamK opts cfg'
438− "charts/base/results.csv"
439− "charts/base"
440− FoldO1Space -> benchShow opts cfg
441− { title = Just "Fold O(1) Space" }
442− (makeGraphs "fold-o-1-space")
443− "charts/fold-o-1-space/results.csv"
444− "charts/fold-o-1-space"
445− FoldOnHeap -> benchShow opts cfg
446− { title = Just "Fold O(n) Heap" }
447− (makeGraphs "fold-o-n-heap")
448− "charts/fold-o-n-heap/results.csv"
449− "charts/fold-o-n-heap"
450− UnfoldO1Space -> benchShow opts cfg
451− { title = Just "Unfold O(1) Space" }
452− (makeGraphs "unfold-o-1-space")
453− "charts/unfold-o-1-space/results.csv"
454− "charts/unfold-o-1-space"
455− UnfoldOnSpace -> benchShow opts cfg
456− { title = Just "Unfold O(n) Space" }
457− (makeGraphs "unfold-o-n-space")
458− "charts/unfold-o-n-space/results.csv"
459− "charts/unfold-o-n-space"
329+ Compare str -> showComparisons opts cfg
330+ { title = Just $ str }
331+ ("charts/" ++ str ++ "/results.csv")
332+ ("charts/" ++ str)
460333 Standard str -> benchShow opts cfg
461334 { title = Just str }
462335 (makeGraphs str)