【问题标题】:Do you anticipate the CLR to adapt NUMA soon?您预计 CLR 会很快适应 NUMA 吗?
【发布时间】:2010-10-12 12:57:56
【问题描述】:

似乎 NUMA 很有希望用于并行编程,如果我没记错的话,当前最新的 cpus 已经内置了对它的支持,比如 i7。

您是否预计 CLR 会很快适应 NUMA?

编辑:我的意思是支持它并利用它。

【问题讨论】:

    标签: c# .net clr numa


    【解决方案1】:

    NUMA 是一种硬件架构,不一定需要直接在 CLR 中采用。详情见NUMA FAQ.

    话虽如此,让软件了解其架构是有好处的。 CLR 团队的人似乎确实意识到缓存一致性等问题,所以我敢打赌,对此有一些优化。此外,C# 4 中任务并行库中调度程序的设计似乎有望更好地利用 NUMA 架构。

    【讨论】:

    • 您是否对“似乎意识到缓存一致性问题”和“调度程序的设计......有希望......”有任何参考?我很想阅读更多内容。
    • 仅供参考:“缓存一致性”不是软件问题。这已经被 Intel 和 AMD 解决了,因为主流的 NUMA 都是 ccNUMA(缓存一致性 NUMA)。然而,软件必须解决的是在哪里分配内存,为哪个线程/进程分配内存,具体取决于它在哪些内核/cpu(s) 上运行(亲和力)。
    【解决方案2】:

    在某种意义上,NUMA 与 CLR 的内存模型是正交的。换句话说,硬件/操作系统有它的访问方法,CLR 有它的内存模型需求,这取决于 CLR 的实现者来让它们一起玩得很好。在实践中,这很困难,there are flaws in the current implementation。但是由于 CLR 已经在支持 NUMA 的硬件上运行,我不太确定您所说的“尽快适应 NUMA。?

    【讨论】:

    • 据我所知,CLR 使用与底层操作系统相同的首次接触内存分配策略。第一个接触虚拟页面的线程将其映射(我认为是由操作系统,而不是 CLR)映射到与线程恰好所在的 CPU 相对应的 NUMA 节点。在应用程序生命周期的后期,不同 CPU 上的线程很有可能会使用相同的内存(现在位于错误的 NUMA 节点上)。
    【解决方案3】:

    到目前为止,这里的所有答案都正确地强调了 NUMA 作为硬件架构。一个有趣的读物是 this article by Joe Duffy 并发和 CLR。​​

    【讨论】:

      【解决方案4】:

      使用 NUMA,您基本上可以拥有每个处理器的内存控制器。您可以使用 Intel QuickPath 和 AMD HyperTransport。问题是,据我所知,目前没有支持多个 CPU 的 i7 和 Phenom 主板。

      无论如何,这是非常低级的,与CLR无关。由操作系统来利用它。

      【讨论】:

      • 这不是真的。是否知道 NUMA 取决于堆管理器(或在本例中为 CLR 内存管理器)。操作系统可能永远不会有足够的信息来做出比当前 Windows 和 Linux 使用的第一次接触策略更好的决策。见stackoverflow.com/questions/9439402/array-memory-management
      猜你喜欢
      • 2012-10-01
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多