Ice Lake的48KiB L1数据缓存的索引如何工作?

问题描述 投票:3回答:2

英特尔手动优化(2019年9月修订版)显示了针对Ice Lake微体系结构的48 KiB 8路关联L1数据缓存。

Ice Lake's 48KiB L1 Data cache and its 8-way associativity1软件可见的延迟/带宽将根据访问模式和其他因素而变化。

这让我感到困惑,因为:

  • 有96组(48 KiB / 64/8),不是2的幂。
  • [集合的索引位和字节偏移的索引位加起来超过12位,这使得cheap-PIPT-as-VIPT-trick不适用于4KiB页。

总而言之,似乎缓存的处理成本更高,但延迟仅略有增加(如果确实如此,则取决于Intel对该数字的确切含义)。

[通过一点点创造力,我仍然可以想象快速索引96组数据的方法,但是第二点对我来说似乎是一个重要的突破性变化。

我想念什么?

x86 intel cpu-architecture cpu-cache micro-architecture
2个回答
4
投票

优化手册是错误的。

根据CPUID指令,关联性为12(在Core i5-1035G1上)。另请参见uops.info/cache.htmlen.wikichip.org/wiki/intel/microarchitectures/ice_lake_(client)

这意味着有64组,与以前的微体系结构相同。


1
投票

[优化手册]和处理器家族的datasheet(第2.4.2节)都提到L1数据高速缓存是8路关联的。另一个来源是InstLatx64,它为包括Ice Lake处理器在内的许多处理器提供cpuid dumps。以i7-1065G7

的转储为例

CPUID 00000004:1C004121-02C0003F-0000003F-00000000 [SL 00]

可在cpuid叶0x4中找到缓存信息。英特尔SDM第2卷讨论了如何解码这些字节。 EBX的第31-22位(左数第二个)表示减数方式。这些二进制位是1011,十进制是11。因此cpuid说有12种方法。我们可以从这里获得的其他信息是L1数据高速缓存大小为48KB,高速缓存行大小为64字节,并使用简单的寻址方案。因此,基于cpuid信息,地址的位11-6表示高速缓存集索引。

那么哪个是对的?优化手册可能是错误的(这不是第一次),但是cpuid转储也可能有错误(这也不是第一次)。恩,两者都可能是错误的,但是从历史上看,这种可能性要小得多。 cpuid讨论了手册和here信息之间的差异的其他示例,因此我们知道这两个来源中都存在错误。而且,我不知道有任何其他Intel消息来源提到L1D中的方法数量。当然,非英特尔资源也可能是错误的。

[具有8个方法的96个集合将导致不寻常的设计,并且在优化手册中仅提及一个数字就不太可能发生(尽管这不一定意味着高速缓存必须具有12个方法)。这本身使手册在这里更可能是错误的。

幸运的是,英特尔确实在规范更新文档中记录了其处理器中的实现错误。我们可以查看有关Ice Lake处理器的规格更新文档,您可以找到here。此处记录了两个cpuid错误:

CPUID TLB信息不正确

我已经在Understanding TLB from CPUID results on Intel的答案中讨论了这个问题。第二个错误是:

CPUID L2缓存信息可能不正确

这与您的问题无关。

规范更新文档中提到了一些cpuid错误的事实强烈表明,cpuid叶0x4中的信息已由Intel验证并且是准确的。因此,在这种情况下,优化手册(和数据表)可能是错误的。

© www.soinside.com 2019 - 2024. All rights reserved.