【发布时间】:2018-09-25 09:22:04
【问题描述】:
- MESI 的重点是保留共享内存系统的概念。
- 但是,有了存储缓冲区,事情就变得复杂了:
- 一旦数据到达 MESI 实现缓存,内存就会保持一致。
- 但是,在此之前,每个内核可能不同意内存位置 X 中的内容,具体取决于每个内核的本地存储缓冲区中的内容。
- 因此,从每个内核的角度来看,内存状态似乎是不同的 - 它是不连贯的。
- 那么,我们为什么要“部分”地执行与 MESI 的一致性?
编辑:在进一步缩小了真正让我困惑的地方之后,进行了实质性的编辑。我试图保持问题的一般概念不变,以保持收到的重要答案的相关性。
【问题讨论】:
-
@PaulA.Clayton。是的,我明白这一点;但这如何回答这个问题?我没有提到一致性——只是一致性:获取一个陈旧的缓存行。
-
@Kay,您给出的示例与“获取陈旧的缓存行”无关,它保留了缓存一致性并符合 TSO 内存排序模型(这确实比顺序一致性弱,但是远非“弱”)。
-
@PaulA.Clayton 我认为我通过链接一个 确实 与一致性有关的示例来混淆问题。对此感到抱歉。
-
@Leeor 我认为我通过链接一个确实与一致性有关的示例来混淆问题。对此感到抱歉。
-
主流英特尔 CPU 中的缓存是完全一致的(对于通常的内存类型和正常的读写),所以你的问题的基础(他们不是)可能是无效的。是的,x86 模型内存本身允许一些有限的重新排序(加载通过较早的存储),但这主要是由于存储缓冲区和其他无序效应导致的内核重新排序的结果,而不是由于不连贯的缓存.没有您描述的类型的“最终一致性”。如果核心没有“立即”响应窥探,则窥探核心必须等待。
标签: caching concurrency x86 cpu-architecture mesi