dons: > sedillard: > > Hi, > > > > I've got a library that I'm in the process of uploading to hackage > > (waiting for account) but the darcs repo is here: > > > > [1]http://graphics.cs.ucdavis.edu/~sdillard/Vec > > > > I notice a slight drop in performance when I install the library using > > cabal. Maybe 10-20%, on one particular function. This is in comparison to > > when the library is 'local', as in, the source files are in the same > > directory as the client application. > > Lack of unfolding and inlining when compiled in a package? Try compiling > with -O2, for maximum unfolding. > > > What could be causing the performance drop? The function in question > > requires impractical amounts of inlining (This is something of an > > experiment), but I don't see how installing it as a library affects that. > > The functions to be inlined are small, surely available in the .hi files. > > You can check this via -show-iface > > > Its only when they are applied do they agglomerate into a big mess - > > 80-200K lines of core. > > > > The function in question is invertMany in examples/Examples.hs.
Some general remarks, GHC isn't (yet) a whole program compiler by default. So it doesn't, by default, inling entire packages across package boundaries. So you can lose some specialisation/inlining, sometimes, by breaking things across module boundaries. That said, it's entirely possible to program libraries in a way to specifically allow full inlining of the libraries. The Data.Binary and Data.Array.Vector libraries are written in this style for example, which means lots of {-# INLINE #-} pragmas, maximum unfolding and high optimisation levels. -- Don _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users