L1、L2 和 L3 缓存在计算机中的确切位置?

39 cpu memory-management computer-architecture smp cpu-cache

L1、L2 和 L3 缓存在计算机中的确切位置?

我知道,我们使用缓存通过从缓存而不是主内存中选择数据和指令来提高性能。

以下是我的问题

  1. L1 Cache 究竟位于何处?. 是在CPU芯片上?
  2. L2 缓存究竟位于何处?

  3. L3 缓存究竟位于何处?在主板上?

我认为最新的 SMP 处理器使用 3 级缓存,所以我想了解缓存级层次结构及其架构。

Hen*_*nes 56

让我们从这个开始:

我认为最新的 SMP 处理器使用 3 级缓存,所以我想了解缓存级层次结构及其架构。

要了解缓存,您需要了解以下几点:

CPU 有寄存器。可以直接使用其中的值。没有什么比这更快了。

但是我们不能向芯片添加无限寄存器。这些东西占用空间。如果我们把芯片做得更大,它就会变得更贵。部分原因是我们需要更大的芯片(更多的硅),但也因为有问题的芯片数量增加了。

(想象一个 500 cm 2的假想晶片。我从中切下 10 个芯片,每个芯片的大小为50cm 2。其中一个坏了。我丢弃它,剩下 9 个工作芯片。现在取同一个晶片,然后我切下从中取出 100 个芯片,每一个小十倍。其中一个如果坏了。我丢弃坏掉的芯片,剩下 99 个工作芯片。这是我本来会损失的一小部分。为了补偿较大的芯片芯片我需要问更高的价格。不仅仅是额外硅的价格)

这就是我们想要小巧、实惠的芯片的原因之一。

然而,缓存离 CPU 越近,访问速度就越快。

这也很容易解释;电信号以接近光速传播。这很快,但仍然是一个有限的速度。现代 CPU 使用 GHz 时钟。那也很快。如果我使用 4 GHz CPU,那么每个时钟滴答的电信号可以传播大约 7.5 厘米。即直线 7.5 厘米。(芯片不是直接连接)。实际上,您需要的距离远小于 7.5 厘米,因为这不允许芯片有任何时间呈现请求的数据和信号传回。

最重要的是,我们希望缓存在物理上尽可能接近。这意味着大筹码。

这两者需要平衡(性能与成本)。

L1、L2 和 L3 缓存究竟位于计算机中的什么位置?

假设只有 PC 风格的硬件(大型机完全不同,包括性能与成本的平衡);

IBM XT
原版 4.77Mhz 之一:无缓存。CPU 直接访问内存。从内存中读取将遵循以下模式:

  • CPU 将它想要读取的地址放在内存总线上并置位读取标志
  • 内存将数据放在数据总线上。
  • CPU 将数据从数据总线复制到其内部寄存器。

80286 (1982)
仍然没有缓存。内存访问对于低速版本(6Mhz)来说不是一个大问题,但更快的模型运行到 20Mhz 并且在访问内存时经常需要延迟。

然后你会得到这样的场景:

  • CPU 将它想要读取的地址放在内存总线上并置位读取标志
  • 内存开始将数据放到数据总线上。CPU 等待。
  • 内存完成获取数据,现在在数据总线上稳定。
  • CPU 将数据从数据总线复制到其内部寄存器。

这是等待内存的额外步骤。在一个可以轻松完成 12 个步骤的现代系统上,这就是我们拥有 cache 的原因

80386 : (1985)
CPU 变得更快了。每个时钟,并以更高的时钟速度运行。
RAM 变得更快,但不如 CPU 快。
因此需要更多的等待状态。有些主板解决此通过增加高速缓存(这将是1二级缓存),主板上。

现在从内存读取开始检查数据是否已经在缓存中。如果是,则从更快的缓存中读取。如果与 80286 描述的程序不同

80486 : (1989)
这是这一代的第一个 CPU,它在 CPU 上有一些缓存。
它是一个 8KB 统一缓存,这意味着它用于数据和指令。

大约在这个时候它会共同投入的快速静态内存256KB主板上的2级缓存。因此1在CPU上级高速缓存,2在主板上级缓存。

标有 CPU 位置和二级缓存的 486 主板

80586 (1993)
586 或 Pentium-1 使用拆分级别 1 高速缓存。数据和指令各 8 KB。缓存被拆分,以便数据和指令缓存可以针对它们的特定用途单独调整。你还有一个小但速度非常快1在CPU附近的高速缓存,以及更大,但速度慢2在主板上的高速缓存。(在更大的物理距离)。

在同一个奔腾 1 区域,英特尔生产了Pentium Pro ('80686')。根据型号,该芯片具有 256Kb、512KB 或 1MB 的板载缓存。它也贵得多,这很容易用下图解释。

奔腾 Pro CPU 的图片,256KB 缓存模型

请注意,缓存使用了芯片中的一半空间。这是针对 256KB 模型的。更多的缓存在技术上是可能的,一些模型使用 512KB 和 1MB 缓存生产。这些产品的市场价格很高。

另请注意,该芯片包含两个管芯。一个带有实际的 CPU 和第一个缓存,第二个带有 256KB 的第二个缓存。

奔腾2

奔腾2是奔腾pro核心。出于经济原因,CPU 中没有第二个缓存。相反,什么是销售的AA CPU我们使用独立的芯片在PCB的CPU(和1级ST缓存)和2高速缓存。

随着技术的进步,我们开始制造具有更小的组件的芯片,将第二个缓存放回实际的 CPU 芯片在经济上是可能的。然而,还是有分裂。非常快1缓存依偎到CPU。与一个1 ST每个CPU核心高速缓存和更大但小于快2缓存旁边的核心。

奔腾 2“CPU”的图片(带盖和不带盖)

Pentium-3
Pentium-4
这对于 pentium-3 或 pentium-4 不会改变。

大约在这个时候,我们已经达到了 CPU 时钟速度的实际限制。8086 或 80286 不需要冷却。运行在 3.0GHz 的奔腾 4 会产生如此多的热量并消耗如此多的功率,因此在主板上放置两个独立的 CPU 而不是一个快速的 CPU 变得更加实用。

(两个 2.0 GHz CPU 比一个相同的 3.0 GHz CPU 使用更少的功率,但可以做更多的工作)。

这可以通过三种方式解决:

  1. 使 CPU 更有效率,因此它们以相同的速度完成更多的工作。
  2. 使用多个 CPU
  3. 在同一个“芯片”中使用多个 CPU。

1) 是一个持续的过程。它不是新的,它不会停止。

2) 很早就完成了(例如使用双 Pentium-1 主板和 NX 芯片组)。到目前为止,这是构建速度更快的 PC 的唯一选择。

3) 需要将多个“cpu 核心”构建到单个芯片中的 CPU。(然后我们称该 CPU 为双核 CPU 以增加混淆。谢谢营销 :) )

如今,我们只是将 CPU 称为“核心”以避免混淆。

你现在可以得到类似 pentium-D (duo) 的芯片,它基本上是同一芯片上的两个 pentium-4 内核。

早期的 pentium-D(2 个 P4 内核)

还记得老奔腾Pro的图片吗?巨大的缓存大小?
看到这张图片中的两个大区域了吗?

事实证明,我们可以在两个 CPU 内核之间共享第二个缓存。速度会有所回落,但512KiB共享2缓存往往快于增加了两个独立的2一级高速缓存的一半大小。

这对你的问题很重要。

这意味着如果您从一个 CPU 内核读取某些内容,然后尝试从共享相同缓存的另一个内核读取它,您将获得缓存命中。不需要访问内存。

由于程序确实会在 CPU 之间迁移,根据负载、内核数量和调度程序,您可以通过将使用相同数据的程序固定到同一 CPU(缓存命中 L1 和更低)或同一 CPU 上来获得额外的性能共享 L2 缓存(因此在 L1 上未命中,但在 L2 缓存读取上命中)。

因此,在以后的模型中,您将看到共享的 2 级缓存。

打开的 Core2 CPU 的图像

如果您正在为现代 CPU 编程,那么您有两种选择:

  1. 不打扰。操作系统应该能够安排事情。调度器对计算机的性能有很大的影响,人们花了很多精力来优化它。除非您做了一些奇怪的事情或正在针对一种特定型号的 PC 进行优化,否则您最好使用默认调度程序。
  2. 如果您需要每一个最后一点的性能并且不能选择更快的硬件,那么尝试将访问相同数据的线程留在同一个内核上,或者留在可以访问共享缓存的内核上。


我意识到我还没有提到 L3 缓存,但它们并没有什么不同。L3 缓存的工作方式相同。比 L2 大,比 L2 慢。它通常在内核之间共享。如果它存在,它比 L2 缓存大很多(否则没有意义)并且它通常与所有内核共享。

现代CPUwithL3.png


And*_*rey 14

缓存是处理器的内部结构。有些在内核之间共享,有些是单独的,取决于实现。但所有这些都位于芯片上。一些细节:英特尔® 酷睿™ i7 处理器,取自此处

  • 每个内核 32 KB 指令和 32 KB 数据一级缓存 (L1)
  • 每个内核 256 KB 共享指令/数据二级缓存 (L2)
  • 8 MB 共享指令/数据末级缓存 (L3),在所有内核之间共享

处理器芯片照片(抱歉,不知道确切型号)。您可以看到缓存在芯片上占据了很大的面积:

替代文字


Dou*_*der 5

如今,缓存都在 CPU 芯片上。它们过去有时位于主板或 CPU 子板上,但我认为当前没有任何使用片外缓存的处理器。


小智 5

缓存几乎总是在芯片上以实现最快的访问。这是一个很好的图表,显示了一个四核 Intel CPU 芯片,其中突出显示了 L3 缓存。当您查看这样的 CPU 芯片图片时,大的统一区域通常是用作缓存的片上存储器组。

Nehalem Die (http://www.legitreviews.com/article/824/1/)