gpt4 book ai didi

memory - x86 内存排序 : Loads Reordered with Earlier Stores vs. 处理器内转发

转载 作者:行者123 更新时间:2023-12-04 19:07:28 26 4
gpt4 key购买 nike

我试图理解英特尔 System Programming Guide 的第 8.2 节(这是 PDF 中的第 3 卷)。

特别是,我看到了两种不同的重新排序方案:

8.2.3.4 加载可能会与较早的存储重新排序到不同的位置



8.2.3.5 允许处理器内转发

但是,我不明白这些场景与 POW 可观察到的效果之间的区别。这些部分中提供的示例对我来说似乎可以互换。 8.2.3.4 示例可以通过 8.2.3.5 规则以及它自己的规则来解释。反过来对我来说似乎也是正确的,尽管在那种情况下我不太确定。

所以这是我的问题:是否有更好的例子或解释 8.2.3.4 的可观察效果与 8.2.3.5 的可观察效果有何不同?

最佳答案

示例在 8.2.3.5如果您希望内存排序完全干净,并且即使您承认 8.2.3.4,也应该“令人惊讶”。允许负载与不同地址的存储重新排序。

   Processor 0      |      Processor 1
--------------------------------------
mov [x],1 | mov [y],1
mov R1, [x] | mov R3,[y]
mov R2, [y] | mov R4,[x]

注意关键部分是中间新增的负载都返回 1 (存储到加载转发使这在 uarch 中成为可能而不会停顿)。因此,理论上,您会期望在这两个加载完成时全局“观察”这两个存储(顺序一致性就是这种情况,其中存储之间存在唯一的排序并且所有核心都看到它)。

然而,后来 R2 = R4 = 0作为一个有效的结果证明情况并非如此 - 实际上首先在本地观察商店。换句话说,允许此结果意味着处理器 0 将存储视为 time(x) < time(y) ,而处理器 1 则相反。

这是关于此内存模型一致性的一个非常重要的观察,前一个示例没有证明这一点。这种细微差别是 Sequential Consistency 之间的最大区别和 Total Store Ordering - 第二个例子打破了 SC,第一个没有。

关于memory - x86 内存排序 : Loads Reordered with Earlier Stores vs. 处理器内转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20907811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com