当我在 AMD Ryzen 5 上运行命令
lscpu
时,cache
部分包含以下信息
Caches (sum of all):
L1d: 192 KiB (6 instances)
L1i: 192 KiB (6 instances)
L2: 3 MiB (6 instances)
L3: 16 MiB (1 instance)
我的问题是:
6 instances
是什么意思?
您的CPU有1个6核CCX(核心集群)。 每个核心都有自己的 L1i/d(每个 32K)和 L2(每个 512K)。 每个 CCX 有一个共享 L3 (16 MiB)。
因此,在整个 CPU 中,有一个该大小的 L3 缓存实例,以及 6 个总大小为 192 KiB 的 L1d 缓存实例。 “Instance”是一个标准的英语单词,有字典定义,没有特殊的技术含义。
在 Intel Alder Lake 以及后来的一些 E 核心集群上,每 4 个 E 核心有一个 L2 缓存,而 P 核心有自己的私有 L2 缓存,因此这不仅仅是每个核心与共享的情况。 同样,具有更多核心(两个或更多 CCX)的 Zen 将拥有多个 L3 实例。
顺便说一句,192 KiB(6 个实例)是描述每个核心都有一个私有 32 KiB L1d 缓存的 CPU 的一种非常愚蠢且无用的方式。 我希望营销部门能够做到这一点,因为能够放置更大的数字会使 CPU 看起来更好;也许
lscpu
复制了这个,这样数字就会排列起来?
缓存占用空间是否适合 L1d 的相关数字是 32K。 例如,很少可以并行化一种算法并且让数组的每个块仅由一个线程触及。
lscpu
应该停止这样做,并输出 32 KiB (x6)
或对编写程序和调整缓存大小的人实际上有用的东西。 或者 32 KiB (x6 instances)
,但也许可以避免“实例”,这样长期用户就可以更轻松地记住从旧输出格式的切换。
当并非所有缓存的大小都相同时,以某种方式总结细分就更有意义,例如几个 2M L2 和一些较小的 L2。 否则人们可能会做出错误的假设。 但它包含更多信息(相对于每核私有的 1 位信息与 CPU 范围共享的信息),因此更难显示。