L1/L2 缓存包含在 Intel 中
就缓存包容性而言,英特尔 x86 处理器属于以下类别之一:
- 缓存分为三个级别。 L3 包括 L2 和 L1。 L2 是 L1 的NINE(不包含,不排除)。此类别包括以下所有处理器:(1) 实现 Core 微架构的所有客户端处理器,包括 Rocket Lake,但专为客户端细分市场设计的 Core X 和 Xeon W 处理器系列除外。这还包括面向客户端的 Xeon W-10000 系列。 (2) 实现核心微架构(包括 BDX)的所有服务器处理器,以及 (3) 所有 Xeon E3、Xeon E 和 Xeon W-1200 处理器。
- 有两级缓存。 L2 是 L1 的九个。所有 Atom 处理器(包括 Tremont)都属于这一类。所有旧的英特尔处理器(具有两个缓存级别)也属于这里。
- 有两个级别的缓存。 L2 包括 L1D 和 L1I 的 NINE。 KNL 和 KNM 处理器属于这里。 KNC 和 KNF 的可用信息表明 L2 包含 L1,尽管这可能不准确,并且 L2 也可能仅包含这些处理器上的 L1D。有关 MCDRAM,请参见下文。
- 缓存分为三个级别。 L3 和 L2 都是九。此类别包括以下所有处理器:(1) 所有具有三级缓存的 Pentium 4 处理器,(2) 所有代 Xeon SP 处理器,(3) Xeon D-2100、Skylake Core X 系列处理器、Skylake Xeon W 系列处理器,它们都使用 SKX 非内核而不是 SKL 非内核,以及 (4) All Tiger Lake 处理器。
- Lakefield 处理器具有三级缓存层次结构。 4 个 Tremont 内核共享一个 NINE L2,而 Sunny Cove 内核有自己的 9 个 L2。所有 5 个内核都共享一个 LLC,该 LLC 可以配置为包容性或 NINE。
某些处理器具有 L4 缓存或内存端缓存。这些缓存是九个。在 KNL 和 KNM 中,如果 MCDRAM 完全或部分配置为在缓存模式下运行,它会被修改为包含 L2(因此也包含 L1),这意味着包含性仅适用于 L2 中的脏行(处于 M 一致性状态) .在支持 Optane DIMM 的 CSL 处理器上,如果 PMEM DIMM 完全或部分配置为在缓存模式下运行,则 DRAM DIMM 的工作方式如下:
Cascade Lake 处理器使用一种新颖的缓存管理方案,使用
包含和非包含 DRAM 缓存的组合以减少 DRAM
写入的带宽开销,同时还消除了复杂性
在驱逐一个处理器时管理对处理器缓存的无效
来自 DRAM 缓存的包含行。
根据Cascade Lake: Next Generation Intel Xeon Scalable Processor.
KNL/KNM 中的 MCDRAM 缓存和 CSL 中的 DRAM 缓存不属于三个传统包容性类别中的任何一个,即包容性、独占性和 NINE。我认为我们可以将它们描述为具有“混合包容性”。
AMD 处理器:
- Zen 家族:L2 是包容性的,L3 是 NINE。
- 推土机系列:L2 为 NINE,L3 为 NINE。
- Jaguar 和 Puma:L2 是包容性的。没有 L3。
- K10 和 Fusion:L2 是专有的。没有 L3。
- 山猫:我不知道 L2。没有 L3。
- K7(型号 3 及更高型号)和 K8:L2 是专有的。没有 L3。
- K7(型号 1 和 2)及更早版本:L2 包含在内。没有 L3。
现有的 AMD 处理器没有 L4 缓存或 L3 之外的内存端缓存。
威盛处理器:
- Nano C 和 Eden C:我不知道 L2。没有 L3。
- 所有旧处理器:L2 是独占的。没有 L3。
这涵盖了所有当前的威盛处理器。
L1/L2 缓存是 8 路关联性,意味着一个集合中有 8 个
存在不同的缓存行。
在大多数英特尔处理器上都是如此。唯一的例外是 NetBurst 微体系结构,其中单个 L2 方式保存两个相邻的缓存行,统称为扇区。
8 的关联性是典型的,但具有不同关联性的情况并不少见。例如,Sunny Cove 中的 L1D 是 12 路关联的。见:How does the indexing of the Ice Lake's 48KiB L1 data cache work?。
缓存行作为一个整体操作,意味着如果我想删除几个
来自缓存行的字节,整个缓存行将被删除,而不是
我要删除的唯一那些字节。我说的对吗?
是的,这是由于与每个缓存级别的每个缓存条目相关联的一致性状态的限制。缓存行的所有字节只有一种状态。
系统是否将该缓存行的逐出数据存储在某处(在
任何缓冲区,寄存器等),以便下次它可以从该位置加载数据以减少延迟
有几个因素会影响此决定:(1) 行是否脏,(2) 较高编号缓存级别的包容性属性,如果有的话,(3) 是否预测该行将被访问不久的将来,以及(4)如果我没记错的话,如果行的内存类型在它驻留在缓存中时从可缓存更改为不可缓存,则无论之前的因素如何,它将被驱逐并且不会缓存在任何其他级别。
所以适用于所有处理器的懒惰答案是“也许”。