不同级别的缓存是否在同一个频域中运行?

Zin*_*ant 4 cpu caching cpu-architecture

较大的高速缓存通常具有较长的位线或字线,因此很可能具有更高的访问延迟和周期时间。

那么,L2 缓存是否与 L1 缓存在同一个域中工作?L3 缓存(切片)如何,因为它们现在是非包容性的并且在所有内核之间共享?

相关问题是:内核中的所有功能单元都在同一个时钟域中吗?非核心部分是否都在同一个时钟域中?多核系统中的内核是否同步?

我相信时钟域交叉会引入额外的延迟。CPU 芯片中的大部分部件是否在同一时钟域上工作?

Pet*_*des 6

在现代 CPU 1 中私有 L1i/d 缓存始终是每个内核的一部分,而不是在单独的时钟上。L1d 与加载执行单元和 L1dTLB 紧密耦合。这在整个体系结构中非常普遍。(VIPT 缓存:TLB 和缓存之间的连接?)。

在具有每核心私有 L2 缓存的 CPU 上,它也是核心的一部分,在相同的频域中。通过保持定时(在核心时钟周期中)固定,并且不需要任何异步逻辑来跨时钟域传输数据,这使得 L2 延迟非常低。这在 Intel 和 AMD x86 CPU 上是正确的,我假设大多数其他设计都是如此。

脚注 1:几十年前,即使在芯片上拥有 L1 缓存对于晶体管预算来说也是一个延伸,有时只有比较器和标签都在芯片上,因此该部分可以在开始设置对数据的访问时快速运行在外部 SRAM 上。(或者,如果不是外部的,有时是在同一个塑料/陶瓷封装中的单独的芯片(硅片),因此导线可能非常短并且不会暴露为可能需要 ESD 保护等的外部引脚)。

或者例如,早期的 Pentium II以半核时钟速度(低于 PPro 中的全速)运行其芯片外/封装上 L2 缓存。(但所有相同的“频域”;这是在用于电源管理的 DVFS 动态频率/电压之前。)L1i/d 像今天一样紧密集成到内核中;您必须回溯到更远的地方才能找到具有片外 L1 的 CPU,例如早期的经典 RISC CPU。


这个答案的其余部分主要是关于 Intel x86 CPU,因为从你提到的 L3 切片我认为这就是你的想象。

L3 缓存(切片)如何,因为它们现在是非包容性的并且在所有内核之间共享?

在主流 Intel CPU(P6 / SnB 系列)中,只有 Skylake-X 具有非包容性 L3 缓存。英特尔自 Nehalem 使用包容性最后一级缓存以来,它的标签可以是一个窥探过滤器。请参阅英特尔酷睿 i7 处理器中使用了哪种缓存映射技术?. 但是SKX从环形变成了网状,并且使得L3非包容/非专属。


在 Intel 台式机/笔记本电脑 CPU(双/四)上,所有内核(包括它们的 L1+L2 缓存)都在相同的频域中。非核心(L3 缓存 + 环形总线)在单独的频域中,但我认为通常以核心的速度运行。如果 GPU 很忙但内核都空闲,它的时钟可能高于内核。

即使 CPU 时钟下降,内存时钟也会保持高电平。(不过,如果 CPU 决定将时钟从 4.0 降到 2.7GHz,单核带宽会受到影响,因为它在唯一的活动核心上运行内存绑定代码。单核带宽受 max_concurrency / 延迟的限制,而不是受 DRAM 带宽本身的限制如果你有双通道 DDR4 或 DDR3。 为什么 Skylake 在单线程内存吞吐量方面比 Broadwell-E 好得多? 我认为这是因为增加了非核心延迟。)

维基百科非核文章提到从模芯分开超频它减少L3 /存储器等待时间。


在 Haswell 和更高版本的至强 (E5 v3) 上,非核心(环形总线和 L3 切片)和每个单独的核心都有单独的频域。 (来源:Frank Denneman 的NUMA Deep Dive Part 2: System Architecture。它有一个错字,当 Haswell 实际上是 Xeon E[357]-xxxx v3 时说 Haswell (v4)。但其他来源如本文核心和非核心频率缩放的比较量子化学应用 GAMESS 中的模式证实 Haswell 确实具有这些功能。非 核心频率缩放 (UFS) 和每核心功率状态 (PCPS) 都是 Haswell 中的新功能。


在Haswell之前的Xeons 上,uncore 以该软件包上当前最快的内核的速度运行。在双套接字 NUMA 设置中,这可能会严重瓶颈另一个套接字,使其跟上监听请求的速度变慢。请参阅 John “Dr. Bandwidth” McCalpin 在此英特尔论坛主题上的帖子:

在至强 E5-26xx 处理器上,“uncore”(包含 L3 缓存、环形互连、内存控制器等)的运行速度并不比最快的内核快,因此“封装 C1E 状态”导致 uncore也降至 1.2 GHz。在这种状态下,芯片需要更长的时间来响应 QPI 监听请求,这会增加另一个芯片上的处理器和 DMA 引擎看到的有效本地内存延迟!

...在我的至强 E5-2680 芯片上,“封装 C1E”状态将另一个芯片上的本地延迟增加了近 20%

“封装 C1E 状态”还将位于“空闲”芯片上的内存的持续带宽减少了约 25%,因此任何 NUMA 放置错误都会产生更大的性能损失。

Bandwidth 博士运行了一个简单的无限循环,该循环固定在另一个插槽上的一个内核上,以保持时钟同步,并且能够测量差异。

支持四插槽的至强 (E7-xxxx) 在每个插槽中都有一个小的监听过滤器缓存。双插槽系统只是在每次监听请求时向另一个插槽发送垃圾邮件,使用 QPI 带宽的很大一部分,即使它们在 L3 未命中后访问自己的本地 DRAM 也是如此。


我认为即使所有内核都空闲时,Broadwell 和 Haswell Xeon 也可以保持他们的非内核时钟高,正是为了避免这个瓶颈。

Bandwidth 博士说他在他的 Haswell Xeon 上禁用了包 C1E 状态,但这可能没有必要。他还发布了一些关于使用 Uncore perf 计数器测量非核心频率以找出您的 CPU 真正在做什么的内容,以及可能影响非核心频率决策的 BIOS 设置。


更多背景:我发现https://www.anandtech.com/show/8423/intel-xeon-e5-version-3-up-to-18-haswell-ep-cores-/4关于一些变化,比如新的监听模式选项(环总线上的哪个跳向另一个内核发送监听),但它没有提到时钟。