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

标签 caching cpu cpu-architecture

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

那么,L2缓存与L1缓存在同一域中工作吗? L3缓存(片)现在是非包含性的,并且在所有内核之间共享,怎么样?

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

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

最佳答案

专用L1i / d高速缓存始终是每个内核的一部分,而不是在单独的时钟上。 L1d与负载执行单元以及L1dTLB紧密耦合。在整个体系结构中,这都是普遍适用的。 (VIPT Cache: Connection between TLB & Cache?
在具有每核专用L2高速缓存的CPU上,它也是同一频域中核心的一部分。通过保持定时(以核心时钟周期为单位)固定,并且不需要任何异步逻辑来跨时钟域传输数据,从而使L2延迟非常低。在Intel和AMD x86 CPU上都是如此,我假设大多数其他设计。

该答案的其余部分主要是关于Intel x86 CPU的,因为从您提到的L3 slice来看,我认为这就是您的想象。

L3缓存(片)现在是非包含性的,并且在所有内核之间共享,怎么样?

在主流的Intel CPU(P6 / SnB系列)中,只有Skylake-X具有不包含在内的L3缓存。自从Nehalem使用了包含性的最后一级缓存以来,Intel便可以将其标签用作探听过滤器。请参见Which cache mapping technique is used in intel core i7 processor?。但是,SKX从环形更改为网格,使L3不再包含/非包含。

在Intel台式机/笔记本电脑CPU(双/四核)上,所有内核(包括其L1 + L2高速缓存)都在相同的频域中。 Uncore(L3缓存+环形总线)位于单独的频域中,但我认为通常以内核的速度运行。如果GPU繁忙,但所有内核均处于空闲状态,则时钟频率可能高于内核。
即使CPU时钟下降,内存时钟仍保持高电平。 (仍然,如果CPU决定将时钟频率从4.0降至2.7GHz,则单核带宽可能会受到影响,因为它在唯一活动的内核上运行内存绑定代码。单核带宽受max_concurrency / latency的限制,而不是受DRAM带宽本身的限制。如果您有双通道DDR4或DDR3。Why is Skylake so much better than Broadwell-E for single-threaded memory throughput?我认为这是由于增加了非核心延迟。)
wikipedia Uncore article提到将其与内核分开进行超频以减少L3 /内存延迟。

在Haswell和更高版本的Xeons(E5 v3)上,uncore(环形总线和L3 slice)和每个单独的内核具有单独的频域。 (来源:弗兰克·丹纳曼(Frank Denneman)的NUMA Deep Dive Part 2: System Architecture。它有一个错字,说当Haswell实际上是至强E [357] -xxxx v3时,Haswell(v4)。但是类似本文Comparisons of core and uncore frequency scaling modes in quantum chemistry application GAMESS的其他来源也证实Haswell确实具有这些功能。频率缩放(UFS)和每核功率状态(PCPS)在Haswell中都是新的。

在Haswell之前的Xeons上,uncore以该程序包上当前最快的core的速度运行。在双插槽NUMA设置上,这可能使另一个套接字严重滞后于侦听请求,从而严重瓶颈。参见John“带宽博士” McCalpin在this Intel forum thread上的帖子:

在Xeon E5-26xx处理器上,“ uncore”(包含L3高速缓存,环形互连,内存控制器等)的运行速度不会比最快的core快,因此“ package C1E状态”会导致uncore也降至1.2 GHz。在这种状态下,芯片需要更长的时间来响应QPI监听请求,这增加了另一芯片上的处理器和DMA引擎看到的有效本地内存延迟!
...在我的Xeon E5-2680芯片上,“封装C1E”状态将另一块芯片上的本地延迟增加了近20%
“封装C1E状态”还使位于“空闲”芯片上的内存的持续带宽减少了多达25%,因此任何NUMA放置错误都会产生更大的性能损失。

Bandwidth博士运行了一个固定在另一个插槽上的核心的简单无限循环,以使其保持时钟运行,并能够测量出差异。
具有四路套接字功能的Xeon(E7-xxxx)在每个套接字中都有一个小的探听过滤器缓存。双路套接字系统仅在每个侦听请求都向另一个套接字发送垃圾邮件,即使在L3丢失后正在访问自己的本地DRAM时,也使用相当一部分QPI带宽。

我认为,即使所有内核都处于空闲状态,Broadwell和Haswell Xeon仍可以保持其非内核时钟较高,正是为了避免这一瓶颈。
带宽博士说,他在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涉及到一些变化,例如新的探听模式选项(在环形总线上跳的事件将探听发送到另一个内核),但是没有提到时钟。

关于caching - 不同级别的缓存是否在同一频域中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54796419/

相关文章:

java - 从图库android中的缓存中查看图像文件

algorithm - Tomasulo 算法 + MIPS 5 级流水线 + 分支预测

c++ - 存储指令是否在高速缓存未命中时阻止后续指令?

ios - 如何使用 SDWebImage 从缓存中提取旧的 UIImage 并将其放入占位符?

android - 如何从我们的 Android 应用程序中删除其他应用程序缓存?

ajax - 在 AJAX 服务器请求末尾添加一个随机数如何防止缓存?

MySQL 查询问题 - 计数查询使用大量 CPU

cpu - CPU 指令重新排序的跟踪

linux - 如何只显示 Docker 容器中分配的资源?

memory-management - 运行时内存地址绑定(bind)的必要性