On 3/27/07, Jeremy Shaw <[EMAIL PROTECTED]> wrote:
At Tue, 27 Mar 2007 23:10:21 +0200,
Fawzi Mohamed wrote:

> If someone has an idea on how else I can improve timings please tell me.

I believe you are seeing a speed decrease, because GHC is not inlining
functions as much when you split them into modules. If you add
explicit inline statements, I think you should be able to get back to
your original timings.


It could be inlining or it could be other optimizations. From the data
the OP gives, I don't think it's possible to conclude which ones.

Below is an example of how to add INLINE statements.

someFunction :: (Word8 -> Maybe Word8 -> Bool) -> B.ByteString -> B.ByteString
someFunction = ...
{-# INLINE someFunction #-}

I am not sure what the downsides are. It probably makes the resulting
binary bigger, and takes longer to compile. Though, probably not any
worse than if you just put everything in one module?


That's not necessarily so; what if you end up adding an INLINE pragma
for a function with several call sites that GHC wouldn't have inlined
at all in the original single-module program?

It might be the case that you only need to INLINE one or two functions
to get most of the speed back.

Yes, which is why it's a good idea to do profiling before sprinkling
INLINE pragmas wantonly around your code.

Cheers,
Tim

--
Tim Chevalier * [EMAIL PROTECTED] * Often in error, never in doubt
Confused? See http://catamorphism.org/transition.html
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to