on master help sign in
Add benchmark for MArray.modifyIndices
7886e14Ranjeet Kumar Ranjan
benchmark/Streamly/Benchmark/Data/Array/Foreign/Mut.hs+11−3
@@ -24,6 +24,7 @@ import Streamly.Prelude (MonadAsync, SerialT, IsStream)
24import System.Random (randomRIO)
24import System.Random (randomRIO)
25
25
26import qualified Streamly.Prelude as Stream
26import qualified Streamly.Prelude as Stream
27+import qualified Streamly.Internal.Data.Array.Foreign as Array
27import qualified Streamly.Internal.Data.Array.Foreign.Mut as MArray
28import qualified Streamly.Internal.Data.Array.Foreign.Mut as MArray
28
29
29import Gauge hiding (env)
30import Gauge hiding (env)
@@ -49,8 +50,9 @@ benchIO
49benchIO name src sink =
50benchIO name src sink =
50 bench name $ nfIO $ randomRIO (1,1) >>= sink . src
51 bench name $ nfIO $ randomRIO (1,1) >>= sink . src
51
52
52−o_1_space_serial_marray :: Int -> MArray.Array Int -> [Benchmark]
53+o_1_space_serial_marray ::
54+ Int -> (MArray.Array Int, Array.Array Int) -> [Benchmark]
53−o_1_space_serial_marray value array =
55+o_1_space_serial_marray value ~(array, indices) =
54 [ benchIO "partitionBy (< 0)" (const array)
56 [ benchIO "partitionBy (< 0)" (const array)
55 $ MArray.partitionBy (< 0)
57 $ MArray.partitionBy (< 0)
56 , benchIO "partitionBy (> 0)" (const array)
58 , benchIO "partitionBy (> 0)" (const array)
@@ -63,6 +65,9 @@ o_1_space_serial_marray value array =
63 $ MArray.strip (\x -> x < value `div` 2 || x > value `div` 2)
65 $ MArray.strip (\x -> x < value `div` 2 || x > value `div` 2)
64 , benchIO "strip (> 0)" (const array)
66 , benchIO "strip (> 0)" (const array)
65 $ MArray.strip (> 0)
67 $ MArray.strip (> 0)
68+ , benchIO "modifyIndices (+ 1)" (const indices)
69+ $ Stream.fold (MArray.modifyIndices (+ 1) array)
70+ . Stream.unfold Array.read
66 ]
71 ]
67
72
68-------------------------------------------------------------------------------
73-------------------------------------------------------------------------------
@@ -78,7 +83,10 @@ main = do
78
83
79 where
84 where
80
85
86+ alloc value = do
81− alloc value = MArray.fromStream (sourceUnfoldrM value 0 :: SerialT IO Int)
87+ marr <- MArray.fromStream (sourceUnfoldrM value 0 :: SerialT IO Int)
88+ indices <- Array.fromStream (sourceUnfoldrM value 0 :: SerialT IO Int)
89+ return (marr, indices)
82
90
83 allBenchmarks array value =
91 allBenchmarks array value =
84 [ bgroup (o_1_space_prefix moduleName) $
92 [ bgroup (o_1_space_prefix moduleName) $