Lo guys,
I thought you'd like to know about this result. I've been playing with the debian language shootout programs under OS X, looking at how fast Haskell code is compared to C on OS X, rather than linux.

Interestingly, Haskell comes out rather better on OS X than it did on Linux. Here's my results (times in seconds):

                C       Haskell Relative speed          Inverse
Binary Trees    6.842   1.228   0.179479684302835       5.57166123778502
Fannkuch        5.683   15.73   2.76790427591061        0.361284170375079
Mandelbrot      1.183   2.287   1.93322062552832        0.517271534761697
nbody           10.275  16.219  1.57849148418491        0.633516246377705
nsieve          0.167   0.253   1.51497005988024        0.660079051383399
nsieve-bits     0.471   0.713   1.51380042462845        0.660589060308555
partial sums    1.047   1.313   1.25405921680993        0.797410510281797
pidigits        1.238   1.4     1.13085621970921        0.884285714285714
recursive       1.554   3.594   2.31274131274131        0.432387312186978
spectral-norm   27.939  19.165  0.685958695729983       1.45781372293243
threadring      91.284  1.389   0.0152162481924543      65.719222462203
-------------------------------------------------------------------------
Averages                        1.35333620432893        0.738914688605306

Some notes:
Hardware: 2Ghz Core2Duo, enough ram to not worry about paging

Some programs are not included, this is because the C code produced compile errors. The Haskell code appears to be portable in *all* cases.

The average slowdown for running Haskell is only 1.3 times on OS X! That's pretty damn good.

I'm sure some people will say "yeh, but you have to optimise your code pretty heavily to get that kind of result". Interestingly, the programs that have the biggest speed advantage over C here are also the most "naïvely" written ones.

The thing that seems to make C slower is the implementation of malloc in OS X. This has a couple of implications, first, if apple replaced the malloc library, it would probably push the result back to the 1.7 times slower we see under Linux. Second, Fannkuch can probably be optimised differently for Haskell to look even better -- at the moment, the haskell code actually uses malloc!

Finally, that threading example... WOW! 65 times faster, and the code is *really* simple. The C on the other hand is a massive mess.

Bob

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to