内存排序指令对 x86/x86_64 多个套接字的影响

Effect of memory ordering instructions on x86/x86_64 multiple sockets

试图在 Intel 64/IA-32 中寻找这个问题的答案,但找不到确定的答案。问题是:内存排序指令(例如 SFENCE)是否仅对本地处理器有影响,或者它们是否传播到整个缓存一致性域,例如相邻插槽上的 CPU(在多插槽系统中)?

SFENCE 影响本地 CPU 的存储对同一插槽和其他插槽上的其他核心或内存映射 I/O 全局可见的顺序。

其他核心无法判断你是否运行 SFENCE,它们只能观察到你内存操作的顺序。 (即 sfence 的实现是核心及其存储队列的内部)。

sfence 是在第一个多核 CPU 之前的 SSE1 中与 PIII 一起引入的。当时,SMP 系统只有多路接口。

另请注意,它仅对弱排序存储(movnt* 或写入组合内存区域的存储)做任何有用的事情。普通商店有 "release" semantics already on x86. Only mfence (and locked instructions) matter for normal memory operations on x86, to prevent StoreLoad reordering.