在过去的几年里,看看 Intel CPU,已经从大尺寸 L2 缓存转向大尺寸 L3 缓存。这在很大程度上是由于 CPU 上有更多内核并希望在它们之间共享缓存(L3 优势)。
但是假设我有一个单线程应用程序,并且我想比较在共享相同时钟速度的 2 个不同 CPU 上运行它的速度:
具有 6MB L2缓存 @3.1Ghz的 CPU (例如,Core 2 Duo E8500)
具有 6MB L3缓存 @3.1Ghz的 CPU (例如,Core i5 2400)
不考虑涡轮增压效应和更快的 DDR 因素, 似乎第一个(较旧的)CPU 应该执行得更快(因为它更接近核心级别),不是吗?
另一个让我感兴趣的问题,在过去,在 CPU 中 L2 缓存的最初几天我似乎记得 L2 缓存是以 CPU 时钟速度的一半访问的,今天仍然如此吗?L3速度呢?
WMIC CPU命令显示有关机器上 CPU 的大量信息。它只显示有关 L3 缓存的信息,有没有办法在 Windows 7 上使用命令或工具计算出 L1 和 L2 缓存的大小?
一般来说,高速缓存是有用的,因为处理器的速度高于 ram 的速度(它们都在增加速度,但差异仍然存在)。因此,减少内存访问次数对于提高性能是可取的。
我的问题是为什么我们需要多级缓存(L1、L2、L3)而不是一个?
我知道 L1 是最快和最小的,L2 有点慢但有点大等等......但他们为什么要以这种方式创建硬件?
所有现代多核 CPU 都至少有三级缓存(请参阅为什么我们需要多级缓存?)。
L1 是最快和最小的,L2 的延迟稍大但更大,L3 保存在处理器中所有内核之间共享的数据(甚至更大,甚至更慢)。一切都很好。
然而,谷歌搜索短语“L4 Cache”不会产生空结果。显然有些 CPU 确实包含 L4 缓存(显然 Intel Broadwell i7-5775C 确实有 128MB eDRAM 实现为 L4 缓存)。
有谁知道L4缓存是做什么用的?我找不到任何关于其目的和功能的文档。
进程是否会在不同内核之间切换以提高性能?如果进程确实在内核之间跳转,那么内核之间共享哪些组件?L1-L3 缓存、寄存器还是内存?
根据Real World Technologies关于“英特尔的 Sandy Bridge 微架构”的文章:
“Sandy Bridge 的 uop 缓存被组织成 32 组和 8 路,每行 6 uop,总共 1.5K uop 容量。uop 缓存严格包含在 L1 指令缓存中。每行还保存元数据,包括行中有效 uop 的数量和对应于 uop 缓存行的 x86 指令的长度。映射到 uop 缓存的每个 32B 窗口可以跨越一组 8 路中的 3 条,最多 18 路 uop – 大约 1.8B/uop。如果一个 32B 的窗口有超过 18 个 uop,它就无法放入 uop 缓存中,必须使用传统的前端。微码指令不保存在 uop 缓存中,而是由指向微码 ROM 的指针和可选的前几个 uop 表示。”
'每个 32B 窗口(来自指令缓存)被映射到 uop 缓存中,可以跨越一组 8 路中的 3 路'
因此,假设我们有一个 32B 指令窗口,它将是 L1 指令缓存行的一半,在该行上,只有偏移位不同,但该行上所有字节的标记位和设置位都相同。
解码 32 字节窗口后,uop 将使用与用于从 L1 指令缓存中检索 …
文件夹中的文件是什么意思/sys/devices/system/cpu/cpu0/cache/index0?我在文件夹中看到这些文件:
coherency_line_size number_of_sets shared_cpu_list size ways_of_associativity
level physical_line_partition shared_cpu_map type
Run Code Online (Sandbox Code Playgroud)
在/sys/devices/system/cpu/cpu0/cache/index3有这些文件:
cache_disable_0 level shared_cpu_list subcaches
cache_disable_1 number_of_sets shared_cpu_map type
coherency_line_size physical_line_partition size ways_of_associativity
Run Code Online (Sandbox Code Playgroud)
为什么我在 index1 或 index2 中看不到子缓存?并且 shared_cpu_list 显示 0_7。是不是说这个缓存是和cpu0到cpu7共享的?
我知道在哪里可以找到 CPU 级别和速度以及 RAM 量。但是我在计算机属性或设备管理器中没有看到 CPU 缓存的数量。Windows(目前的XP)是否提供此信息,或者是否有一个很好的程序来检索它?
我知道内部寄存器的访问速度与 L1 Cache 相比非常高,而且 L1 Cache 的访问速度比 L2 缓存快,而 L2 缓存的访问速度又比 RAM 快。但是,我想知道为什么内部寄存器的大小总是小于 L1 缓存的大小,为什么 L1 缓存的大小大多小于 L2 缓存的大小,而 L2 缓存的大小又总是小于 RAM 大小的大小?
我购买了一个具有 6 MB 缓存的桌面系统。当我检查 BIOS 中的 L3 缓存时,没有找到 L3 缓存。
我尝试使用命令行中的另一种方法来确认 L3 缓存大小。
这是我尝试获取 L3cache 值的命令:
wmic cpu get L3CacheSize
Run Code Online (Sandbox Code Playgroud)
它显示零结果 (0)。但相同的命令显示在我的其他系统(我的 Dell Inspiron 3521)上也有效,它显示 3MB 的 L3 缓存,这是绝对正确的。
我不明白这是什么意思。我以前从未见过这个。
这是否意味着我没有 L3 缓存?