【问题标题】:How are the modern Intel CPU L3 caches organized?现代 Intel CPU L3 缓存是如何组织的?
【发布时间】:2015-05-07 14:51:28
【问题描述】:

鉴于 CPU 现在是多核并拥有自己的 L1/L2 缓存,我很好奇 L3 缓存是如何组织的,因为它由多个内核共享。我想如果我们有 4 个内核,那么 L3 缓存将包含 4 页的数据,每个页面对应于特定内核正在引用的内存区域。假设我有点正确,就这样吗?例如,它可以将这些页面中的每一个划分为子页面。这样,当多个线程在同一个核心上运行时,每个线程都可以在其中一个子页面中找到它们的数据。我只是在脑海中想出这个,所以我非常有兴趣让自己了解幕后真正发生的事情。任何人都可以分享他们的见解或提供一个链接来治愈我的无知吗?

非常感谢。

【问题讨论】:

  • 不是编程问题。看看什么更适合:stackexchange.com/sites#
  • 如果您根据某些内存范围方案在内核之间拆分共享缓存,您将失去共享的容量优势 - 尽可能多地使用您的共享。您还会失去银行业务带来的带宽优势。

标签: cpu intel cpu-cache


【解决方案1】:

现代 Intel L3 高速缓存(自 Nehalem 起)使​​用 64B 行大小,与 L1/L2 相同。它们是共享的,and inclusive

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

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


另请参阅Which cache mapping technique is used in intel core i7 processor?,我在其中写了一个更大更完整的答案。

【讨论】:

    【解决方案2】:

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

    在旧芯片(Core 2 的时代)中,缓存一致性在共享总线上为 snooped,现在在 directory 的帮助下进行检查。

    在现实生活中,L3 不仅仅是“单个”,而是被分割成若干片,每片都有高速访问端口。有一些基于物理地址选择分片的方法,它允许多核系统每时每刻进行多次访问(每次访问将由undocumented method 定向到某个分片;当两个核使用相同的物理地址时,它们的访问将是由相同的切片或将执行缓存一致性协议检查的切片提供服务)。 关于 L3 缓存切片的信息在几篇论文中被颠倒了:

    使用最近的芯片,程序员能够在应用程序“缓存分配技术”(v4 系列)之间划分 L3 缓存:https://software.intel.com/en-us/articles/introduction-to-cache-allocation-technologyhttps://software.intel.com/en-us/articles/introduction-to-code-and-data-prioritization-with-usage-modelshttps://danluu.com/intel-cat/https://lwn.net/Articles/659161/

    【讨论】:

      猜你喜欢
      • 2021-11-24
      • 1970-01-01
      • 2017-03-10
      • 2012-05-11
      • 2013-11-04
      • 2017-12-18
      • 2010-10-31
      • 2017-04-15
      相关资源
      最近更新 更多