@@ -516,10 +516,9 @@ filterAllInNestedList str = do
516moduleName :: String
516moduleName :: String
517moduleName = "Data.Stream.StreamK"
517moduleName = "Data.Stream.StreamK"
519−o_1_space :: [Benchmark]
519+o_1_space_generation :: Int -> Benchmark
520−o_1_space =
520+o_1_space_generation value =
521− [ bgroup (o_1_space_prefix moduleName)
522− [ bgroup "generation"
521+ bgroup "generation"
523 [ benchFold "unfoldr" toNull (sourceUnfoldr value)
522 [ benchFold "unfoldr" toNull (sourceUnfoldr value)
524 , benchFold "unfoldrM" toNull (sourceUnfoldrM value)
523 , benchFold "unfoldrM" toNull (sourceUnfoldrM value)
@@ -530,7 +529,10 @@ o_1_space =
530 , benchFold "concatMapFoldableWith" toNull (sourceFoldMapWith value)
529 , benchFold "concatMapFoldableWith" toNull (sourceFoldMapWith value)
531 , benchFold "concatMapFoldableWithM" toNull (sourceFoldMapWithM value)
530 , benchFold "concatMapFoldableWithM" toNull (sourceFoldMapWithM value)
533+o_1_space_elimination :: Int -> Benchmark
534+o_1_space_elimination value =
533− , bgroup "elimination"
535+ bgroup "elimination"
534 [ benchFold "toNull" toNull (sourceUnfoldrM value)
536 [ benchFold "toNull" toNull (sourceUnfoldrM value)
535 , benchFold "mapM_" mapM_ (sourceUnfoldrM value)
537 , benchFold "mapM_" mapM_ (sourceUnfoldrM value)
536 , benchFold "uncons" uncons (sourceUnfoldrM value)
538 , benchFold "uncons" uncons (sourceUnfoldrM value)
@@ -538,7 +540,10 @@ o_1_space =
538 , benchFold "foldl'" foldl (sourceUnfoldrM value)
540 , benchFold "foldl'" foldl (sourceUnfoldrM value)
539 , benchFold "last" last (sourceUnfoldrM value)
541 , benchFold "last" last (sourceUnfoldrM value)
544+o_1_space_nested :: Int -> Benchmark
545+o_1_space_nested value =
541− , bgroup "nested"
546+ bgroup "nested"
542 [ benchFold "toNullAp" toNullApNested (sourceUnfoldrMN value2)
547 [ benchFold "toNullAp" toNullApNested (sourceUnfoldrMN value2)
543 , benchFold "toNull" toNullNested (sourceUnfoldrMN value2)
548 , benchFold "toNull" toNullNested (sourceUnfoldrMN value2)
544 , benchFold "toNull3" toNullNested3 (sourceUnfoldrMN value3)
549 , benchFold "toNull3" toNullNested3 (sourceUnfoldrMN value3)
@@ -550,7 +555,14 @@ o_1_space =
550 , benchFold "filterAllInPure" filterAllInNested (sourceUnfoldrN value2)
555 , benchFold "filterAllInPure" filterAllInNested (sourceUnfoldrN value2)
551 , benchFold "filterAllOutPure" filterAllOutNested (sourceUnfoldrN value2)
556 , benchFold "filterAllOutPure" filterAllOutNested (sourceUnfoldrN value2)
559+ value2 = round (P.fromIntegral value**(1/2::P.Double)) -- double nested loop
560+ value3 = round (P.fromIntegral value**(1/3::P.Double)) -- triple nested loop
562+o_1_space_transformation :: Int -> Benchmark
563+o_1_space_transformation value =
564+ bgroup "transformation"
553− , bgroup "transformation"
565+ [ bgroup "X1"
554 [ benchFold "foldrS" (foldrS 1) (sourceUnfoldrM value)
566 [ benchFold "foldrS" (foldrS 1) (sourceUnfoldrM value)
555 , benchFold "scan" (scan 1) (sourceUnfoldrM value)
567 , benchFold "scan" (scan 1) (sourceUnfoldrM value)
556 , benchFold "map" (map 1) (sourceUnfoldrM value)
568 , benchFold "map" (map 1) (sourceUnfoldrM value)
@@ -558,7 +570,7 @@ o_1_space =
558 , benchFold "mapM" (mapM 1) (sourceUnfoldrM value)
570 , benchFold "mapM" (mapM 1) (sourceUnfoldrM value)
559 , benchFold "mapMSerial" (mapMSerial 1) (sourceUnfoldrM value)
571 , benchFold "mapMSerial" (mapMSerial 1) (sourceUnfoldrM value)
561− , bgroup "transformationX4"
573+ , bgroup "X4"
562 [ benchFold "scan" (scan 4) (sourceUnfoldrM value)
574 [ benchFold "scan" (scan 4) (sourceUnfoldrM value)
563 , benchFold "map" (map 4) (sourceUnfoldrM value)
575 , benchFold "map" (map 4) (sourceUnfoldrM value)
564 , benchFold "fmap" (fmapK 4) (sourceUnfoldrM value)
576 , benchFold "fmap" (fmapK 4) (sourceUnfoldrM value)
@@ -567,7 +579,11 @@ o_1_space =
567 -- XXX this is horribly slow
579 -- XXX this is horribly slow
568 -- , benchFold "concatMap" (concatMap 4) (sourceUnfoldrMN value16)
580 -- , benchFold "concatMap" (concatMap 4) (sourceUnfoldrMN value16)
584+o_1_space_concat :: Int -> Benchmark
585+o_1_space_concat value =
570− , bgroup "concat"
586+ bgroup "concat"
571 [ benchIOSrc1 "concatMapPure (n of 1)"
587 [ benchIOSrc1 "concatMapPure (n of 1)"
572 (concatMapPure value 1)
588 (concatMapPure value 1)
573 , benchIOSrc1 "concatMapPure (sqrt n of sqrt n)"
589 , benchIOSrc1 "concatMapPure (sqrt n of sqrt n)"
@@ -596,7 +612,13 @@ o_1_space =
596 , benchIOSrc1 "concatMapWith (1 of n)"
612 , benchIOSrc1 "concatMapWith (1 of n)"
597 (concatStreamsWith 1 value)
613 (concatStreamsWith 1 value)
616+ value2 = round (P.fromIntegral value**(1/2::P.Double)) -- double nested loop
618+o_1_space_filtering :: Int -> Benchmark
619+o_1_space_filtering value =
599− , bgroup "filtering"
620+ bgroup "filtering"
600 [ benchFold "filter-even" (filterEven 1) (sourceUnfoldrM value)
622 [ benchFold "filter-even" (filterEven 1) (sourceUnfoldrM value)
601 , benchFold "filter-all-out" (filterAllOut maxValue 1) (sourceUnfoldrM value)
623 , benchFold "filter-all-out" (filterAllOut maxValue 1) (sourceUnfoldrM value)
602 , benchFold "filter-all-in" (filterAllIn maxValue 1) (sourceUnfoldrM value)
624 , benchFold "filter-all-in" (filterAllIn maxValue 1) (sourceUnfoldrM value)
@@ -607,7 +629,7 @@ o_1_space =
607 , benchFold "dropWhile-true" (dropWhileTrue maxValue 1) (sourceUnfoldrM value)
629 , benchFold "dropWhile-true" (dropWhileTrue maxValue 1) (sourceUnfoldrM value)
608 , benchFold "dropWhile-false" (dropWhileFalse 1) (sourceUnfoldrM value)
630 , benchFold "dropWhile-false" (dropWhileFalse 1) (sourceUnfoldrM value)
610− , bgroup "filteringX4"
632+ , bgroup "X4"
611 [ benchFold "filter-even" (filterEven 4) (sourceUnfoldrM value)
633 [ benchFold "filter-even" (filterEven 4) (sourceUnfoldrM value)
612 , benchFold "filter-all-out" (filterAllOut maxValue 4) (sourceUnfoldrM value)
634 , benchFold "filter-all-out" (filterAllOut maxValue 4) (sourceUnfoldrM value)
613 , benchFold "filter-all-in" (filterAllIn maxValue 4) (sourceUnfoldrM value)
635 , benchFold "filter-all-in" (filterAllIn maxValue 4) (sourceUnfoldrM value)
@@ -618,10 +640,22 @@ o_1_space =
618 , benchFold "dropWhile-true" (dropWhileTrue maxValue 4) (sourceUnfoldrM value)
640 , benchFold "dropWhile-true" (dropWhileTrue maxValue 4) (sourceUnfoldrM value)
619 , benchFold "dropWhile-false" (dropWhileFalse 4) (sourceUnfoldrM value)
641 , benchFold "dropWhile-false" (dropWhileFalse 4) (sourceUnfoldrM value)
649+o_1_space_zipping :: Int -> Benchmark
650+o_1_space_zipping value =
621− , bgroup "zipping"
651+ bgroup "zipping"
622 [ benchFold "zip" zip (sourceUnfoldrM value)
652 [ benchFold "zip" zip (sourceUnfoldrM value)
655+o_1_space_mixed :: Int -> Benchmark
656+o_1_space_mixed value =
624− , bgroup "mixed"
657+ bgroup "mixed"
625 [ benchFold "scan-map" (scanMap 1) (sourceUnfoldrM value)
659 [ benchFold "scan-map" (scanMap 1) (sourceUnfoldrM value)
626 , benchFold "drop-map" (dropMap 1) (sourceUnfoldrM value)
660 , benchFold "drop-map" (dropMap 1) (sourceUnfoldrM value)
627 , benchFold "drop-scan" (dropScan 1) (sourceUnfoldrM value)
661 , benchFold "drop-scan" (dropScan 1) (sourceUnfoldrM value)
@@ -633,7 +667,7 @@ o_1_space =
633 , benchFold "filter-scan" (filterScan maxValue 1) (sourceUnfoldrM value)
667 , benchFold "filter-scan" (filterScan maxValue 1) (sourceUnfoldrM value)
634 , benchFold "filter-map" (filterMap maxValue 1) (sourceUnfoldrM value)
668 , benchFold "filter-map" (filterMap maxValue 1) (sourceUnfoldrM value)
636− , bgroup "mixedX2"
670+ , bgroup "X2"
637 [ benchFold "scan-map" (scanMap 2) (sourceUnfoldrM value)
671 [ benchFold "scan-map" (scanMap 2) (sourceUnfoldrM value)
638 , benchFold "drop-map" (dropMap 2) (sourceUnfoldrM value)
672 , benchFold "drop-map" (dropMap 2) (sourceUnfoldrM value)
639 , benchFold "drop-scan" (dropScan 2) (sourceUnfoldrM value)
673 , benchFold "drop-scan" (dropScan 2) (sourceUnfoldrM value)
@@ -645,7 +679,7 @@ o_1_space =
645 , benchFold "filter-scan" (filterScan maxValue 2) (sourceUnfoldrM value)
679 , benchFold "filter-scan" (filterScan maxValue 2) (sourceUnfoldrM value)
646 , benchFold "filter-map" (filterMap maxValue 2) (sourceUnfoldrM value)
680 , benchFold "filter-map" (filterMap maxValue 2) (sourceUnfoldrM value)
648− , bgroup "mixedX4"
682+ , bgroup "X4"
649 [ benchFold "scan-map" (scanMap 4) (sourceUnfoldrM value)
683 [ benchFold "scan-map" (scanMap 4) (sourceUnfoldrM value)
650 , benchFold "drop-map" (dropMap 4) (sourceUnfoldrM value)
684 , benchFold "drop-map" (dropMap 4) (sourceUnfoldrM value)
651 , benchFold "drop-scan" (dropScan 4) (sourceUnfoldrM value)
685 , benchFold "drop-scan" (dropScan 4) (sourceUnfoldrM value)
@@ -658,14 +692,44 @@ o_1_space =
658 , benchFold "filter-map" (filterMap maxValue 4) (sourceUnfoldrM value)
692 , benchFold "filter-map" (filterMap maxValue 4) (sourceUnfoldrM value)
664− value = 100000
697+ maxValue = value
699+o_1_space_list :: Int -> Benchmark
700+o_1_space_list value =
702+ [ bgroup "elimination"
703+ [ benchList "last" (\xs -> [List.last xs]) (sourceUnfoldrList value)
706+ [ benchList "toNullAp" toNullApNestedList (sourceUnfoldrList value2)
707+ , benchList "toNull" toNullNestedList (sourceUnfoldrList value2)
708+ , benchList "toNull3" toNullNestedList3 (sourceUnfoldrList value3)
709+ , benchList "filterAllIn" filterAllInNestedList (sourceUnfoldrList value2)
710+ , benchList "filterAllOut" filterAllOutNestedList (sourceUnfoldrList value2)
665 value2 = round (P.fromIntegral value**(1/2::P.Double)) -- double nested loop
715 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
716 value3 = round (P.fromIntegral value**(1/3::P.Double)) -- triple nested loop
718+o_1_space :: Benchmark
720+ bgroup (o_1_space_prefix moduleName)
721+ [ o_1_space_generation value
722+ , o_1_space_elimination value
723+ , o_1_space_nested value
724+ , o_1_space_transformation value
725+ , o_1_space_concat value
726+ , o_1_space_filtering value
727+ , o_1_space_zipping value
728+ , o_1_space_mixed value
729+ , o_1_space_list value
670o_n_heap :: [Benchmark]
734o_n_heap :: [Benchmark]
671o_n_heap =
735o_n_heap =
@@ -738,31 +802,9 @@ o_n_space =
738benchList :: P.String -> ([Int] -> [Int]) -> (Int -> [Int]) -> Benchmark
802benchList :: P.String -> ([Int] -> [Int]) -> (Int -> [Int]) -> Benchmark
739benchList name run f = bench name $ nfIO $ randomRIO (1,1) >>= return . run . f
803benchList name run f = bench name $ nfIO $ randomRIO (1,1) >>= return . run . f
741−o_1_space_list :: [Benchmark]
744− [ bgroup "elimination"
745− [ benchList "last" (\xs -> [List.last xs]) (sourceUnfoldrList value)
748− [ benchList "toNullAp" toNullApNestedList (sourceUnfoldrList value2)
749− , benchList "toNull" toNullNestedList (sourceUnfoldrList value2)
750− , benchList "toNull3" toNullNestedList3 (sourceUnfoldrList value3)
751− , benchList "filterAllIn" filterAllInNestedList (sourceUnfoldrList value2)
752− , benchList "filterAllOut" filterAllOutNestedList (sourceUnfoldrList value2)
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
762main :: IO ()
805main :: IO ()
763main = defaultMain $ concat
806main = defaultMain $ concat
764− [ o_1_space
807+ [ [ o_1_space ]
765− , [bgroup (o_1_space_prefix moduleName) o_1_space_list]
766 , o_n_stack
808 , o_n_stack
767 , o_n_heap
809 , o_n_heap
768 , o_n_space
810 , o_n_space