Why do we put GMP allocations on GHC heaps?

Gergely Risko gergely at risko.hu
Wed Oct 23 11:44:18 UTC 2013

On Wed, 23 Oct 2013 08:57:55 +0000, Simon Peyton-Jones <simonpj at microsoft.com> writes:

> Gergely
> Edward has it right.  Functional programs allocate a lot of
> intermediate stuff.  ((a+b)*c-d) allocates two intermediate Integers
> and discards them pretty soon afterwards.  GHC's code generator and
> garbage collector are good at both allocation and gc of young dead
> objects.

Thanks for the confirmation.

> Using malloc/free would require a finaliser-style interface, which is
> significantly less efficient.  That might matter a lot for an
> arithmetic-intensive program, and not at all for one where Integer
> arithmetic was incidental.

Do we have benchmarks for this in nofib?  If I do some mockups, can I
believe what (specific tests from) nofib says?  Or does researching for
a replacement first includes the task of writing a benchmark suite?

> However, you could perfectly well imagine a third package (alongside
> integer-gmp and integer-simpl), let's call it integer-gmp-malloc.

Actually it's not clear to me, how would you implement the non-malloc
integer-gmp as a package?  Can haskell packages integrate with the GC
that deep?

> See also http://ghc.haskell.org/trac/ghc/wiki/ReplacingGMPNotes
> Please do record the information or insights you get on a GHC wiki
> page!

Yes, I've definitely read through those kind of wiki articles.  I try to
only ask stuff that is not documented there.

If I figure out anything in addition, I'll document, thanks.


More information about the ghc-devs mailing list