_mm_sfence内部函数和SFENCE指令之间是什么关系?

时间:2018-07-09 17:38:12

标签: x86 memory-barriers

我正在尝试非时间指令,并且已经熟悉具有普通装载/存储的栅栏的工作方式。

英特尔针对非时间性操作定义了一个内在的_mm_sfence,该手册将其定义为:

  

保证所有先前的商店在任何后续的商店之前都是全局可见的。

我对此操作有一些疑问。

  1. 这只是插入SFENCE指令吗?如果没有,这意味着什么?
  2. 如果这不仅是SFENCE,那么SFENCE指令是否还会为非临时存储提供订购保证?

1 个答案:

答案 0 :(得分:4)

_mm_sfence内部函数做两件事:

  • 插入SFENCE指令。
  • 根据编译器的不同,它会插入一个编译器写屏障,以使编译器不会针对程序顺序跨内在函数对任何内存写进行重新排序。在GCC,MSVC和ICC中就是这种情况。虽然不确定Clang,但很可能也可以做到这一点。