与MESI相比,MOESI缓存一致性协议有什么好处?

时间:2018-04-23 14:16:29

标签: multithreading caching memory memory-management cpu-architecture

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

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

MESIF允许高速缓存 F 将干净高速缓存行的副本转发到另一个高速缓存,而不是其他高速缓存必须从内存重新读取它以获取另一个共享副本。 (英特尔自Nehalem已经为所有核心使用单个大型共享L3缓存,因此所有请求最终都会在检查内存之前由一个L3缓存支持,但这适用于一个插槽上的所有核心 。转发之间适用多插槽系统中的套接字。在Skylake-AVX512之前,大型共享L3缓存是包容性的。Which cache mapping technique is used in intel core i7 processor?

维基百科的MESIF文章(上面链接)对MOESI和MESIF进行了一些比较。

在某些情况下,AMD在两个内核之间共享相同的缓存线的延迟较低。例如,请参阅this graph of inter-core latency了解Ryzen与四核英特尔与多核英特尔(环形总线:Broadwell)对比Skylake-X(最差)。

显然,英特尔和AMD设计之间的其他差异会影响核心间延迟,例如使用环形总线或网状网的英特尔,以及使用交叉开关的AMD /采用小型集群的全方位设计。 (例如,Ryzen拥有共享L3的4个核心集群。这就是为什么Ryzen的核心间延迟从核心#3到核心#4的另一步。)

BTW,请注意,同一物理核心上两个逻辑核心之间的延迟对于英特尔和AMD来说要低得多。 What are the latency and throughput costs of producer-consumer sharing of a memory location between hyper-siblings versus non-hyper siblings?

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

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

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