QUICK REVIEW
[论文解读] Single-Producer/Single-Consumer Queues on Shared Cache Multi-Core Systems
Massimo Torquati|arXiv (Cornell University)|Dec 8, 2010
Parallel Computing and Optimization Techniques参考文献 12被引用 15
一句话总结
本文提出了一种新颖、高效、无界的无等待单生产者/单消费者(uSPSC)队列,适用于共享缓存多核系统,基于改进的拉姆普特循环缓冲区,最大限度减少动态内存分配并最大化缓存局部性。该算法通过采用多推送优化避免内存屏障,实现高性能,在合成基准测试和真实世界流水线工作负载中均优于传统的基于链表的队列。
ABSTRACT
Using efficient point-to-point communication channels is critical for implementing fine grained parallel program on modern shared cache multi-core architectures. This report discusses in detail several implementations of wait-free Single-Producer/Single-Consumer queue (SPSC), and presents a novel and efficient algorithm for the implementation of an unbounded wait-free SPSC queue (uSPSC). The correctness proof of the new algorithm, and several performance measurements based on simple synthetic benchmark and microbenchmark, are also discussed.
研究动机与目标
- 解决传统基于链表的SPSC队列因动态内存分配和缓存局部性差导致的性能瓶颈。
- 设计一种无等待的无界SPSC队列,避免昂贵的内存屏障并减少对动态分配的依赖。
- 在共享缓存多核架构的生产者-消费者工作负载中,提升缓存性能和吞吐量。
- 为流式处理和流水线工作负载提供一种可证明正确、高性能的现有SPSC队列实现替代方案。
提出的方法
- 扩展拉姆普特的无等待循环缓冲区算法,通过仅在必要时使用动态内存分配,实现无界大小。
- 引入多推送优化(mpush),将多个元素批量合并为单个原子操作,以减少缓存未命中并提升局部性。
- 采用修改后的缓冲区结构,通过将条目标记为BOTTOM表示可用,实现安全的无阻塞操作。
- 使用仅基于比较并交换(CAS)操作的无锁、无等待设计,避免显式同步和内存屏障。
- 在可能的情况下将生产者和消费者绑定到同一核心,以利用共享L1/L2缓存并减少虚假共享。
- 应用编译器和内存访问优化,减少队列操作关键路径中的L1和L2缓存未命中。
实验结果
研究问题
- RQ1能否在不引入动态内存分配开销的前提下,实现无界SPSC队列,同时保持无等待特性和正确性?
- RQ2多推送优化对SPSC队列操作的缓存性能和延迟有何影响?
- RQ3将生产者和消费者绑定到同一核心(核心亲和性)对队列吞吐量和延迟的性能影响如何?
- RQ4在真实世界流水线工作负载中,所提出的uSPSC队列与有界SPSC队列和动态链表基于SPSC队列相比表现如何?
- RQ5该算法能否在弱内存模型(如PowerPC或Itanium)下无需依赖内存屏障而保持正确性和高效性?
主要发现
- 与标准SPSC队列的推送操作相比,多推送(mpush)优化将L1缓存未命中减少约50%,L2缓存未命中减少超过50%。
- 每次推送/弹出操作的平均延迟从标准SPSC的10–11纳秒降低至多推送版本的6–9纳秒,性能最高提升达30%。
- 无界多推送SPSC(muSPSC)队列在真实流水线基准测试中实现最大1.4倍的加速,优于有界mSPSC(1.28)和动态链表dSPSC(0.98)。
- muSPSC队列对缓存优化的敏感度低于uSPSC队列,表明多推送优化在有界场景下能带来更大收益。
- 当生产者和消费者被绑定到同一核心时,性能显著提升,主要得益于更好的缓存局部性和更少的虚假共享。
- 所提出的uSPSC队列避免了昂贵的内存屏障和动态分配开销,在仅在必要时使用动态内存的前提下,性能仍优于基于链表的替代方案。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。