Skip to content

Proposal: Performance improvements for Data.Set

Following on from ticket #4277 (closed) here is a similar patch for Data.Set.

This proposal provides a patch that improves performance for many parts of the API. Three standard techniques are applied to the code:

  • Worker/Wrapper transformations of recursive functions with constant arguments (aka. the static argument transformation).
  • Explicit inlining of wrapper functions.
  • Explicit strictness of keys to functions.

Three complementary, but orthogonal patches are provided.

  • Add a testsuite, with coverage data (currently 51% of top level functions, and all core functions).
  • Add a micro-benchmark suite based on Criterion, for empirical evidence of improvements to each function.
  • The optimization patch itself.

All 3 patches should be applied, under this proposal.

The benchmark results are relatively clear:

32% faster on OS X 10.5.8 on 2 GHz Core 2 Duo

[[Image(https://spreadsheets.google.com/oimg?key=0AurLfcdFg73_dGZKN1hONFdyVlFudTh2a3BuSTc4NXc&oid=2&zx=yh9l2q-h6cvi1)]]

The consideration period is 3 weeks (before ICFP).

Work carried out over 28/29th August, 2010 in Utrecht, NL, by Johan Tibell and Don Stewart.

Trac metadata
Trac field Value
Version 6.12.3
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component libraries (other)
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information