计算机中的 L1、L2 和 L3 缓存具体位于哪里?

计算机中的 L1、L2 和 L3 缓存具体位于哪里?

L1、L2 和 L3 缓存在计算机中到底位于什么位置?

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

以下是我的问题

  1. L1 Cache 究竟位于哪里?是在 CPU 芯片上吗?
  2. L2 缓存到底位于哪里?

  3. L3 缓存究竟位于主板的什么位置?

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

答案1

让我们从这个开始:

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

要理解缓存,你需要知道以下几件事:

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

然而,我们无法在芯片上添加无限的寄存器。这些东西会占用空间。如果我们把芯片做得更大,成本就会更高。部分原因是我们需要更大的芯片(更多的硅),但也因为有问题的芯片数量增加了。

(想象一个 500 平方厘米的假想晶圆。我从中切下 10 个芯片,每个芯片大小为 50 平方厘米其中一个坏了。我丢弃了它,剩下 9 个可以工作的芯片。现在取同一片晶圆,我从中切下 100 个芯片,每个芯片小 10 倍。其中一个坏了。我丢弃了坏的芯片,剩下 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 个步骤,这就是我们有缓存的原因

80386: (1985)
CPU 的速度越来越快。无论是按时钟还是以更高的时钟速度运行。RAM
的速度越来越快,但不如 CPU 快。因此需要更多的等待状态。一些主板通过在主板上添加缓存(即一级
缓存) 来解决此问题。

现在,从内存读取数据时,首先要检查数据是否已在缓存中。如果是,则从速度更快的缓存中读取。如果不是,则执行与 80286 中所述的相同过程

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

大约在这个时候,将 256KB 的快速静态内存放在主板上作为二级缓存变得很普遍。因此,一级缓存在 CPU 上,二级缓存在主板上。

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

80586 (1993)
586 或 Pentium-1 使用分层一级缓存。数据和指令各占 8 KB。缓存被拆分,以便数据和指令缓存可以根据其特定用途单独调整。您仍然有一个靠近 CPU 的较小但速度非常快的一级缓存,以及主板上较大但速度较慢的二级缓存。(物理距离较大)。

在同一个奔腾1区域,英特尔生产了奔腾专业版('80686')。根据型号,该芯片具有 256KB、512KB 或 1MB 板载缓存。它也更昂贵,这可以通过下图轻松解释。

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

请注意,芯片中一半的空间被缓存占用。这是针对 256KB 型号而言的。从技术上讲,可以增加缓存,有些型号的缓存为 512KB 和 1MB。这些产品的市场价格很高。

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

奔腾-2

奔腾 2 是奔腾专业核心。出于经济原因,CPU 中没有第二个缓存。相反,出售的 CPU 使用的是带有独立芯片的 PCB,用于 CPU(和第一个缓存)和第二个缓存

随着技术的进步,我们开始制造具有更小组件的芯片,将第二缓存放回实际的 CPU 芯片中在经济上是可行的。但是仍然存在分歧。非常快的第一缓存紧贴在 CPU 上。每个 CPU 核心有一个第一缓存,核心旁边有一个更大但速度较慢的第二缓存。

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

奔腾-3
奔腾-4
对于奔腾 3 或奔腾 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 称为“核心”。

您现在可以获得像奔腾-D (duo) 这样的芯片,它基本上是同一芯片上的两个奔腾-4 内核。

早期奔腾-D(2 个 P4 核心)

还记得老款奔腾 Pro 的图片吗?它有巨大的缓存大小?
参见这张图片中的区域很大吗?

事实证明,我们可以在两个 CPU 核心之间共享该二级缓存。速度会略有下降,但 512KiB 共享二级缓存通常比添加两个大小只有一半的独立二级缓存更快

这对您的问题来说很重要。

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

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

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

打开的 Core2 CPU 的图像

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

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


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

modernCPUwithL3.png

答案2

缓存是处理器的内部结构。有些缓存在内核之间共享,有些缓存是单独的,具体取决于实现方式。但它们都位于芯片上。一些详细信息:英特尔英特尔® 酷睿™ i7 处理器,取自这里

  • 每个核心具有 32 KB 指令和 32 KB 数据一级缓存 (L1)
  • 每个核心具有 256 KB 共享指令/数据二级缓存 (L2)
  • 8 MB 共享指令/数据最后一级缓存 (L3),由所有内核共享

处理器芯片的照片(抱歉,不知道具体型号)。您可以看到缓存占据了芯片上的很大一部分空间:

替代文本

答案3

缓存几乎总是在芯片上,以实现最快的访问速度。下面是一张漂亮的图表,显示了四核 Intel CPU 芯片,其中突出显示了 L3 缓存。当您查看类似这样的 CPU 芯片图片时,大面积的均匀区域通常是用作缓存的片上内存组。

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

答案4

我不太清楚 L3 的情况,但 L1/L2 总是位于 CPU 上。从层次结构来看,基本上,L1 通常是指令缓存,L2 和 L3 是数据缓存。

相关内容