Speed up zipWith some more
authorDavid Feuer <David.Feuer@gmail.com>
Tue, 24 May 2016 04:26:00 +0000 (00:26 -0400)
committerDavid Feuer <David.Feuer@gmail.com>
Tue, 24 May 2016 04:57:35 +0000 (00:57 -0400)
commite8f34b52aafa59feab40395fcacfc4dca50157d5
tree8598b242d886291bced1822b093efe3010901fc1
parent549a347c23de636fd037e57761f83df67fc1f543
Speed up zipWith some more

This one's all about making nice to GHC by pulling
local functions to the top level and marking them
inline, as well as eta-expanding at a recursive
call site.

Old (after recent `splitAt` improvements):

benchmarking zip/ix10000/5000
time                 8.806 μs   (8.768 μs .. 8.857 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 8.787 μs   (8.766 μs .. 8.879 μs)
std dev              113.3 ns   (30.31 ns .. 244.0 ns)

benchmarking zip/nf100
time                 13.19 μs   (13.15 μs .. 13.24 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 13.19 μs   (13.15 μs .. 13.28 μs)
std dev              157.8 ns   (86.36 ns .. 288.1 ns)

benchmarking zip/nf10000
time                 1.768 ms   (1.764 ms .. 1.774 ms)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 1.778 ms   (1.772 ms .. 1.793 ms)
std dev              29.50 μs   (16.59 μs .. 56.72 μs)

New:

benchmarking zip/ix10000/5000
time                 7.684 μs   (7.668 μs .. 7.704 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 7.685 μs   (7.675 μs .. 7.707 μs)
std dev              46.68 ns   (27.98 ns .. 73.76 ns)

benchmarking zip/nf100
time                 9.152 μs   (9.139 μs .. 9.170 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 9.166 μs   (9.148 μs .. 9.197 μs)
std dev              76.90 ns   (42.73 ns .. 140.9 ns)

benchmarking zip/nf10000
time                 1.294 ms   (1.291 ms .. 1.298 ms)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 1.295 ms   (1.292 ms .. 1.298 ms)
std dev              10.51 μs   (7.936 μs .. 14.12 μs)
Data/Sequence.hs