Cache 之间的一致性

更新时间:
2024-03-14
下载文档

Cache 之间的一致性

多核系统中 Cache 不一致

假设内存中有一个数据 x,值为 3,被缓存到 Core0 和 Core1 的各自 Cache 中,这时 Core0 将 x 改为 5,如果 Core1 不知道 x 已经被修改,还在使用旧值,就可能导致程序出错,这就是 Cache 之间不一致。如下图所示:

Cache 之间一致性的底层操作

为了保证 Cache 之间的一致性,处理器提供了两个保证 Cache 一致性的底层操作:Write invalidate 和 Write update。

Write invalidate(写无效):当一个核修改了一份数据,其他核上如果缓存了这份数据,就置无效(invalid)。

假设 2 个核都使用了内存中的变量 x,Core0 将它修改为 5,Core1 就将自己对应的 Cache line 置成无效(invalid)。如下图所示:

Write update(写更新):当一个核修改了一份数据,其他核上如果缓存了这份数据,就都更新到最新值。如下图所示:

Write invalidate 是一种简单的方式,不需要更新数据,如果所有核以后不再使用变量 x,采用 Write invalidate 就非常有效。不过由于一个 valid 标志对应一个 Cache line,将 valid 标志置成 invalid 后,这个 Cache line 中其他的原本有效的数据也将不能使用。Write update 会产生大量的数据更新操作,不过只要更新修改的数据,如果所有核都会只用变量 x,那么 Write update 就比较有效。由于 Write invalidate 简单,大多数处理器都使用 Write invalidate。

文档内容是否对您有所帮助?
有帮助
没帮助