_mm_sfence 内在函数和 SFENCE 指令之间有什么关系? [英] What is the relationship between the _mm_sfence intrinsic and a SFENCE instruction?

查看:30
本文介绍了_mm_sfence 内在函数和 SFENCE 指令之间有什么关系?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在试验非时间指令,并且已经熟悉带有普通加载/存储的栅栏如何操作.

I am experimenting with non-temporal instructions, and am already familiar with how fences with ordinary load/stores operate.

Intel 定义了一个与非时间操作相关的内在 _mm_sfence,手册将其定义为:

Intel defines an intrinsic, _mm_sfence, in relation with non-temporal operations, which the manual defines as:

保证每个前面的商店在任何后续商店之前都是全局可见的.

Guarantees that every preceding store is globally visible before any subsequent store.

我对此操作有一些疑问.

I have some questions about this operation.

  1. 这只是插入 SFENCE 指令吗?如果不是,这意味着什么?
  2. 如果这不仅仅是一个 SFENCE,那么 SFENCE 指令是否也带有非临时存储的排序保证?

推荐答案

_mm_sfence 内在函数做了两件事:

The _mm_sfence intrinsic does two things:

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

这篇关于_mm_sfence 内在函数和 SFENCE 指令之间有什么关系?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆