MOESI缓存一致性协议相对于MESI有什么好处?

Nat*_*mal 4 memory multithreading caching memory-management cpu-architecture

我想知道MOESI相对于MESI缓存一致性协议有什么好处,以及哪种协议目前最受现代体系结构的青睐。如果成本不允许,收益通常不会转化为实施。MOESI在MESI上的定量性能结果也很高兴看到。

Pet*_*des 5

AMD使用MOESI,英特尔使用MESIF。(我不了解非x86缓存的详细信息。)

MOESI允许直接在缓存之间发送脏缓存行,而不是写回共享外部缓存然后从那里读取。链接的Wiki文章有更多详细信息,但是基本上是关于共享脏数据的。该 Ø wned状态跟踪哪些缓存是负责写回脏数据。

MESIF允许缓存到˚F从内存orward干净的缓存行到其它高速缓存的副本,而不必与其他高速缓存重读它得到另一个共享副本。(英特尔自从Nehalem已经为所有内核使用单个大型共享L3缓存以来,最终所有请求最终都会由一个L3缓存支持,无论如何仍要检查内存,但这是针对一个插槽上的所有内核。转发在多插槽系统中的插槽之间适用。直到SKYLAKE微架构-AVX512,大的共享L3高速缓存是包括端值。 哪个高速缓存映射技术在Intel Core i7处理器使用?

Wikipedia的MESIF文章(如上链接)在MOESI和MESIF之间进行了一些比较。


在某些情况下,AMD在2个内核之间共享同一缓存行的延迟较低。例如,请参见此Ryzen与四核Intel与多核Intel(环形总线:Broadwell)与Skylake-X(最差)的内核间延迟图表

显然,英特尔和AMD设计之间还有许多其他差异会影响内核间的延迟,例如英特尔使用环形总线或网状网,以及AMD使用交叉开关/全部到小设计的小型集群。(例如,Ryzen具有4个共享L3的内核集群。这就是为什么Ryzen的内核间延迟从内核3到内核4迈出了又一步。)

顺便说一句,请注意,对于英特尔和AMD,在同一物理内核上的两个逻辑内核之间的延迟要低得多。 超级兄弟姐妹与非超级兄弟姐妹之间的生产者/消费者共享内存位置的延迟和吞吐量成本是多少?

我没有寻找任何在其他类似模型上模拟MESI与MOESI的学术论文。

MESIF与MOESI的选择会受到其他设计因素的影响;英特尔将包含标签的大型L3共享高速缓存用作一致性流量的后盾,是他们解决MOESI解决的同一问题的解决方案:内核之间的流量通过回写到L3进行有效处理,然后将数据从L3发送到请求的内核,如果核心在专用L2或L1d中使线路处于“修改”状态。

在IIRC中,某些AMD设计(例如Bulldozer系列的某些版本)没有所有内核共享的最后一级缓存,而是由成对内核共享了较大的L2缓存。不过,性能更高的BD系列CPU确实也具有共享缓存,因此至少干净的数据可能会在L3中出现。

  • 回复:AMD 使用 MOESI,Intel 使用 MESIF:Intel 使用 SI 用于 L1 指令缓存以及 L1 数据和 L2 缓存的 MESI,直到所有缓存都使用 MESI 的奔腾 4。至少从 Nehalem 到 Haswell,使用了 [MESIF](https://patents.google.com/patent/US6922756B2/en)。在 Haswell-EP 中,实施了 MESIF 的复杂变体。我不确定更新的处理器。从 AMD K8 到 AMD Bulldozer,大多数(如果不是全部)AMD 处理器都使用 MOESI。但是,从 AMD Bulldozer 开始,使用了更复杂的 [协议](https://patents.google.com/patent/US8732410B2/en)。 (2认同)

Had*_*ais 5

就绝对性能而言,MOESI几乎总是优于MESI。但是,MESI仅需要每条高速缓存行2位来保持状态,而MOESI则需要每条高速缓存行3位。因此,对于较小的高速缓存行,MOESI的相对面积开销会增加。当目标域中的应用程序类型对共享缓存行的写入很少时,这可能没有道理。在某些领域,甚至额外的功率或静态能量开销也可能无法容忍。由于这些原因,对于低能耗/低性能/小型处理器,MOESI可能过于昂贵。也就是说,就每瓦性能或每焦耳性能而言,MOESI的效率较低。ARM11使用MESIARM Cortex-A57在L1使用MESI,在L2使用MOESI。注意,使用特定一致性协议的决定并非独立于有关缓存层次结构,互连和核心数的其他方面的决定而做出的。这些参数相互影响。