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

时间:2019-02-20 22:42:09

标签: caching cpu cpu-architecture

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

有一个特殊的电路用于跨频域,所有跨域通信都必须通过该电路。因此,是的,我认为这会带来较小的性能开销。

还有其他频域。特别地,每个DRAM通道在频域中操作。我不知道当前的处理器是否支持具有不同的通道以不同的频率运行。

答案 1 :(得分:3)

私有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缓存)都在相同的频域中。非核心(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)上,非核心(环形总线和L3片)以及每个核心都有各自的频域。(来源:Frank Denneman的NUMA Deep Dive Part 2: System Architecture Uncore Frequency Scaling(UFS),有一个拼写错误,说Haswell(v4)是Haswell实际上是至强E [357] -xxxx v3。但其他类似本文的资料Comparisons of core and uncore frequency scaling modes in quantum chemistry application GAMESS确认Haswell确实具有这些功能。和Per Core Power States(PCPS)都是Haswell的新功能。


在Haswell之前的Xeons 上,uncore以该程序包上当前最快的core的速度运行。在双插槽NUMA设置上,这可能会严重阻碍 other 套接字,从而使它无法满足侦听请求的要求。参见约翰“带宽博士”麦卡平在this Intel forum thread上的帖子:

  

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

     

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

     

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

博士带宽运行了一个固定在另一个插槽上的核心的简单无限循环,以使其保持时钟同步,并能够测量出差异。

具有四插槽功能的Xeon(E7-xxxx)在每个插槽中都有一个小的探听过滤器缓存。双套接字系统仅在每个侦听请求都向另一个套接字发送垃圾邮件,即使在L3丢失后访问自己的本地DRAM时,也使用相当一部分QPI带宽。


我认为即使所有内核都处于空闲状态,Broadwell和Haswell Xeon仍可以保持其非内核时钟较高,正是为了避免这一瓶颈。

博士带宽说,他在Haswell Xeons上禁用了软件包C1E状态,但这可能不是必需的。他还posted some stuff关于使用Uncore性能计数器来测量uncore频率以找出您的CPU真正在做什么,以及有关可能会影响uncore频率决策的BIOS设置。


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