on master help sign in
Add bench-show comparison for array benchmarks
commit03ff90eb9bce826288a981e867d6e0278de0dcc3 authorHarendra Kumar <harendra.kumar@gmail.com> dateThu 13 Feb 2020, 17:47 (7 years ago) parent2604246
2 files changed+80−5
bench.sh+46−1 benchmark/Chart.hs+34−4
bench.sh+46−1
@@ -10,7 +10,8 @@ ARRAY_BENCHMARKS="array unpinned-array prim-array small-array"
1010INFINITE_BENCHMARKS="$SERIAL_BENCHMARKS linear-async nested-concurrent"
1111FINITE_BENCHMARKS="$ARRAY_BENCHMARKS fileio parallel"
1212
13−ALL_BENCHMARKS="$SERIAL_BENCHMARKS $CONCURRENT_BENCHMARKS $ARRAY_BENCHMARKS $DEV_BENCHMARKS"
13+VIRTUAL_BENCHMARKS="array-cmp"
14+ALL_BENCHMARKS="$SERIAL_BENCHMARKS $CONCURRENT_BENCHMARKS $ARRAY_BENCHMARKS $VIRTUAL_BENCHMARKS $DEV_BENCHMARKS"
1415
1516list_benches () {
1617 for i in $ALL_BENCHMARKS
@@ -68,6 +69,7 @@ set_benchmarks() {
6869 ARRAY) echo -n $ARRAY_BENCHMARKS ;;
6970 INFINITE) echo -n $INFINITE_BENCHMARKS ;;
7071 FINITE) echo -n $FINITE_BENCHMARKS ;;
72+ array-cmp) echo -n "$ARRAY_BENCHMARKS array-cmp" ;;
7173 *) echo -n $i ;;
7274 esac
7375 echo -n " "
@@ -346,6 +348,27 @@ if test "$LONG" -ne 0
346348then
347349 BENCHMARKS=$INFINITE_BENCHMARKS
348350fi
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)
349372echo "Using benchmark suites [$BENCHMARKS]"
350373
351374# XXX we can remove these if we pass stack build flags from command line like
@@ -407,7 +430,29 @@ fi
407430# Run reports
408431#-----------------------------------------------------------------------------
409432
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+
410454if test "$RAW" = "0"
411455then
412456 run_reports "$BENCHMARKS"
457+ run_reports "$VIRTUAL_REPORTS"
413458fi
benchmark/Chart.hs+34−4
@@ -32,6 +32,7 @@ data BenchType
3232 | Base
3333 | FileIO
3434 | Array
35+ | ArrayCmp
3536 | UnpinnedArray
3637 | SmallArray
3738 | PrimArray
@@ -79,6 +80,7 @@ parseBench = do
7980 Just "nested-unfold" -> setBenchType NestedUnfold
8081 Just "base" -> setBenchType Base
8182 Just "fileio" -> setBenchType FileIO
83+ Just "array-cmp" -> setBenchType ArrayCmp
8284 Just "array" -> setBenchType Array
8385 Just "unpinned-array" -> setBenchType UnpinnedArray
8486 Just "small-array" -> setBenchType SmallArray
@@ -255,13 +257,37 @@ makeFileIOGraphs :: Config -> String -> IO ()
255257makeFileIOGraphs cfg@Config{..} inputFile =
256258 ignoringErr $ graph inputFile "fileIO" cfg
257259
260+------------------------------------------------------------------------------
261+-- Generic
262+------------------------------------------------------------------------------
263+
258264makeGraphs :: String -> Config -> String -> IO ()
259265makeGraphs name cfg@Config{..} inputFile =
260266 ignoringErr $ graph inputFile name cfg
261267
262−makeConcurrentGraphs :: Config -> String -> IO ()
263−makeConcurrentGraphs cfg@Config{..} inputFile =
264− ignoringErr $ graph inputFile "concurrent" cfg
268+------------------------------------------------------------------------------
269+-- Arrays
270+------------------------------------------------------------------------------
271+
272+showArrayComparisons Options{..} cfg inp out =
273+ let cfg' = cfg { classifyBenchmark = classifyArray }
274+ in if genGraphs
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
265291
266292------------------------------------------------------------------------------
267293-- Reports/Charts for base streams
@@ -396,9 +422,13 @@ main = do
396422 (makeGraphs "prim-array")
397423 "charts/prim-array/results.csv"
398424 "charts/prim-array"
425+ ArrayCmp -> showArrayComparisons opts cfg
426+ { title = Just "Arrays Comparison" }
427+ "charts/array-cmp/results.csv"
428+ "charts/array-cmp"
399429 Concurrent -> benchShow opts cfg
400430 { title = Just "Concurrent Ops" }
401− makeConcurrentGraphs
431+ (makeGraphs "Concurrent")
402432 "charts/concurrent/results.csv"
403433 "charts/concurrent"
404434 Parallel -> benchShow opts cfg