[Haskell-cafe] Re: newbie optimization question

Don Stewart dons at galois.com
Sun Oct 28 18:02:37 EDT 2007


peter:
> Daniel Fischer wrote:
> >What perpetually puzzles me is that in C long long int has very good 
> >performance, *much* faster than gmp, in Haskell, on my computer, Int64 is 
> >hardly faster than Integer. 
> 
> I tried the example with Int64 and Integer. The integer version
>  was actually quicker ... which is the reason I decided to post
>  the results.
> 
> C++ version times: 1.125; 1.109; 1.125
> Int32 cpu times: 3.203; 3.172; 3.172
> Int64 cpu times: 11.734; 11.797; 11.844
> Integer cpu times: 9.609; 9.609; 9.500
> 
> Interesting that Int64 is *slower* than Integer.
> 
> On the other side the C version is not that much quicker. I guess
> the Haskell version is using generic versions of mod and sum
> (since they are from a library) which would mean indirect calls.
> The Haskell version probably also creates the list nodes ...
> even when they get almost immediately garbage collected.
> 
> Thanks for pointing out Int64 sucks so much :)

With -O2 ghc will only have a function call to 'sum', with -O2 and the
list stream fusion library, there are no indirect calls and the entire
program is specialised to a nested loop. 

Do you have your C++ program handy? I'd expect the fully fused version
to be somewhere between 1 and 2x slower.

-- Don


More information about the Haskell-Cafe mailing list