Re: How to optimize the performance of a code in Haskell?

(I take it you accidently wrote to fa.haskell, which is just a mirror of -cafe and -beginners, so I'm cc-ing the Café with a full quote.) Masayuki Takagi:
I'm writing fluid simulation programs with SPH(Smoothed particle hydrodynamics) in Haskell and C++. (The purpose that I write in two languages is to make a workflow that first i write in Haskell for rapid prototyping and accuracy then rewrite in C++ for performance.)
I've compared them in performance. Then, although I have already done optimization with profiler, the Haskell code is 20 times slower than the C++ code.
I think the performance of the Haskell code is so slow that there can be room for optimization. I'm happy if the Haskell code work 3 times slower than the C++ code at worst.
How can I make the Haskell code faster? What information should I refer?
The codes are here: http://kamonama.sakura.ne.jp/sph/20091101/sph.hs.zip http://kamonama.sakura.ne.jp/sph/20091101/sph.cpp
To run the code in Haskell: $ ghc --make -O sph.hs $ ./sph 300 (300 is the time step to be conputed)
To run the code in C++: $ g++ -O2 -o sph sph.cpp $ ./sph 300 (300 is the time step to be conputed)
thanks
I've not looked at the code, but you'll want ghc to do better optimizations than -O. -O2 is what you should use in general. Also, number-crunching often profits from -fexcess-precision.

Hello Kalman, Wednesday, November 4, 2009, 7:53:49 PM, you wrote:
I've not looked at the code, but you'll want ghc to do better optimizations than -O. -O2 is what you should use in general. Also, number-crunching often profits from -fexcess-precision.
also, floating-point number crunching usually faster with -fvia-C -optc-O3 -- Best regards, Bulat mailto:Bulat.Ziganshin@gmail.com
participants (2)
-
Bulat Ziganshin
-
Kalman Noel