on master help sign in
Apply static argument transformation to runOne

memory usage reduced by 7% (930 vs 870 MB) and time improved by 9% (34 sec vs 31 sec) when concating 100 concurrent threads with 500K elements in each thread stream.

commit90161e172e46f2471da968774c25a2100ee3bb4c authorHarendra Kumar <harendra.kumar@gmail.com> dateFri 28 Jun 2019, 11:24 (7 years ago) parentb67b840
1 file changed+10−8
src/Streamly/Streams/Parallel.hs+10−8
src/Streamly/Streams/Parallel.hs+10−8
@@ -68,16 +68,18 @@ import qualified Streamly.Streams.StreamK as K
6868runOne
6969 :: MonadIO m
7070 => State Stream m a -> Stream m a -> Maybe WorkerInfo -> m ()
71−runOne st m winfo = do
72− yieldLimitOk <- liftIO $ decrementYieldLimit sv
73− if yieldLimitOk
74− then do
75− liftIO $ decrementBufferLimit sv
76− foldStreamShared st yieldk single stop m
77− else liftIO $ cleanupSVarFromWorker sv
71+runOne st m0 winfo = go m0
7872
7973 where
8074
75+ go m = do
76+ yieldLimitOk <- liftIO $ decrementYieldLimit sv
77+ if yieldLimitOk
78+ then do
79+ liftIO $ decrementBufferLimit sv
80+ foldStreamShared st yieldk single stop m
81+ else liftIO $ cleanupSVarFromWorker sv
82+
8183 sv = fromJust $ streamVar st
8284 mrun = runInIO $ svarMrun sv
8385
@@ -87,7 +89,7 @@ runOne st m winfo = do
8789 sendStop sv winfo
8890 sendit a = liftIO $ void $ send sv (ChildYield a)
8991 single a = sendit a >> (liftIO $ sendStop sv winfo)
90− yieldk a r = sendit a >> (void $ liftIO $ mrun $ runOne st r winfo)
92+ yieldk a r = sendit a >> (void $ liftIO $ mrun $ go r)
9193
9294{-# NOINLINE forkSVarPar #-}
9395forkSVarPar :: (IsStream t, MonadAsync m)