MOESI 缓存一致性协议比 MESI 有什么好处?
What is the benefit of the MOESI cache coherency protocol over MESI?
我想知道 MOESI 比 MESI 缓存一致性协议有什么好处,以及哪种协议目前更受现代体系结构的青睐。如果成本不允许,收益通常不会转化为实施。 MOESI 优于 MESI 的定量性能结果也很高兴看到。
AMD使用MOESI,Intel使用MESIF。 (我不知道非 x86 缓存的详细信息。)
MOESI 允许直接在缓存之间发送脏缓存行 而不是写回共享外部缓存然后从那里读取。链接的 wiki 文章有更多细节,但基本上是关于共享脏数据。 Owned 状态跟踪哪个缓存负责写回脏数据。
MESIF allows caches to Forward a copy of a clean cache line to another cache, instead of other caches having to re-read it from memory to get another Shared copy. (Intel since Nehalem already uses a single large shared L3 cache for all cores, so all requests are ultimately backstopped by one L3 cache before checking memory anyway, but that's for all cores on one socket. Forwarding apply between sockets in a multi-socket system. Until Skylake-AVX512, the large shared L3 cache was inclusive. )
维基百科的 MESIF 文章(上面链接)对 MOESI 和 MESIF 进行了一些比较。
在某些情况下,AMD 在 2 个内核之间共享相同的缓存行具有较低的延迟。例如,参见 this graph of inter-core latency Ryzen vs. 四核 Intel vs. 多核 Intel(环形总线:Broadwell)vs. Skylake-X(最差)。
显然,英特尔和 AMD 设计之间存在 许多 影响内核间延迟的其他差异,例如英特尔使用环形总线或mesh,而 AMD 使用带有小集群的 crossbar/all-to-all 设计。 (例如,Ryzen 有 4 个共享 L3 内核的集群。这就是为什么 Ryzen 的内核间延迟从内核 #3 到内核 #4 又增加了一步。)
顺便说一句,请注意,对于 Intel 和 AMD,同一物理内核上的两个逻辑内核之间的延迟要低得多。 .
我没有寻找任何在其他方面类似的模型上模拟 MESI 与 MOESI 的学术论文。
选择 MESIF 还是 MOESI 可能会受到其他设计因素的影响;英特尔使用包含大型标签的 L3 共享缓存作为一致性流量的后盾,这是他们解决 MOESI 解决的相同问题的方法:通过写回 L3 有效地处理内核之间的流量,然后将数据从 L3 发送到请求内核,如果核心在私有 L2 或 L1d 中的线路处于修改状态。
IIRC,某些 AMD 设计(如 Bulldozer 系列的某些版本)没有所有内核共享的末级缓存,而是具有由内核对共享的更大的 L2 缓存。不过,更高性能的 BD 系列 CPU 也有一个共享缓存,所以至少干净的数据可以进入 L3。
MOESI 在绝对性能方面几乎总是优于 MESI。然而,MESI 只需要每个缓存行 2 位来保存状态,而 MOESI 需要每个缓存行 3 位。因此,对于较小的高速缓存行,MOESI 的相对面积开销会增加。当目标域中的应用程序类型对共享缓存行的写入很少时,这可能是不合理的。在某些领域中,甚至可能无法容忍额外的功率或静态能量开销。由于这些原因,MOESI 对于 low-energy/low-performance/small 处理器来说可能太贵了。也就是说,MOESI 在每瓦性能或每焦耳性能方面效率较低。 ARM11 uses MESI. ARM Cortex-A57 uses MESI at L1 and MOESI at L2。请注意,使用特定一致性协议的决定并不是独立于关于缓存层次结构、互连和核心数量的其他方面的决定而做出的。这些参数相互影响。
我想知道 MOESI 比 MESI 缓存一致性协议有什么好处,以及哪种协议目前更受现代体系结构的青睐。如果成本不允许,收益通常不会转化为实施。 MOESI 优于 MESI 的定量性能结果也很高兴看到。
AMD使用MOESI,Intel使用MESIF。 (我不知道非 x86 缓存的详细信息。)
MOESI 允许直接在缓存之间发送脏缓存行 而不是写回共享外部缓存然后从那里读取。链接的 wiki 文章有更多细节,但基本上是关于共享脏数据。 Owned 状态跟踪哪个缓存负责写回脏数据。
MESIF allows caches to Forward a copy of a clean cache line to another cache, instead of other caches having to re-read it from memory to get another Shared copy. (Intel since Nehalem already uses a single large shared L3 cache for all cores, so all requests are ultimately backstopped by one L3 cache before checking memory anyway, but that's for all cores on one socket. Forwarding apply between sockets in a multi-socket system. Until Skylake-AVX512, the large shared L3 cache was inclusive.
维基百科的 MESIF 文章(上面链接)对 MOESI 和 MESIF 进行了一些比较。
在某些情况下,AMD 在 2 个内核之间共享相同的缓存行具有较低的延迟。例如,参见 this graph of inter-core latency Ryzen vs. 四核 Intel vs. 多核 Intel(环形总线:Broadwell)vs. Skylake-X(最差)。
显然,英特尔和 AMD 设计之间存在 许多 影响内核间延迟的其他差异,例如英特尔使用环形总线或mesh,而 AMD 使用带有小集群的 crossbar/all-to-all 设计。 (例如,Ryzen 有 4 个共享 L3 内核的集群。这就是为什么 Ryzen 的内核间延迟从内核 #3 到内核 #4 又增加了一步。)
顺便说一句,请注意,对于 Intel 和 AMD,同一物理内核上的两个逻辑内核之间的延迟要低得多。
我没有寻找任何在其他方面类似的模型上模拟 MESI 与 MOESI 的学术论文。
选择 MESIF 还是 MOESI 可能会受到其他设计因素的影响;英特尔使用包含大型标签的 L3 共享缓存作为一致性流量的后盾,这是他们解决 MOESI 解决的相同问题的方法:通过写回 L3 有效地处理内核之间的流量,然后将数据从 L3 发送到请求内核,如果核心在私有 L2 或 L1d 中的线路处于修改状态。
IIRC,某些 AMD 设计(如 Bulldozer 系列的某些版本)没有所有内核共享的末级缓存,而是具有由内核对共享的更大的 L2 缓存。不过,更高性能的 BD 系列 CPU 也有一个共享缓存,所以至少干净的数据可以进入 L3。
MOESI 在绝对性能方面几乎总是优于 MESI。然而,MESI 只需要每个缓存行 2 位来保存状态,而 MOESI 需要每个缓存行 3 位。因此,对于较小的高速缓存行,MOESI 的相对面积开销会增加。当目标域中的应用程序类型对共享缓存行的写入很少时,这可能是不合理的。在某些领域中,甚至可能无法容忍额外的功率或静态能量开销。由于这些原因,MOESI 对于 low-energy/low-performance/small 处理器来说可能太贵了。也就是说,MOESI 在每瓦性能或每焦耳性能方面效率较低。 ARM11 uses MESI. ARM Cortex-A57 uses MESI at L1 and MOESI at L2。请注意,使用特定一致性协议的决定并不是独立于关于缓存层次结构、互连和核心数量的其他方面的决定而做出的。这些参数相互影响。