
On Tue, Oct 20, 2009 at 17:50, Antoine Pitrou <solipsis@pitrou.net> wrote:
Sturla Molden <sturla@...> writes:
Yes, one could add a nonsence CAS to existing incref/decref, and measure overhead.
That would be the first thing to do IMO. If it doesn't seem to decrease performance a lot, you could continue by adding locking to dict objects, and measure again. Then add lists and sets (although I doubt sets and even lists are performance-critical for general interpreter operation). If after that you have less than a 10% slowdown (personal opinion only, other people's mileage may vary), it's probably worth going on and trying to do the whole GIL removal (which doesn't mean it would necessarily be accepted, by the way, but at least would avoid it being automatically rejected ;-)).
This'd show you the minimum amount of overhead, but only for a trivial case: single threaded. You're not invoking cache contention, which in my experience is much larger than the atomic op cost, and prevents the *real* gains you hope to make. Python-safethread makes the datastructures safe (lockless fast-paths) so that it can be compared properly. I tried atomic refcounting and it sucked. My buffered bodge sucked less, but still sucked. The only option left is a real tracing GC. -- Adam Olsen, aka Rhamphoryncus