现代处理器中L1缓存尺寸的原因



我需要根据某些处理器的内存表优化一组算法。我发现自己想知道为什么每个英特尔处理器都使用64KB(32KB数据,32KB指令),从至少2010年开始使用L1缓存。

即使引入了几乎巨大的L3缓存,他们为什么还会坚持使用64KB?

我有什么可以读的吗?

是否有有效的猜测是否在接下来的5或10年内增加?

我检查了其他供应商和Opterons,例如具有64KB 64KB,但每个模块共享,Interlagos(例如)每个核心只有16kb,每个模块共享64kb数据缓存。苹果的A7和A8每核获得64kb 64kb,但其他供应商使用的64位臂,具有16KB 16KB。

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

l1i和l1d需要低延迟和(对于L1D)需要多个读/写端口。L1D还需要支持从字节到32字节的任何宽度的非对齐负载/存储。(或avx512上的CPU上的64字节)。保持这些缓存对于维护这些属性并保留电源很重要。

较小,也使vipt(几乎索引,物理上标记)更容易,这对于最大程度地减少延迟至关重要。(与地址高位的TLB查找并行获取标签 数据。)

查看为什么在大多数处理器中,L1缓存的大小小于L2高速缓存的大小?有关这些因素的更多详细信息。

将您的电力预算在其他地方(L1I/L1D以外)更有价值。例如在Better OOO Exec,更多的负载/存储缓冲区条目,或者在较大的每核私有L2上,该L2有些快,但不需要多个读/写端口,并且不需要支持Unigemented Byte访问:这是关键更改可以让L1D保持很小,而共享L3变得巨大。


有趣的事实:对于Ice Lake,英特尔终于通过将关联性从8增加到12增加到32K到48K(保持vipt''nofe&quot'免费的"没有别名问题"。

。 。

这是自pentium-M以来Intel的第一次L1,它的五角星32K 32K从五角星3中的16K 16K上升到32K 32K。

在P-M和Skylake-X之间,Intel在L1D和L2之间的带宽大大提高了带宽,并改善了未对准的SIMD负载/存储,Simd Load/Store数据路径扩大到64个字节,从8个字节上升,并添加了另一个缓存读取端口。(Haswell和后来可以进行2次读数和1个每周循环写)。

多年来,AMD

otoh进行了不同的L1配置,但是对于Zen而言,与英特尔的设计相同。(32K,良好的关联性,每核私人L2缓存支持它,因此L1D失误不是灾难,不必击中共享的缓存。)

另请参见

  • http://www.lighterra.com/papers/modernmicropropessors/
  • 每个程序员对内存应该了解什么? - 链接到PDF版本,以及我对自编写以来发生的变化的评论(它仍然有用,但是某些内存带宽因素现在有所不同)。

我不是专家,而是我的两分钱:

l1集成到核心,这意味着:它具有相同的时钟及其大小影响核心的大小。

第一个是一个合乎逻辑的问题。您希望L1与登记册相比,非常快的速度几乎没有慢。您无法通过将L1计时来解决此问题,因为Core也会得到计时。HW缓存类似于软件缓存,需要时间搜索它们。因此,当L1变得更大时,鉴于HW Cache解决方案的复杂性保持不变,搜索就会慢。您可以增加溶液的复杂性,但这将对空间,能量和热量产生负面影响。

继续尺寸,那就是如果您使L1更大,则需要空间来存储这些位和字节创建相同的空间,能量问题。

因此,您对L1和L2有不同的设计标准,并且通过使它们分开,您将问题分开并征服了两个级别。如果您像L2一样使L1大而缓慢,那么您就会模糊。

读数:

  • [1]每个程序员对内存的了解。第3节的标题为" CPU缓存"。它值得它的标题。
  • Cortex-A系列程序员指南。免费从ARM下载,但您需要注册。第8章的标题为" CACHES",阅读较轻,这一章对Armes没有什么特别的。首先,如果第一张纸的复杂性使您无聊。

最新更新