On Tue, 8 Jan 2013, David Miller wrote:

From: Torbjorn Granlund <t...@gmplib.org>
Date: Tue, 08 Jan 2013 12:50:01 +0100

Marc Glisse <marc.gli...@inria.fr> writes:

  Then we might as well always put it in _mp_d[-1], no? IIRC that's what
  mpfr does.

I see some problems with that:

* There is a serial memory dependency problem, making the allocation
  check at least one more cache latency away.  I don't think OoO
  execution will be able to hide that, as this is used.

My intuition would be that this won't matter, but you have more experience than me with that.

I don't know how amicable you are to an idea like this, but if user
applications can only treat pointers to these objects as opaque then
you can encode information in the lowest bits of the pointer.

For example, you could encode in the lowest bit whether the _mp_d[-1]
thing is being done or not.

Then it's at worst a mis-predicted branch in the allocation check.

That seems similar (not saying one is better than the other) to what Niels was proposing, where he was encoding it as a special value of the bitfield _mp_alloc (so basically in a few bits of _mp_size) instead of _mp_d.

What is done by bignum libraries in many languages is that the base object is a single pointer, and depending on the lowest (?) bit it is interpreted either as a pointer to (alloc+)size+limb[] or as a small integer. But again, their intended main use is with numbers that would fit in an int.

--
Marc Glisse

PS: thanks a lot for your sparc assembly work!
_______________________________________________
gmp-devel mailing list
gmp-devel@gmplib.org
http://gmplib.org/mailman/listinfo/gmp-devel

Reply via email to