使用MESI协议,写入命中也会使处理器失速,对吧?

时间:2015-05-31 14:24:24

标签: caching architecture multiprocessing vhdl mesi

我正在做一个项目,即在VHDL中实现具有某种缓存一致性(我选择MESI)的双处理器系统。我只想确认一件事:共享缓存行上的写入命中应该导致缓存控制器在共享总线上发送失效消息,并且根据争用,它应该使处理器停顿一段时间,对吧? / p>

我在想这个场景;假设处理器做了这样的事情:

for (int i = 0; i < 5; ++i)
    arr[i * 10] = 0; //just so each write is in a different cache line

如果数组完全驻留在缓存中,并且与其他处理器共享,则每次写入都会生成一个无效消息,每个消息需要多个周期才能完成;为了使处理器继续执行,所有这些失效消息都必须被缓冲,并且缓冲区不会被限制,因此写入命中必须使CPU停顿一段时间。我是对的吗?

编辑: 关注downvote?这个问题的哪一部分不清楚?或者,如果你认为这是一个愚蠢而又可怕的问题,我认为你必须得到它的答案呢?

1 个答案:

答案 0 :(得分:2)

不要将延迟与吞吐量混淆。失效消息将需要多个周期才能完成,但您可以管理该过程。可以构建一个流水线缓存,它能够在之前的失效消息完成之前开始处理新的失效消息。

MESI协议不要求在启动新消息之前已完成到不同高速缓存行的所有先前消息。

只要缓存提供足够的吞吐量,就会绑定飞行中的失效消息数。如果您可以在每个周期生成1个失效消息,并且每个消息需要10个周期来处理,但是您的缓存每个周期也可以处理1个失效消息,那么最多10个失效消息将在飞行中并且您的处理器不必在写入时停止点击共享线。