一般来说,缓存很有用,因为处理器的速度高于内存的速度(它们的速度都在提高,但差异仍然存在)。因此,减少内存访问次数是提高性能的必要条件。
我的问题是为什么我们需要多级缓存(L1,L2,L3)而不是仅一级?
我知道 L1 是最快的也是最小的,L2 稍慢一些但稍大一些等等……但是他们为什么要以这种方式创建硬件呢?
答案1
这与芯片的物理尺寸有关。缓存中的每个位由一个或多个晶体管保存,因此如果您想要大量缓存,则需要大量晶体管。缓存的速度本质上与想要访问它的单元的位置成反比 - 在这种微型设备中,信号路径越长,通信速度就越慢。这部分与基板阻抗有关,但在这个层面上,还涉及一些更复杂的物理现象。
如果我们想要包含一个大型的单一缓存,它必须同时位于距离 MMU、ALU 等非常短的距离内。这使得处理器的物理设计非常困难,因为大型缓存占用了大量空间。为了使缓存对这些子单元“本地化”,您必须牺牲子单元彼此之间的本地性。
通过使用小型、快速的本地缓存 (L1),我们可以最大限度地提高局部性和速度,但会牺牲大小。因此,我们使用二级缓存 (L2) 来保存大量数据,同时略微牺牲局部性(因此也会牺牲速度)。这让我们兼得了两全其美 - 我们可以存储大量数据,但仍然拥有非常快速的本地缓存供处理器子单元使用。
在多核处理器中,L3 缓存通常在内核之间共享。在这种设计中,L1 和 L2 缓存内置在每个内核的芯片中,而 L3 缓存位于内核之间。这为每个内核提供了合理的局部性,同时也允许使用非常大的缓存。
现代处理器中缓存的功能非常复杂,因此我甚至不会尝试进行适当的描述,但一个非常简单的过程是先在 L1 中查找目标地址,然后在 L2 中查找,然后在 L3 中查找,然后再诉诸系统内存提取。提取完成后,它会通过缓存重新拉回。