现代AMD/Intel CPU下同核心SMT/HT与跨核心线程原子操作竞争性能问询
同核心SMT/HT线程与跨核心线程原子操作竞争性能对比
针对现代AMD Zen2+、Intel Skylake+的消费级/服务器级x86 CPU,同核心的两个SMT/HT线程发生原子操作竞争时的性能,普遍显著优于绑定在不同核心上的线程竞争性能。
核心原因
- 缓存一致性开销差异:同SMT线程共享核心的L1、L2缓存,原子操作涉及的缓存行仅需在单个核心内部同步,不需要触发跨核心的MESI缓存一致性RFO(所有权请求)操作,也不需要经过CPU内部的跨核心互联链路(Intel的环形总线、AMD的Infinity Fabric)通信,延迟大幅降低。跨核心竞争时,缓存行需要在多个核心的缓存之间来回迁移,每次竞争都会触发完整的一致性协议交互,开销极高。
- 原子指令硬件实现差异:x86平台带
lock前缀的原子指令(如lock inc、lock dec)、隐含锁语义的xchg等指令,在同核心SMT竞争场景下,硬件仅需临时暂停另一个同核心SMT线程的内存操作,完成原子指令后即可恢复,不需要和其他核心做任何交互,执行耗时和无竞争场景差距很小。 - 实测性能差距参考:以单变量原子递增的竞争场景为例,同核心SMT两个线程的操作吞吐量通常是跨核心场景的310倍,操作延迟仅为跨核心场景的1/51/3,这个差异在近5年发布的AMD、Intel CPU上表现一致。
补充说明:该结论仅适用于多线程竞争同一个原子变量的场景。如果各线程操作独立的无共享原子变量,没有竞争存在,那么同核心SMT线程会因为共享核心的计算、缓存资源,性能反而低于跨核心部署的线程。
内容的提问来源于stack exchange,提问作者iam
相关产品推荐
相关产品推荐

