Commit Graph

698 Commits

Author SHA1 Message Date
Ranjeet Kumar Ranjan
8fd51b2a37 Seperate chart build from benchmarks
Add extra-source-files to streamly.cabal

Fix review comments

Rename Chart.hs to BenchReport.hs

Fix extra-source-files

Remove no-charts flag
2021-06-17 17:08:05 +05:30
Harendra Kumar
eb16544f98 Use lowercased comparison for benchmark fields
For case insensitive comparison we were lowercasing the fields in the
benchmark csv header but not the fields being compared. So the fields
were not matching if we passed them in mixed case.
2021-06-15 01:43:50 +05:30
Harendra Kumar
3cd8e9bddf Print info messages on stderr instead of stdout
Otherwise it mixes with the output of benchmark list which we use in
scripts.
2021-06-08 23:54:04 +05:30
Harendra Kumar
c4358b3957 Fix Array.Pin.Pinned benchmark module name 2021-06-08 23:54:04 +05:30
Harendra Kumar
5537b0bfc2 Add --sort-by-name flag
To sort the benchmarks by name instead of sorting them by field value or
percent diff.
2021-06-08 23:54:04 +05:30
Harendra Kumar
03218ad71b Cleanup, fix issues in bench.sh 2021-06-08 23:54:04 +05:30
Ranjeet Kumar Ranjan
b68baf3c51 Add support for benchmarking with tasty-bench
tasty-bench has fewer dependencies and is agile to keep up with new GHC
versions. This change is especially motivated by support for GHC 9.0.1.
gauge depends on foundation/basement which lagging much behind and seem
to be unmaintained.
2021-06-08 23:54:04 +05:30
Harendra Kumar
d51fab489f Fix benchmark name prefixes to module names
Otherwise the new bench.sh changes for tasy-bench won't work for these
modules.
2021-06-08 23:54:04 +05:30
Harendra Kumar
28e17ee82e Fix a perf issue in iterate/iterateM
It was taking O(n) space, now it takes O(1)
2021-06-02 22:18:00 +05:30
Pranay Sashank
90be38762b Rename Fold.yield, yieldM to fromPure, fromEffect. 2021-05-30 22:24:54 +05:30
Pranay Sashank
f24ddc0bdf Rename Unfold.yield, yieldM to fromPure, fromEffect. 2021-05-30 22:24:54 +05:30
Pranay Sashank
70faf014ca Rename Streamly.Prelude.yieldM to fromEffect.
- Deprecate yieldM.
2021-05-29 02:05:01 +05:30
Pranay Sashank
4dfc6bf9ee Rename Streamly.Prelude.yield to fromPure.
- Deprecate yield.
2021-05-29 01:22:02 +05:30
Harendra Kumar
03cf686ca7 Export some pre-release array APIs
* getIndex
* casting ops
* writeLastN
* readRev
2021-04-27 13:37:56 +05:30
Harendra Kumar
6132eb3acb Split stdio ops into a Console.Stdio module
Change the FileSystem.Handle from* APIs to put*

Mutable write APIs would use a "put" prefix to make the name more intuitive.
2021-04-25 15:53:38 +05:30
Harendra Kumar
dc647f4a4e Change the argument order of intercalate and interpose 2021-04-24 16:17:39 +05:30
Harendra Kumar
a75c178599 Expose rollinghash and intercalate 2021-04-24 16:16:12 +05:30
Harendra Kumar
f64dd78449 Fix benchmark names, cleanup imports, fix hlint
Refactor only.
2021-04-24 13:36:28 +05:30
Adithya Kumar
cd916f54bb Move array stream bench/tests to separate modules 2021-04-19 19:38:14 +05:30
Ranjeet Kumar Ranjan
ac215ad43f Rename serially etc. to fromSerial etc. #1029 2021-04-16 00:20:54 +05:30
Harendra Kumar
0bfa00bb66 Fix heap overflow due to limit-build-mem issue 2021-04-15 02:02:57 +05:30
Ranjeet Kumar Ranjan
138d519601 concatPairsWith benchmarks #984 2021-04-07 14:06:34 +05:30
Adithya Kumar
1ddcfc4634 Fix zipWith(M) to work concurrently according to the stream type
https://github.com/composewell/streamly/issues/158
2021-04-06 02:34:54 +05:30
Adithya Kumar
f1f8d7ac5e Renamed function/bench names appropriatly in bench:StreamK
Also add a the benchmarks that need to be added
2021-03-31 17:42:09 +05:30
Adithya Kumar
029e6873e7 Fix filterScan. Revert to using maxBound over streamLen.
Quoting, harendra-kumar,

> Since we are adding the numbers in the stream, <= streamLen would terminate
> the stream much earlier. We should use maxBound instead. That's because we
> compose this with filter again in the mixed benchmarks
2021-03-30 17:02:18 +05:30
Adithya Kumar
876b904ecb Modify benchmarks to keep name comparisions backwards compatible 2021-03-30 17:02:18 +05:30
Adithya Kumar
98bc69e3d0 Rename value-ish to streamLen-ish in bench:StreamK
maxValue -> value
value -> streamLen
value2 -> streamLen2
value3 -> streamLen3
value16 -> streamLen16
2021-03-30 17:02:18 +05:30
Adithya Kumar
1079b49aab Collapse sourceUnfoldr(M)N into sourceUnfoldr(M) in bench:StreamK
As of this commit they are completely identical.
2021-03-30 17:02:18 +05:30
Adithya Kumar
ada707b778 Move passing benchmark properties to the root in bench:StreamK 2021-03-30 17:02:18 +05:30
Adithya Kumar
ad4bcce47f Remove unecessary code in bench:StreamK 2021-03-30 17:02:18 +05:30
Adithya Kumar
f1c19a6e85 Split O(1) space benchmarks into multiple groups in bench:StreamK 2021-03-30 17:02:18 +05:30
Adithya Kumar
23253c0270 Move global limits into function arguments in bench:StreamK 2021-03-30 17:02:18 +05:30
Adithya Kumar
c7cd7c877a Keep the INLINE statement & signature with function 4 bench:StreamK 2021-03-30 17:02:18 +05:30
Harendra Kumar
ae741f1bd8 Change the order of arguments in Unfold.fold
To keep it consistent with Stream.fold.
2021-03-26 20:27:56 +05:30
Adithya Kumar
27ccdf4d94 Move compilation memory restrictions under a flag 2021-03-26 16:40:43 +05:30
Harendra Kumar
0954511144 Refactor/rename/add basic unfold constructors 2021-03-24 21:19:18 +05:30
Harendra Kumar
8af1c368c6 Change signatures of zipWith/zipWithM 2021-03-24 20:38:56 +05:30
Harendra Kumar
a5e483b610 Refactor Unfold module
* Rearrange exports, export additional functions
* Update docs
* Disable applicative/monad/category/arrow instances
* Rename const to yieldM and add yield
* Remove "effect", it can be expressed by yieldM
* Change order of arguments for some functions
2021-03-24 01:40:30 +05:30
Ranjeet Kumar Ranjan
b73b5ffa3a Rename concatUnfold to unfoldMany #986 2021-03-22 19:05:17 +05:30
Ranjeet Kumar Ranjan
7759cc0082 Rename Unfold.concat to Unfold.many #985 2021-03-20 00:40:13 +05:30
Harendra Kumar
3b1a26cee5 Update Fold module docs and expose some APIs 2021-03-16 01:46:51 +05:30
Harendra Kumar
badc62d2b7 Rename stream transformation some APIs
Primary motivation for renaming takeEnd was to avoid confusion with
takeEndBy but I like the new name takeLast irrespective of that.
2021-03-14 01:02:10 +05:30
Adithya Kumar
92771949ad Fix import error 2021-03-12 01:30:23 +05:30
Adithya Kumar
a1472167de Make behaviour of Fold.many similar to that of foldMany/parseMany 2021-03-12 01:01:51 +05:30
Harendra Kumar
cd0a185607 Add NOINLINE for better optimization of loops 2021-03-12 01:01:51 +05:30
Ranjeet Kumar Ranjan
87ebad51cb Rename Types.hs modules to Type.hs 2021-03-11 15:12:08 +05:30
Harendra Kumar
e9a0e7c118 Move rmapM to Fold/Types.hs 2021-03-10 19:29:12 +05:30
Ranjeet Kumar Ranjan
4da398aa00 Change argument order in parser combinators #969
Keep the collecting fold as the last argument for ease of composition.
Data flows from one fold to the next, so the next fold in the chain
should be the last argument.
2021-03-09 23:10:43 +05:30
Adithya Kumar
7da0593dbb Add benchmarks for foldIterateM 2021-03-09 07:56:12 +05:30
Harendra Kumar
7910e05da7 Change the argument order in "many" 2021-03-08 19:53:20 +05:30
Harendra Kumar
d2e3430348 Rename some fold combinators
This commit has no functional change, only renaming and doc edits.
2021-03-07 23:04:41 +05:30
Harendra Kumar
fca88a49e8 Change the input stream type of classifySessionsBy
For more convenient operation.
2021-03-05 14:10:17 +05:30
Harendra Kumar
f7681dc897 Reorder the arguments in classifySessionsBy
For more convenient and intuitive use.
2021-03-05 13:04:35 +05:30
Ranjeet Kumar Ranjan
df38c4a8a4 Change splitWith to serialWith in folds and parsers 2021-03-05 11:46:59 +05:30
Ranjeet Kumar Ranjan
0414fe8ec6 Rename takeLE to take 2021-03-05 11:43:48 +05:30
Adithya Kumar
171907e2b3 Remove Applicative instance of Fold 2021-03-05 09:22:50 +05:30
Harendra Kumar
ca29fd279e Make it build for GHC-9.0 2021-03-04 18:25:45 +05:30
Harendra Kumar
2c21267a6d Fix fromStreamD performance
Before: not finishing in reasonable time
After: 686 us (similar to fromStream)
2021-02-22 14:07:35 +05:30
Harendra Kumar
c8b9fac92b Move parse functions to Source module
Plus:

* Fix returning buffer in the "parse" function
* Some more minor formatting/doc fixups.
2021-02-21 01:58:20 +05:30
Harendra Kumar
2a7e3ccdbc Rename the resumable Unfold type to Producer 2021-02-21 01:58:20 +05:30
Harendra Kumar
7c95ccaaad Use an explicit state to represent nested loops 2021-02-21 01:58:20 +05:30
Harendra Kumar
c93bad0134 Simplify the type of resumable Unfold 2021-02-21 01:58:20 +05:30
Harendra Kumar
22c83f40fd Add resumable unfolds for efficient nested parsing
Instead of using a closed loop we can stop an unfold and then resume it
later. This allows us to break the loop and restart it at some other
point. For example, we can parse a block from an input stream from a
file handle or a socket and then return the socket/handle plus nay
buffered data (due to backtracking) so that we can resume reading from
it later on after doing some processing.
2021-02-21 01:58:20 +05:30
Harendra Kumar
e6865109d1 Move the concat benchmark to Unfold module
Remove the NestedUnfoldOps module.
2021-02-20 10:41:58 +05:30
Harendra Kumar
77d11d37bb Add Monad instance for Unfold 2021-02-20 08:54:28 +05:30
Harendra Kumar
4f9fc7d2c9 Fix duplicate benchmark names
Move the fold benchmarks in stream module to the fold module.
2021-02-20 08:54:28 +05:30
Harendra Kumar
3947fee691 Add Applicative instance for Unfold 2021-02-20 08:51:30 +05:30
Harendra Kumar
2c70b45660 Implement concatPairswith/sortBy 2021-02-17 17:19:34 +05:30
Adithya Kumar
195606428c Add some nested benchmarks with parseMany 2021-02-14 22:46:43 +05:30
Adithya Kumar
b04187b602 Move parseMany benchamrks from FileSystem.Handle to Data.Parser 2021-02-14 14:37:37 +05:30
Pranay Sashank
9ebca6ec0a Add sequence_ benchmark for ParserD. 2021-02-11 15:01:41 +05:30
Pranay Sashank
c1c77d030e Add benchmark for Data.Fold.concatMap. 2021-02-11 15:01:02 +05:30
Ranjeet Kumar Ranjan
6976363939 Fix Some minor refactorings of toList/toStream folds #863
Fix refactoring issues in benchmark

Remove redundant import

Address review comments

Revert haddock reference
2021-02-11 00:40:24 +05:30
Harendra Kumar
11831bed44 Rename foldMany and foldMany1
foldMany1 is the default foldMany now. foldMany is renamed to
foldManyPost which is of limited use to split in an infix manner.
2021-02-11 00:37:12 +05:30
Adithya Kumar
27d3575855 Re-implement span, spanBy, and spanByRolling as parsers 2021-02-10 02:11:26 +05:30
Adithya Kumar
c5b6a8bfed Remove span, break, spanBy, and spanByRolling 2021-02-10 02:11:26 +05:30
Adithya Kumar
bf396f0db0 Add fold benchmarks for span, spanBy, and spanByRolling 2021-02-10 02:11:26 +05:30
Adithya Kumar
662aced6cc Add some derived parser benchmarks 2021-02-10 02:11:26 +05:30
Anurag Hooda
e4e1d25647 make sliceBeginWith fail when first element fails predicate 2021-02-07 20:05:01 +05:30
Anurag Hooda
fb9f05e4fb Add sliceBeginWith, tests and benchmarks 2021-02-07 20:05:01 +05:30
Harendra Kumar
b6a07525eb Use foldMany1 in chunksOf instead of foldMany 2021-02-06 22:29:22 +05:30
Harendra Kumar
a41a7b572f Use bigger stream sizes in some benchmarks 2021-02-06 00:12:42 +05:30
Harendra Kumar
de31277c19 Add foldMany1 and arraysOf benchmarks 2021-02-05 16:39:13 +05:30
Pranay Sashank
ed030cc134 Rename some modules.
- Streamly.Internal.Memory.ArrayStream =>
  Streamly.Internal.Data.Array.Stream.Foreign
- Streamly.Memory.Ring =>
  Streamly.Internal.Ring.Foreign
- Streamly.FileSystem.IOVec =>
  Streamly.Internal.FileSystem.IOVec
- Streamly.FileSystem.FDIO =>
  Streamly.Internal.FileSystem.FDIO
- Streamly.FileSystem.FD =>
  Streamly.Internal.FileSystem.FD

Closes #873.
2021-02-01 21:39:22 +05:30
Pranay Sashank
5c018c7e45 Rename Data.Array.Storable.Foreign to Data.Array.Foreign.
Closes #854.
2021-02-01 21:31:06 +05:30
Harendra Kumar
2c6f06c5b6 Increase memory limit for Prelude.Serial benchmark
Compiling Split.hs runs out of memory.
2021-01-28 01:19:53 +05:30
Harendra Kumar
f448fb5643 Refactor array modules (factor out array stream)
There is no functional change in this commit, only refactoring.

* Update module documentation for arrays
* Rearrange and re-group related functions together
* Ability to use fold/unfold/foldMany/chunksOf in low level array
  modules so that we are able to express some of the functions more
  idiomatically. We have not done that in this change but with this
  change we should be able to do it later.
* Separate out the array stream code from lower level modules to the
  higher level array stream module.
2021-01-28 01:19:44 +05:30
Harendra Kumar
6a33a88980 Increase time-limit from 0 to 0.01
In the "reverse'" benchmark the GC stats were showing as 0 because no
GC occurred in 1 iteration.
2021-01-27 19:08:13 +05:30
Adithya Kumar
1e099defbb Add benchmarks for Parser(D).groupByRolling 2021-01-26 20:56:25 +05:30
Adithya Kumar
9bcf1d6c8b Rename splitWith benchmark
split (all, any) -> splitWith
2021-01-24 19:02:53 +05:30
Harendra Kumar
7ce1771a28 Fix module dependencies due to Stream.Prelude 2021-01-18 12:48:35 +05:30
Adithya Kumar
9473e6bbbe Deprecate mapM and sequence in favor of rmapM and rsequence 2021-01-16 17:48:06 +05:30
Adithya Kumar
0753435d46 Rename Fold.lchunksOf to Fold.chunksOf 2021-01-16 07:12:16 +05:30
Adithya Kumar
32e519cb8c Rename Fold.lmap to Fold.map 2021-01-16 07:12:16 +05:30
Adithya Kumar
084cdea601 Rename Fold.ltake to Fold.takeLE 2021-01-16 07:12:16 +05:30
Anurag Hooda
86745a756d Rename slicesepby to slicesepbyP, some formatting changes 2021-01-14 19:17:31 +05:30
Anurag Hooda
5ccf51dcae Implement slicesepby, add tests and benchmarks 2021-01-14 19:17:31 +05:30
Anurag Hooda
656bfc6bc8 Add tests and benchmarks for takeBetween 2021-01-04 18:30:29 +05:30
Harendra Kumar
58cb9caffa Move the bench.sh script to "bin" dir 2020-12-28 23:56:18 +05:30
Harendra Kumar
299bdffdd6 Add a script to run tests
This allows us to build and run individual tests or groups of tests. The
script is supposed to be extended to run hpc/coverage manually after
running the tests.

Note: cabal fails to run coverage if the test module is separated from
the library.
2020-12-28 23:56:18 +05:30
Adithya Kumar
4d3f9b41ed Implement Data.Parser.ParserD.wordBy
- Modify Data.Parser.wordBy accordingly
- Add tests for both
- Add benchmarks for both
2020-12-23 00:15:32 +05:30
Adithya Kumar
b6ce6a3624 Implement Data.Parser.ParserD.groupBy
- Modify Data.Parser.groupBy accordingly
- Add tests for both
- Add benchmarks for both
2020-12-17 04:21:18 +05:30
Harendra Kumar
b677d0ddc9 Separate streamly tests into another package
To be able to use an internal test library, we need to have it as a
separate package. See comments in streamly-benchmarks.cabal for details.

Use a test library for common test modules
Also, added "opt" flag to control optimization levels.

Add a README for tests.
Update benchmarks readme.
2020-12-15 17:48:34 +05:30
Harendra Kumar
d5af0bfb5d Remove redundant parsers, update docs
Remove the parsers that are covered by terminating folds.
2020-12-11 18:37:59 +00:00
Harendra Kumar
82efd3a5bc Refactor StreamD/IsStream for terminating folds
* IsStream:
  * Add foldMany
  * Update haddock docs, with fold equivalents. Now with terminating folds the
    fold behvaior is equivalent to these folds.
  * Add skeletons for foldSequence/foldIterate/parseSequence
  * Implement combinators directly in terms of foldMany/foldMany1

StreamD:
  * export foldMany/foldMany1
  * Remove groupsOf/splitBy/splitSuffixBy/splitSuffixWith, we can use
    foldMany/foldMany1 directly instead.
  * Make some stylistic changes to code

StreamD/Types:
  * Remove groupsOf
  * Remove GroupConsume state from foldMany/foldMany1

* Add benchmarks for foldMany
2020-12-11 18:27:24 +00:00
Harendra Kumar
2888bf5ce3 Review/update docs, combinators in Fold module
Data.Fold.Types:
* Remove takeSepBy:  This function does not do what the name. Also,
`takeSepBy p` is the same as (sliceSepBy (not . p)). We can just remove
this in favor of sliceSepBy.

Data.Fold:

* Reorganize exports
* Add some skeleton/unimplemented combinators.
* Add/update haddock documentation
* Add sliceSepByMax fold - It was in parsers but it can be implemented
  as a fold.
* Rename drainSepBy to drainWhile
* Rename sliceSepWith to sliceEndWith
* Remove distribute_ as it can be implemented using distribute and has
  not perf advantage.
* Remove demuxWithDefault_ and implement demuxDefaultWith instead, which
  does not discard the results. Discarding results has no perf
  advantage.
* Implement demuxWith in terms of demuxDefaultWith, it has no perf
  advantage over the latter.
* Remove demuxWith_, use demuxWith instead.
* Remove demuxDefault_, use demuxDefault instead.
* Some code/comment cleanups

Benchmarks:

* Changes corresponding to the source changes
* Some code cleanups
* Reorder benchmarks
2020-12-11 17:23:53 +05:30
Anurag Hooda
56fce33221 Refactor streamly-benchmarks.cabal, change some function names 2020-12-11 13:09:07 +05:30
Anurag Hooda
1ff4d3c634 Move Streamly.Benchmark.CommonH to lib and change benchmark names, refactor 2020-12-11 13:09:07 +05:30
Anurag Hooda
425df88c9d Fix imports, comments and change RTS flags in streamly-benchmarks.cabal 2020-12-11 13:09:07 +05:30
Anurag Hooda
91a89db002 Change memory limit of Prelude.Adapative module 2020-12-11 13:09:07 +05:30
Anurag Hooda
87421d6d10 Fix warnings due to unused imports and shadowing 2020-12-11 13:09:07 +05:30
Anurag Hooda
f7f8b0a637 Move group/ungroup benchmarks from FileSystem.Handle to Unicode.Stream, Add Unicode.Stream to bench.sh, Add Unicode and CommonH files to streamly.cabal 2020-12-11 13:09:07 +05:30
Anurag Hooda
7f1b5d20bb Move splitting benchmarks from FileSystem.Handle to Prelude.Serial 2020-12-11 13:09:07 +05:30
Anurag Hooda
0759821db8 Move Exception benchmarks from FileSystem.Handle to other modules 2020-12-11 13:09:07 +05:30
Anurag Hooda
8806a30ca6 Refactor Array Benchmarks and Remove unused imports 2020-12-09 09:15:45 +05:30
Anurag Hooda
e3893e26b7 Remove serially from Fold Benchmarks 2020-12-09 09:15:45 +05:30
Anurag Hooda
911a6b62d8 Move benchmarks from Fold to Array and Serial 2020-12-09 09:15:45 +05:30
Harendra Kumar
cb0db668f1 Add benchmark for takeEQ parser 2020-12-06 20:06:28 +00:00
Harendra Kumar
a187768fac
Merge pull request #795 from composewell/terminatin-folds-2
Enhance the fold type to capture terminating folds
2020-12-06 10:52:15 +05:30
Harendra Kumar
8625ea5c3c Enable inspection tests for interposeSuffix bench 2020-12-02 11:53:04 +05:30
Harendra Kumar
8358095df1 Use NOINLINE on some benchmarks
These benchmarks degraded because of the terminating folds change
because INLINing was causing loop fusion to break.
2020-12-02 02:21:29 +05:30
adithyaov
0bf8b542ac Add multiple benchmarks to Fold 2020-12-02 02:21:29 +05:30
Harendra Kumar
170cc10baf Modify the memory RTS options for Prelude.Parallel 2020-12-02 02:21:29 +05:30
Harendra Kumar
c216af0b09 Break Benchmark.Prelude.Serial into smaller modules
This module took a lot of time and 4GB RAM to compile. Its now broken
into smaller module that can be compiled in less than 512 MB RAM.

The memory limits are set based on a 3-pass fusion-plugin.
2020-11-30 06:51:00 +00:00
adithyaov
cfa7fe08ed Fix and run grouping benchmarks in Prelude.Serial 2020-11-29 09:14:56 +05:30
Harendra Kumar
cd3ce3e503 Fix formatting and docs
* Use let clauses to break bigger expressions
* Use `even` as predicate
2020-11-26 17:11:47 +05:30
Ranjeet Ranjan
60d13da0d6 add mapMaybe combinator in Fold
Add benchmarking and test case for mapMaybe combinator of Data.Fold

Fix review comments
2020-11-26 17:11:47 +05:30
adithyaov
d09f1ad9b9 Add benchmarks for mkAsync 2020-11-25 22:56:47 +05:30
adithyaov
75b4329cfe Add benchmarks for (|&) & (|&.) 2020-11-25 22:56:47 +05:30
adithyaov
7fd5ab1bee Add benchmarks for scan and postscan 2020-11-25 22:56:47 +05:30
adithyaov
3a3f8e7400 Add benchmarks for wAsync and parallel 2020-11-25 22:56:47 +05:30
adithyaov
06b230f27a Add benchmarks for S.concatFoldableWith and S.concatForFoldableWith 2020-11-25 22:56:47 +05:30
adithyaov
c7b7c2a423 Add benchmarks for a few functions in FileSystem.Handle
Benchmarks added:
- write . read
  - write
  - read
- writeWithBufferOf . readWithBufferOf
  - readWithBufferOf
  - writeWithBufferOf
- fromBytes . readWithBufferOf
  - readWithBufferOf
- write . readChunks (Commented)
  - readChunks
- write . writeChunks (Commented)
  - writeChunks
2020-11-25 22:56:47 +05:30
adithyaov
7bb8512da5 Add benchmarks for FH.encodeLatin1
Rename copyStreamLatin1 to copyStreamLatin1'

copyStreamLatin1' benchmarks FH.encodeLatin1'
copyStreamLatin1 benchmarks FH.encodeLatin1
2020-11-25 22:56:47 +05:30
adithyaov
c5b4838d10 Add benchmarks for minRate, maxRate & constRate (bench:Prelude.Rate) 2020-11-25 22:56:47 +05:30
adithyaov
af872ae7ad Make structural changes to bench:Prelude.Rate 2020-11-25 22:56:47 +05:30
adithyaov
1a728e2d16 Clean bench:Prelude.Rate
Abstract over avgRate and change label values in bench groups
2020-11-25 22:56:47 +05:30
adithyaov
8477487b33 Add multiple micro-benchmarks
* bench:FileSystem.Handle
- splitWithSuffix

* bench:Prelude.Serial
- findM
- scanl1M'
- concatMapM
2020-11-25 22:56:47 +05:30
adithyaov
053a38c6a1 Fix naming in benchmarks
* bench:Prelude.Serial
- foldrMToStream -> foldrToStream
- scan -> scanl'

* bench:Prelude.ZipSerial
- zip -> zipWith
- zipM -> zipWithM

* bench:Prelude.ZipAsync
- zipAsync -> zipAsyncWith
- zipAsyncM -> zipAsyncWithM
2020-11-25 22:56:47 +05:30
adithyaov
73df67ee93 Fix bug in ArrayOps.hs
Remove DATA_PRIM_ARRAY
Add DATA_ARRAY_PRIM & DATA_ARRAY_PRIM_PINNED

Reduce the use of #else in CPP
2020-11-12 09:57:32 +05:30
adithyaov
aced27067f Change the first argument of concatMapM in unfolds from () to Void
Change,
concatMapM :: (b -> m (Unfold m () c)) -> Unfold m a b -> Unfold m a c
to,
concatMapM :: (b -> m (Unfold m Void c)) -> Unfold m a b -> Unfold m a c
2020-11-12 09:57:32 +05:30
Harendra Kumar
30e85477f6 Add a long pattern benchmark (100k chars) 2020-11-08 16:02:05 +05:30
Harendra Kumar
3682981c0f Add bench prefix example, additional config section 2020-11-04 03:09:49 +05:30
adithyaov
ebbaef79f6 Move benchmark tmp files into benchmark-tmp directory 2020-10-31 12:14:25 +05:30
adithyaov
f57243cc32 Avoid using dd, pipe data directly & truncate it using head
dd is confusing to work with and has it's own idiosyncracies.
2020-10-31 12:14:25 +05:30
adithyaov
3a64e63723 Fix enumerateFrom benchmark in bench:Prelude.Serial 2020-10-30 21:53:33 +05:30
Harendra Kumar
6c3f1edfc1 Specify benchmark input file via env var
Specifying the input file via an environment variable was broken.
2020-10-28 06:48:40 +05:30
Harendra Kumar
a94ec3688e Use NoSpecConstr annotation on the list type
This is to avoid too many recursive specializations (because we use
-fspec-constr-recursive=16) on the list argument in parselMx', leading
to huge code bloat in the core and requiring a lot of memory to compile.
2020-10-26 23:28:37 +05:30
Harendra Kumar
2bc92ba0dc Use -Rghc-timing to print ghc timing info 2020-10-26 23:28:37 +05:30
pranaysashank
2a1097fcdf Fix copyright and author information.
Closes #688
2020-10-26 16:47:35 +05:30
Harendra Kumar
c436e3c624 Fix "Invalid byte" on file read
We were reading input from a binary file trying to decode it as Char
leading to an invalid byte sequence error.
2020-10-24 15:54:39 +05:30
adithyaov
b1a9af0d7d Use from-to style instead of take-from in many unfold benchmarks 2020-10-24 15:50:28 +05:30
adithyaov
8e4f68d5ff Uncomment fromStreamD and run it on n/100 in unfold benchmarks 2020-10-24 15:50:28 +05:30
adithyaov
d3f290b7b3 Move stream filtering into a seperate group in unfold benchmarks 2020-10-24 15:50:28 +05:30
adithyaov
b5da56a18c Rename o_1_space_combination to o_1_space_zip in unfold benchmarks 2020-10-24 15:50:28 +05:30
adithyaov
1d71e090ba Merge generational benchmark groups in unfold benchmarks 2020-10-24 15:50:28 +05:30
adithyaov
bda8caccc7 Rename the bench group of input covariant benchmarks accordingly 2020-10-24 15:50:28 +05:30
adithyaov
9018907157 Reorder benchmarks wrt the export structure in Internal.Unfold 2020-10-24 15:50:28 +05:30
adithyaov
2d4ab16dd8 Add informative comments wrt the unfold benchmarks 2020-10-24 15:50:28 +05:30
adithyaov
5d4918cdcb Make minor indentation changes in Benchmark.Unfold 2020-10-24 15:50:28 +05:30
adithyaov
4a21cbc45d Complete the set of benchmarks of unfold 2020-10-24 15:50:28 +05:30
adithyaov
ecbf566b1d Rearrange benchmarks and remove the "serial" from function names
Keep nested benchmarks in a seperate group
2020-10-24 15:50:28 +05:30
adithyaov
dcdc716efb Use a cleaner way to benchmark unfolds 2020-10-24 15:50:28 +05:30
pranaysashank
8061c97a76 Use monadic seed in monadic scanning combinators.
- The following functions are updated: scanlM, scanlM',
  postscanlM, postscanlM', prescanlM'.
- Update Changelog.md.
2020-10-21 10:49:12 +05:30
adithyaov
875e48f8e8 Add grouping combinators to the benchmarks 2020-10-18 00:06:52 +05:30
adithyaov
a06f8c4bd1 Add enumarate combinators to the serial generation benchmark group 2020-10-18 00:06:52 +05:30
adithyaov
c71888080e Add micro benchmarks for multiple exposed functions in Prelude 2020-10-18 00:06:52 +05:30
adithyaov
fc25c42ab1 Add micro benchmarks for convering exposed APIs in Fold
Benchamrks added:
- drainBy
- foldMapM
- lookup
- sequence
- tee
- distribute
- partition
- unzip
2020-10-18 00:06:52 +05:30
adithyaov
8d6b695ddb Replace value with size and n with start in bench:Data.Unfold 2020-10-17 21:32:23 +05:30
adithyaov
5004f12409 Add docs & change the signature of replicateM and repeatM
This commit also include some other minor changes
2020-10-17 21:32:23 +05:30
adithyaov
07d0609dee Add additional Unfold benchmarks 2020-10-17 21:32:23 +05:30
Harendra Kumar
a3c3db465f Add prime sieves to benchmarks
Prime sieves are good benchmarks for scan and monad composition.
2020-10-16 21:50:51 +05:30
pranaysashank
25f76d5524 Add new encoding/decoding routines.
- Add encodeUtf8_, encodeLatin1_, encodeUtf8', encodeLatin1',
  decodeUtf8_, decodeUtf8', decodeUtf8Arrays_, decodeUtf8Arrays'.

- encodeLatin1, encodeUtf8 don't fail when they encounter
  invalid characters. Their stricter variants encodeLatin1',
  encodeUtf8' do.

- encodeUtf8_, encodeLatin1_ drop the invalid characters.

- decodeUtf8 replaces any invalid character encountered with the
  Unicode replacement character where as decodeUtf8' fails.

- decodeUtf8Arrays doesn't fail on invalid characters anymore
  it replaces them with the Unicode replacement character.

- Deprecate decodeUtf8Lax, encodeLatin1Lax, encodeUtf8Lax.

- Update Changelog.md.
2020-09-17 12:16:11 +05:30
pranaysashank
ad05792d0b Deprecate Streamly module and move the exports to Streamly.Prelude.
- Deprecate and replace functions:
    foldWith => concatFoldableWith
    foldMapWith => concatMapFoldableWith
    forEachWith => concatForFoldableWith
2020-09-09 20:56:24 +05:30
adithyaov
e218fb9d8f Deprecate Streamly.Memory.Array
According to the new module structure, it should be Streamly.Data.Array.Storable.Foreign
2020-09-04 16:55:16 +05:30
adithyaov
aa1e4e137f Rename Streamly.Internal.Memory.Array
According to the new module structure, it should be Streamly.Internal.Data.Array.Storable.Foreign
2020-09-04 16:55:16 +05:30
adithyaov
4070c13937 Rename Streamly.Internal.Memory.Array.Types
According to the new module structure, it should be Streamly.Internal.Data.Array.Storable.Foreign.Types
2020-09-04 16:55:16 +05:30
adithyaov
e3e69a11ea Rename Streamly.Internal.Memory.Unicode.Array
According to the new module structure, it should be Streamly.Internal.Unicode.Array.Char
2020-09-04 16:55:16 +05:30
adithyaov
7d008199aa Deprecate Streamly.Data.Unicode.Stream
According to the new module structure, it should be Streamly.Unicode.Stream
2020-09-04 16:55:16 +05:30
adithyaov
d3325c60f6 Rename Streamly.Internal.Data.Unicode.Stream
According to the new module structure, it should be Streamly.Internal.Unicode.Stream
2020-09-04 16:55:16 +05:30
pranaysashank
c8c161c34b Rename module Internal.Prelude to Internal.Data.Stream.IsStream. 2020-08-24 00:29:25 +05:30
Pranay Sashank
960def155f Make the finalizer based exception handling routines the default.
- Change the handlers for both streams and unfolds.
2020-08-23 11:50:59 +05:30
Harendra Kumar
1639cfde98 Use monadic action to get the initial state
In ReaderT/StateT evaluation.
2020-08-19 19:41:08 +05:30
adithyaov
ead1601148 Replace Data.Strict with Data.*.Strict
"Streamly.Internal.Data.Strict" is replaced by:
Streamly.Internal.Data.Tuple.Strict
Streamly.Internal.Data.Maybe.Strict
Streamly.Internal.Data.Either.Strict

This commit also has some formatting changes to imports.
2020-08-14 20:25:52 +05:30
pranaysashank
d93ac86607 Drop support for GHC 7.10.3. 2020-08-12 11:24:34 +05:30
Harendra Kumar
ec97cec4d2 Fix the backtrack buffer management for fromParserK
This commit results in worse performance because now we are double
buffering once in ParserD and once in ParserK. This can potentially be
fixed but would require bigger changes to unify the backtracking buffer
management for ParserD and ParserK.
2020-08-02 16:26:46 +05:30
adithyaov
ef7c6d9633 Skip building Array.Prim.* modules for ghc < 8.0
getSizeofMutableByteArray# does not exist for versions of ghc below 8
2020-07-21 09:13:31 +05:30
adithyaov
4d0631a0c6 Add Data.Array.Prim.Pinned and Data.Array.Prim
Respect the new module structure for Internal files
2020-07-21 09:13:31 +05:30
adithyaov
27c3aebbce Combine all the array benchmarks to reduce duplication
Use --stream-size for all the array benchmarks now

Replace the following files:
- benchmark/Streamly/Benchmark/Data/Array.hs
- benchmark/Streamly/Benchmark/Data/ArrayOps.hs
- benchmark/Streamly/Benchmark/Data/Prim/Array.hs
- benchmark/Streamly/Benchmark/Data/Prim/ArrayOps.hs
- benchmark/Streamly/Benchmark/Data/SmallArray.hs
- benchmark/Streamly/Benchmark/Data/SmallArrayOps.hs
- benchmark/Streamly/Benchmark/Memory/Array.hs
- benchmark/Streamly/Benchmark/Memory/ArrayOps.hs
With:
- benchmark/Streamly/Benchmark/Array.hs
- benchmark/Streamly/Benchmark/ArrayOps.hs
2020-07-20 01:44:18 +05:30
Harendra Kumar
f0398ee8b6 Add benchmarking for fromParserK 2020-07-17 03:46:04 +05:30
Harendra Kumar
37f325e4b2 Add some more benchmarks for ParserK 2020-07-17 03:46:04 +05:30
Harendra Kumar
81339c8f8b Fix comments 2020-07-13 23:58:02 +05:30
Harendra Kumar
09f2fa7cb4 Add the ability to select fields to report 2020-07-09 17:40:27 +05:30
Harendra Kumar
89b9e233ba Fix inspection tests 2020-07-09 17:40:27 +05:30
Harendra Kumar
bc6b4eed32 Reduce compile time mem util in Handle benchmarks
* Split into two modules
* Remove unnecessary INLINE pragmas
2020-07-09 17:40:27 +05:30
Harendra Kumar
0d586750a7 Add INLINE phase annotations on some functions 2020-07-09 16:10:24 +05:30
Harendra Kumar
53504dba3c Use smaller input files for longer benchmarks 2020-07-09 16:10:01 +05:30
Harendra Kumar
3d033ae915 Reorganize, move the FileIO benchmarks
Now they are in FileSystem.Handle module corresponding to the source module
with the same name. Also, now we have them arranged based on space complexity
so that we can apply RTS memory restrictions when running.

Also, now longer benchmarks use a shorter file.
2020-07-08 03:10:09 +05:30
Harendra Kumar
ea79e0f9b7 Add "allocated" and "bytesCopied" fields
"allocated" is much more stable for regression comparisons as it stays the same
whereas "time" varies based on various factors like cpu frequency, other things
running on the computer, context switches etc.

bytesCopied is a measure of long lived data being retained across GCs, which is
also a good measure of performance.
2020-07-07 16:23:06 +05:30
pranaysashank
202f674462 Change the signature of foldlM' to use a monadic seed.
- Also change usages of foldlM' in tests and benchmarks.
2020-07-07 14:17:44 +05:30