现代处理器中L1缓存大小的原因

4

我需要针对某个处理器基于内存表优化一组算法。自2010年以来,我一直在想为什么每个Intel处理器的每个核心都使用64KB(32KB数据,32KB指令)的L1缓存。

即使其他所有缓存都随着几乎巨大的L3缓存的引入而增加,他们仍然坚持使用64KB吗?

我能读到任何相关信息吗?

在未来5或10年内,这是否会有所增加?

我查看了其他供应商,例如Opterons带有64KB + 64KB,但是共享给模块,而Interlagos(例如)每个核心只有16KB,64KB数据缓存共享给模块。苹果的A7和A8每个核心都有64KB + 64KB,但其他供应商使用的是64位Arm,带有16KB + 16KB。

目前,我使用8KB表进行设计,但一旦我必须将两个表混合在一起,这就变得更加重要。


据我所知,英特尔CPU具有虚拟标记的L1缓存,以提高速度(您可以与页表查找并行进行缓存访问)。对于虚拟标记的缓存,大小为“组数*关联度”,其中“组数”通常是系统的页面大小,对于x86而言,这是ISA的一部分,据我所知。增加关联度是昂贵的,并且虚拟标记的缓存需要在上下文切换时刷新,因此更大的缓存甚至可能不可取。 - EOF
1
处理器设计是在平衡延迟方面的一种练习。缓存越大,信号路径就越长,需要时钟速度越慢。 - Hans Passant
1
内存速度越快,所需面积就越大。例如,典型的SRAM有6个晶体管,但也有8个或10个晶体管的类型。另一方面,DRAM每位只需要1个晶体管,因此它们所需的面积要小得多,但速度可能比SRAM慢数百倍。 - phuclv
1
@MartinKersten:考虑到一个锁存器已经需要两个或门(而不是晶体管),而一个触发器比锁存器更复杂(一个触发器可以由两个锁存器构建),我必须问你如何打算用两个晶体管构建SRAM位。我相信全球的芯片制造商都迫切希望获得你即将申请的专利许可。 - EOF
1
这个问题应该提交到电子工程领域。它与编程或汇编语言没有任何关系。 - Bregalad
显示剩余4条评论
2个回答

3
L1i和L1d需要低延迟和(对于L1d)需要多个读/写端口。 L1d还需要支持任何宽度的不对齐加载/存储,从字节到32字节。 (在具有AVX512的CPU上为64字节)。 保持这些高速缓存的小型化对于保持这些属性以及保持功率的控制非常重要。
小尺寸也使VIPT(虚拟索引,物理标记)更容易,这对于最小化延迟至关重要。 (与地址的高位的TLB查找并行获取标签+数据。)
有关这些因素的更多详细信息,请参见为什么大多数处理器的L1缓存大小比L2缓存小?
花费功率预算在其他地方(而不是L1i / L1d)在一定程度上更有价值。例如,可以用于更好的乱序执行、更多的负载/存储缓冲区条目,或者用于一个更大的每个核心私有L2高速缓存,它不需要多个读/写端口,也不需要支持非对齐字节访问:这是让L1d保持较小的关键变化,而共享的L3则变得巨大。
有趣的事实:对于Ice Lake,英特尔通过将关联度从8增加到12(保持VIPT“免费”且没有别名问题)来将L1d缓存从32k提高到48k。
这是自Pentium-M以来英特尔首次增加L1大小,Pentium-M从Pentium 3的16k + 16k升级到32k + 32k。(而Pentium 4则是跟踪缓存+ 16k L1d。)
在P-M和Skylake-X之间,英特尔大大改善了L1d和L2之间的带宽,并改进了不对齐的SIMD加载/存储,将SIMD加载/存储数据路径扩展到64字节,从8字节扩展,并添加了另一个缓存读取端口。(Haswell及更高版本每个周期可以执行2次读取和1次写入。)
另一方面,AMD多年来一直在尝试不同的L1配置,但对于Zen已经选择了与英特尔相同的良好设计。(32k,良好的关联度,每个核心私有的L2缓存支持它,因此L1d未命中不会成为灾难并且不必命中共享缓存。)
另请参见

1

我不是专家,但我的两分钱意见:

L1已集成到核心中,这意味着:它与核心共用同一个时钟,并且其大小会影响核心的大小。

首先,这更多是一个逻辑问题。你希望L1非常非常快,仅比寄存器略慢。你不能通过加速L1的时钟来解决这个问题,因为核心也会加速。硬件缓存类似于软件缓存,搜索它们需要时间。因此,当L1变得更大时,假设HW缓存方案的复杂性保持不变,搜索就会变慢。你可以增加解决方案的复杂性,但这将对空间、能源和热产生负面影响。

继续谈论大小,如果你让L1变大,你就需要空间来存储那些位和字节,从而产生相同的空间、能量问题。

因此,对于L1和L2,你有不同的设计标准并通过使它们分离来在两个级别上解决问题。如果你使L1变得又大又慢,就会模糊它的边界。

阅读资料:


谢谢你的回答。第一个链接非常好。对于搜索缓存所需的时间来说,似乎并不那么重要,但它可能会给出一些线索,因为你需要添加一些门来增加轻微的延迟。但是,如果我们要将这个延迟加倍,那么只需要进行比较阶段,除非我们加倍条目,这意味着需要更多的其他逻辑。 - Martin Kersten
@MartinKersten 我认为总的来说,更大的缓存会带来更多的复杂性,而你不想让它靠近核心。处理L1核心之间的一致性的复杂度也可能增加。 - auselen
关于结合律的更多内容,请参见以下链接: https://www.ece.cmu.edu/~ece548/handouts/07assoc.pdf - auselen

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