假设,4 个线程在多核 x86 处理器的 4 个独立内核上运行,并且它们不共享任何数据,是否可以通过编程方式使 4 个内核使用共享 L2 缓存的单独和预定义部分。
问问题
177 次
1 回答
2
让我们使用两个术语,独占和共享缓存,而不是 L1、L2、L3、L4 缓存。不同的 CPU 系列开始共享不同级别的缓存。在提出的术语中,最初的问题是 - 是否可以将共享缓存分成多个部分,每个部分都将由一个 CPU/核心独占使用?没有明确的答案。此外,还有两个相反的答案。
1)第一个也是一般性的答案:不。缓存在设计上是在硬件中管理的。软件中只有很少的可访问缓存的控制杠杆,例如启用/禁用整个内存或定义的内存区域的缓存,应用指定的缓存刷新策略(直写/回写)。NO 基本上是因为它被设计为在硬件中进行管理。所以没有有用的界面可以允许在软件中优雅地管理它。
2)第二个答案:是的。实际上,高速缓存的设计方式是,高速缓存的每一行都可以保存指定内存行集中的数据。因此,如果内存管理器提供保证,即同一 CPU 一个 CPU/核心拥有并独占使用分配给同一高速缓存行的所有内存行,则内存管理器提供该高速缓存行将由该 CPU 独占使用的保证。这是一个非常棘手的解决方法。而且它的好处非常有限,并且有严重的缺点:内存布局非常碎片化,缓存使用不平衡,内存管理复杂,非常依赖硬件(详见“MetallicPriest”提供的论文)。
简历:理论上是可能的,在实践中几乎是不可能的。
于 2013-04-05T12:54:33.593 回答