什么时候将CPU缓存刷新回主内存?


18

如果我有一个带有两个内核的CPU,则每个内核都有自己的L1缓存,Core1和Core2是否可以同时缓存同一部分内存?
如果有可能,如果Core1和Core2都在缓存中编辑了它们的值,那么主存储器的值将是多少?

Answers:


26

如果我有一个带有两个内核的CPU,则每个内核都有自己的L1缓存,Core1和Core2是否可以同时缓存同一部分内存?

是。如果不是这种情况,性能将很糟糕。考虑两个运行相同代码的线程。您希望两个L1缓存中都有该代码。

如果有可能,如果Core1和Core2都在缓存中编辑了它们的值,那么主存储器的值将是多少?

旧值将在主存储器中,这无关紧要,因为两个CPU都不会读取它。从缓存弹出修改后的值之前,必须将其写入内存。通常,使用MESI协议的某些变体。在MESI的传统实现中,如果在一个缓存中修改了一个值,则该值根本不能在同一级别的任何其他缓存中出现。


15

是的,可能会发生这种情况(两个缓存都缓存相同的内存区域),实际上这是一个在实践中经常发生的问题。有多种解决方案,例如:

  • 这两个缓存可以进行通信以确保他们不同意
  • 您可以有某种主管来监视所有缓存并相应地更新它们
  • 每个处理器监视其已缓存的内存区域,并在检测到写入时丢弃其(现在无效)的缓存

这个问题称为缓存一致性有关该主题Wikipedia文章对问题和可能的解决方案进行了很好的概述。


2

要回答标题中的问题,这取决于什么是缓存协议。如果是回写,则仅当缓存控制器别无选择,只能将新的缓存块放在已占用的空间中时,才将缓存刷新回主内存。先前占用该空间的块被删除,其值被写回到主存储器。

另一种协议是直写。在这种情况下,无论何时将缓存块写入第n级,都会更新第(n + 1)级上的相应块。(从概念上讲,这类似于在表单下填充复写纸;您在顶部写的内容都会复制到下面的表上。)这速度较慢,因为它显然涉及更多的写操作,但缓存之间的值更一致。在回写方案中,只有最高级别的高速缓存具有特定存储块的最新值。


1
我想知道这里有百分之几的读者曾经使用过复写纸。:)
Barmar 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.