【问题标题】:Is it possible to assign parts of the shared L2 caches to different cores是否可以将共享 L2 缓存的一部分分配给不同的内核
【发布时间】:2013-03-23 20:23:37
【问题描述】:

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

【问题讨论】:

  • 这是一篇关于这个主题的有趣论文,eecg.toronto.edu/~tamda/papers/softpart.pdf
  • 我特别喜欢problematically这个词... ;-)
  • 哦,当我以编程方式键入时,我没有看到拼写检查器的建议有问题,哈哈!
  • 啊,我在考虑 Nehalem(以及后来的)架构,它有私有 L2 缓存。对于 Core(及更早版本),您是对的。
  • @OliCharlesworth:如果是 Nehalem,您可以假设这个问题是针对共享 L3 缓存的。

标签: c linux x86 multicore


【解决方案1】:

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

1)第一个也是一般性的答案:否。 缓存在设计上是在硬件中管理的。软件中只有很少的可访问缓存控制杠杆,例如启用/禁用整个内存或定义的内存区域的缓存,应用指定的缓存刷新策略(直写/回写)。 NO 基本上是因为它被设计为在硬件中进行管理。所以没有有用的界面可以允许在软件中优雅地管理它。

2) 第二个答案:是的。 实际上,高速缓存的设计方式是,高速缓存的每一行都可以保存指定内存行集中的数据。因此,如果内存管理器提供保证,即同一个 CPU 一个 CPU/内核拥有并独占使用分配给同一高速缓存行的所有内存行,则内存管理器提供该高速缓存行将由该 CPU 独占使用的保证。这是一个非常棘手的解决方法。而且它的好处非常有限,并且有严重的缺点:内存布局非常碎片化,缓存使用不平衡,内存管理复杂,非常依赖硬件(详见“MetallicPriest”提供的论文)。

简历:理论上可行,实践上几乎不可能。

【讨论】:

    猜你喜欢
    • 2020-02-11
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2015-06-24
    • 1970-01-01
    相关资源
    最近更新 更多