【发布时间】:2012-09-27 21:16:30
【问题描述】:
多个内核可以同时读取同一个 RAM 位置吗?我特别对 x86 架构 CPU 感兴趣。同一个 CPU 上的两个不同内核的内部缓存是否可以同时从同一个 RAM 位置填充?
【问题讨论】:
-
这取决于您所说的“同时”是什么意思 - 在任何给定时间只能从 DRAM 进行一个总线读取周期,但内核之间的缓存侦听逻辑将负责缓存一致性。
-
@Paul R:“同时”是指在时间 X,从地址 ADDR 加载两个内核会将 ADDR 处的值加载到两个内核的寄存器中。
-
@Lyth 在下面给出了一个很好的答案,但简短的回答是否定的:你不能从一个地址加载两个内核是一个总线读取周期。
-
@PaulR 谢谢。我相信有一个特殊的情况会发生这种情况。如果 L1 高速缓存已被 RAM 中的相同数据填充,则在同一周期中每个内核中的加载将加载具有相同值的寄存器。还是我错过了什么?
-
仅当两条 L1 线路都已处于“共享”状态时(参见上述文章中的 MESI 协议)。请注意,实际实现取决于制造商,您永远不会知道它是如何在硬件中实现的,也不会跟踪效果,除了缓存状态转换期间的一些延迟。