on master help sign in
Add bench-show comparison for array benchmarks
03ff90eHarendra Kumar
bench.sh+46−1
@@ -10,7 +10,8 @@ ARRAY_BENCHMARKS="array unpinned-array prim-array small-array"
10INFINITE_BENCHMARKS="$SERIAL_BENCHMARKS linear-async nested-concurrent"
10INFINITE_BENCHMARKS="$SERIAL_BENCHMARKS linear-async nested-concurrent"
11FINITE_BENCHMARKS="$ARRAY_BENCHMARKS fileio parallel"
11FINITE_BENCHMARKS="$ARRAY_BENCHMARKS fileio parallel"
12
12
13+VIRTUAL_BENCHMARKS="array-cmp"
13−ALL_BENCHMARKS="$SERIAL_BENCHMARKS $CONCURRENT_BENCHMARKS $ARRAY_BENCHMARKS $DEV_BENCHMARKS"
14+ALL_BENCHMARKS="$SERIAL_BENCHMARKS $CONCURRENT_BENCHMARKS $ARRAY_BENCHMARKS $VIRTUAL_BENCHMARKS $DEV_BENCHMARKS"
14
15
15list_benches () {
16list_benches () {
16 for i in $ALL_BENCHMARKS
17 for i in $ALL_BENCHMARKS
@@ -68,6 +69,7 @@ set_benchmarks() {
68 ARRAY) echo -n $ARRAY_BENCHMARKS ;;
69 ARRAY) echo -n $ARRAY_BENCHMARKS ;;
69 INFINITE) echo -n $INFINITE_BENCHMARKS ;;
70 INFINITE) echo -n $INFINITE_BENCHMARKS ;;
70 FINITE) echo -n $FINITE_BENCHMARKS ;;
71 FINITE) echo -n $FINITE_BENCHMARKS ;;
72+ array-cmp) echo -n "$ARRAY_BENCHMARKS array-cmp" ;;
71 *) echo -n $i ;;
73 *) echo -n $i ;;
72 esac
74 esac
73 echo -n " "
75 echo -n " "
@@ -346,6 +348,27 @@ if test "$LONG" -ne 0
346then
348then
347 BENCHMARKS=$INFINITE_BENCHMARKS
349 BENCHMARKS=$INFINITE_BENCHMARKS
348fi
350fi
351+
352+only_real_benchmarks () {
353+ for i in $BENCHMARKS
354+ do
355+ local SKIP=0
356+ for j in $VIRTUAL_BENCHMARKS
357+ do
358+ if test $i == $j
359+ then
360+ SKIP=1
361+ fi
362+ done
363+ if test "$SKIP" -eq 0
364+ then
365+ echo -n "$i "
366+ fi
367+ done
368+}
369+
370+BENCHMARKS_ORIG=$BENCHMARKS
371+BENCHMARKS=$(only_real_benchmarks)
349echo "Using benchmark suites [$BENCHMARKS]"
372echo "Using benchmark suites [$BENCHMARKS]"
350
373
351# XXX we can remove these if we pass stack build flags from command line like
374# XXX we can remove these if we pass stack build flags from command line like
@@ -407,7 +430,29 @@ fi
407# Run reports
430# Run reports
408#-----------------------------------------------------------------------------
431#-----------------------------------------------------------------------------
409
432
433+has_benchmark () {
434+ for i in $BENCHMARKS_ORIG
435+ do
436+ if test "$i" = "$1"
437+ then
438+ echo "$i"
439+ break
440+ fi
441+ done
442+}
443+
444+VIRTUAL_REPORTS=""
445+if test "$(has_benchmark 'array-cmp')" = "array-cmp"
446+then
447+ VIRTUAL_REPORTS="$VIRTUAL_REPORTS array-cmp"
448+ mkdir -p "charts/array-cmp"
449+ cat "charts/array/results.csv" \
450+ "charts/prim-array/results.csv" \
451+ "charts/unpinned-array/results.csv" > "charts/array-cmp/results.csv"
452+fi
453+
410if test "$RAW" = "0"
454if test "$RAW" = "0"
411then
455then
412 run_reports "$BENCHMARKS"
456 run_reports "$BENCHMARKS"
457+ run_reports "$VIRTUAL_REPORTS"
413fi
458fi
benchmark/Chart.hs+34−4
@@ -32,6 +32,7 @@ data BenchType
32 | Base
32 | Base
33 | FileIO
33 | FileIO
34 | Array
34 | Array
35+ | ArrayCmp
35 | UnpinnedArray
36 | UnpinnedArray
36 | SmallArray
37 | SmallArray
37 | PrimArray
38 | PrimArray
@@ -79,6 +80,7 @@ parseBench = do
79 Just "nested-unfold" -> setBenchType NestedUnfold
80 Just "nested-unfold" -> setBenchType NestedUnfold
80 Just "base" -> setBenchType Base
81 Just "base" -> setBenchType Base
81 Just "fileio" -> setBenchType FileIO
82 Just "fileio" -> setBenchType FileIO
83+ Just "array-cmp" -> setBenchType ArrayCmp
82 Just "array" -> setBenchType Array
84 Just "array" -> setBenchType Array
83 Just "unpinned-array" -> setBenchType UnpinnedArray
85 Just "unpinned-array" -> setBenchType UnpinnedArray
84 Just "small-array" -> setBenchType SmallArray
86 Just "small-array" -> setBenchType SmallArray
@@ -255,13 +257,37 @@ makeFileIOGraphs :: Config -> String -> IO ()
255makeFileIOGraphs cfg@Config{..} inputFile =
257makeFileIOGraphs cfg@Config{..} inputFile =
256 ignoringErr $ graph inputFile "fileIO" cfg
258 ignoringErr $ graph inputFile "fileIO" cfg
257
259
260+------------------------------------------------------------------------------
261+-- Generic
262+------------------------------------------------------------------------------
263+
258makeGraphs :: String -> Config -> String -> IO ()
264makeGraphs :: String -> Config -> String -> IO ()
259makeGraphs name cfg@Config{..} inputFile =
265makeGraphs name cfg@Config{..} inputFile =
260 ignoringErr $ graph inputFile name cfg
266 ignoringErr $ graph inputFile name cfg
261
267
262−makeConcurrentGraphs :: Config -> String -> IO ()
268+------------------------------------------------------------------------------
263−makeConcurrentGraphs cfg@Config{..} inputFile =
269+-- Arrays
270+------------------------------------------------------------------------------
271+
272+showArrayComparisons Options{..} cfg inp out =
273+ let cfg' = cfg { classifyBenchmark = classifyArray }
274+ in if genGraphs
264− ignoringErr $ graph inputFile "concurrent" cfg
275+ then ignoringErr $ graph inp "Arrays Comparison"
276+ cfg' { outputDir = Just out
277+ , presentation = Groups Absolute
278+ }
279+ else ignoringErr $ report inp Nothing cfg'
280+
281+ where
282+
283+ classifyArray b
284+ -- SmallArray uses a small number of elements therefore cannot be
285+ -- compared
286+ -- | "SmallArray/" `isPrefixOf` b = ("SmallArray",) <$> stripPrefix "SmallArray/" b
287+ | "Data.Prim.Array/" `isPrefixOf` b = ("Data.Prim.Array",) <$> stripPrefix "Data.Prim.Array/" b
288+ | "Data.Array/" `isPrefixOf` b = ("Data.Array",) <$> stripPrefix "Data.Array/" b
289+ | "array/" `isPrefixOf` b = ("array",) <$> stripPrefix "array/" b
290+ | otherwise = Nothing
265
291
266------------------------------------------------------------------------------
292------------------------------------------------------------------------------
267-- Reports/Charts for base streams
293-- Reports/Charts for base streams
@@ -396,9 +422,13 @@ main = do
396 (makeGraphs "prim-array")
422 (makeGraphs "prim-array")
397 "charts/prim-array/results.csv"
423 "charts/prim-array/results.csv"
398 "charts/prim-array"
424 "charts/prim-array"
425+ ArrayCmp -> showArrayComparisons opts cfg
426+ { title = Just "Arrays Comparison" }
427+ "charts/array-cmp/results.csv"
428+ "charts/array-cmp"
399 Concurrent -> benchShow opts cfg
429 Concurrent -> benchShow opts cfg
400 { title = Just "Concurrent Ops" }
430 { title = Just "Concurrent Ops" }
401− makeConcurrentGraphs
431+ (makeGraphs "Concurrent")
402 "charts/concurrent/results.csv"
432 "charts/concurrent/results.csv"
403 "charts/concurrent"
433 "charts/concurrent"
404 Parallel -> benchShow opts cfg
434 Parallel -> benchShow opts cfg