On Fri, 23 May 2008, Henning Thielemann wrote:
An even more advanced tool could show differences between two Core listings.
Say I have a program which runs too slow. But if I change a small detail it
runs significantly faster - I want to know, how did my change in the Haskell
file modified the Core and why the speedup.
Showing differences between Core files will certainly be complicated because
the generated identifiers are completely different. I don't know whether the
order of declarations is a problem.
I have an example here where a program becomes faster by a factor of 10 with
a rather small change. First I thought the slow thing must be the higher
order function which occurs in the Core and is not inlined, but it is present
in the slow and the fast variant of the program.
In this special example, actually simple 'diff' spotted the critical
difference, namely a polymorphic function was called. Now I'm in a
dilemma: I can either INLINE the function, then it's whole body is copied
into main program, which is not necessary here. However this solution
would guarantee speed in every case. Or I can SPECIALISE the function,
then the function will only be called, but with polymorphism overhead
eliminated. This would only work for a restricted range of types. I'd like
to have a pragma, that tells GHC to specialise a function for every type
it is called with.
_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc