Concurrent cache-oblivious b-trees
read more
Citations
Flat combining and the synchronization-parallelism tradeoff
Algorithms and Data Structures for External Memory
Non-blocking binary search trees
Fast concurrent lock-free binary search trees
High-Performance Streaming Dictionary
References
Distributed algorithms
Linearizability: a correctness condition for concurrent objects
Ubiquitous B-Tree
The input/output complexity of sorting and related problems
Cache-oblivious algorithms
Related Papers (5)
Frequently Asked Questions (17)
Q2. What is the density of a node u at depth k?
For a node u at depth k, the upper-bound density threshold τk is τ0 + τd−τ0d k and the lower-bound density threshold ρk is ρ0 − ρ0−ρdd k. Thus,0 < ρd < ρd−1 < · · · < ρ0 < τ0 < τ1 < · · · < τd = 1.A node u at depth k is within threshold if ρk ≤ density(u) ≤ τk.
Q3. What is the cost of a group in the middle or bottom layer?
Scanning through a group in the middle or bottom layer costs O(1 + log NB ) memory transfers because each group contains O(log N) elements and is stored in a contiguous array of O(log N) elements.
Q4. How much do the authors pay for the update of the top layer?
When such a split or merge occurs, the authors pay O(log2 N) amortized memory transfers to update the top layer, which is only O(1) amortized memory transfers per update to the data structure.
Q5. What is the way to protect the low-fluidity data from the frequent updates?
The buffer-node solution is to add a large number of extra (dataless) nodes in between data of different fluidity to “protect” the low-fluidity data from the frequent updates of high-fluidity data.
Q6. What is the c of the packed-memory array?
For any desired c > 1, the packed-memory array maintains N elements in an array of size cN and supports insertions and deletions in O(1+ log2 N B )amortized memory transfers and scanning S consecutive elements in O(1 + S/B) memory transfers.
Q7. What is the way to store the data in a buffer-node array?
The first data structure maintains the data in sorted order in an array with gaps, and it stores an auxiliary structure for searching within this array.
Q8. What is the way to avoid a cache-oblivious data structure?
There is a cache-oblivious data structure that maintains an ordered set subject to searches in O(logB+1 N) memory transfers, insertions and deletions in O(logB+1 N) amortized memory transfers, and scanning S consecutive elements in O(1 + S/B) amortized memory transfers.
Q9. What is the cost of a split or merge?
When such a split or merge occurs, the authors pay O(1+ log2 N B )amortized memory transfers to rebalance the packed-memory array on the middle layer.
Q10. How does the level of detail k work?
Level of detail k is derived by starting with the entire tree, recursively partitioning it as described above, and exiting a branch of the recursion upon reaching a recursive subtree of height ≤ 2k.
Q11. How do the authors increase the pointers in the recursive array?
That is, the authors increase the pointers by ‖A′′‖, the amount of space occupied in the packedmemory array by A′′, including unused nodes.
Q12. What is the property of a tree that is weight balanced?
A tree is weight balanced if, for every node v, its left subtree (including v) and its right subtree (including v) have sizes that differ by at most a constant factor.
Q13. What is the significance of the rounding scheme?
This rounding scheme is important for later dynamic structures because the heights of the cut lines in the lower trees do not vary with N .
Q14. What is the cost of deleting ghost elements from the bottom layer?
The middle layer may also store ghost elements which have been deleted from the bottom layer but are still representatives in the middle layer.
Q15. What is the way to store elements in the bottom layer?
the bottom layer is implemented by an unordered collection of groups, where the elements in each group are stored in an arbitrary order within a contiguous region of memory.
Q16. What is the density of a node in the tree?
The density of a node u in the tree, denoted density(u), is the number of elements stored in u’s subarray divided by capacity(u).
Q17. What is the way to remove the O( log2 N B) term in the update?
For any of the cache-oblivious B-tree structures, a natural question is whether the O( log2 N B ) term in the update bound can be removed while still supporting scansoptimally.