CPU 指令重排是 cache 同步太慢的表征么?

2022-04-08 16:50:06 +08:00
 dangyuluo

最近想加深一下对 CPU core 之间的缓存同步,内存模型的理解,读了一些文章。在此之前,我知道除了编译器以外,多核 CPU 也是可以对指令进行重排的,比如下图中两个核心的指令,如果没有重排的话,r1 == 0 && r2 == 0是不可能发生的,

实际情况下,CPU 是可以把指令重排成如下顺序,以至于r1 == 0 && r2 == 0是可能发生的,

但标准又说了,在单核的情况下,这种重排是不可能发生的。由此我联想到了 MESI 协议,CPU 在不同核之间,MESI 协议保证了缓存生效 /失效。

请问是否可以这么理解,CPU 某个核心上的指令重排现象(上图 CPU2 上)是否只是因为 MESI 消息太慢导致的的表征?实际上 CPU2 还是按照既定的指令顺序执行,还是说 CPU2 真的就是调换了两个指令的顺序呢?

3424 次点击
所在节点    C++
22 条回复
ivechan
2022-04-09 23:55:12 +08:00
@dahakawang 《 A Primer on Memory Consistency and Cache Coherence 》 没有问题吧。
介绍的都是实际中常见的内存模型,比如 X86 ( TSO )。
这个和某个 specific implementation 没有任何关系.
正如 @nlzy 说的一样,内存模型是一个架构的规范,和微架构实现没有关系。
所有 x86 都是 TSO 的,没有什么例外。
ivechan
2022-04-10 00:02:21 +08:00
《 A Primer on Memory Consistency and Cache Coherence 》可以滤清概念
偏实践的话可以看 https://www.kernel.org/doc/Documentation/memory-barriers.txt
(怎么用 MB )

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/845754

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX