我正在做一个项目,该项目是在 VHDL 中实现具有某种高速缓存一致性(为此我选择了 MESI)的双处理器系统。我只想确认一件事:对共享缓存行的写入命中应该会导致缓存控制器在共享总线上发送无效消息,并且根据争用情况,它应该让处理器停止一段时间,对吧?
我正在考虑这种情况;假设一个处理器做这样的事情:
for (int i = 0; i < 5; ++i)
arr[i * 10] = 0; //just so each write is in a different cache line
如果该数组完全驻留在缓存中,并且与其他处理器共享,则每次写入都会生成一条失效消息,每条消息都需要多个周期才能完成;为了让处理器继续执行,所有这些失效消息都必须被缓冲,并且缓冲区不会被限制,因此写入命中将不得不让 CPU 停顿一段时间。我是对的吗?
编辑:愿意解释否决票吗?这个问题的哪一部分不清楚?或者,如果您认为这是一个愚蠢而可怕的问题,那么我认为您一定有答案吗?