不同级别的缓存是否工作在同一个频域?

Are caches of different level operating in the same frequency domain?

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

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

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

我相信跨时钟域会引入额外的延迟。 CPU 芯片中的大部分部件都在同一个时钟域上工作吗?

更大的缓存可能具有更长的访问时间,但它仍然可以通过完全流水线化来维持每个端口每个周期的一次访问。但它也可能会限制最大支持频率。

在现代英特尔处理器中,L1i/L1d 和 L2 高速缓存以及内核的所有功能单元都在同一频域中。在客户端处理器上,同一插槽的所有内核也处于同一频域,因为它们共享同一频率调节器。在服务器处理器上(我认为从 Haswell 开始),每个内核都在一个单独的频域中。

在现代英特尔处理器中(我认为是从 Nehalem 开始),非核心(包括 L3)处于单独的频域中。一个有趣的案例是在双 NUMA 节点配置中使用套接字。在这种情况下,我认为每个NUMA节点的非核心分区仍然存在于相同的频域中。

有一种用于跨频域的特殊电路,所有跨域通信都必须通过它。所以是的,我认为它会产生很小的性能开销。

还有其他频域。具体而言,每个 DRAM 通道都在频域中运行。不知道现在的处理器是否支持不同的通道以不同的频率运行。

私有 L1i/d 缓存始终是每个核心的一部分,而不是在单独的时钟上 ,在现代 CPUs1 。 L1d 与加载执行单元和 L1dTLB 紧密耦合。这在所有架构中都是普遍适用的。 ().

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

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

或者例如 early Pentium II 运行 它的片外/封装 L2 缓存以半核心时钟速度(低于 PPro 的全速)。 (但所有相同的“频域”;这是在用于电源管理的 DVFS 动态 frequency/voltage 之前。)L1i/d 像今天一样紧密集成到内核中;你必须回溯得更远才能找到 CPUs with off-die L1,就像早期的经典 RISC CPUs.


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

How about L3 cache (slices) since they are now non-inclusive and shared among all the cores?

在主流英特尔 CPU 中(P6 / SnB 系列),只有 Skylake-X 具有非包容性 L3 缓存。自从 Nehalem 以来,英特尔就使用了包容性的末级缓存,因此它的标签可以成为一个监听过滤器。参见 。但是SKX从环形变成了网状,并且把L3变成了非包容/非独占。


在Intel desktop/laptop CPUs (dual/quad)上,所有内核(包括它们的L1+L2缓存)都在同一个频域.非核心(L3 缓存 + 环形总线)处于单独的频域中,但我认为通常以核心的速度运行。如果 GPU 繁忙但内核都空闲,它的时钟可能会高于内核。

即使 CPU 时钟下降,内存时钟仍保持高电平。 (不过,如果 CPU 决定将时钟频率从 4.0 降低到 2.7GHz,单核带宽可能会受到影响,因为它是唯一活动内核上的 运行 内存绑定代码。单核带宽受限于 max_concurrency / 延迟,如果你有双通道 DDR4 或 DDR3,则不是 DRAM 带宽本身。 我认为这是因为增加了非核心延迟。)

wikipedia Uncore article 提到将其与内核分开超频以减少 L3 / 内存延迟。


在 Haswell 和更高版本的至强 (E5 v3) 上,非核心(环形总线和 L3 切片)和每个单独的核心都有单独的频域。(来源:F运行k Denneman 的 NUMA Deep Dive Part 2: System Architecture. It has a typo, saying Haswell (v4) when Haswell is actually Xeon E[357]-xxxx v3. But other sources like this paper Comparisons of core and uncore frequency scaling modes in quantum chemistry application GAMESS 确认 Haswell 确实具有这些功能。非核心频率缩放 (UFS) 和每核心功率状态 (PCPS) 都是 Haswell 中的新功能。


在 Xeons 之前 Haswell,非核心以该包上当前最快核心的速度运行。在双插槽 NUMA 设置中,这可能会严重阻碍 other 插槽,因为它会减慢跟上监听请求的速度。请参阅 John“Dr. Bandwidth”McCalpin 在 this Intel forum thread 上的 post:

On the Xeon E5-26xx processors, the "uncore" (containing the L3 cache, ring interconnect, memory controllers, etc), runs at a speed that is no faster than the fastest core, so the "package C1E state" causes the uncore to also drop to 1.2 GHz. When in this state, the chip takes longer to respond to QPI snoop requests, which increases the effective local memory latency seen by the processors and DMA engines on the other chip!

... On my Xeon E5-2680 chips, the "package C1E" state increases local latency on the other chip by almost 20%

The "package C1E state" also reduces sustained bandwidth to memory located on the "idle" chip by up to about 25%, so any NUMA placement errors generate even larger performance losses.

博士。带宽 运行 一个简单的无限循环固定到另一个插槽上的核心以保持其时钟频率,并且能够测量差异。

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


我认为即使所有内核都处于空闲状态,Broadwell 和 Haswell Xeon 也可以将非内核时钟保持在较高水平,从而避免这种瓶颈。

博士。 Bandwidth 说他在他的 Haswell Xeons 上禁用了包 C1E 状态,但这可能没有必要。他还 posted some stuff 关于使用 Uncore 性能计数器测量非核心频率以了解您的 CPU 真正在做什么,以及关于可能影响非核心频率决策的 BIOS 设置。


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