Skip to content

Commit c152c5a

Browse files
Arrange parser benchmarks in the export list order
1 parent fe0e27f commit c152c5a

File tree

1 file changed

+98
-62
lines changed

1 file changed

+98
-62
lines changed

benchmark/Streamly/Benchmark/Data/Parser.hs

Lines changed: 98 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -710,45 +710,109 @@ instance NFData ParseError where
710710

711711
benchmarks :: Int -> BenchEnv -> [Array.Array Int] -> [(SpaceComplexity, Benchmark)]
712712
benchmarks value env arrays =
713-
[ (SpaceO_1, benchIOSink value "takeBetween" $ takeBetween value)
714-
, (SpaceO_1, benchIOSink value "takeWhile" $ takeWhile value)
715-
, (SpaceO_1, benchIOSink value "takeWhileP" $ takeWhileP value)
716-
, (SpaceO_1, benchIOSink value "takeP" $ takeP value)
717-
, (SpaceO_1, benchIOSink value "dropWhile" $ dropWhile value)
718-
, (SpaceO_1, benchIOSink value "takeBeginBy" $ takeBeginBy value)
719-
, (SpaceO_1, benchIOSink value "takeEndBy_" $ takeEndBy_ value)
720-
, (SpaceO_1, benchIOSink value "groupBy" $ groupBy)
721-
, (SpaceO_1, benchIOSink value "groupByRolling" $ groupByRolling)
722-
, (SpaceO_1, benchIOSink value "wordBy" $ wordBy value)
723-
, (SpaceO_1, benchIOSink value "sepBy (words)" sepByWords)
724-
, (SpaceO_1, benchIOSink value "sepByAll (words)" sepByAllWords)
725-
, (SpaceO_1, benchIOSink value "sepBy1 (words)" sepByWords1)
726-
, (SpaceO_1, benchIOSink value "deintercalate" $ deintercalate value)
727-
, (SpaceO_1, benchIOSink value "deintercalate1" $ deintercalate1 value)
728-
, (SpaceO_1, benchIOSink value "deintercalateAll" $ deintercalateAll value)
729-
-- Applicative and Monad
713+
[
714+
-- Alternative
715+
(SpaceO_1, benchIOSink value "alt2parseMany" $ altSmall value)
716+
, (SpaceO_1, benchIOSink value "alt2" $ alt2 value)
717+
, (SpaceO_1, benchIOSink value "alt4" $ alt4 value)
718+
, (SpaceO_1, benchIOSink value "alt8" $ alt8 value)
719+
, (SpaceO_1, benchIOSink value "alt16" $ alt16 value)
720+
721+
-- These accumulate the results in a list.
722+
, (HeapO_n, benchIOSink value "manyAlt" manyAlt)
723+
, (HeapO_n, benchIOSink value "someAlt" someAlt)
724+
, (SpaceO_n, benchIOSink value "choice (asum)/100" $ choiceAsum (value `div` 100))
725+
-- , benchIOSink value "choice/100" $ choice (value `div` 100)
726+
727+
-- Applicative
730728
, (SpaceO_1, benchIOSink value "splitAp2" $ splitAp2 value)
731729
, (SpaceO_1, benchIOSink value "splitAp4" $ splitAp4 value)
732730
, (SpaceO_1, benchIOSink value "splitAp8" $ splitAp8 value)
733731
, (SpaceO_1, benchIOSink value "splitApBefore" $ splitApBefore value)
734732
, (SpaceO_1, benchIOSink value "splitApAfter" $ splitApAfter value)
735733
, (SpaceO_1, benchIOSink value "splitWith2" $ splitWith2 value)
736-
, (SpaceO_1, benchIOSink value "span" $ span value)
737-
, (SpaceO_1, benchIOSink value "spanBy" $ spanBy value)
738-
, (SpaceO_1, benchIOSink value "spanByRolling" $ spanByRolling value)
734+
-- non-linear time complexity (parserD)
735+
, (HeapO_n, benchIOSink value "split_" $ split_ value)
736+
737+
-- Monad
739738
, (SpaceO_1, benchIOSink value "monad2" $ monad value)
740739
, (SpaceO_1, benchIOSink value "monad4" $ monad4 value)
741740
, (SpaceO_1, benchIOSink value "monad8" $ monad8 value)
742-
-- Alternative
743-
, (SpaceO_1, benchIOSink value "alt2parseMany" $ altSmall value)
744-
, (SpaceO_1, benchIOSink value "alt2" $ alt2 value)
745-
, (SpaceO_1, benchIOSink value "alt4" $ alt4 value)
746-
, (SpaceO_1, benchIOSink value "alt8" $ alt8 value)
747-
, (SpaceO_1, benchIOSink value "alt16" $ alt16 value)
741+
-- XXX Takes lot of space when run on a long stream, why?
742+
, (HeapO_n, benchIOSink value "monad16" $ monad16 value)
743+
744+
-- lookahead sequence length
745+
-- lookahead benchmark holds the entire input till end
746+
, (HeapO_n, benchIOSink value "lookAhead" $ lookAhead value)
747+
748+
-- take sequence by length
749+
, (SpaceO_1, benchIOSink value "takeBetween" $ takeBetween value)
750+
, (HeapO_n, benchIOSink value "takeEQ" $ takeEQ value)
751+
, (HeapO_n, benchIOSink value "takeGE" $ takeGE value)
752+
, (SpaceO_1, benchIOSink value "takeP" $ takeP value)
753+
754+
-- Match exact sequence
755+
-- O_n because of the list accumulation
756+
, (HeapO_n, benchIOSink value "listEqBy" (listEqBy value))
757+
, (SpaceO_1, benchIOSink value "streamEqBy" (streamEqBy value))
758+
759+
-- sequence matching a predicate
760+
, (SpaceO_1, benchIOSink value "takeWhile" $ takeWhile value)
761+
, (SpaceO_1, benchIOSink value "takeWhileP" $ takeWhileP value)
762+
, (SpaceO_1, benchIOSink value "dropWhile" $ dropWhile value)
763+
764+
-- sequence begin/end by known elements
765+
, (SpaceO_1, benchIOSink value "takeEndBy_" $ takeEndBy_ value)
766+
, (SpaceO_1, benchIOSink value "takeBeginBy" $ takeBeginBy value)
767+
, (SpaceO_1, benchIOSink value "wordBy" $ wordBy value)
768+
769+
-- Group sequence by
770+
, (SpaceO_1, benchIOSink value "groupBy" $ groupBy)
771+
, (SpaceO_1, benchIOSink value "groupByRolling" $ groupByRolling)
772+
773+
-- Framing
774+
-- o-n-heap because of backtracking
775+
, (HeapO_n, benchIOSrc sourceEscapedFrames value "takeFramedByEsc_"
776+
$ takeFramedByEsc_ value)
777+
778+
-- Spanning
779+
, (SpaceO_1, benchIOSink value "span" $ span value)
780+
, (SpaceO_1, benchIOSink value "spanBy" $ spanBy value)
781+
, (SpaceO_1, benchIOSink value "spanByRolling" $ spanByRolling value)
782+
783+
{-
784+
, benchIOSink value "tee" $ teeAllAny value
785+
, benchIOSink value "teeFst" $ teeFstAllAny value
786+
, benchIOSink value "shortest" $ shortestAllAny value
787+
, benchIOSink value "longest" $ longestAllAny value
788+
-}
789+
790+
-- Sequential Collection
791+
-- Accumulate the results in a list.
792+
, (SpaceO_n, benchIOSink value "sequenceA/100" $ sequenceA (value `div` 100))
793+
, (SpaceO_n, benchIOSink value "sequenceA_/100" $ sequenceA_ (value `div` 100))
794+
, (SpaceO_n, benchIOSink value "sequence/100" $ sequence (value `div` 100))
795+
, (SpaceO_n, benchIOSink value "sequence_/100" $ sequence_ (value `div` 100))
796+
, (SpaceO_1, benchIOSink value "concatSequence" concatSequence)
797+
798+
-- Sequential Repetition
748799
, (SpaceO_1, benchIOSink value "many" many)
749800
, (SpaceO_1, benchIOSink value "many (wordBy even)" $ manyWordByEven)
750801
, (SpaceO_1, benchIOSink value "some" some)
802+
803+
-- Interleaved Repetition
804+
, (SpaceO_1, benchIOSink value "deintercalate" $ deintercalate value)
805+
, (SpaceO_1, benchIOSink value "deintercalate1" $ deintercalate1 value)
806+
, (SpaceO_1, benchIOSink value "deintercalateAll" $ deintercalateAll value)
807+
808+
-- Accumulates the results in a list.
809+
, (HeapO_n, benchIOSink value "sepBy1" sepBy1)
810+
, (SpaceO_1, benchIOSink value "sepBy1 (words)" sepByWords1)
811+
, (SpaceO_1, benchIOSink value "sepBy (words)" sepByWords)
812+
, (SpaceO_1, benchIOSink value "sepByAll (words)" sepByAllWords)
751813
, (SpaceO_1, benchIOSink value "manyTill" $ manyTill value)
814+
815+
-- parseMany
752816
, (SpaceO_1, benchIOSink value "parseMany" $ parseMany value)
753817
, (SpaceO_1, benchIOSink value "parseMany (take 1)" (parseMany 1))
754818
, (SpaceO_1, benchIOSink value "parseMany (take all)" (parseMany value))
@@ -764,52 +828,24 @@ benchmarks value env arrays =
764828
$ nfIO $ parseManyGroupsRollingEitherRight)
765829
, (SpaceO_1, bench "parseMany groupRollingByEither (Alternating)"
766830
$ nfIO $ parseManyGroupsRollingEitherAlt1)
767-
, (SpaceO_1, benchIOSink value "parseIterate (take 1)" (parseIterate 1))
768-
, (SpaceO_1, benchIOSink value "parseIterate (take all)" (parseIterate value))
769-
, (SpaceO_1, benchIOSink value "concatSequence" concatSequence)
770-
{-
771-
, benchIOSink value "tee" $ teeAllAny value
772-
, benchIOSink value "teeFst" $ teeFstAllAny value
773-
, benchIOSink value "shortest" $ shortestAllAny value
774-
, benchIOSink value "longest" $ longestAllAny value
775-
-}
776-
, (SpaceO_1, benchIOSink value "streamEqBy" (streamEqBy value))
831+
832+
-- parseMany with file IO
777833
, (SpaceO_1, mkBench ("parseMany (Fold.take " ++ show (bigSize env) ++ " Fold.sum)") env
778834
$ \inh _ -> noinline parseManyChunksOfSum (bigSize env) inh)
779835
, (SpaceO_1, mkBench "parseMany (Fold.take 1 Fold.sum)" env
780836
$ \inh _ -> inline parseManyChunksOfSum 1 inh)
837+
838+
-- parseMany Unfolds
781839
, (SpaceO_1, bench "parseMany/Unfold/1000 arrays/take all"
782840
$ nfIO $ parseManyUnfoldArrays value arrays)
783841
, (SpaceO_1, bench "parseMany/Unfold/1000 arrays/take 1"
784842
$ nfIO $ parseManyUnfoldArrays 1 arrays)
785-
, (HeapO_n, benchIOSink value "takeEQ" $ takeEQ value)
786-
, (HeapO_n, benchIOSink value "takeGE" $ takeGE value)
787-
788-
-- lookahead benchmark holds the entire input till end
789-
, (HeapO_n, benchIOSink value "lookAhead" $ lookAhead value)
790-
791-
-- o-n-heap because of backtracking
792-
, (HeapO_n, benchIOSrc sourceEscapedFrames value "takeFramedByEsc_"
793-
$ takeFramedByEsc_ value)
794-
795-
-- non-linear time complexity (parserD)
796-
, (HeapO_n, benchIOSink value "split_" $ split_ value)
797-
-- XXX Takes lot of space when run on a long stream, why?
798-
, (HeapO_n, benchIOSink value "monad16" $ monad16 value)
799843

800-
-- These show non-linear time complexity.
801-
-- They accumulate the results in a list.
802-
, (HeapO_n, benchIOSink value "sepBy1" sepBy1)
803-
, (HeapO_n, benchIOSink value "manyAlt" manyAlt)
804-
, (HeapO_n, benchIOSink value "someAlt" someAlt)
805-
, (HeapO_n, benchIOSink value "listEqBy" (listEqBy value))
806-
, (SpaceO_n, benchIOSink value "sequenceA/100" $ sequenceA (value `div` 100))
807-
, (SpaceO_n, benchIOSink value "sequenceA_/100" $ sequenceA_ (value `div` 100))
808-
, (SpaceO_n, benchIOSink value "sequence/100" $ sequence (value `div` 100))
809-
, (SpaceO_n, benchIOSink value "sequence_/100" $ sequence_ (value `div` 100))
810-
, (SpaceO_n, benchIOSink value "choice (asum)/100" $ choiceAsum (value `div` 100))
811-
-- , benchIOSink value "choice/100" $ choice (value `div` 100)
844+
-- parseIterate
845+
, (SpaceO_1, benchIOSink value "parseIterate (take 1)" (parseIterate 1))
846+
, (SpaceO_1, benchIOSink value "parseIterate (take all)" (parseIterate value))
812847
]
848+
813849
where
814850

815851
{-# NOINLINE parseManyGroupsRollingEitherLeft #-}

0 commit comments

Comments
 (0)