on master help sign in
Move global limits into function arguments in bench:StreamK
commit23253c02707b7e949cfd88581bd8a213fdac7c61 authorAdithya Kumar <adithya@composewell.com> dateMon 29 Mar 2021, 09:48 (6 years ago) parentc7cd7c8
1 file changed+172−155
benchmark/Streamly/Benchmark/Data/Stream/StreamK.hs+172−155
benchmark/Streamly/Benchmark/Data/Stream/StreamK.hs+172−155
@@ -40,13 +40,6 @@ import Streamly.Benchmark.Common
4040import Test.Inspection
4141#endif
4242
43−value, value2, value3, value16, maxValue :: Int
44−value = 100000
45−value2 = round (P.fromIntegral value**(1/2::P.Double)) -- double nested loop
46−value3 = round (P.fromIntegral value**(1/3::P.Double)) -- triple nested loop
47−value16 = round (P.fromIntegral value**(1/16::P.Double)) -- triple nested loop
48−maxValue = value
49−
5043-------------------------------------------------------------------------------
5144-- Stream generation and elimination
5245-------------------------------------------------------------------------------
@@ -54,8 +47,8 @@ maxValue = value
5447type Stream m a = S.Stream m a
5548
5649{-# INLINE sourceUnfoldr #-}
57−sourceUnfoldr :: Int -> Stream m Int
58−sourceUnfoldr n = S.unfoldr step n
50+sourceUnfoldr :: Int -> Int -> Stream m Int
51+sourceUnfoldr value n = S.unfoldr step n
5952 where
6053 step cnt =
6154 if cnt > n + value
@@ -72,8 +65,8 @@ sourceUnfoldrN m n = S.unfoldr step n
7265 else Just (cnt, cnt + 1)
7366
7467{-# INLINE sourceUnfoldrM #-}
75−sourceUnfoldrM :: S.MonadAsync m => Int -> Stream m Int
76−sourceUnfoldrM n = S.unfoldrM step n
68+sourceUnfoldrM :: S.MonadAsync m => Int -> Int -> Stream m Int
69+sourceUnfoldrM value n = S.unfoldrM step n
7770 where
7871 step cnt =
7972 if cnt > n + value
@@ -90,12 +83,12 @@ sourceUnfoldrMN m n = S.unfoldrM step n
9083 else return (Just (cnt, cnt + 1))
9184
9285{-# INLINE sourceFromFoldable #-}
93−sourceFromFoldable :: Int -> Stream m Int
94−sourceFromFoldable n = S.fromFoldable [n..n+value]
86+sourceFromFoldable :: Int -> Int -> Stream m Int
87+sourceFromFoldable value n = S.fromFoldable [n..n+value]
9588
9689{-# INLINE sourceFromFoldableM #-}
97−sourceFromFoldableM :: S.MonadAsync m => Int -> Stream m Int
98−sourceFromFoldableM n =
90+sourceFromFoldableM :: S.MonadAsync m => Int -> Int -> Stream m Int
91+sourceFromFoldableM value n =
9992 Prelude.foldr S.consM S.nil (Prelude.fmap return [n..n+value])
10093
10194{-# INLINABLE concatMapFoldableWith #-}
@@ -104,12 +97,12 @@ concatMapFoldableWith :: (S.IsStream t, Foldable f)
10497concatMapFoldableWith f g = Prelude.foldr (f . g) S.nil
10598
10699{-# INLINE sourceFoldMapWith #-}
107−sourceFoldMapWith :: Int -> Stream m Int
108−sourceFoldMapWith n = concatMapFoldableWith S.serial S.yield [n..n+value]
100+sourceFoldMapWith :: Int -> Int -> Stream m Int
101+sourceFoldMapWith value n = concatMapFoldableWith S.serial S.yield [n..n+value]
109102
110103{-# INLINE sourceFoldMapWithM #-}
111−sourceFoldMapWithM :: Monad m => Int -> Stream m Int
112−sourceFoldMapWithM n =
104+sourceFoldMapWithM :: Monad m => Int -> Int -> Stream m Int
105+sourceFoldMapWithM value n =
113106 concatMapFoldableWith S.serial (S.yieldM . return) [n..n+value]
114107
115108-------------------------------------------------------------------------------
@@ -216,36 +209,36 @@ filterEven :: Monad m => Int -> Stream m Int -> m ()
216209filterEven n = composeN n $ S.filter even
217210
218211{-# INLINE filterAllOut #-}
219−filterAllOut :: Monad m => Int -> Stream m Int -> m ()
220−filterAllOut n = composeN n $ S.filter (> maxValue)
212+filterAllOut :: Monad m => Int -> Int -> Stream m Int -> m ()
213+filterAllOut maxValue n = composeN n $ S.filter (> maxValue)
221214
222215{-# INLINE filterAllIn #-}
223−filterAllIn :: Monad m => Int -> Stream m Int -> m ()
224−filterAllIn n = composeN n $ S.filter (<= maxValue)
216+filterAllIn :: Monad m => Int -> Int -> Stream m Int -> m ()
217+filterAllIn maxValue n = composeN n $ S.filter (<= maxValue)
225218
226219{-# INLINE _takeOne #-}
227220_takeOne :: Monad m => Int -> Stream m Int -> m ()
228221_takeOne n = composeN n $ S.take 1
229222
230223{-# INLINE takeAll #-}
231−takeAll :: Monad m => Int -> Stream m Int -> m ()
232−takeAll n = composeN n $ S.take maxValue
224+takeAll :: Monad m => Int -> Int -> Stream m Int -> m ()
225+takeAll maxValue n = composeN n $ S.take maxValue
233226
234227{-# INLINE takeWhileTrue #-}
235−takeWhileTrue :: Monad m => Int -> Stream m Int -> m ()
236−takeWhileTrue n = composeN n $ S.takeWhile (<= maxValue)
228+takeWhileTrue :: Monad m => Int -> Int -> Stream m Int -> m ()
229+takeWhileTrue maxValue n = composeN n $ S.takeWhile (<= maxValue)
237230
238231{-# INLINE dropOne #-}
239232dropOne :: Monad m => Int -> Stream m Int -> m ()
240233dropOne n = composeN n $ S.drop 1
241234
242235{-# INLINE dropAll #-}
243−dropAll :: Monad m => Int -> Stream m Int -> m ()
244−dropAll n = composeN n $ S.drop maxValue
236+dropAll :: Monad m => Int -> Int -> Stream m Int -> m ()
237+dropAll maxValue n = composeN n $ S.drop maxValue
245238
246239{-# INLINE dropWhileTrue #-}
247−dropWhileTrue :: Monad m => Int -> Stream m Int -> m ()
248−dropWhileTrue n = composeN n $ S.dropWhile (<= maxValue)
240+dropWhileTrue :: Monad m => Int -> Int -> Stream m Int -> m ()
241+dropWhileTrue maxValue n = composeN n $ S.dropWhile (<= maxValue)
249242
250243{-# INLINE dropWhileFalse #-}
251244dropWhileFalse :: Monad m => Int -> Stream m Int -> m ()
@@ -260,56 +253,52 @@ foldlS :: Monad m => Int -> Stream m Int -> m ()
260253foldlS n = composeN n $ S.foldlS (flip S.cons) S.nil
261254
262255{-# INLINE intersperse #-}
263−intersperse :: S.MonadAsync m => Int -> Stream m Int -> m ()
264−intersperse n = composeN n $ S.intersperse maxValue
256+intersperse :: S.MonadAsync m => Int -> Int -> Stream m Int -> m ()
257+intersperse maxValue n = composeN n $ S.intersperse maxValue
265258
266259-------------------------------------------------------------------------------
267260-- Iteration
268261-------------------------------------------------------------------------------
269262
270−iterStreamLen, maxIters :: Int
271−iterStreamLen = 10
272−maxIters = 10000
273−
274263{-# INLINE iterateSource #-}
275264iterateSource
276265 :: S.MonadAsync m
277− => (Stream m Int -> Stream m Int) -> Int -> Int -> Stream m Int
278−iterateSource g i n = f i (sourceUnfoldrMN iterStreamLen n)
266+ => Int -> (Stream m Int -> Stream m Int) -> Int -> Int -> Stream m Int
267+iterateSource iterStreamLen g i n = f i (sourceUnfoldrMN iterStreamLen n)
279268 where
280269 f (0 :: Int) m = g m
281270 f x m = g (f (x P.- 1) m)
282271
283272-- this is quadratic
284273{-# INLINE iterateScan #-}
285−iterateScan :: S.MonadAsync m => Int -> Stream m Int
286−iterateScan = iterateSource (S.scanl' (+) 0) (maxIters `div` 10)
274+iterateScan :: S.MonadAsync m => Int -> Int -> Int -> Stream m Int
275+iterateScan iterStreamLen maxIters = iterateSource iterStreamLen (S.scanl' (+) 0) (maxIters `div` 10)
287276
288277-- this is quadratic
289278{-# INLINE iterateDropWhileFalse #-}
290−iterateDropWhileFalse :: S.MonadAsync m => Int -> Stream m Int
291−iterateDropWhileFalse =
292− iterateSource (S.dropWhile (> maxValue)) (maxIters `div` 10)
279+iterateDropWhileFalse :: S.MonadAsync m => Int -> Int -> Int -> Int -> Stream m Int
280+iterateDropWhileFalse maxValue iterStreamLen maxIters =
281+ iterateSource iterStreamLen (S.dropWhile (> maxValue)) (maxIters `div` 10)
293282
294283{-# INLINE iterateMapM #-}
295−iterateMapM :: S.MonadAsync m => Int -> Stream m Int
296−iterateMapM = iterateSource (S.mapM return) maxIters
284+iterateMapM :: S.MonadAsync m => Int -> Int -> Int -> Stream m Int
285+iterateMapM iterStreamLen maxIters = iterateSource iterStreamLen (S.mapM return) maxIters
297286
298287{-# INLINE iterateFilterEven #-}
299−iterateFilterEven :: S.MonadAsync m => Int -> Stream m Int
300−iterateFilterEven = iterateSource (S.filter even) maxIters
288+iterateFilterEven :: S.MonadAsync m => Int -> Int -> Int -> Stream m Int
289+iterateFilterEven iterStreamLen maxIters = iterateSource iterStreamLen (S.filter even) maxIters
301290
302291{-# INLINE iterateTakeAll #-}
303−iterateTakeAll :: S.MonadAsync m => Int -> Stream m Int
304−iterateTakeAll = iterateSource (S.take maxValue) maxIters
292+iterateTakeAll :: S.MonadAsync m => Int -> Int -> Int -> Int -> Stream m Int
293+iterateTakeAll maxValue iterStreamLen maxIters = iterateSource iterStreamLen (S.take maxValue) maxIters
305294
306295{-# INLINE iterateDropOne #-}
307−iterateDropOne :: S.MonadAsync m => Int -> Stream m Int
308−iterateDropOne = iterateSource (S.drop 1) maxIters
296+iterateDropOne :: S.MonadAsync m => Int -> Int -> Int -> Stream m Int
297+iterateDropOne iterStreamLen maxIters = iterateSource iterStreamLen (S.drop 1) maxIters
309298
310299{-# INLINE iterateDropWhileTrue #-}
311−iterateDropWhileTrue :: S.MonadAsync m => Int -> Stream m Int
312−iterateDropWhileTrue = iterateSource (S.dropWhile (<= maxValue)) maxIters
300+iterateDropWhileTrue :: S.MonadAsync m => Int -> Int -> Int -> Int -> Stream m Int
301+iterateDropWhileTrue maxValue iterStreamLen maxIters = iterateSource iterStreamLen (S.dropWhile (<= maxValue)) maxIters
313302
314303-------------------------------------------------------------------------------
315304-- Zipping
@@ -336,32 +325,33 @@ dropScan :: Monad m => Int -> Stream m Int -> m ()
336325dropScan n = composeN n $ S.scanl' (+) 0 . S.drop 1
337326
338327{-# INLINE takeDrop #-}
339−takeDrop :: Monad m => Int -> Stream m Int -> m ()
340−takeDrop n = composeN n $ S.drop 1 . S.take maxValue
328+takeDrop :: Monad m => Int -> Int -> Stream m Int -> m ()
329+takeDrop maxValue n = composeN n $ S.drop 1 . S.take maxValue
341330
342331{-# INLINE takeScan #-}
343−takeScan :: Monad m => Int -> Stream m Int -> m ()
344−takeScan n = composeN n $ S.scanl' (+) 0 . S.take maxValue
332+takeScan :: Monad m => Int -> Int -> Stream m Int -> m ()
333+takeScan maxValue n = composeN n $ S.scanl' (+) 0 . S.take maxValue
345334
346335{-# INLINE takeMap #-}
347−takeMap :: Monad m => Int -> Stream m Int -> m ()
348−takeMap n = composeN n $ S.map (subtract 1) . S.take maxValue
336+takeMap :: Monad m => Int -> Int -> Stream m Int -> m ()
337+takeMap maxValue n = composeN n $ S.map (subtract 1) . S.take maxValue
349338
350339{-# INLINE filterDrop #-}
351−filterDrop :: Monad m => Int -> Stream m Int -> m ()
352−filterDrop n = composeN n $ S.drop 1 . S.filter (<= maxValue)
340+filterDrop :: Monad m => Int -> Int -> Stream m Int -> m ()
341+filterDrop maxValue n = composeN n $ S.drop 1 . S.filter (<= maxValue)
353342
354343{-# INLINE filterTake #-}
355−filterTake :: Monad m => Int -> Stream m Int -> m ()
356−filterTake n = composeN n $ S.take maxValue . S.filter (<= maxValue)
344+filterTake :: Monad m => Int -> Int -> Stream m Int -> m ()
345+filterTake maxValue n = composeN n $ S.take maxValue . S.filter (<= maxValue)
357346
347+-- Initially, this used maxBound not maxValue
358348{-# INLINE filterScan #-}
359−filterScan :: Monad m => Int -> Stream m Int -> m ()
360−filterScan n = composeN n $ S.scanl' (+) 0 . S.filter (<= maxBound)
349+filterScan :: Monad m => Int -> Int -> Stream m Int -> m ()
350+filterScan maxValue n = composeN n $ S.scanl' (+) 0 . S.filter (<= maxValue)
361351
362352{-# INLINE filterMap #-}
363−filterMap :: Monad m => Int -> Stream m Int -> m ()
364−filterMap n = composeN n $ S.map (subtract 1) . S.filter (<= maxValue)
353+filterMap :: Monad m => Int -> Int -> Stream m Int -> m ()
354+filterMap maxValue n = composeN n $ S.map (subtract 1) . S.filter (<= maxValue)
365355
366356-------------------------------------------------------------------------------
367357-- ConcatMap
@@ -530,23 +520,23 @@ o_1_space :: [Benchmark]
530520o_1_space =
531521 [ bgroup (o_1_space_prefix moduleName)
532522 [ bgroup "generation"
533− [ benchFold "unfoldr" toNull sourceUnfoldr
534− , benchFold "unfoldrM" toNull sourceUnfoldrM
523+ [ benchFold "unfoldr" toNull (sourceUnfoldr value)
524+ , benchFold "unfoldrM" toNull (sourceUnfoldrM value)
535525
536− , benchFold "fromFoldable" toNull sourceFromFoldable
537− , benchFold "fromFoldableM" toNull sourceFromFoldableM
526+ , benchFold "fromFoldable" toNull (sourceFromFoldable value)
527+ , benchFold "fromFoldableM" toNull (sourceFromFoldableM value)
538528
539529 -- appends
540− , benchFold "concatMapFoldableWith" toNull sourceFoldMapWith
541− , benchFold "concatMapFoldableWithM" toNull sourceFoldMapWithM
530+ , benchFold "concatMapFoldableWith" toNull (sourceFoldMapWith value)
531+ , benchFold "concatMapFoldableWithM" toNull (sourceFoldMapWithM value)
542532 ]
543533 , bgroup "elimination"
544− [ benchFold "toNull" toNull sourceUnfoldrM
545− , benchFold "mapM_" mapM_ sourceUnfoldrM
546− , benchFold "uncons" uncons sourceUnfoldrM
547− , benchFold "init" init sourceUnfoldrM
548− , benchFold "foldl'" foldl sourceUnfoldrM
549− , benchFold "last" last sourceUnfoldrM
534+ [ benchFold "toNull" toNull (sourceUnfoldrM value)
535+ , benchFold "mapM_" mapM_ (sourceUnfoldrM value)
536+ , benchFold "uncons" uncons (sourceUnfoldrM value)
537+ , benchFold "init" init (sourceUnfoldrM value)
538+ , benchFold "foldl'" foldl (sourceUnfoldrM value)
539+ , benchFold "last" last (sourceUnfoldrM value)
550540 ]
551541 , bgroup "nested"
552542 [ benchFold "toNullAp" toNullApNested (sourceUnfoldrMN value2)
@@ -561,19 +551,19 @@ o_1_space =
561551 , benchFold "filterAllOutPure" filterAllOutNested (sourceUnfoldrN value2)
562552 ]
563553 , bgroup "transformation"
564− [ benchFold "foldrS" (foldrS 1) sourceUnfoldrM
565− , benchFold "scan" (scan 1) sourceUnfoldrM
566− , benchFold "map" (map 1) sourceUnfoldrM
567− , benchFold "fmap" (fmapK 1) sourceUnfoldrM
568− , benchFold "mapM" (mapM 1) sourceUnfoldrM
569− , benchFold "mapMSerial" (mapMSerial 1) sourceUnfoldrM
554+ [ benchFold "foldrS" (foldrS 1) (sourceUnfoldrM value)
555+ , benchFold "scan" (scan 1) (sourceUnfoldrM value)
556+ , benchFold "map" (map 1) (sourceUnfoldrM value)
557+ , benchFold "fmap" (fmapK 1) (sourceUnfoldrM value)
558+ , benchFold "mapM" (mapM 1) (sourceUnfoldrM value)
559+ , benchFold "mapMSerial" (mapMSerial 1) (sourceUnfoldrM value)
570560 ]
571561 , bgroup "transformationX4"
572− [ benchFold "scan" (scan 4) sourceUnfoldrM
573− , benchFold "map" (map 4) sourceUnfoldrM
574− , benchFold "fmap" (fmapK 4) sourceUnfoldrM
575− , benchFold "mapM" (mapM 4) sourceUnfoldrM
576− , benchFold "mapMSerial" (mapMSerial 4) sourceUnfoldrM
562+ [ benchFold "scan" (scan 4) (sourceUnfoldrM value)
563+ , benchFold "map" (map 4) (sourceUnfoldrM value)
564+ , benchFold "fmap" (fmapK 4) (sourceUnfoldrM value)
565+ , benchFold "mapM" (mapM 4) (sourceUnfoldrM value)
566+ , benchFold "mapMSerial" (mapMSerial 4) (sourceUnfoldrM value)
577567 -- XXX this is horribly slow
578568 -- , benchFold "concatMap" (concatMap 4) (sourceUnfoldrMN value16)
579569 ]
@@ -607,77 +597,87 @@ o_1_space =
607597 (concatStreamsWith 1 value)
608598 ]
609599 , bgroup "filtering"
610− [ benchFold "filter-even" (filterEven 1) sourceUnfoldrM
611− , benchFold "filter-all-out" (filterAllOut 1) sourceUnfoldrM
612− , benchFold "filter-all-in" (filterAllIn 1) sourceUnfoldrM
613− , benchFold "take-all" (takeAll 1) sourceUnfoldrM
614− , benchFold "takeWhile-true" (takeWhileTrue 1) sourceUnfoldrM
615− , benchFold "drop-one" (dropOne 1) sourceUnfoldrM
616− , benchFold "drop-all" (dropAll 1) sourceUnfoldrM
617− , benchFold "dropWhile-true" (dropWhileTrue 1) sourceUnfoldrM
618− , benchFold "dropWhile-false" (dropWhileFalse 1) sourceUnfoldrM
600+ [ benchFold "filter-even" (filterEven 1) (sourceUnfoldrM value)
601+ , benchFold "filter-all-out" (filterAllOut maxValue 1) (sourceUnfoldrM value)
602+ , benchFold "filter-all-in" (filterAllIn maxValue 1) (sourceUnfoldrM value)
603+ , benchFold "take-all" (takeAll maxValue 1) (sourceUnfoldrM value)
604+ , benchFold "takeWhile-true" (takeWhileTrue maxValue 1) (sourceUnfoldrM value)
605+ , benchFold "drop-one" (dropOne 1) (sourceUnfoldrM value)
606+ , benchFold "drop-all" (dropAll maxValue 1) (sourceUnfoldrM value)
607+ , benchFold "dropWhile-true" (dropWhileTrue maxValue 1) (sourceUnfoldrM value)
608+ , benchFold "dropWhile-false" (dropWhileFalse 1) (sourceUnfoldrM value)
619609 ]
620610 , bgroup "filteringX4"
621− [ benchFold "filter-even" (filterEven 4) sourceUnfoldrM
622− , benchFold "filter-all-out" (filterAllOut 4) sourceUnfoldrM
623− , benchFold "filter-all-in" (filterAllIn 4) sourceUnfoldrM
624− , benchFold "take-all" (takeAll 4) sourceUnfoldrM
625− , benchFold "takeWhile-true" (takeWhileTrue 4) sourceUnfoldrM
626− , benchFold "drop-one" (dropOne 4) sourceUnfoldrM
627− , benchFold "drop-all" (dropAll 4) sourceUnfoldrM
628− , benchFold "dropWhile-true" (dropWhileTrue 4) sourceUnfoldrM
629− , benchFold "dropWhile-false" (dropWhileFalse 4) sourceUnfoldrM
611+ [ benchFold "filter-even" (filterEven 4) (sourceUnfoldrM value)
612+ , benchFold "filter-all-out" (filterAllOut maxValue 4) (sourceUnfoldrM value)
613+ , benchFold "filter-all-in" (filterAllIn maxValue 4) (sourceUnfoldrM value)
614+ , benchFold "take-all" (takeAll maxValue 4) (sourceUnfoldrM value)
615+ , benchFold "takeWhile-true" (takeWhileTrue maxValue 4) (sourceUnfoldrM value)
616+ , benchFold "drop-one" (dropOne 4) (sourceUnfoldrM value)
617+ , benchFold "drop-all" (dropAll maxValue 4) (sourceUnfoldrM value)
618+ , benchFold "dropWhile-true" (dropWhileTrue maxValue 4) (sourceUnfoldrM value)
619+ , benchFold "dropWhile-false" (dropWhileFalse 4) (sourceUnfoldrM value)
630620 ]
631621 , bgroup "zipping"
632− [ benchFold "zip" zip sourceUnfoldrM
622+ [ benchFold "zip" zip (sourceUnfoldrM value)
633623 ]
634624 , bgroup "mixed"
635− [ benchFold "scan-map" (scanMap 1) sourceUnfoldrM
636− , benchFold "drop-map" (dropMap 1) sourceUnfoldrM
637− , benchFold "drop-scan" (dropScan 1) sourceUnfoldrM
638− , benchFold "take-drop" (takeDrop 1) sourceUnfoldrM
639− , benchFold "take-scan" (takeScan 1) sourceUnfoldrM
640− , benchFold "take-map" (takeMap 1) sourceUnfoldrM
641− , benchFold "filter-drop" (filterDrop 1) sourceUnfoldrM
642− , benchFold "filter-take" (filterTake 1) sourceUnfoldrM
643− , benchFold "filter-scan" (filterScan 1) sourceUnfoldrM
644− , benchFold "filter-map" (filterMap 1) sourceUnfoldrM
625+ [ benchFold "scan-map" (scanMap 1) (sourceUnfoldrM value)
626+ , benchFold "drop-map" (dropMap 1) (sourceUnfoldrM value)
627+ , benchFold "drop-scan" (dropScan 1) (sourceUnfoldrM value)
628+ , benchFold "take-drop" (takeDrop maxValue 1) (sourceUnfoldrM value)
629+ , benchFold "take-scan" (takeScan maxValue 1) (sourceUnfoldrM value)
630+ , benchFold "take-map" (takeMap maxValue 1) (sourceUnfoldrM value)
631+ , benchFold "filter-drop" (filterDrop maxValue 1) (sourceUnfoldrM value)
632+ , benchFold "filter-take" (filterTake maxValue 1) (sourceUnfoldrM value)
633+ , benchFold "filter-scan" (filterScan maxValue 1) (sourceUnfoldrM value)
634+ , benchFold "filter-map" (filterMap maxValue 1) (sourceUnfoldrM value)
645635 ]
646636 , bgroup "mixedX2"
647− [ benchFold "scan-map" (scanMap 2) sourceUnfoldrM
648− , benchFold "drop-map" (dropMap 2) sourceUnfoldrM
649− , benchFold "drop-scan" (dropScan 2) sourceUnfoldrM
650− , benchFold "take-drop" (takeDrop 2) sourceUnfoldrM
651− , benchFold "take-scan" (takeScan 2) sourceUnfoldrM
652− , benchFold "take-map" (takeMap 2) sourceUnfoldrM
653− , benchFold "filter-drop" (filterDrop 2) sourceUnfoldrM
654− , benchFold "filter-take" (filterTake 2) sourceUnfoldrM
655− , benchFold "filter-scan" (filterScan 2) sourceUnfoldrM
656− , benchFold "filter-map" (filterMap 2) sourceUnfoldrM
637+ [ benchFold "scan-map" (scanMap 2) (sourceUnfoldrM value)
638+ , benchFold "drop-map" (dropMap 2) (sourceUnfoldrM value)
639+ , benchFold "drop-scan" (dropScan 2) (sourceUnfoldrM value)
640+ , benchFold "take-drop" (takeDrop maxValue 2) (sourceUnfoldrM value)
641+ , benchFold "take-scan" (takeScan maxValue 2) (sourceUnfoldrM value)
642+ , benchFold "take-map" (takeMap maxValue 2) (sourceUnfoldrM value)
643+ , benchFold "filter-drop" (filterDrop maxValue 2) (sourceUnfoldrM value)
644+ , benchFold "filter-take" (filterTake maxValue 2) (sourceUnfoldrM value)
645+ , benchFold "filter-scan" (filterScan maxValue 2) (sourceUnfoldrM value)
646+ , benchFold "filter-map" (filterMap maxValue 2) (sourceUnfoldrM value)
657647 ]
658648 , bgroup "mixedX4"
659− [ benchFold "scan-map" (scanMap 4) sourceUnfoldrM
660− , benchFold "drop-map" (dropMap 4) sourceUnfoldrM
661− , benchFold "drop-scan" (dropScan 4) sourceUnfoldrM
662− , benchFold "take-drop" (takeDrop 4) sourceUnfoldrM
663− , benchFold "take-scan" (takeScan 4) sourceUnfoldrM
664− , benchFold "take-map" (takeMap 4) sourceUnfoldrM
665− , benchFold "filter-drop" (filterDrop 4) sourceUnfoldrM
666− , benchFold "filter-take" (filterTake 4) sourceUnfoldrM
667− , benchFold "filter-scan" (filterScan 4) sourceUnfoldrM
668− , benchFold "filter-map" (filterMap 4) sourceUnfoldrM
649+ [ benchFold "scan-map" (scanMap 4) (sourceUnfoldrM value)
650+ , benchFold "drop-map" (dropMap 4) (sourceUnfoldrM value)
651+ , benchFold "drop-scan" (dropScan 4) (sourceUnfoldrM value)
652+ , benchFold "take-drop" (takeDrop maxValue 4) (sourceUnfoldrM value)
653+ , benchFold "take-scan" (takeScan maxValue 4) (sourceUnfoldrM value)
654+ , benchFold "take-map" (takeMap maxValue 4) (sourceUnfoldrM value)
655+ , benchFold "filter-drop" (filterDrop maxValue 4) (sourceUnfoldrM value)
656+ , benchFold "filter-take" (filterTake maxValue 4) (sourceUnfoldrM value)
657+ , benchFold "filter-scan" (filterScan maxValue 4) (sourceUnfoldrM value)
658+ , benchFold "filter-map" (filterMap maxValue 4) (sourceUnfoldrM value)
669659 ]
670660 ]
671661 ]
662+ where
663+
664+ value = 100000
665+ value2 = round (P.fromIntegral value**(1/2::P.Double)) -- double nested loop
666+ value3 = round (P.fromIntegral value**(1/3::P.Double)) -- triple nested loop
667+ maxValue = value
668+
672669
673670o_n_heap :: [Benchmark]
674671o_n_heap =
675672 [ bgroup (o_n_heap_prefix moduleName)
676673 [ bgroup "transformation"
677− [ benchFold "foldlS" (foldlS 1) sourceUnfoldrM
674+ [ benchFold "foldlS" (foldlS 1) (sourceUnfoldrM value)
678675 ]
679676 ]
680677 ]
678+ where
679+
680+ value = 100000
681681
682682{-# INLINE benchK #-}
683683benchK :: P.String -> (Int -> Stream P.IO Int) -> Benchmark
@@ -687,40 +687,52 @@ o_n_stack :: [Benchmark]
687687o_n_stack =
688688 [ bgroup (o_n_stack_prefix moduleName)
689689 [ bgroup "elimination"
690− [ benchFold "tail" tail sourceUnfoldrM
691− , benchFold "nullTail" nullTail sourceUnfoldrM
692− , benchFold "headTail" headTail sourceUnfoldrM
690+ [ benchFold "tail" tail (sourceUnfoldrM value)
691+ , benchFold "nullTail" nullTail (sourceUnfoldrM value)
692+ , benchFold "headTail" headTail (sourceUnfoldrM value)
693693 ]
694694 , bgroup "transformation"
695695 [
696696 -- XXX why do these need so much stack
697− benchFold "intersperse" (intersperse 1) (sourceUnfoldrMN value2)
698− , benchFold "interspersePure" (intersperse 1) (sourceUnfoldrN value2)
697+ benchFold "intersperse" (intersperse maxValue 1) (sourceUnfoldrMN value2)
698+ , benchFold "interspersePure" (intersperse maxValue 1) (sourceUnfoldrN value2)
699699 ]
700700 , bgroup "transformationX4"
701701 [
702− benchFold "intersperse" (intersperse 4) (sourceUnfoldrMN value16)
702+ benchFold "intersperse" (intersperse maxValue 4) (sourceUnfoldrMN value16)
703703 ]
704704 , bgroup "iterated"
705− [ benchK "mapM" iterateMapM
706− , benchK "scan(1/10)" iterateScan
707− , benchK "filterEven" iterateFilterEven
708− , benchK "takeAll" iterateTakeAll
709− , benchK "dropOne" iterateDropOne
710− , benchK "dropWhileFalse(1/10)" iterateDropWhileFalse
711− , benchK "dropWhileTrue" iterateDropWhileTrue
705+ [ benchK "mapM" (iterateMapM iterStreamLen maxIters)
706+ , benchK "scan(1/10)" (iterateScan iterStreamLen maxIters)
707+ , benchK "filterEven" (iterateFilterEven iterStreamLen maxIters)
708+ , benchK "takeAll" (iterateTakeAll maxValue iterStreamLen maxIters)
709+ , benchK "dropOne" (iterateDropOne iterStreamLen maxIters)
710+ , benchK "dropWhileFalse(1/10)" (iterateDropWhileFalse maxValue iterStreamLen maxIters)
711+ , benchK "dropWhileTrue" (iterateDropWhileTrue maxValue iterStreamLen maxIters)
712712 ]
713713 ]
714714 ]
715+ where
716+
717+ value = 100000
718+ value2 = round (P.fromIntegral value**(1/2::P.Double)) -- double nested loop
719+ value16 = round (P.fromIntegral value**(1/16::P.Double)) -- triple nested loop
720+ maxValue = value
721+ maxIters = 10000
722+ iterStreamLen = 10
715723
716724o_n_space :: [Benchmark]
717725o_n_space =
718726 [ bgroup (o_n_space_prefix moduleName)
719727 [ bgroup "elimination"
720− [ benchFold "toList" toList sourceUnfoldrM
728+ [ benchFold "toList" toList (sourceUnfoldrM value)
721729 ]
722730 ]
723731 ]
732+ where
733+
734+ value = 100000
735+
724736
725737{-# INLINE benchList #-}
726738benchList :: P.String -> ([Int] -> [Int]) -> (Int -> [Int]) -> Benchmark
@@ -741,6 +753,11 @@ o_1_space_list =
741753 ]
742754 ]
743755 ]
756+ where
757+
758+ value = 100000
759+ value2 = round (P.fromIntegral value**(1/2::P.Double)) -- double nested loop
760+ value3 = round (P.fromIntegral value**(1/3::P.Double)) -- triple nested loop
744761
745762main :: IO ()
746763main = defaultMain $ concat