@@ -1,3 +1,5 @@
1+{-# LANGUAGE FlexibleContexts #-}
2+
13-- |
24-- Module : Main
35-- Copyright : (c) 2018 Composewell Technologies
@@ -5,7 +7,7 @@
57-- License : BSD3
68-- Maintainer : streamly@composewell.com
79
8−import Streamly.Prelude (asyncly, aheadly, maxThreads)
10+import Streamly.Prelude (asyncly, aheadly, maxThreads, IsStream, MonadAsync)
911import qualified Streamly.Prelude as S
1012
1113import Streamly.Benchmark.Common
@@ -20,6 +22,19 @@ moduleName = "Prelude.Rate"
2022-- Average Rate
2123-------------------------------------------------------------------------------
2224
25+{-# INLINE rateNothing #-}
26+rateNothing :: (MonadAsync m, IsStream t) => Int -> Int -> t m Int
27+rateNothing value = S.rate Nothing . sourceUnfoldrM value
28+
29+{-# INLINE avgRate #-}
30+avgRate :: (MonadAsync m, IsStream t) => Int -> Double -> Int -> t m Int
31+avgRate value rate_ = S.avgRate rate_ . sourceUnfoldrM value
32+
33+{-# INLINE avgRateThreads1 #-}
34+avgRateThreads1 :: (MonadAsync m, IsStream t) => Int -> Double -> Int -> t m Int
35+avgRateThreads1 value rate_ =
36+ maxThreads 1 . S.avgRate rate_ . sourceUnfoldrM value
37+
2338-- XXX arbitrarily large rate should be the same as rate Nothing
2439o_1_space_async_avgRate :: Int -> [Benchmark]
2540o_1_space_async_avgRate value =
@@ -27,18 +42,13 @@ o_1_space_async_avgRate value =
2742 [ bgroup "avgRate"
2843 -- benchIO "unfoldr" $ toNull asyncly
2944 -- benchIOSrc asyncly "unfoldrM" (sourceUnfoldrM value)
30− [ benchIOSrc asyncly "unfoldrM/Nothing"
31− (S.rate Nothing . sourceUnfoldrM value)
32− , benchIOSrc asyncly "unfoldrM/1,000,000"
33− (S.avgRate 1000000 . sourceUnfoldrM value)
34− , benchIOSrc asyncly "unfoldrM/3,000,000"
35− (S.avgRate 3000000 . sourceUnfoldrM value)
36− , benchIOSrc asyncly "unfoldrM/10,000,000/maxThreads1"
37− (maxThreads 1 . S.avgRate 10000000 . sourceUnfoldrM value)
38− , benchIOSrc asyncly "unfoldrM/10,000,000"
39− (S.avgRate 10000000 . sourceUnfoldrM value)
40− , benchIOSrc asyncly "unfoldrM/20,000,000"
41− (S.avgRate 20000000 . sourceUnfoldrM value)
45+ [ benchIOSrc asyncly "Nothing" $ rateNothing value
46+ , benchIOSrc asyncly "1M" $ avgRate value 1000000
47+ , benchIOSrc asyncly "3M" $ avgRate value 3000000
48+ , benchIOSrc asyncly "10M/maxThreads1"
49+ $ avgRateThreads1 value 10000000
50+ , benchIOSrc asyncly "10M" $ avgRate value 10000000
51+ , benchIOSrc asyncly "20M" $ avgRate value 20000000
4252 ]
4353 ]
4454 ]
@@ -47,8 +57,7 @@ o_1_space_ahead_avgRate :: Int -> [Benchmark]
4757o_1_space_ahead_avgRate value =
4858 [ bgroup "aheadly"
4959 [ bgroup "avgRate"
50− [ benchIOSrc aheadly "unfoldrM/1,000,000"
51− (S.avgRate 1000000 . sourceUnfoldrM value)
60+ [ benchIOSrc aheadly "1M" $ avgRate value 1000000
5261 ]
5362 ]
5463 ]