使用 MESI 协议,写入命中也会使处理器停止运行,对吗?

问题描述 投票:0回答:1

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

我正在考虑这个场景;假设处理器执行以下操作:

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

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

caching architecture multiprocessing vhdl mesi
1个回答
2
投票

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

MESI 协议不要求在开始新消息之前,发送到不同缓存行的所有先前消息都已完成。

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

© www.soinside.com 2019 - 2024. All rights reserved.