On Mon, Jun 18, 2007 at 11:55:05AM +1000, Thomas Conway wrote:
> Hi All,
>> I'm trying to figure out how to maximum performance out of one of my
> inner loops which involves string hashing.
>> Consider the following hash function, which is a transliteration of a
> good one written in C:
[ Code elided ]
> Obviously, we'd like all those lambdas and composes to be inlined,
> along with all the intermediate Triple structures. So, how do you
> convince ghc to do this? Alternatively, how would you *translate*
> rather than transliterate, the mix function?
Just pass the -O option to GHC. (-O2 for better results). On my system
there are no lambdas or (.) left, as confirmed with -ddump-simpl.
However, GHC's 64 bit type is implemented using full foreign calls (and
thus rather expensive...) on 32 bit systems! So if possible don't do
that.
Also, GHC produces this type signature for $wmix:
HashStr.$wmix :: GHC.Word.Word64
-> GHC.Prim.Word64#
-> GHC.Prim.Word64#
-> HashStr.Triple
That is, the unboxing is incomplete. This is very very fishy; I'm
submitting a bug.
Stefan