on master help sign in
Move benchmarks of Array.Prim out of common array benchmark mess
ad1bb0dadithyaov
benchmark/Streamly/Benchmark/Data/Array.hs+3−6
@@ -44,8 +44,7 @@ benchIO name src f = bench name $ nfIO $
44-- Drain a source that generates an array in the IO monad
44-- Drain a source that generates an array in the IO monad
45{-# INLINE benchIOSrc #-}
45{-# INLINE benchIOSrc #-}
46benchIOSrc ::
46benchIOSrc ::
47−#if !defined(DATA_ARRAY_PRIM) \
48− && !defined(DATA_ARRAY_PRIM_PINNED)
47+#if !defined(DATA_ARRAY_PRIM_PINNED)
49 NFData a =>
48 NFData a =>
50#endif
49#endif
51 String -> (Int -> IO (Ops.Stream a)) -> Benchmark
50 String -> (Int -> IO (Ops.Stream a)) -> Benchmark
@@ -77,7 +76,7 @@ o_1_space_generation value =
77 (Ops.sourceIntFromToFromList value)
76 (Ops.sourceIntFromToFromList value)
78 , benchIOSrc "writeN . unfoldr" (Ops.sourceUnfoldr value)
77 , benchIOSrc "writeN . unfoldr" (Ops.sourceUnfoldr value)
79 , benchIOSrc "writeN . fromList" (Ops.sourceFromList value)
78 , benchIOSrc "writeN . fromList" (Ops.sourceFromList value)
80−#if !defined(DATA_ARRAY_PRIM) && !defined(DATA_ARRAY_PRIM_PINNED)
79+#if !defined(DATA_ARRAY_PRIM_PINNED)
81#ifdef DATA_SMALLARRAY
80#ifdef DATA_SMALLARRAY
82 , let testStr =
81 , let testStr =
83 "fromListN " ++
82 "fromListN " ++
@@ -149,9 +148,7 @@ o_1_space_transformationX4 value =
149 ]
148 ]
150
149
151moduleName :: String
150moduleName :: String
152−#if defined(DATA_ARRAY_PRIM)
153−moduleName = "Data.Array.Prim"
154−#elif defined(DATA_ARRAY_PRIM_PINNED)
151+#if defined(DATA_ARRAY_PRIM_PINNED)
155moduleName = "Data.Array.Prim.Pinned"
152moduleName = "Data.Array.Prim.Pinned"
156#else
153#else
157moduleName = "Data.Array"
154moduleName = "Data.Array"
benchmark/Streamly/Benchmark/Data/Array/Prim.hsnew file+58
@@ -0,0 +1,58 @@
1+{-# LANGUAGE CPP #-}
2+
3+#include "Streamly/Benchmark/Data/Array/CommonImports.hs"
4+
5+import qualified Streamly.Internal.Data.Array.Prim as A
6+type Stream = A.Array
7+
8+#include "Streamly/Benchmark/Data/Array/Common.hs"
9+
10+-------------------------------------------------------------------------------
11+-- Benchmark helpers
12+-------------------------------------------------------------------------------
13+
14+-- Drain a source that generates an array in the IO monad
15+{-# INLINE benchIOSrc #-}
16+benchIOSrc :: String -> (Int -> IO (Stream a)) -> Benchmark
17+benchIOSrc name src = benchIO name src id
18+
19+-------------------------------------------------------------------------------
20+-- Bench Ops
21+-------------------------------------------------------------------------------
22+
23+{-# INLINE sourceIntFromToFromList #-}
24+sourceIntFromToFromList :: MonadIO m => Int -> Int -> m (Stream Int)
25+sourceIntFromToFromList value n = P.return $ A.fromListN value $ [n..n + value]
26+
27+-- CPP:
28+{-# INLINE sourceIntFromToFromStream #-}
29+sourceIntFromToFromStream :: MonadIO m => Int -> Int -> m (Stream Int)
30+sourceIntFromToFromStream value n = S.fold A.write $ S.enumerateFromTo n (n + value)
31+
32+-------------------------------------------------------------------------------
33+-- Bench groups
34+-------------------------------------------------------------------------------
35+
36+o_1_space_generation :: Int -> [Benchmark]
37+o_1_space_generation value =
38+ [ bgroup
39+ "generation"
40+ [ benchIOSrc "write . intFromTo" (sourceIntFromToFromStream value)
41+ ]
42+ ]
43+
44+moduleName :: String
45+moduleName = "Data.Array.Prim"
46+
47+defStreamSize :: Int
48+defStreamSize = defaultStreamSize
49+
50+main :: IO ()
51+main = runWithCLIOpts defStreamSize allBenchmarks
52+
53+ where
54+
55+ allBenchmarks size =
56+ [ bgroup (o_1_space_prefix moduleName) $
57+ o_1_space_generation size
58+ ] ++ commonBenchmarks size
benchmark/Streamly/Benchmark/Data/ArrayOps.hs+3−11
@@ -12,7 +12,6 @@
12-- CPP:
12-- CPP:
13-- MEMORY_ARRAY
13-- MEMORY_ARRAY
14-- DATA_ARRAY
14-- DATA_ARRAY
15−-- DATA_ARRAY_PRIM
16-- DATA_ARRAY_PRIM_PINNED
15-- DATA_ARRAY_PRIM_PINNED
17
16
18module Streamly.Benchmark.Data.ArrayOps where
17module Streamly.Benchmark.Data.ArrayOps where
@@ -23,7 +22,7 @@ import Prelude (Bool, Int, Maybe(..), ($), (+), (.), (==), (>), undefined)
23import qualified Prelude as P
22import qualified Prelude as P
24import qualified Streamly.Prelude as S
23import qualified Streamly.Prelude as S
25
24
26−#if !defined(DATA_ARRAY_PRIM) && !defined(DATA_ARRAY_PRIM_PINNED)
25+#if !defined(DATA_ARRAY_PRIM_PINNED)
27#ifdef DEVBUILD
26#ifdef DEVBUILD
28{-
27{-
29import qualified Data.Foldable as F
28import qualified Data.Foldable as F
@@ -31,10 +30,7 @@ import qualified Data.Foldable as F
31#endif
30#endif
32#endif
31#endif
33
32
34−#if defined(DATA_ARRAY_PRIM)
35−import qualified Streamly.Internal.Data.Array.Prim as A
36−type Stream = A.Array
37−#elif defined(DATA_ARRAY_PRIM_PINNED)
33+#if defined(DATA_ARRAY_PRIM_PINNED)
38import qualified Streamly.Internal.Data.Array.Prim.Pinned as A
34import qualified Streamly.Internal.Data.Array.Prim.Pinned as A
39type Stream = A.Array
35type Stream = A.Array
40#elif defined(DATA_ARRAY)
36#elif defined(DATA_ARRAY)
@@ -53,7 +49,6 @@ type Stream = A.Array
53-------------------------------------------------------------------------------
49-------------------------------------------------------------------------------
54-- CPP Common to:
50-- CPP Common to:
55-- DATA_ARRAY
51-- DATA_ARRAY
56−-- DATA_ARRAY_PRIM
57-- DATA_ARRAY_PRIM_PINNED
52-- DATA_ARRAY_PRIM_PINNED
58-------------------------------------------------------------------------------
53-------------------------------------------------------------------------------
59
54
@@ -82,7 +77,6 @@ sourceIntFromToFromList value n = P.return $ A.fromList $ [n..n + value]
82-------------------------------------------------------------------------------
77-------------------------------------------------------------------------------
83-- CPP Common to:
78-- CPP Common to:
84-- DATA_ARRAY
79-- DATA_ARRAY
85−-- DATA_ARRAY_PRIM
86-- DATA_ARRAY_PRIM_PINNED
80-- DATA_ARRAY_PRIM_PINNED
87-------------------------------------------------------------------------------
81-------------------------------------------------------------------------------
88
82
@@ -98,7 +92,6 @@ sourceIntFromToFromStream value n = S.fold A.write $ S.enumerateFromTo n (n + va
98-------------------------------------------------------------------------------
92-------------------------------------------------------------------------------
99-- CPP Common to:
93-- CPP Common to:
100-- DATA_ARRAY
94-- DATA_ARRAY
101−-- DATA_ARRAY_PRIM
102-- DATA_ARRAY_PRIM_PINNED
95-- DATA_ARRAY_PRIM_PINNED
103-------------------------------------------------------------------------------
96-------------------------------------------------------------------------------
104
97
@@ -163,7 +156,7 @@ pureFoldl' = S.foldl' (+) 0 . S.unfold A.read
163-------------------------------------------------------------------------------
156-------------------------------------------------------------------------------
164
157
165-- CPP:
158-- CPP:
166−#if !defined(DATA_ARRAY_PRIM) && !defined(DATA_ARRAY_PRIM_PINNED)
159+#if !defined(DATA_ARRAY_PRIM_PINNED)
167{-# INLINE readInstance #-}
160{-# INLINE readInstance #-}
168readInstance :: P.String -> Stream Int
161readInstance :: P.String -> Stream Int
169readInstance str =
162readInstance str =
@@ -192,7 +185,6 @@ foldableSum = P.sum
192-------------------------------------------------------------------------------
185-------------------------------------------------------------------------------
193-- CPP Common to:
186-- CPP Common to:
194-- DATA_ARRAY
187-- DATA_ARRAY
195−-- DATA_ARRAY_PRIM
196-- DATA_ARRAY_PRIM_PINNED
188-- DATA_ARRAY_PRIM_PINNED
197-------------------------------------------------------------------------------
189-------------------------------------------------------------------------------
198
190
benchmark/streamly-benchmarks.cabal+1−4
@@ -465,10 +465,7 @@ benchmark Data.Array
465benchmark Data.Array.Prim
465benchmark Data.Array.Prim
466 import: bench-options
466 import: bench-options
467 type: exitcode-stdio-1.0
467 type: exitcode-stdio-1.0
468− hs-source-dirs: .
469− main-is: Streamly/Benchmark/Data/Array.hs
468+ main-is: Streamly/Benchmark/Data/Array/Prim.hs
470− other-modules: Streamly.Benchmark.Data.ArrayOps
471− cpp-options: -DDATA_ARRAY_PRIM
472 build-depends: primitive
469 build-depends: primitive
473
470
474benchmark Data.SmallArray
471benchmark Data.SmallArray
streamly.cabal+1
@@ -60,6 +60,7 @@ extra-source-files:
60 benchmark/Streamly/Benchmark/Data/Array/CommonImports.hs
60 benchmark/Streamly/Benchmark/Data/Array/CommonImports.hs
61 benchmark/Streamly/Benchmark/Data/Array/SmallArray.hs
61 benchmark/Streamly/Benchmark/Data/Array/SmallArray.hs
62 benchmark/Streamly/Benchmark/Data/Array/Foreign.hs
62 benchmark/Streamly/Benchmark/Data/Array/Foreign.hs
63+ benchmark/Streamly/Benchmark/Data/Array/Prim.hs
63 benchmark/Streamly/Benchmark/Data/Array/Stream/Foreign.hs
64 benchmark/Streamly/Benchmark/Data/Array/Stream/Foreign.hs
64 benchmark/Streamly/Benchmark/Data/Parser/*.hs
65 benchmark/Streamly/Benchmark/Data/Parser/*.hs
65 benchmark/Streamly/Benchmark/Data/Stream/*.hs
66 benchmark/Streamly/Benchmark/Data/Stream/*.hs