首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除了防止指令的重排外,内存障碍还会执行哪些任务?

除了防止指令的重排外,内存障碍还会执行哪些任务?
EN

Software Engineering用户
提问于 2018-05-10 20:52:21
回答 1查看 474关注 0票数 3

我知道,内存障碍阻止了指令从前到后以及从后到后的重新排序,例如,如果我有以下说明:

代码语言:javascript
复制
instruction 1
instruction 2
instruction 3
memory barrier
instruction 4
instruction 5
instruction 6

这些指令可以按以下顺序执行:

代码语言:javascript
复制
instruction 3
instruction 1
instruction 2
memory barrier
instruction 6
instruction 5
instruction 4

但它们永远不会按以下顺序执行:

代码语言:javascript
复制
instruction 1
instruction 2
instruction 5
memory barrier
instruction 4
instruction 3
instruction 6

但是,我不确定以下任务是否也是由内存屏障执行的:

  • 在内存屏障完成之前,所有挂起的操作都已完成。
  • 清除内存屏障之前的写操作中仍然存在于缓存中的所有数据。

注意:我指的是x86体系结构。

EN

回答 1

Software Engineering用户

发布于 2018-05-11 16:36:55

确定的来源是英特尔优化参考手册。请看第7章中的各种栅栏说明,以及第9章中关于多线程的讨论。

从第7章:“MFENCE (内存栅栏)指令使得在MFENCE之前的每个加载/存储指令按照程序顺序在MFENCE之后的任何加载/存储之前全局可见。”

关于这一点有一个有趣的关于y-组合子的讨论。对我来说,最有趣的评论是由并发数据结构库(并发工具包)的(推定)作者写的:“根据我的经验,在x86上使用mfence没有任何与并发相关的原因。实际上,您将看到我们有检查x86oids并使用原子RMW而不是非原子存储/RMW+fence的代码。”这就引出了一个问题,你什么时候需要篱笆指示?我认为这主要是为了简化代码。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/370736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档