x86存储指令相对于SC-DRF的强度问题,源自Herb atomic<> Weapons演讲
关于x86 "S"的对应属性
- 图表中标注的x86 "S"就是普通
mov存储指令,不是带全屏障的xchg操作。 - 它的强度介于SC-DRF要求的最低硬件能力和完全顺序一致性(fully SC)之间,和Herb的表述完全匹配。
Herb提到的「(x86) stores are much stronger than they need to be」是站在硬件满足SC-DRF要求的最低门槛角度说的:
SC-DRF的核心是语言层面给无数据竞争程序的顺序一致性保证,硬件层面只需要能支持对应内存序的屏障能力即可,不需要所有普通存储天生带强序。比如ARM架构的普通存储指令默认是弱序的,只有显式加后缀的指令才具备release语义,完全可以靠编译器按需插屏障实现SC-DRF。而x86的mov存储天生自带TSO模型的强保证:禁止StoreStore、LoadStore重排序,天然符合release存储要求,且所有核心观测到的存储顺序全局一致,这些属性都是超出SC-DRF对硬件的最低要求的,属于硬件“多做了工作”,所以说它比需要的更强。
- 普通
mov存储没有禁止StoreLoad重排序:即核心先执行一个存储操作、再执行另一个地址的加载操作时,加载可以被重排到存储提交之前。这也是x86要实现std::memory_order_seq_cst级别的存储时,必须在mov后加mfence,或者直接用自带全屏障的xchg的原因,后者才属于fully SC级别的操作。 - 你对SC存储需要
xchg的认知是完全正确的,mov本身确实不具备完全SC的强度,所以它不会落在fully SC区间。
内容的提问来源于stack exchange,提问作者zanmato
相关产品推荐
相关产品推荐

