[Haskell-cafe] How to write fast for loops
Niklas Hambüchen
mail at nh2.me
Mon May 26 15:21:21 UTC 2014
There has just been a fix for vector that improves on the bad
performance of Word32 as compared to Int
(https://github.com/haskell/vector/issues/21#issuecomment-44154305).
The new benchmarks
(https://rawgit.com/nh2/loop/master/results/bench-vector-bbd726d.html)
now show Vector+Word32 on par, but functions in base, especially forM_,
are still horrendously slow on Word32.
On 28/04/14 05:24, John Lato wrote:
> Ahh, you made me look at the core again. I think this is related to
> your observation about V.enumFromTo being the same as V.fromList. With
> Word32 the generated core shows that this goes via a list representation
> instead of a nice loop. Which makes me suspect there's some RULE that
> applies to Stream.enumFromTo that is firing in the first case but not
> the second. And if I build both versions with -ddump-rule-firings,
> indeed I see that the Int version has
>
> Rule fired: enumFromTo<Int> [Stream]
>
> With nothing comparable for the Word32 version. I'd imagine if you grep
> for that in the Vector sources, you'd find something interesting.
>
> The EnumFromN version does not seem to suffer from this (but again it's
> necessary to evaluate the argument).
More information about the Haskell-Cafe
mailing list