为什么现代 CPU 使用多级缓存?

为什么现代 CPU 使用多级缓存?

我最近读了关于处理器(主要是多处理器)的文章,并遇到了多级缓存的概念。在这种情况下,这些设计具有多级缓存以提高性能。

但我不明白,额外的缓存如何能提高处理器的性能?为什么不直接增加现有缓存的大小呢?

答案1

使用多个缓存级别,部分是协调多核处理器的机制,部分是价格和性能之间的折衷。

在具有多个内核的处理器中,每个内核都有自己的 L1 缓存。这样内核就可以从缓存中读取和写入数据,而不必担心干扰其他内核。不过,内核需要共享存储,以便它们可以轻松交换某些信息。L2 缓存由所有内核共享,因此它被用作一种公共存储空间,所有线程都可以在其中获取信息。

L2 和 L3 缓存之间的区别在于折衷部分。缓存由静态 RAM 或 SRAM 组成。这与构成主内存的动态 RAM (DRAM) 不同。动态 RAM 需要定期“刷新”,也就是说,随着时间的推移,DRAM 单元会失去其值,除非读取并重新写入。您的内存控制器会自动执行此操作,但每次内存控制器必须执行此操作(每秒数千次)时,它都无法为处理器读取/写入值,直到完成为止。这会降低 DRAM 的速度。SRAM 没有这个限制,只要 SRAM 有运行能力,它就会无限期地保留其值,从而使其速度更快。因此,您的缓存(L2 和 L3)都是由 SRAM 制成的。问题是 SRAM非常昂贵;虽然 4GB 高速 DRAM 有点贵但可以承受,但 4GB SRAM 远远超出您的价格范围。

因此,每当处理器制造商决定在设计中添加更多 SRAM 时,其成本就会明显增加。SRAM 有多种速度,正如您所预料的,更快的 SRAM 比更慢的 SRAM 更昂贵。因此,您的处理器制造商已尝试针对这两种情况对其进行优化速度成本通过使用较高速的 SRAM 和较低速度的 SRAM。然后设计处理器,使其将最需要的值放在较快的缓存 (L2) 中,而将不太需要的信息放在较慢的缓存 (L3) 中。通过在处理器的微代码中仔细管理此内存,这会产生一个均衡的折衷方案:缓存更多,并且部分缓存(希望是处理器最需要的缓存)非常快。

总而言之,处理器具有多级缓存是为了增加处理器缓存的容量,同时又不会大幅提高处理器的价格。这种精心组合使处理器速度更快、价格更便宜。

答案2

多级缓存主要是容量和访问成本(延迟/时间和能量)之间的折衷。

将其与购买工具进行比较可能会有所帮助。去当地的五金店(相当于 L1 缓存)会很快并且消耗更少的能源,但当地的五金店规模很小,而且很可能没有用户想要的特定工具。去大型五金店(相当于 L2 缓存)将花费更多的时间和精力(距离较远,寻找工具需要更长时间),但该工具更有可能有库存。如果大型五金店也没有该工具,那么人们可能会去制造商的仓库(相当于主内存),那里几乎肯定会有该工具。如果仓库也没有该工具,那么预计需要等待更长时间,直到制造商的工厂(相当于磁盘)生产出更多该工具。

如果所需硬件供应的多样性通常很大(一些针对商业工作负载的 PA-RISC 处理器就是这样做的),那么住在大型五金店(拥有非常大的 L1 缓存)旁边会节省时间,但通常使用的供应多样性较小,因此小型本地商店很可能有库存(缓存命中的概率很高),而在较小的商店中找到常用物品的速度更快。

正如 jcrawfordor 所提到的,在多个核心之间共享同一级缓存具有一些优点,因为它可以:避免重复存储相同的内存内容,允许不平衡地使用存储容量(例如,一个核心可以使用共享的 L2 来使用所有 L2 存储,而使用每个核心的 L2 缓存时,核心将被限制在其自己的 L2 缓存中),并简化和加快核心之间的通信(在 L1 未命中时无论如何都会访问相同的 L2,并且无需检查其他 L2 缓存是否有数据)。

(类似的共享优势可以适用于 L2 和单独的 L1 指令和数据缓存,但通常会避免这种内容共享(即,缓存行通常只有代码或数据),并且除了不太常见的操作(如自修改代码和 JIT 编译)之外,指令缓存和数据缓存之间很少有通信。)

然而,共享确实有开销。人们可以将其比作在百货商店购物。使用商店的购物者越多,任何给定结帐站排队的可能性就越大(与 L2 缓存中的银行相当)。此外,共享的入口/出口会引入延迟(与缓存访问的仲裁延迟相当),提供多个门可以支持更高的吞吐量,但会增加选择门所需的时间——当没有其他人进出时,选择开销可能非常小(但并非不存在),但当商店很忙时,门的选择会变得更加复杂。如果假设商店会很忙,则可以避免一些决策延迟;但是如果商店不忙,那么只使用最方便的门就会更快(类似地,缓存可能会花费额外的时间来分配一个缓冲区来保存内存请求信息,即使在缓存不忙的情况下不需要这样的缓冲区 - 如果没有这样的优化,如果缓存很忙,则确定缓存是否忙和分配缓冲区条目的两个步骤将按顺序发生,因此总时间将是两者的总和,但如果缓存不忙,则可以避免缓冲区分配步骤)。

鉴于缓存的关联性有限,共享还会增加冲突未命中的频率,并可能导致糟糕的缓存替换选择(例如,一个使用流式访问模式且很少重用数据的内核会倾向于使用容量,而另一个经常重用数据的内核在使用时会更有优势)。有一些技术可以减少这些缺点,但它们会增加复杂性并产生其他成本。

答案3

较近的缓存大小要小得多。以下是一些内容,我找不到任何有关速度的信息,但它可能受限于(超过它是毫无意义的并且成本高昂)处理器或主板的速度。

有三级 CPU 缓存(单核中两级)、RAM(二级)和硬盘(三级)。

答案4

处理器具有多级缓存,如 l1、l2 和 l3。

L1 是最快的缓存,但也是最昂贵的。L2 位居第二,也是讨论最多的。其次是 L3,它位于 L2 之后。

缓存越快,处理器读取和写入数据的速度就越快。

但公司必须在每个处理器的性能和费用之间做出选择,因此他们根据处理器的价格在处理器中引入多级缓存。

相关内容