on master help sign in
Separate interleaved benchmarks in another module
commit162fc171df5079fb48c6313f9f5023c63717fc8a authorHarendra Kumar <harendra@composewell.com> dateSun 16 Oct 2022, 20:43 (4 years ago) parentf7415e9
7 files changed+47−55
benchmark/Streamly/Benchmark/Data/Stream/Async.hs+2−7 benchmark/Streamly/Benchmark/Data/Stream/AsyncCommon.hs−46 benchmark/Streamly/Benchmark/Data/Stream/ConcurrentEager.hs+1−2 benchmark/Streamly/Benchmark/Data/Stream/ConcurrentInterleaved.hs+24 benchmark/bench-runner/Main.hs+1 benchmark/streamly-benchmarks.cabal+13 targets/Targets.hs+6
benchmark/Streamly/Benchmark/Data/Stream/Async.hs+2−7
@@ -6,7 +6,7 @@
66-- License : BSD3
77-- Maintainer : streamly@composewell.com
88
9−import Stream.AsyncCommon (allBenchmarks, interleaveBenchmarks)
9+import Stream.AsyncCommon (allBenchmarks)
1010import Streamly.Benchmark.Common (runWithCLIOpts, defaultStreamSize)
1111
1212moduleName :: String
@@ -17,9 +17,4 @@ moduleName = "Data.Stream.Concurrent"
1717-------------------------------------------------------------------------------
1818
1919main :: IO ()
20−main =
21− runWithCLIOpts defaultStreamSize
22− (\value ->
23− allBenchmarks moduleName id value
24− <> interleaveBenchmarks moduleName id value
25− )
20+main = runWithCLIOpts defaultStreamSize (allBenchmarks moduleName id)
benchmark/Streamly/Benchmark/Data/Stream/AsyncCommon.hs−46
@@ -8,7 +8,6 @@
88
99module Stream.AsyncCommon
1010 ( allBenchmarks
11− , interleaveBenchmarks
1211 )
1312where
1413
@@ -80,19 +79,11 @@ concatAsync2 f count n =
8079 $ Stream.fromList
8180 [sourceUnfoldrM count n, sourceUnfoldrM count (n + 1)]
8281
83−{-# INLINE interleave2 #-}
84−interleave2 :: (Config -> Config) -> Int -> Int -> IO ()
85−interleave2 f count n =
86− Stream.fold Fold.drain
87− $ Async.combineWith (f . Async.interleaved)
88− (sourceUnfoldrM count n) (sourceUnfoldrM count (n + 1))
89−
9082o_1_space_joining :: Int -> (Config -> Config) -> [Benchmark]
9183o_1_space_joining value f =
9284 [ bgroup "joining"
9385 [ benchIOSrc1 "async (2 of n/2)" (async2 f (value `div` 2))
9486 , benchIOSrc1 "concat async (2 of n/2)" (concatAsync2 f (value `div` 2))
95− , benchIOSrc1 "interleave (2 of n/2)" (interleave2 f (value `div` 2))
9687 ]
9788 ]
9889
@@ -156,18 +147,6 @@ concatFmapStreamsWith f outer inner n =
156147 $ Async.concatWith f
157148 $ fmap (sourceUnfoldrM inner) (sourceUnfoldrM outer n)
158149
159−{-# INLINE concatMapInterleaveStreamsWith #-}
160−concatMapInterleaveStreamsWith
161− :: (Config -> Config)
162− -> Int
163− -> Int
164− -> Int
165− -> IO ()
166−concatMapInterleaveStreamsWith f outer inner n =
167− Stream.fold Fold.drain
168− $ Async.concatMapWith (f . Async.interleaved)
169− (sourceUnfoldrM inner) (sourceUnfoldrM outer n)
170−
171150o_1_space_concatMap :: Int -> (Config -> Config) -> [Benchmark]
172151o_1_space_concatMap value f =
173152 value2 `seq`
@@ -187,24 +166,6 @@ o_1_space_concatMap value f =
187166
188167 value2 = round $ sqrt (fromIntegral value :: Double)
189168
190−-- XXX These do not work with the eager option
191−o_1_space_concatMapInterleave :: Int -> (Config -> Config) -> [Benchmark]
192−o_1_space_concatMapInterleave value f =
193− value2 `seq`
194− [ bgroup "concat"
195− [ benchIO "concatMapInterleaveWith (n of 1)"
196− (concatMapInterleaveStreamsWith f value 1)
197− , benchIO "concatMapInterleaveWith (sqrt x of sqrt x)"
198− (concatMapInterleaveStreamsWith f value2 value2)
199− , benchIO "concatMapInterleaveWith (1 of n)"
200− (concatMapInterleaveStreamsWith f 1 value)
201− ]
202− ]
203−
204− where
205−
206− value2 = round $ sqrt (fromIntegral value :: Double)
207−
208169-------------------------------------------------------------------------------
209170-- Monadic outer product
210171-------------------------------------------------------------------------------
@@ -244,10 +205,3 @@ allBenchmarks moduleName modifier value =
244205 , bgroup (o_n_heap_prefix moduleName)
245206 (o_n_heap_buffering value modifier)
246207 ]
247−
248−interleaveBenchmarks :: String -> (Config -> Config) -> Int -> [Benchmark]
249−interleaveBenchmarks moduleName modifier value =
250− [ bgroup
251− (o_1_space_prefix moduleName)
252− (o_1_space_concatMapInterleave value modifier)
253− ]
benchmark/Streamly/Benchmark/Data/Stream/ConcurrentEager.hs+1−2
@@ -19,5 +19,4 @@ moduleName = "Data.Stream.ConcurrentEager"
1919-------------------------------------------------------------------------------
2020
2121main :: IO ()
22−main =
23− runWithCLIOpts defaultStreamSize (allBenchmarks moduleName Async.eager)
22+main = runWithCLIOpts defaultStreamSize (allBenchmarks moduleName Async.eager)
benchmark/Streamly/Benchmark/Data/Stream/ConcurrentInterleaved.hsnew file+24
@@ -0,0 +1,24 @@
1+{-# LANGUAGE FlexibleContexts #-}
2+-- |
3+-- Module : Main
4+-- Copyright : (c) 2022 Composewell Technologies
5+--
6+-- License : BSD3
7+-- Maintainer : streamly@composewell.com
8+
9+import Stream.AsyncCommon (allBenchmarks)
10+import Streamly.Benchmark.Common (runWithCLIOpts, defaultStreamSize)
11+
12+import qualified Streamly.Internal.Data.Stream.Concurrent as Async
13+
14+moduleName :: String
15+moduleName = "Data.Stream.ConcurrentInterleaved"
16+
17+-------------------------------------------------------------------------------
18+-- Main
19+-------------------------------------------------------------------------------
20+
21+main :: IO ()
22+main =
23+ runWithCLIOpts
24+ defaultStreamSize (allBenchmarks moduleName Async.interleaved)
benchmark/bench-runner/Main.hs+1
@@ -51,6 +51,7 @@ rtsOpts exeName benchName0 = unwords [general, exeSpecific, benchSpecific]
5151 "-K8M -M64M"
5252 | "Data.Stream/o-n-space.grouping." `isPrefixOf` benchName = ""
5353 | "Data.Stream/o-n-space." `isPrefixOf` benchName = "-K4M"
54+ | "Data.Stream.ConcurrentInterleaved/o-1-space.monad-outer-product.toNullAp" `isPrefixOf` benchName = "-M32M"
5455 | "Data.Stream.ConcurrentEager/o-1-space.monad-outer-product.toNullAp" `isPrefixOf` benchName = "-M1024M -K4M"
5556 | "Data.Stream.ConcurrentEager/o-1-space." `isPrefixOf` benchName = "-M512M -K4M"
5657 | "Prelude.WSerial/o-n-space." `isPrefixOf` benchName = "-K4M"
benchmark/streamly-benchmarks.cabal+13
@@ -257,6 +257,19 @@ benchmark Data.Stream.Async
257257 else
258258 buildable: True
259259
260+benchmark Data.Stream.ConcurrentInterleaved
261+ import: bench-options-threaded
262+ type: exitcode-stdio-1.0
263+ hs-source-dirs: Streamly/Benchmark/Data/Stream/, Streamly/Benchmark/Data/
264+ main-is: ConcurrentInterleaved.hs
265+ other-modules:
266+ Stream.AsyncCommon
267+ Stream.Common
268+ if flag(use-streamly-core) || impl(ghcjs)
269+ buildable: False
270+ else
271+ buildable: True
272+
260273benchmark Data.Stream.ConcurrentEager
261274 import: bench-options-threaded
262275 type: exitcode-stdio-1.0
targets/Targets.hs+6
@@ -46,6 +46,12 @@ targets =
4646 , "concurrent_cmp"
4747 ]
4848 )
49+ , ("Data.Stream.ConcurrentInterleaved",
50+ [ "prelude_concurrent_grp"
51+ , "infinite_grp"
52+ , "concurrent_cmp"
53+ ]
54+ )
4955 , ("Prelude.WSerial", ["serial_wserial_cmp"])
5056 , ("Prelude.WSerial",
5157 [ "prelude_serial_grp"