on master help sign in
Rename array benchmarks and prefixes by module names
f72d007Harendra Kumar
bench.sh+5−4
@@ -15,7 +15,7 @@ SERIAL_BENCHMARKS="\
15# parallel benchmark-suite is separated because we run it with a higher
15# parallel benchmark-suite is separated because we run it with a higher
16# heap size limit.
16# heap size limit.
17CONCURRENT_BENCHMARKS="linear-async linear-rate nested-concurrent parallel concurrent adaptive"
17CONCURRENT_BENCHMARKS="linear-async linear-rate nested-concurrent parallel concurrent adaptive"
18−ARRAY_BENCHMARKS="array unpinned-array prim-array small-array"
18+ARRAY_BENCHMARKS="Memory.Array Data.Array Data.Prim.Array Data.SmallArray"
19
19
20# XXX We can include SERIAL_O_1 here once "base" also supports --stream-size
20# XXX We can include SERIAL_O_1 here once "base" also supports --stream-size
21INFINITE_BENCHMARKS="linear linear-async linear-rate nested-concurrent"
21INFINITE_BENCHMARKS="linear linear-async linear-rate nested-concurrent"
@@ -39,6 +39,7 @@ bench_rts_opts () {
39 "serial-o-n-stack") echo -n "-T -K1M -M16M" ;;
39 "serial-o-n-stack") echo -n "-T -K1M -M16M" ;;
40 "serial-o-n-heap") echo -n "-T -K36K -M128M" ;;
40 "serial-o-n-heap") echo -n "-T -K36K -M128M" ;;
41 "serial-o-n-space") echo -n "-T -K16M -M64M" ;;
41 "serial-o-n-space") echo -n "-T -K16M -M64M" ;;
42+ Data.SmallArray/o-1-sp*) echo -n "-T -K128K -M16M" ;;
42 */o-1-sp*) echo -n "-T -K36K -M16M" ;;
43 */o-1-sp*) echo -n "-T -K36K -M16M" ;;
43 */o-n-h*) echo -n "-T -K36K -M32M" ;;
44 */o-n-h*) echo -n "-T -K36K -M32M" ;;
44 */o-n-st*) echo -n "-T -K1M -M16M" ;;
45 */o-n-st*) echo -n "-T -K1M -M16M" ;;
@@ -520,9 +521,9 @@ if test "$(has_benchmark 'array-cmp')" = "array-cmp"
520then
521then
521 VIRTUAL_REPORTS="$VIRTUAL_REPORTS array-cmp"
522 VIRTUAL_REPORTS="$VIRTUAL_REPORTS array-cmp"
522 mkdir -p "charts/array-cmp"
523 mkdir -p "charts/array-cmp"
523− cat "charts/array/results.csv" \
524+ cat "charts/Memory.Array/results.csv" \
524− "charts/prim-array/results.csv" \
525+ "charts/Data.Prim.Array/results.csv" \
525− "charts/unpinned-array/results.csv" > "charts/array-cmp/results.csv"
526+ "charts/Data.Array/results.csv" > "charts/array-cmp/results.csv"
526fi
527fi
527
528
528if test "$RAW" = "0"
529if test "$RAW" = "0"
benchmark/Streamly/Benchmark/Data/Array.hs+13−7
@@ -18,6 +18,7 @@ import qualified Streamly.Benchmark.Data.ArrayOps as Ops
18import qualified Streamly.Internal.Data.Array as A
18import qualified Streamly.Internal.Data.Array as A
19import qualified Streamly.Prelude as S
19import qualified Streamly.Prelude as S
20
20
21+import Streamly.Benchmark.Common
21import Gauge
22import Gauge
22
23
23-------------------------------------------------------------------------------
24-------------------------------------------------------------------------------
@@ -48,13 +49,15 @@ benchIO' name src f = bench name $ nfIO $
48benchIOSink :: NFData b => String -> (Ops.Stream Int -> IO b) -> Benchmark
49benchIOSink :: NFData b => String -> (Ops.Stream Int -> IO b) -> Benchmark
49benchIOSink name f = benchIO' name Ops.sourceIntFromTo f
50benchIOSink name f = benchIO' name Ops.sourceIntFromTo f
50
51
51−mkString :: String
52+testStr :: String
52−mkString = "[1" ++ concat (replicate Ops.value ",1") ++ "]"
53+testStr = mkListString Ops.value
53
54
54−main :: IO ()
55+moduleName :: String
55−main =
56− defaultMain
57− [ bgroup "Data.Array"
56+moduleName = "Data.Array"
57+
58+o_1_space :: [Benchmark]
59+o_1_space =
60+ [ bgroup (o_1_space_prefix moduleName)
58 [ bgroup "generation"
61 [ bgroup "generation"
59 [ benchIOSrc "writeN . intFromTo" Ops.sourceIntFromTo
62 [ benchIOSrc "writeN . intFromTo" Ops.sourceIntFromTo
60 , benchIOSrc "write . intFromTo" Ops.sourceIntFromToFromStream
63 , benchIOSrc "write . intFromTo" Ops.sourceIntFromToFromStream
@@ -63,7 +66,7 @@ main =
63 , benchIOSrc "writeN . fromList" Ops.sourceFromList
66 , benchIOSrc "writeN . fromList" Ops.sourceFromList
64 -- , benchPureSrc "writeN . IsList.fromList" Ops.sourceIsList
67 -- , benchPureSrc "writeN . IsList.fromList" Ops.sourceIsList
65 -- , benchPureSrc "writeN . IsString.fromString" Ops.sourceIsString
68 -- , benchPureSrc "writeN . IsString.fromString" Ops.sourceIsString
66− , mkString `deepseq` (bench "read" $ nf Ops.readInstance mkString)
69+ , testStr `deepseq` (bench "read" $ nf Ops.readInstance testStr)
67 , benchPureSink "show" Ops.showInstance
70 , benchPureSink "show" Ops.showInstance
68 ]
71 ]
69 , bgroup "elimination"
72 , bgroup "elimination"
@@ -94,3 +97,6 @@ main =
94 ]
97 ]
95 ]
98 ]
96 ]
99 ]
100+
101+main :: IO ()
102+main = defaultMain $ concat [o_1_space]
benchmark/Streamly/Benchmark/Data/Prim/Array.hs+13−7
@@ -18,6 +18,7 @@ import qualified Streamly.Benchmark.Data.Prim.ArrayOps as Ops
18import qualified Streamly.Internal.Data.Prim.Array as A
18import qualified Streamly.Internal.Data.Prim.Array as A
19import qualified Streamly.Prelude as S
19import qualified Streamly.Prelude as S
20
20
21+import Streamly.Benchmark.Common
21import Gauge
22import Gauge
22
23
23-------------------------------------------------------------------------------
24-------------------------------------------------------------------------------
@@ -48,14 +49,16 @@ benchIOSink :: NFData b => String -> (Ops.Stream Int -> IO b) -> Benchmark
48benchIOSink name f = benchIO' name Ops.sourceIntFromTo f
49benchIOSink name f = benchIO' name Ops.sourceIntFromTo f
49
50
50{-
51{-
51−mkString :: String
52+testStr :: String
52−mkString = "[1" ++ concat (replicate Ops.value ",1") ++ "]"
53+testStr = mkListString Ops.value
53-}
54-}
54
55
55−main :: IO ()
56+moduleName :: String
56−main =
57− defaultMain
58− [ bgroup "Data.Prim.Array"
57+moduleName = "Data.Prim.Array"
58+
59+o_1_space :: [Benchmark]
60+o_1_space =
61+ [ bgroup (o_1_space_prefix moduleName)
59 [ bgroup "generation"
62 [ bgroup "generation"
60 [ benchIOSrc "writeN . intFromTo" Ops.sourceIntFromTo
63 [ benchIOSrc "writeN . intFromTo" Ops.sourceIntFromTo
61 , benchIOSrc "write . intFromTo" Ops.sourceIntFromToFromStream
64 , benchIOSrc "write . intFromTo" Ops.sourceIntFromToFromStream
@@ -64,7 +67,7 @@ main =
64 , benchIOSrc "writeN . fromList" Ops.sourceFromList
67 , benchIOSrc "writeN . fromList" Ops.sourceFromList
65 -- , benchPureSrc "writeN . IsList.fromList" Ops.sourceIsList
68 -- , benchPureSrc "writeN . IsList.fromList" Ops.sourceIsList
66 -- , benchPureSrc "writeN . IsString.fromString" Ops.sourceIsString
69 -- , benchPureSrc "writeN . IsString.fromString" Ops.sourceIsString
67− -- , mkString `deepseq` (bench "read" $ nf Ops.readInstance mkString)
70+ -- , testStr `deepseq` (bench "read" $ nf Ops.readInstance testStr)
68 , benchPureSink "show" Ops.showInstance
71 , benchPureSink "show" Ops.showInstance
69 ]
72 ]
70 , bgroup "elimination"
73 , bgroup "elimination"
@@ -98,3 +101,6 @@ main =
98 ]
101 ]
99 ]
102 ]
100 ]
103 ]
104+
105+main :: IO ()
106+main = defaultMain $ concat [o_1_space]
benchmark/Streamly/Benchmark/Data/SmallArray.hs+10−4
@@ -18,6 +18,7 @@ import qualified Streamly.Benchmark.Data.SmallArrayOps as Ops
18import qualified Streamly.Internal.Data.SmallArray as A
18import qualified Streamly.Internal.Data.SmallArray as A
19import qualified Streamly.Prelude as S
19import qualified Streamly.Prelude as S
20
20
21+import Streamly.Benchmark.Common hiding (mkString)
21import Gauge
22import Gauge
22
23
23-------------------------------------------------------------------------------
24-------------------------------------------------------------------------------
@@ -53,10 +54,12 @@ mkString =
53 "fromListN " ++
54 "fromListN " ++
54 show (Ops.value + 1) ++ " [1" ++ concat (replicate Ops.value ",1") ++ "]"
55 show (Ops.value + 1) ++ " [1" ++ concat (replicate Ops.value ",1") ++ "]"
55
56
56−main :: IO ()
57+moduleName :: String
57−main =
58+moduleName = "Data.SmallArray"
58− defaultMain
59+
59− [ bgroup "SmallArray"
60+o_1_space :: [Benchmark]
61+o_1_space =
62+ [ bgroup (o_1_space_prefix moduleName)
60 [ bgroup "generation"
63 [ bgroup "generation"
61 [ benchIOSrc "writeN . intFromTo" Ops.sourceIntFromTo
64 [ benchIOSrc "writeN . intFromTo" Ops.sourceIntFromTo
62 , benchIOSrc "fromList . intFromTo" Ops.sourceIntFromToFromList
65 , benchIOSrc "fromList . intFromTo" Ops.sourceIntFromToFromList
@@ -93,3 +96,6 @@ main =
93 ]
96 ]
94 ]
97 ]
95 ]
98 ]
99+
100+main :: IO ()
101+main = defaultMain $ concat [o_1_space]
benchmark/Streamly/Benchmark/Memory/Array.hs+13−12
@@ -17,17 +17,13 @@ import qualified Streamly.Internal.Memory.Array as IA
17import qualified Streamly.Memory.Array as A
17import qualified Streamly.Memory.Array as A
18import qualified Streamly.Prelude as S
18import qualified Streamly.Prelude as S
19
19
20+import Streamly.Benchmark.Common hiding (benchPureSrc)
20import Gauge
21import Gauge
21
22
22-------------------------------------------------------------------------------
23-------------------------------------------------------------------------------
23--
24--
24-------------------------------------------------------------------------------
25-------------------------------------------------------------------------------
25
26
26−{-# INLINE benchPure #-}
27−benchPure :: NFData b => String -> (Int -> a) -> (a -> b) -> Benchmark
28−benchPure name src f = bench name $ nfIO $
29− randomRIO (1,1) >>= return . f . src
30−
31-- Drain a source that generates a pure array
27-- Drain a source that generates a pure array
32{-# INLINE benchPureSrc #-}
28{-# INLINE benchPureSrc #-}
33benchPureSrc :: (NFData a, Storable a)
29benchPureSrc :: (NFData a, Storable a)
@@ -58,13 +54,15 @@ benchIO' name src f = bench name $ nfIO $
58benchIOSink :: NFData b => String -> (Ops.Stream Int -> IO b) -> Benchmark
54benchIOSink :: NFData b => String -> (Ops.Stream Int -> IO b) -> Benchmark
59benchIOSink name f = benchIO' name Ops.sourceIntFromTo f
55benchIOSink name f = benchIO' name Ops.sourceIntFromTo f
60
56
61−mkString :: String
57+testStr :: String
62−mkString = "[1" ++ concat (replicate Ops.value ",1") ++ "]"
58+testStr = mkListString Ops.value
63
59
64−main :: IO ()
60+moduleName :: String
65−main =
61+moduleName = "Memory.Array"
66− defaultMain
62+
67− [ bgroup "array"
63+o_1_space :: [Benchmark]
64+o_1_space =
65+ [ bgroup (o_1_space_prefix moduleName)
68 [ bgroup "generation"
66 [ bgroup "generation"
69 [ benchIOSrc "writeN . intFromTo" Ops.sourceIntFromTo
67 [ benchIOSrc "writeN . intFromTo" Ops.sourceIntFromTo
70 , benchIOSrc "write . intFromTo" Ops.sourceIntFromToFromStream
68 , benchIOSrc "write . intFromTo" Ops.sourceIntFromToFromStream
@@ -73,7 +71,7 @@ main =
73 , benchIOSrc "writeN . fromList" Ops.sourceFromList
71 , benchIOSrc "writeN . fromList" Ops.sourceFromList
74 , benchPureSrc "writeN . IsList.fromList" Ops.sourceIsList
72 , benchPureSrc "writeN . IsList.fromList" Ops.sourceIsList
75 , benchPureSrc "writeN . IsString.fromString" Ops.sourceIsString
73 , benchPureSrc "writeN . IsString.fromString" Ops.sourceIsString
76− , mkString `deepseq` (bench "read" $ nf Ops.readInstance mkString)
74+ , testStr `deepseq` (bench "read" $ nf Ops.readInstance testStr)
77 , benchPureSink "show" Ops.showInstance
75 , benchPureSink "show" Ops.showInstance
78 ]
76 ]
79 , bgroup "elimination"
77 , bgroup "elimination"
@@ -249,3 +247,6 @@ main =
249 -}
247 -}
250 ]
248 ]
251 ]
249 ]
250+
251+main :: IO ()
252+main = defaultMain $ concat [o_1_space]
benchmark/streamly-benchmarks.cabal+5−13
@@ -160,6 +160,7 @@ library lib-prelude
160
160
161common bench-options
161common bench-options
162 import: compile-options, optimization-options, bench-depends
162 import: compile-options, optimization-options, bench-depends
163+ ghc-options: -rtsopts
163 build-depends: streamly-benchmarks
164 build-depends: streamly-benchmarks
164
165
165-- Some benchmarks are threaded some are not
166-- Some benchmarks are threaded some are not
@@ -181,7 +182,6 @@ common bench-options-threaded
181benchmark serial
182benchmark serial
182 import: bench-options
183 import: bench-options
183 type: exitcode-stdio-1.0
184 type: exitcode-stdio-1.0
184− ghc-options: -rtsopts
185 hs-source-dirs: Streamly/Benchmark/Prelude
185 hs-source-dirs: Streamly/Benchmark/Prelude
186 main-is: Serial.hs
186 main-is: Serial.hs
187 if impl(ghcjs)
187 if impl(ghcjs)
@@ -204,7 +204,6 @@ benchmark fold
204benchmark unfold
204benchmark unfold
205 import: bench-options
205 import: bench-options
206 type: exitcode-stdio-1.0
206 type: exitcode-stdio-1.0
207− ghc-options: -rtsopts
208 hs-source-dirs: ., Streamly/Benchmark/Data
207 hs-source-dirs: ., Streamly/Benchmark/Data
209 main-is: Unfold.hs
208 main-is: Unfold.hs
210 other-modules: Streamly.Benchmark.Data.NestedUnfoldOps
209 other-modules: Streamly.Benchmark.Data.NestedUnfoldOps
@@ -256,7 +255,6 @@ benchmark parser
256benchmark Data.Stream.StreamD
255benchmark Data.Stream.StreamD
257 import: bench-options
256 import: bench-options
258 type: exitcode-stdio-1.0
257 type: exitcode-stdio-1.0
259− ghc-options: -rtsopts
260 hs-source-dirs: Streamly/Benchmark/Data/Stream
258 hs-source-dirs: Streamly/Benchmark/Data/Stream
261 main-is: StreamD.hs
259 main-is: StreamD.hs
262 if impl(ghcjs)
260 if impl(ghcjs)
@@ -267,7 +265,6 @@ benchmark Data.Stream.StreamD
267benchmark Data.Stream.StreamK
265benchmark Data.Stream.StreamK
268 import: bench-options
266 import: bench-options
269 type: exitcode-stdio-1.0
267 type: exitcode-stdio-1.0
270− ghc-options: -rtsopts
271 hs-source-dirs: Streamly/Benchmark/Data/Stream
268 hs-source-dirs: Streamly/Benchmark/Data/Stream
272 main-is: StreamK.hs
269 main-is: StreamK.hs
273 if impl(ghcjs)
270 if impl(ghcjs)
@@ -278,7 +275,6 @@ benchmark Data.Stream.StreamK
278benchmark Data.Stream.StreamDK
275benchmark Data.Stream.StreamDK
279 import: bench-options
276 import: bench-options
280 type: exitcode-stdio-1.0
277 type: exitcode-stdio-1.0
281− ghc-options: -rtsopts
282 hs-source-dirs: Streamly/Benchmark/Data/Stream
278 hs-source-dirs: Streamly/Benchmark/Data/Stream
283 main-is: StreamDK.hs
279 main-is: StreamDK.hs
284 if impl(ghcjs)
280 if impl(ghcjs)
@@ -364,34 +360,30 @@ benchmark linear-rate
364-- Array Benchmarks
360-- Array Benchmarks
365-------------------------------------------------------------------------------
361-------------------------------------------------------------------------------
366
362
367−benchmark unpinned-array
363+benchmark Data.Array
368 import: bench-options
364 import: bench-options
369 type: exitcode-stdio-1.0
365 type: exitcode-stdio-1.0
370− ghc-options: -with-rtsopts "-T -K1K -M128M"
371 hs-source-dirs: .
366 hs-source-dirs: .
372 main-is: Streamly/Benchmark/Data/Array.hs
367 main-is: Streamly/Benchmark/Data/Array.hs
373 other-modules: Streamly.Benchmark.Data.ArrayOps
368 other-modules: Streamly.Benchmark.Data.ArrayOps
374
369
375−benchmark prim-array
370+benchmark Data.Prim.Array
376 import: bench-options
371 import: bench-options
377 type: exitcode-stdio-1.0
372 type: exitcode-stdio-1.0
378− ghc-options: -with-rtsopts "-T -K64K -M32M"
379 hs-source-dirs: .
373 hs-source-dirs: .
380 main-is: Streamly/Benchmark/Data/Prim/Array.hs
374 main-is: Streamly/Benchmark/Data/Prim/Array.hs
381 other-modules: Streamly.Benchmark.Data.Prim.ArrayOps
375 other-modules: Streamly.Benchmark.Data.Prim.ArrayOps
382
376
383−benchmark small-array
377+benchmark Data.SmallArray
384 import: bench-options
378 import: bench-options
385 type: exitcode-stdio-1.0
379 type: exitcode-stdio-1.0
386− ghc-options: -with-rtsopts "-T -K128K -M16M"
387 hs-source-dirs: .
380 hs-source-dirs: .
388 main-is: Streamly/Benchmark/Data/SmallArray.hs
381 main-is: Streamly/Benchmark/Data/SmallArray.hs
389 other-modules: Streamly.Benchmark.Data.SmallArrayOps
382 other-modules: Streamly.Benchmark.Data.SmallArrayOps
390
383
391−benchmark array
384+benchmark Memory.Array
392 import: bench-options
385 import: bench-options
393 type: exitcode-stdio-1.0
386 type: exitcode-stdio-1.0
394− ghc-options: -with-rtsopts "-T -K64K -M128M"
395 hs-source-dirs: .
387 hs-source-dirs: .
396 main-is: Streamly/Benchmark/Memory/Array.hs
388 main-is: Streamly/Benchmark/Memory/Array.hs
397 other-modules: Streamly.Benchmark.Memory.ArrayOps
389 other-modules: Streamly.Benchmark.Memory.ArrayOps