Re: CPU and GC cost of bignums

2020-02-08 Thread Ludovic Courtès
Hi, Ludovic Courtès skribis: > To my surprise, on a pure bignum microbenchmark, this is > counterproductive: I found out that I was comparing my own Guile build, which was against the ‘libgc-back-pointers’ package, with that ‘guile-next’ build against ‘libgc’; no wonder mine was slower… --8<--

Re: CPU and GC cost of bignums

2020-02-06 Thread Ludovic Courtès
Hi! Andy Wingo skribis: > Nice investigation! Perhaps slot-allocation should track live variables > using something that's not bigints, but who knows. Yeah I wondered; it’s not clear whether bitvectors would be more efficient, for instance, although we could make it perhaps locally imperative.

Re: CPU and GC cost of bignums

2020-02-06 Thread Andy Wingo
Hi :) Nice investigation! Perhaps slot-allocation should track live variables using something that's not bigints, but who knows. On Wed 05 Feb 2020 17:29, Ludovic Courtès writes: > /* The next three functions (custom_libgmp_*) are passed to > mp_set_memory_functions (in GMP) so that memor

Re: CPU and GC cost of bignums

2020-02-05 Thread Hans Åberg
> On 5 Feb 2020, at 17:29, Ludovic Courtès wrote: > > Hey ho! > > Ludovic Courtès skribis: > >> … but has the disadvantage that it doesn’t work: ‘numbers.test’ fails >> badly on bignums. > > I think with the excitement I no longer knew what I was saying. So, > here’s a revised patch that a

Re: CPU and GC cost of bignums

2020-02-05 Thread Ludovic Courtès
Hey ho! Ludovic Courtès skribis: > … but has the disadvantage that it doesn’t work: ‘numbers.test’ fails > badly on bignums. I think with the excitement I no longer knew what I was saying. So, here’s a revised patch that actually preserves memory management (as in: ‘mpz_t’ are eventually freed

CPU and GC cost of bignums

2020-02-04 Thread Ludovic Courtès
Hello! (If you’re in a hurry, there are good news at the bottom.) I noticed that 3.0 (and also 2.2 actually) takes a long time to compile Guix’ gnu/services/mail.scm, which is macro-heavy, producing lots of top-level defines. At -O2 (the default), we have: --8<---cut here---