Layering Data Structures over Skip Graphs for Increased NUMA Locality
We describe an approach for blackbox concurrency based on layering user-provided, sequential data structures over concurrent skip graph variants for increased NUMA locality. We implement sets, maps, and priority queues, although our approach is potentially applicable for other data types. Threads operate privately on the top sequential data structures, used to jump to positions in the bottom concurrent skip graph, near to where insertions and removals take place, reducing remote memory accesses. A careful data structure partition scheme ensures the increase of data locality. We implemented our strategy in C++14, and our sets and maps run up to 23 highly-optimized concurrent skip list (our fastest contender), with up to 70 of reduction on the number of remote synchronized reads, and up to a 3.21 times increase in the CAS locality for 32 threads.
READ FULL TEXT