Nat*_*mal 4 memory multithreading caching memory-management cpu-architecture
我想知道MOESI相对于MESI缓存一致性协议有什么好处,以及哪种协议目前最受现代体系结构的青睐。如果成本不允许,收益通常不会转化为实施。MOESI在MESI上的定量性能结果也很高兴看到。
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中出现。
就绝对性能而言,MOESI几乎总是优于MESI。但是,MESI仅需要每条高速缓存行2位来保持状态,而MOESI则需要每条高速缓存行3位。因此,对于较小的高速缓存行,MOESI的相对面积开销会增加。当目标域中的应用程序类型对共享缓存行的写入很少时,这可能没有道理。在某些领域,甚至额外的功率或静态能量开销也可能无法容忍。由于这些原因,对于低能耗/低性能/小型处理器,MOESI可能过于昂贵。也就是说,就每瓦性能或每焦耳性能而言,MOESI的效率较低。ARM11使用MESI。ARM Cortex-A57在L1使用MESI,在L2使用MOESI。注意,使用特定一致性协议的决定并非独立于有关缓存层次结构,互连和核心数的其他方面的决定而做出的。这些参数相互影响。