Table of Contents
Fetching ...

Sharded Elimination and Combining for Highly-Efficient Concurrent Stacks

Ajay Singh, Nikos Metaxakis, Panagiota Fatourou

TL;DR

SEC (Sharded Elimination and Combining) introduces a blocking linearizable stack that integrates elimination and software combining using thread sharding. By partitioning threads into aggregators and further into batches, SEC achieves high parallelism with minimal CAS contention on the top pointer, using two lightweight counters per batch to implement elimination and coordination. The approach delivers significant throughput gains over previous stacks across NUMA-heavy, high-thread-count environments, particularly under high contention, and scales through multiple aggregators and batch-level combining. The combination of sharded elimination with batch-level combining offers a practical, generalizable technique for concurrent data structures beyond stacks, with demonstrated effectiveness on large multicore systems.

Abstract

We present a new blocking linearizable stack implementation which utilizes sharding and fetch&increment to achieve significantly better performance than all existing concurrent stacks. The proposed implementation is based on a novel elimination mechanism and a new combining approach that are efficiently blended to gain high performance. Our implementation results in enhanced parallelism and low contention when accessing the shared stack. Experiments show that the proposed stack implementation outperforms all existing concurrent stacks by up to 2X in most workloads. It is particularly efficient in systems supporting a large number of threads and in high contention scenarios.

Sharded Elimination and Combining for Highly-Efficient Concurrent Stacks

TL;DR

SEC (Sharded Elimination and Combining) introduces a blocking linearizable stack that integrates elimination and software combining using thread sharding. By partitioning threads into aggregators and further into batches, SEC achieves high parallelism with minimal CAS contention on the top pointer, using two lightweight counters per batch to implement elimination and coordination. The approach delivers significant throughput gains over previous stacks across NUMA-heavy, high-thread-count environments, particularly under high contention, and scales through multiple aggregators and batch-level combining. The combination of sharded elimination with batch-level combining offers a practical, generalizable technique for concurrent data structures beyond stacks, with demonstrated effectiveness on large multicore systems.

Abstract

We present a new blocking linearizable stack implementation which utilizes sharding and fetch&increment to achieve significantly better performance than all existing concurrent stacks. The proposed implementation is based on a novel elimination mechanism and a new combining approach that are efficiently blended to gain high performance. Our implementation results in enhanced parallelism and low contention when accessing the shared stack. Experiments show that the proposed stack implementation outperforms all existing concurrent stacks by up to 2X in most workloads. It is particularly efficient in systems supporting a large number of threads and in high contention scenarios.
Paper Structure (14 sections, 4 theorems, 12 figures, 3 tables)

This paper contains 14 sections, 4 theorems, 12 figures, 3 tables.

Key Result

lemma 1

The linearization point of every non-eliminated operation lies within its execution interval.

Figures (12)

  • Figure 1: Key data structures and variables
  • Figure 2: Throughput. (Left) 100% updates. (Middle) 50% updates. (Right) 10%updates. Y-axis: throughput in millions of operations per second. X-axis: #threads. Number of aggregators used is two.
  • Figure 3: Throughput for push-only and pop-only workloads on Emerald. (Left) Push only. (Right) Pop only. Y-axis: throughput in millions of operations per second. X-axis: #threads. Number of aggregators used is two.
  • Figure 4: Comparing SEC throughput with various number of aggregators on Emerald. From left to right, 100% updates, 50% updates, 10%updates, 100%push-only. Y-axis: Throughput. X-axis: #threads. SEC with 1 aggregator is labeled as SEC_Agg1.
  • Figure 5: Throughput with varying threads. (Left) 100% updates. (Middle) 50% updates. (Right) 10%updates. Y-axis: throughput in millions of operations per second. X-axis: #threads.
  • ...and 7 more figures

Theorems & Definitions (4)

  • lemma 1
  • lemma 2
  • lemma 3
  • theorem 6