use a "slippy" seen set occupancy counter
Instead of maintaining a single global seen_count, we now maintain this as well as thread-local copies of this. We allow the thread-local copies to drift by a (fixed) amount from the global counter. The advantage of this is that it reduces contention on the global seen_count, which was previously subject to a lot of cache line bouncing. The downside is that the decision of when to expand the set is no longer precise; it can now happen a little after the set has exceeded the occupancy limit. This seems a small price to pay for increased scalability though.
parent
6b95f55a
Please register or sign in to comment