
Tim Blechmann wrote:
all 32 bit platforms that i know of are using the full 32bit as address space (the lower two bits are 0 because of 32bit alignment) ... on 64bit platforms it is quite different ... ppc64, ia64 and x86_64 all use just a part of the full address space (iirc 48 bit for x86_64) ... the rest should be usable as aba prevention tag. 48 bits is only for the current x86_64 platforms, it will get upgraded to 64 bits eventually.
However, such platforms will also support DWCAS, so you have your backup solution.
it is also performance related, though ... on x86_64 (nehalem) my fifo stress test runs about 25% faster with pointer/tag compression than with cmpxchg16b ... that said, the lock-free property is for me more important than the throughput, since i am using it for soft real-time systems ...
Yes, this has also been my fear that cmpxchg outperforms cmpxch8b which outperforms cmpxch16b. Tim, have you read the replies to my post on c.p.t regarding ABA bits? Even on this thread someone (I think Helge) argued that even 32 bits may not be enough. Now I'm thinking that maybe "generation counter" solution may not be workable as a general solution. Andy.