returning to cost of Integer
Duncan Coutts
duncan.coutts at worc.ox.ac.uk
Mon Jul 31 11:19:02 EDT 2006
On Mon, 2006-07-31 at 14:32 +0400, Serge D. Mechveliani wrote:
> Dear GHC developers,
>
> Long ago you wrote that GHC has made Integer only about 3/2 times
> slower than Int.
> I tested this once, and then all this time I have been relying on this.
> Now, with
> ghc-6.4.1 compiled for Linux - i386-unknown,
> running under Debian Linux, Intel Pentium III
> under ghc -O,
>
> I have an occasion to repeat the test on a certain simple program for
> processing lists of length 7 over Integer.
>
> And Integer shows 2.55 times slower (11.2 sec against 4.4).
>
> Showld we somehow agree that
> cost(Integer)/cost(Int) in GHC is about 2.55
>
> or maybe we are missing something?
The cost difference is varies with the context. In the case that the
Int/Integer is always boxed then we might expect a constant factor
between Int and Integer (at least for numbers that fit in an Int).
However because Int is often unboxable where as Integer is never
unboxable there are certainly programs where the factor is much much
greater than x2 or x3. If the Int can be unboxed into an Int# then the
operations are very quick indeed as they are simple machine primitives.
As an extreme example, I just tried with one of my current simple
ByteString benchmarks. If we swap Int for Integer in the inner loop of
ByteString.map then the time to evaluate (map f . map g) s increases by
37 times!
So actually that's not to say that Integer is slow, but rather that in
many cases GHC is really pretty good at optimising right down to the low
level details. The representation of Integer prevents many of these
optimisations.
So as I said, the ratio really does depend on what you're doing.
Duncan
More information about the Glasgow-haskell-users
mailing list