是否可以将共享L2缓存的一部分分配给不同的核心

时间:2013-04-02 13:48:43

标签: c linux x86 multicore

可以说,4个线程在Multicore x86处理器的4个独立核心上运行,并且它们不共享任何数据,是否可以通过编程方式使4个核心使用共享L2缓存的单独和预定义部分。

1 个答案:

答案 0 :(得分:2)

让我们使用两个术语,独占和共享缓存,而不是L1,L2,L3,L4缓存。不同的CPU系列开始在不同级别共享缓存。在所提出的术语中,最初的问题是 - 是否可以将共享缓存拆分为部分,每个部分将由其中一个CPU /核心专用?没有明确的答案。此外,有两个答案相反。

1)首先和一般答案:没有。 缓存是通过硬件管理设计的。在软件中只能访问缓存的控制杠杆很少,例如对整个内存或已定义的内存区域启用/禁用缓存,应用指定的缓存刷新策略(直写/写回)。基本上没有,因为它被设计为在硬件中管理。因此,没有有用的界面可以在软件中优雅地管理它。

2)第二个回答:是的。 实际上,缓存是以这种方式设计的,即缓存的每一行都可以保存来自指定内存行的数据。由于这一点,如果内存管理器提供保证,相同的CPU一个CPU /内核拥有并使用专门分配给同一缓存行的所有内存行,则内存管理器保证该CPU将专门使用该缓存行。这是一个非常棘手的解决方法。它的优点非常有限,并且有严重的缺点:内存布局非常分散,缓存使用不平衡,内存管理复杂,非常依赖于软件(详情可以在“MetallicPriest”提供的文章中找到)。

简历:这在理论上是可行的,在实践中几乎是不可能的。