Manual eta expansion leads to orders of magnitude less allocations
While working on deterministic free variable computation I run into some performance issues. I narrowed it down to code that when eta expanded performed less allocations.
I ended up writing a benchmark and for large examples the eta expanded versions performs orders of magnitude less allocations.
The results of my test:
EtaExpanded test3
50,450,112 bytes allocated in the heap
real 0.89
EtaReduced test3
3,661,740,240 bytes allocated in the heap
real 3.66
The whole source is here: https://github.com/niteria/deterministic-fvs, I'm also attaching the two interesting implementations.
I experimented with it a little and GHC eta-expanded when I didn't have mutually recursive bindings.
Trac metadata
Trac field | Value |
---|---|
Version | 7.10.2 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |