一个核心大量使用L3缓存会使另一个核心的L1/L2缓存失效吗?

4

当前Intel CPU缓存架构由本地L1和L2缓存以及共享的包容性L3缓存组成。我有两个类似的问题:

  1. 一个核心上运行的线程对内存的大量访问是否会使另一个核心的L1 / L2缓存失效?
  2. 单个核心上运行的线程所需的数据是否可以占用整个L3缓存?

更新:请注意,Intel Skylake具有新的非包容性L3缓存架构。

1个回答

6
两个问题的答案都是肯定的。
第二个问题比较简单,我们从这里开始——L3缓存的主要好处在于它是共享的。共享的目的是允许您在需要时通过单个线程利用更多的高速缓存容量,而不是将同样的资源分配给各个核心而使它们成为非共享资源。
换句话说,如果所有 N 个核心都是活跃且平衡的,并且数据被均匀分布(即没有对齐问题),则每个核心会获得 LLC 的完全相同份额(1/N)。然而,如果一个核心具有更大的高速缓存需求,则可以利用其他当前较少依赖高速缓存的核心的资源。当然,在极端情况下,您可以通过单个进程利用整个 L3,而不考虑体系结构决定保留用于某些任务(相当常见)或某个核心(要少得多)专用的 L3 子集的情况。
至于第一个问题——如果 L3 是包含的(正如大多数常见 CPU 中的情况一样,主要是为了有效的嗅探过滤),并且其中一个线程变得占主导地位并完全接管它,那么由其他核心(不太活跃的核心)放置的数据将必须被驱逐到内存中,并且为了强制包容性,这些行也必须从各自的核心 L1 和 L2 中强制清除。如果保留数据(破坏包容性),则会失去一致性。
在 L3 不包容的系统上,不会发生此类行为,较不活跃的核心将能够在 L1/L2 中保留其数据。但是,这样的系统可能采用包容式嗅探过滤器,这可能会遇到相同的问题(并再次强制驱逐)——具体取决于缓存协议。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接