
On 17.06.10 12:40, Roman Cheplyaka wrote:
From reading core I got the impression that everything is strict& unboxed. Perhaps this is related to creating some closures? How to get rid of those allocations?
Yes, "distance" creates a closure of type @Double -> Double# -> Double@ which is obviously not necessary. I do not know why.
2. Again from reading the core I learned that although 'l' and other constants are inlined, their type is boxed Double. This makes sense since CAFs are evaluated on demand, but obviously in this particular case it does not make sense, so can I somehow make them unboxed Hmm, I learned from "-ddump-core" that "distance" function uses constant "25.0".
There is another way to optimize — make GHC use floating point "abs" processor instruction. Now it uses {{{ abs x | x >= 0.0 = x | otherwise = negateDouble x }}} http://hackage.haskell.org/packages/archive/base/latest/doc/html/src/GHC-Flo... -- Best regards, Roman Beslik.