[Haskell-cafe] Understanding GHC allocations

Roman Beslik beroal at ukr.net
Thu Jun 17 12:12:24 EDT 2010


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-Float.html

-- 
Best regards,
   Roman Beslik.



More information about the Haskell-Cafe mailing list