现代英特尔CPU的L3缓存是如何组织的?

3
考虑到现在的CPU都是多核心的,并且有自己的L1/L2缓存,我很好奇L3缓存是如何组织的,因为它被多个核心共享。我想象一下,如果我们有4个核心,那么L3缓存将包含4页数据,每页对应于特定核心正在引用的内存区域。假设我有点正确,这就是它的极限了吗?例如,它可以将每个页面分成子页面。这样,当多个线程在同一个核心上运行时,每个线程可能会在其中一个子页面中找到它们的数据。我只是凭空想象,所以我非常有兴趣了解幕后发生了什么。有人能分享他们的见解或提供一个链接来消除我的无知吗?
提前感谢您的帮助。

这是关于编程的内容,请将其翻译成中文。返回翻译后的文字内容,不要进行解释。请查看以下网址以了解更多信息:http://stackexchange.com/sites# - Tobias Knauss
2
如果您根据某些内存范围方案在核心之间拆分共享缓存,您将失去共享的容量优势——即能够在可能时使用超过您的份额。您还将失去银行业务的带宽优势。 - Leeor
2个回答

8

单个芯片中有一个(切片的)L3缓存,每个真实物理核心都有几个L2缓存(每个核心一个)。 L3缓存以64字节(缓存行)大小的段缓存数据,L3与不同的L2/L1之间有特殊的缓存一致性协议(在NUMA/ccNUMA多插槽系统中也是如此),它跟踪哪个缓存行是实际的,哪个是在多个缓存之间共享的,哪个只是被修改(并且应该从其他缓存中失效)。一些协议(缓存行可能的状态和状态转换):https://en.wikipedia.org/wiki/MESI_protocol, https://en.wikipedia.org/wiki/MESIF_protocol, https://en.wikipedia.org/wiki/MOESI_protocol

在旧芯片(Core 2时代)中,缓存一致性是在共享总线上进行snooped的,现在它是通过directory来检查的。
在现实生活中,L3不仅仅是“单个”的,而是被切分成几个片段,每个片段都有高速访问端口。有一种基于物理地址选择片段的方法,使得多核系统可以在每一时刻进行多次访问(每次访问将由未记录的方法指向某个片段;当两个核使用相同的物理地址时,它们的访问将由同一个片段或进行缓存一致性协议检查的片段服务)。 关于L3缓存片段的信息在几篇论文中被逆转了: 最近的芯片编程员有能力在应用程序之间分区L3缓存"Cache Allocation Technology"(v4 Family):https://software.intel.com/en-us/articles/introduction-to-cache-allocation-technology https://software.intel.com/en-us/articles/introduction-to-code-and-data-prioritization-with-usage-models https://danluu.com/intel-cat/ https://lwn.net/Articles/659161/

0

现代英特尔 L3 缓存(自 Nehalem 以来)使用 64B 的行大小,与 L1/L2 相同。它们是共享的,且包容性

另请参见http://www.realworldtech.com/nehalem/2/

至少从 SnB 开始,每个核心都有一部分 L3,并且它们位于环形总线上。因此,在大型 Xeon 中,L3 大小随着核心数量呈线性扩展。


另请参阅{{link1:Intel Core i7处理器使用哪种缓存映射技术?}} ,我在那里写了一个更大更完整的答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接