On Sun, 2008-12-28 at 08:47 -0800, Bryan O'Sullivan wrote:
> On Sun, Dec 28, 2008 at 1:38 AM, Thomas DuBuisson
> <thomas.dubuis...@gmail.com> wrote:
>               getNthWord n bs@(PS ptr off len) =
>                       inlinePerformIO $ withForeignPtr ptr $ \ptr' ->
>         do
>                       let p = castPtr $ plusPtr ptr' off
>                       peekElemOff p n

> The overhead here is very probably caused by withForeignPtr. In
> similar cases, I've seen much better performance from hoisting this to
> the outside of a loop. 

Since ghc version 6.6, withForeignPtr has no overhead at all so there is
no benefit to hoisting it out of loops. You can verify this by
inspecting the core output. In ghc-6.6 the representation of ForeignPtr
changed to put the Addr# directly in the ForeignPtr constructor (rather
than an indirection further away).

Duncan

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to