on 385f0fc help sign in
streamly/benchmark/LinearRate.hs
68 lines 2.2 kB history raw
1-- |
2-- Module : Main
3-- Copyright : (c) 2018 Harendra Kumar
4--
5-- License : BSD3
6-- Maintainer : streamly@composewell.com
8-- Rate benchmarks are kept separate because they need more running time to
9-- provide stable results.
11-- import Data.Functor.Identity (Identity, runIdentity)
12import System.Random (randomRIO)
14import Common (parseCLIOpts)
16import Streamly
17import Gauge
19import qualified Streamly.Benchmark.Prelude as Ops
21-- | Takes a source, and uses it with a default drain/fold method.
22{-# INLINE benchSrcIO #-}
23benchSrcIO
24 :: (t IO Int -> SerialT IO Int)
25 -> String
26 -> (Int -> t IO Int)
27 -> Benchmark
28benchSrcIO t name f
29 = bench name $ nfIO $ randomRIO (1,1) >>= Ops.toNull t . f
31{-
32_benchId :: NFData b => String -> (Ops.Stream m Int -> Identity b) -> Benchmark
33_benchId name f = bench name $ nf (runIdentity . f) (Ops.source 10)
34-}
36defaultStreamSize :: Int
37defaultStreamSize = 100000
39main :: IO ()
40main = do
41 -- XXX Fix indentation
42 (value, cfg, benches) <- parseCLIOpts defaultStreamSize
43 value `seq` runMode (mode cfg) cfg benches
44 -- XXX arbitrarily large rate should be the same as rate Nothing
45 [ bgroup "avgrate"
46 [ bgroup "asyncly"
47 [ -- benchIO "unfoldr" $ Ops.toNull asyncly
48 benchSrcIO asyncly "unfoldrM" (Ops.sourceUnfoldrM value)
49 , benchSrcIO asyncly "unfoldrM/Nothing"
50 (rate Nothing . Ops.sourceUnfoldrM value)
51 , benchSrcIO asyncly "unfoldrM/1,000,000"
52 (avgRate 1000000 . Ops.sourceUnfoldrM value)
53 , benchSrcIO asyncly "unfoldrM/3,000,000"
54 (avgRate 3000000 . Ops.sourceUnfoldrM value)
55 , benchSrcIO asyncly "unfoldrM/10,000,000/maxThreads1"
56 (maxThreads 1 . avgRate 10000000 . Ops.sourceUnfoldrM value)
57 , benchSrcIO asyncly "unfoldrM/10,000,000"
58 (avgRate 10000000 . Ops.sourceUnfoldrM value)
59 , benchSrcIO asyncly "unfoldrM/20,000,000"
60 (avgRate 20000000 . Ops.sourceUnfoldrM value)
61 ]
62 , bgroup "aheadly"
63 [
64 benchSrcIO aheadly "unfoldrM/1,000,000"
65 (avgRate 1000000 . Ops.sourceUnfoldrM value)
66 ]
67 ]
68 ]