on master help sign in
Add more benchmarks to unpinned-array.
commit42f10918265a7e499328337aa7028aebc5870cd7 authorPranay Sashank <pranaysashank@gmail.com> dateWed 4 Dec 2019, 11:54 (7 years ago) parent8ac4279
2 files changed+14−11
benchmark/Streamly/Benchmark/Data/Array.hs+10−7 benchmark/Streamly/Benchmark/Data/ArrayOps.hs+4−4
benchmark/Streamly/Benchmark/Data/Array.hs+10−7
@@ -11,7 +11,7 @@
1111
1212module Main (main) where
1313
14−import Control.DeepSeq (NFData(..))
14+import Control.DeepSeq (NFData(..), deepseq)
1515import System.Random (randomRIO)
1616
1717import qualified Streamly.Benchmark.Data.ArrayOps as Ops
@@ -48,6 +48,9 @@ benchIO' name src f = bench name $ nfIO $
4848benchIOSink :: NFData b => String -> (Ops.Stream Int -> IO b) -> Benchmark
4949benchIOSink name f = benchIO' name Ops.sourceIntFromTo f
5050
51+mkString :: String
52+mkString = "[1" ++ concat (replicate Ops.value ",1") ++ "]"
53+
5154main :: IO ()
5255main =
5356 defaultMain
@@ -60,15 +63,15 @@ main =
6063 , benchIOSrc "writeN . fromList" Ops.sourceFromList
6164 -- , benchPureSrc "writeN . IsList.fromList" Ops.sourceIsList
6265 -- , benchPureSrc "writeN . IsString.fromString" Ops.sourceIsString
63− -- , mkString `deepseq` (bench "read" $ nf Ops.readInstance mkString)
64− -- , benchPureSink "show" Ops.showInstance
66+ , mkString `deepseq` (bench "read" $ nf Ops.readInstance mkString)
67+ , benchPureSink "show" Ops.showInstance
6568 ]
6669 , bgroup "elimination"
6770 [ benchPureSink "id" id
68− -- , benchPureSink "==" Ops.eqInstance
69− -- , benchPureSink "/=" Ops.eqInstanceNotEq
70− -- , benchPureSink "<" Ops.ordInstance
71− -- , benchPureSink "min" Ops.ordInstanceMin
71+ , benchPureSink "==" Ops.eqInstance
72+ , benchPureSink "/=" Ops.eqInstanceNotEq
73+ , benchPureSink "<" Ops.ordInstance
74+ , benchPureSink "min" Ops.ordInstanceMin
7275 -- length is used to check for foldr/build fusion
7376 -- , benchPureSink "length . IsList.toList" (length . GHC.toList)
7477 , benchIOSink "foldl'" Ops.pureFoldl'
benchmark/Streamly/Benchmark/Data/ArrayOps.hs+4−4
@@ -16,7 +16,7 @@
1616module Streamly.Benchmark.Data.ArrayOps where
1717
1818import Control.Monad.IO.Class (MonadIO)
19−import Prelude (Int, (+), ($), (>), (.), Maybe(..), undefined)
19+import Prelude (Int, Bool, (+), ($), (==), (>), (.), Maybe(..), undefined)
2020import qualified Prelude as P
2121#ifdef DEVBUILD
2222import qualified Data.Foldable as F
@@ -27,7 +27,7 @@ import qualified Streamly.Data.Array as A
2727import qualified Streamly.Prelude as S
2828
2929value :: Int
30−value = 10000
30+value = 100000
3131
3232-------------------------------------------------------------------------------
3333-- Benchmark ops
@@ -104,7 +104,7 @@ onArray f arr = S.fold (A.writeN value) $ f $ (S.unfold A.read arr)
104104scanl' n = composeN n $ onArray $ S.scanl' (+) 0
105105scanl1' n = composeN n $ onArray $ S.scanl1' (+)
106106map n = composeN n $ onArray $ S.map (+1)
107−{-
107+
108108{-# INLINE eqInstance #-}
109109eqInstance :: Stream Int -> Bool
110110eqInstance src = src == src
@@ -132,7 +132,7 @@ readInstance str =
132132 in case r of
133133 [(x,"")] -> x
134134 _ -> P.error "readInstance: no parse"
135−-}
135+
136136{-# INLINE pureFoldl' #-}
137137pureFoldl' :: MonadIO m => Stream Int -> m Int
138138pureFoldl' = S.foldl' (+) 0 . S.unfold A.read