[Haskell-cafe] New GHC fails to specialize imported function

William Yager will.yager at gmail.com
Fri Jul 31 03:12:26 UTC 2015


Hello all,

I just installed the new Haskell platform for OS X.

It seems to have caused a major performance regression for a program I'm
working on, making it well over 25x slower.

The culprit appears to be that the new GHC (7.10.2) fails to specialize an
imported function. If I manually add a SPECIALIZE pragma, performance goes
back to around what it used to be.

The code in question is located at https://github.com/wyager/HNet .

As it stands, the code takes about 30 seconds to run on my machine. With
the previous haskell-platform, it only took about .9 seconds.

If I modify Operations.hs and uncomment the SPECIALIZE pragma, runtime goes
down to about 1.1 seconds (still slower for some reason, but not awful).

To test, compile with -O2 (as the program makes heavy use of Data.Vector,
which requires -fspec-constr for performance).



Additionally, my experience doesn't seem to match
https://downloads.haskell.org/~ghc/7.8.4/docs/html/users_guide/pragmas.html#specialize-pragma
in that if I add an INLINABLE pragma at the site of (••)'s definition and
then try to SPECIALIZE it in a different file after importing, GHC tells me
"Warning: SPECIALISE pragma on INLINE function probably won't fire: ‘••’".

Cheers,
Will
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20150730/8286ae4a/attachment.html>


More information about the Haskell-Cafe mailing list