首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么MESI协议会导致写操作,然后是对同一个地址的写操作?

为什么MESI协议会导致写操作,然后是对同一个地址的写操作?
EN

Stack Overflow用户
提问于 2015-02-01 11:59:34
回答 1查看 151关注 0票数 0

用于写回的MESI协议。一个处理器上有两个核心,为了简单起见,只有L1缓存。

  • 地址A从未被使用过
  • 核心1启动写操作以寻址A。它导致数据保存到缓存中,状态设置为M。
  • 核心2启动写操作来解决A.它会导致缓存丢失。核心2期RWITM广播。核心1是窥探,阻止RWITM,值保存到主存,它的状态设置为I在其缓存中。然后是核心2,重新发出RWITM,并将值存储在主存的地址A中。用于其缓存中的地址A的状态。

为什么核心1节省了内存中的任何东西,浪费时间--反正它几乎立即被覆盖了?

我的消息来源:

diagram.png

https://www.cs.utexas.edu/~pingali/CS395T/2009fa/lectures/mesi.pdf

protocol

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-01 13:33:00

原因有二:

  1. 这是在完整的行粒度上完成的。没有人保证两个内核都修改了相同的字节,所以core 2需要首先看到来自core 1的更新,然后用它修改的字节进行合并,然后才提交它的存储。
  2. 内核2可能在飞行中被抢占,或者它的写可能发生了其他事情(它仍然没有提交它,它只是在等待RWITM)。在这种情况下,您将丢失来自核心1的数据,仅仅是因为您信任核心2,千万不要相信多核硬件会像您期望的那样运行(并且更不信任多线程软件)。

请记住,由于没有任何共享缓存,这是过于简化的。如果您有一个(并且假设它是包含的),那么core 1只需将修改写入其中,核心2就可以更快地得到它。对于这种情况,其他系统也可能实施直接的核对核监听。

一般来说,协议应该假定任何一方都不知道协议显式告诉它的内容。您必须使核心1中的行无效,以保持一致性(没有2个内核可以同时修改同一行),而且由于您没有其他缓存级别--您必须将其写入内存,并保证数据不会丢失(因此,对于核心1来说,它并不存在,您是用唯一信任的流程--回写内存来响应神秘的窥探)。

最后一件事--这个流以幻灯片结尾(据我所能看到),内核2在自己的M状态缓存中安装了行,并进行了修改。从现在开始,系统可以以任何方式继续运行(如果这条线以后会再次被窥探,或者退出Core 2的缓存--这是另一回事)。流程不需要Core 2如前所述将行写回内存,因此不存在双重写入。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28262446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档