Shared counters are concurrent objects which provide a fetch-andincrement operation on a distributed system and can be used to implement a variety of data structures, such as barriers, pools, stacks, and priority queues. Diffracting trees are novel data structures that provide ineffective, high throughput and low contention, shared counter construction. Under high loads, their performance has been shown to surpass all known counter implementations. Unfortunately, Diffracting trees of differing depths are optimal forlimited load ranges, and a deep tree that performs well under high load performs rather poorly when the load is very low. Toovercome this drawback, reintroduce the Reactive Diffractirrg Tree, a novel Diffracting tree construction which can grow and shrink as necessary to better handle the changing access patterns and memory layout oftbe machine on which itrrms. Itprovides true sealability and locality by dynamically “morphing” itself all the way from a simple queue-lock based counter under low load, through a range of increasingly deeper/shallower Diffracting trees as the load varies. Empirical evidence, collected on a 32-node Alewife cachecoherent multiprocessor and the Proteus distributed shared-memory simulator, shows that the reactive diffracting tree provides throughput within a constant factor of optimal depth Diffracting trees at all load levels. It also proves to be an effective competitor with known randomized load balancing algorithms in producerlconsumer applications.
Unfortunately, ACM prohibits us from displaying non-influential references for this paper.
To see the full reference list, please visit http://dl.acm.org/citation.cfm?id=258495.