CPU 缓存何时刷新回主内存?

Car*_*loS 18 cpu cpu-cache

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

Dav*_*rtz 26

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

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

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

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


sle*_*ske 15

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

  • 两个缓存可以通信以确保它们不会不一致
  • 您可以拥有某种监控所有缓存并相应地更新它们的主管
  • 每个处理器监视它缓存的内存区域,当它检测到写入时,它会抛出它的(现在无效的)缓存

该问题称为缓存一致性关于该主题维基百科文章对问题和可能的解决方案进行了很好的概述。