作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大多数 CPU 架构会重新排序存储加载操作,但我的问题是为什么?我对存储加载屏障的解释如下:
x = 50;
store_load_barrier;
y = z;
最佳答案
简答 :存储加载屏障防止处理器推测性地执行存储加载屏障之后的 LOAD,直到所有先前的存储完成。
详情 :
存储加载屏障昂贵的原因是它阻止了跨屏障的 LOAD 和 STORE 操作的重新排序。
假设您有一个如下所示的指令序列:
... ;; long latency operation to compute r1
ST r1, [ADDR1] ;; store value in r1 to memory location referenced by ADDR1
LD r3, [ADDR2] ;; load r3 with value in memory location ADDR2
... ;; instructions that use result in r3
r1
的值将是需要很长时间才能完成的操作的结果。指令
ST r1, [ADDR1]
将不得不拖延到
r1
在此期间,无序处理器可以推测性地执行
LD r3, [ADDR2]
和其他说明,如果它们独立于较早的商店。在提交存储之前,它们实际上不会提交,但是通过推测性地完成大部分工作,结果可以保存在重新排序缓冲区中,并准备好更快地提交。
... ;; long latency operation to compute r1
ST r1, [ADDR1] ;; store value in r1 to memory location referenced by ADDR1
ST_LD_BARRIER ;; store-load barrier
LD r3, [ADDR2] ;; load r3 with value in memory location ADDR2
... ;; instructions that use result in r3
LD r3, [ADDR2]
指令和后续相关指令从推测执行直到前一个存储指令完成。这可能会降低 CPU 性能,因为整个 CPU 流水线可能不得不在等待 ST 指令完成时停顿,即使在 CPU 本身中,LD 和 ST 之间没有依赖性。
关于multithreading - 为什么存储负载屏障被认为是昂贵的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27475025/
我正在阅读 MongoDB,并试图了解它的最佳用途。我没有看到明确答案的一个问题是哪些操作便宜或昂贵,以及在什么条件下。 你能帮忙澄清一下吗? 谢谢。 最佳答案 人们经常声称 mongodb 的写入速
我正在寻找一个主要来源(或一个非常好的解释)来支持在为 iPhone 编写软件时使用 autorelease 是危险的或过于昂贵的说法。 许多开发者都提出了这种说法,我什至听说 Apple 不推荐它,
我意识到这离微优化领域太远了,但我很想知道为什么调用 DateTime.Now 和 DateTime.UtcNow 如此“昂贵”。我有一个示例程序,它运行几个场景来做一些“工作”(添加到一个计数器)并
我是一名优秀的程序员,十分优秀!