on master help sign in
Add benchmarks for parallel application and fold
107f527Harendra Kumar
benchmark/LinearAsync.hs+3
@@ -101,5 +101,8 @@ main =
101 , benchIO "zip" Ops.zipAsync
101 , benchIO "zip" Ops.zipAsync
102 , benchIO "zipM" Ops.zipAsyncM
102 , benchIO "zipM" Ops.zipAsyncM
103 , benchIO "zipAp" Ops.zipAsyncAp
103 , benchIO "zipAp" Ops.zipAsyncAp
104+ -- Parallel stages in a pipeline
105+ , benchIO "parAppMap" Ops.parAppMap
106+ , benchIO "parAppSum" Ops.parAppSum
104 ]
107 ]
105 ]
108 ]
src/Streamly/Internal/Benchmark/Prelude.hs+12
@@ -809,6 +809,18 @@ inspect $ hasNoTypeClasses 'concatUnfoldRoundrobinRepl4xN
809-- inspect $ 'concatUnfoldRoundrobinRepl4xN `hasNoType` ''D.ConcatUnfoldInterleaveState
809-- inspect $ 'concatUnfoldRoundrobinRepl4xN `hasNoType` ''D.ConcatUnfoldInterleaveState
810#endif
810#endif
811
811
812+-------------------------------------------------------------------------------
813+-- Parallel application/fold
814+-------------------------------------------------------------------------------
815+
816+{-# INLINE parAppMap #-}
817+parAppMap :: S.MonadAsync m => Stream m Int -> m ()
818+parAppMap src = S.drain $ S.map (+1) S.|$ src
819+
820+{-# INLINE parAppSum #-}
821+parAppSum :: S.MonadAsync m => Stream m Int -> m ()
822+parAppSum src = (S.sum S.|$. src) >>= \x -> P.seq x (return ())
823+
812-------------------------------------------------------------------------------
824-------------------------------------------------------------------------------
813-- Mixed Composition
825-- Mixed Composition
814-------------------------------------------------------------------------------
826-------------------------------------------------------------------------------