我想知道MOESI与MESI缓存一致性协议相比有什么好处,以及哪个协议目前是现代体系结构所青睐的。通常情况下,如果成本不允许的话,好处就不会转化为实现。MOESI在MESI上的定量性能结果也会很好地看到。
发布于 2018-04-23 21:09:28
AMD使用MOESI,英特尔使用MESIF。(我不知道非x86缓存的详细信息。)
MOESI 允许直接在缓存之间发送脏的缓存行,而不是写回共享的外部缓存,然后从其中读取。链接的wiki文章有一些更多的细节,但基本上是关于共享脏数据的。Owned状态跟踪哪个缓存负责写回脏数据。
MESIF允许缓存到F或将干净缓存行的副本复制到另一个缓存,而不是其他缓存必须从内存中重新读取才能获得另一个共享副本。(由于Nehalem已经为所有内核使用了一个大型共享L3缓存,所以在检查内存之前,所有请求最终都由一个L3缓存支持,但这是针对一个套接字上的所有内核的。多套接字系统中套接字之间的转发应用。直到Skylake- was 512,大型共享L3缓存才具有包容性。在英特尔核心i7处理器中使用了哪种缓存映射技术?)
维基百科的MESIF文章(链接在上面)有一些比较MOESI和MESIF。
在某些情况下,AMD在两个核之间共享相同的缓存线的延迟较低。例如,请参见这个内部延迟图 for Ryzen与四核Intel与多核心Intel (环形总线: Broadwell)和Skylake-X (最差)。
显然存在着公司的许多--英特尔和AMD设计之间的其他差异会影响内核间延迟的,比如英特尔使用环形总线或网状结构,而AMD则使用交叉/全方位的小集群设计。(例如,Ryzen有由4个核心组成的集群,它们共享一个L3。这就是为什么Ryzen的内核延迟从核心#3到核心#4的另一步。)
顺便指出,对于Intel和AMD来说,在同一物理核上的两个逻辑核之间的延迟要低得多。在超级兄弟姐妹和非超级兄弟姐妹之间共享内存位置的生产者-消费者共享的延迟和吞吐量成本是多少?。
我没有在其他类似的模型上寻找任何模拟MESI和MOESI的学术论文。
MESIF与MOESI的选择可能会受到其他设计因素的影响;英特尔使用包含标签的大型L3共享缓存作为一致性通信的后盾,这是它们解决的相同问题的解决方案:通过对L3的写回处理核之间的通信量,然后将数据从L3发送到请求的核心,在核心处于修改状态的情况下,以私有的L2或L1d的方式处理数据。
IIRC,一些AMD设计(像一些版本的推土机系列)并没有所有核心共享的最后一级缓存,而是有更大的L2缓存由一对核心共享。然而,高性能的BD家族CPU也有一个共享缓存,因此至少在L3中可能会有干净的数据。
发布于 2018-04-24 02:36:24
在绝对性能方面,MOESI几乎总是优于MESI。然而,MESI只需要每个缓存行2位来保持状态,而MOESI则需要每个缓存行3位。因此,对于较小的缓存线,MOESI的相对面积开销增加。当目标域中的应用程序类型很少写入共享缓存行时,这可能是不合理的。即使是额外的功率或静态能量开销在某些领域也是不可容忍的。由于这些原因,对于低能量/低性能/小型处理器来说,MOESI可能太贵了。也就是说,MOESI在性能/瓦特或性能/焦耳方面效率较低.ARM11使用MESI。ARM Cortex-A57在L1使用MESI,在L2使用MOESI。。请注意,使用特定一致性协议的决定并不是独立于对缓存层次结构、互连和核数目的其他方面作出决定的。这些参数相互影响。
https://stackoverflow.com/questions/49983405
复制相似问题