Skip to content

Improve performance of some Tree folds - #1245

Open
meooow25 wants to merge 1 commit into
haskell:masterfrom
meooow25:tree-foldr
Open

Improve performance of some Tree folds#1245
meooow25 wants to merge 1 commit into
haskell:masterfrom
meooow25:tree-foldr

Conversation

@meooow25

Copy link
Copy Markdown
Contributor

This performance issue is avoided in Tree's foldr already. This change applies the improvement in a few other places, and adds an explanatory comment.

Ran into this with #1244.

This performance issue is avoided in Tree's foldr already. This change
applies the improvement in a few other places, and adds an explanatory
comment.
@meooow25

Copy link
Copy Markdown
Contributor Author

Benchmarks with GHC 9.14:

Name                                                           Time - - - - - - - -    Allocated - - - - -
                                                                    A       B     %         A       B     %
PostOrder.Foldable.folds.bin,n=1000.foldr_cpsOneShotSum        8.1 μs  4.5 μs  -44%    117 KB   78 KB  -33%
PostOrder.Foldable.folds.bin,n=1000.foldr_cpsSum               8.2 μs  7.8 μs   -4%    117 KB  101 KB  -13%
PostOrder.Foldable.folds.bin,n=1000.foldr_elem                 4.8 μs  2.7 μs  -44%     78 KB   39 KB  -50%
PostOrder.Foldable.folds.bin,n=1000.foldr_traverseSum          6.9 μs  6.2 μs   -9%     86 KB   70 KB  -18%
PostOrder.Foldable.folds.bin,n=1000000.foldr_cpsOneShotSum      24 ms  5.9 ms  -75%    114 MB   76 MB  -33%
PostOrder.Foldable.folds.bin,n=1000000.foldr_cpsSum             24 ms   23 ms   -5%    114 MB   99 MB  -13%
PostOrder.Foldable.folds.bin,n=1000000.foldr_elem              7.9 ms  3.7 ms  -53%     76 MB   38 MB  -49%
PostOrder.Foldable.folds.bin,n=1000000.foldr_traverseSum        21 ms   21 ms   -2%     84 MB   69 MB  -18%
PostOrder.Foldable.folds.line,n=1000.foldr_cpsOneShotSum       8.2 μs  5.3 μs  -35%    117 KB   78 KB  -33%
PostOrder.Foldable.folds.line,n=1000.foldr_cpsSum              8.3 μs  8.4 μs   +0%    117 KB  101 KB  -13%
PostOrder.Foldable.folds.line,n=1000.foldr_elem                6.2 μs  3.4 μs  -44%     78 KB   39 KB  -50%
PostOrder.Foldable.folds.line,n=1000.foldr_traverseSum         6.8 μs  6.6 μs   -3%     86 KB   70 KB  -18%
PostOrder.Foldable.folds.line,n=1000000.foldr_cpsOneShotSum     53 ms   38 ms  -28%    114 MB   76 MB  -33%
PostOrder.Foldable.folds.line,n=1000000.foldr_cpsSum            52 ms   39 ms  -25%    114 MB   99 MB  -13%
PostOrder.Foldable.folds.line,n=1000000.foldr_elem              81 ms   22 ms  -72%     76 MB   38 MB  -49%
PostOrder.Foldable.folds.line,n=1000000.foldr_traverseSum       51 ms   38 ms  -26%     84 MB   69 MB  -18%
PostOrder.Foldable1.toNonEmpty.bin,n=1000                      4.5 μs  3.8 μs  -14%     70 KB   55 KB  -22%
PostOrder.Foldable1.toNonEmpty.bin,n=1000000                    19 ms   17 ms   -9%     69 MB   53 MB  -22%
PostOrder.Foldable1.toNonEmpty.line,n=1000                     4.3 μs  4.5 μs   +4%     62 KB   62 KB   +0%
PostOrder.Foldable1.toNonEmpty.line,n=1000000                   52 ms   52 ms   +1%     61 MB   61 MB   +0%
edges.bin,n=1000                                               6.9 μs  5.4 μs  -21%    148 KB  140 KB   -5%
edges.bin,n=1000000                                             34 ms  6.5 ms  -80%    145 MB  137 MB   -5%
edges.line,n=1000                                              7.8 μs  6.3 μs  -19%    148 KB  140 KB   -5%
edges.line,n=1000000                                            44 ms   25 ms  -42%    145 MB  137 MB   -5%
leaves.bin,n=1000                                              4.1 μs  3.5 μs  -14%     59 KB   43 KB  -26%
leaves.bin,n=1000000                                            11 ms  4.5 ms  -58%     57 MB   42 MB  -26%
leaves.line,n=1000                                             5.1 μs  3.3 μs  -35%     62 KB   31 KB  -49%
leaves.line,n=1000000                                           36 ms   32 ms  -12%     61 MB   31 MB  -50%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant