数据访问是 CPU 设计的关键部分。 CPU 以极高的速度运行,每个时钟周期处理多条指令,因此需要访问大量数据。 绝大多数数据存储在存储介质上。 然而,与 CPU 相比,存储设备慢得不可思议。 存储设备在顺序读取方面也明显优于随机读取,尽管 SSD 在这方面(以及许多其他方面)比 HDD 提供了显着改进。
系统 RAM 旨在加载 CPU 当前运行的软件可能需要的所有数据。 RAM 的延迟明显低于存储,它还经过专门定制以具有高随机读取性能。 尽管如此,尽管现代 RAM 速度很快,但与延迟大约 400 个时钟周期的 CPU 相比,它仍然是小巫见大巫。
缓存以减少延迟
为了进一步减少延迟,大多数现代 CPU 都包含缓存层。 通常,这些被称为 L1、L2 和 L3 缓存。 L1 速度非常快,通常需要 5 个时钟周期来访问。 L2 有点慢,大约 20 个周期。 L3 甚至更慢,仍然在 200 次左右。
虽然 L1 的速度快得令人难以置信,但它也很小。 它的速度很大程度上来自于较小的缓存需要较少的搜索时间这一事实。 L2 比 L1 大但比 L3 小,L3 仍然比系统 RAM 小。 很好地平衡这些缓存的大小对于获得高性能 CPU 至关重要。 缓存命中率很重要,但您需要平衡命中次数与获得该命中所需的时间,因此需要层级。
平衡每个缓存层的容量和命中率已经够棘手了,但决定对该缓存的访问范围有多广也很重要。 共有三种方法。 第一个是将缓存限制为单个内核。 您还可以允许所有内核访问缓存。 最后一个选项是让选定的核心共享高速缓存的中间立场。
分享速度慢
只能由单个内核访问的缓存称为本地内存。 限制对缓存的访问意味着您不需要将其定位为多次访问。 这意味着您可以将其保留为 close 尽可能。 这一点以及速度更快的小容量构成了理想的 L1 缓存。 每个核心都有自己的小和 close 缓存。
共享内存,将是一个可由多个内核访问的缓存。 一些或所有内核之间共享的缓存没有特别的区别,但它确实会对性能产生影响。 就像本地缓存很小一样,共享缓存很大也很有意义。 部分是因为它需要服务更多的核心,部分是因为它需要在物理上靠近每个核心。 这使得这个概念对 L2 尤其是 L3 缓存更有用。
本地缓存内存不需要限制为 CPU。 该概念也适用于其他类型的处理器。 然而,最著名的辅助处理器是 GPU,它基本上没有任何本地内存。 处理核心如此之多,以至于一切都被组合在一起。 即使是最小的组也共享最低级别的缓存。
在 RAM 级别
某些计算机(例如集群计算机)可以有多个物理 CPU。 通常,其中每一个都有自己的 RAM 池。 在某些情况下,此 RAM 将在所有 CPU 之间共享,而在其他情况下,它将仅限于每个 CPU。 当多处理器系统中的每个 CPU 只能访问自己的 RAM 池时,这也是本地内存。
在软件层面
计算机上运行的软件是分配内存空间的。 在某些情况下,一个程序可能正在运行具有共享内存空间的多个进程。 有些程序甚至可能故意主动与另一个程序共享内存空间。 但是,通常情况下,此内存空间仅限于一个进程。 同样,这是一个 example 本地内存。
结论
本地内存是一个术语,标识为仅可用于单个事物的内存部分。 这个东西可能是处理核心、处理器或进程。 尽管总体概念始终相同,但具体细节有所不同。 本地内存往往更安全。 它的容量也往往更小。 本地内存的访问时间通常比共享内存快。 在缓存之外,这取决于您测量共享内存的最坏情况下的速度。 本地内存通常非常有用。 然而,根据工作负载,结合使用本地内存和共享内存通常效率最高。 除了缓存,将本地内存和共享内存结合起来总是更好。