Opened 9 years ago

Closed 9 years ago

#4280 closed proposal (fixed)

Proposal: Performance improvements for Data.Set

Reported by: tibbe Owned by:
Priority: normal Milestone:
Component: libraries (other) Version: 6.12.3
Keywords: Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: Runtime performance bug Test Case:
Blocked By: Blocking: #4312, #4313
Related Tickets: Differential Rev(s):
Wiki Page:


Following on from ticket #4277 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

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.

Attachments (1)

data-set-performance.dpatch (28.6 KB) - added by tibbe 9 years ago.

Download all attachments as: .zip

Change History (4)

Changed 9 years ago by tibbe

Attachment: data-set-performance.dpatch added

comment:1 Changed 9 years ago by milan

Blocking: 4312 added

comment:2 Changed 9 years ago by milan

Blocking: 4313 added

comment:3 Changed 9 years ago by milan

Resolution: fixed
Status: newclosed


Note: See TracTickets for help on using tickets.