On Tue, Aug 9, 2011 at 9:47 AM, Chris Yuen <kizzx2+hask...@gmail.com> wrote:

>
> - I was using GHC 32-bit. Int is 32-bit there, so I needed Int64. It turns
> out 64-bit operations in 32-bit programs are just darn slow. Maybe it's a
> Windows problem.


No, GHC calls out to C for 64-bit integer ops on all 32-bit platforms.


> On Linux 64 bit GHC Int is 64 bit so everything just works. Changing Int64
> to Int liberates me from many `fromIntegral` which saved 20%
>

Actually, fromIntegral is usually a no-op, so chances are you're seeing the
effect of something else.


> - Changing `divMod` to `quotRem` saved another 20%
>

It's cheaper again to use quotInt# and remInt# as I did in my code.


> 1. Why are bangs needed on the length arrays?


GHC has to deconstruct the Vector in order to get at the real underlying
array, so that unsafeIndex can perform the actual index into the real
underlying array.

Without bang patterns, the code performs at least one deconstruction on
every iteration through the loop. Each deconstruction has a cost. With the
bang patterns, they're all hoisted out and performed just once.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to