代码之家  ›  专栏  ›  技术社区  ›  Ross Rogers

GCC、ICC或微软的C/C++编译器支持或了解NUMA吗?

  •  11
  • Ross Rogers  · 技术社区  · 14 年前

    如果我有一个多处理器板 cache-coherent non-uniform memory access ( NUMA ) ,即分离 "northbridges" 对于每个处理器使用单独的RAM,是否有任何编译器知道如何在不同的内存系统中自动分布数据,以便在本地线程上工作的进程大多从与线程运行的处理器相关联的RAM中检索数据?

    我有一个设置,1 GB连接到处理器0,1 GB连接到处理器1,ET C。最多4个处理器。在 coherent memory space 第一个处理器上RAM的物理内存是地址0到1GB-1。对于第二个处理器,它是1GB到2GB-1,依此类推。

    有编译器吗,或者 malloc 具体来说,将特定核心上的进程分配的新内存与与该核心关联的物理RAM关联起来?

    3 回复  |  直到 14 年前
        1
  •  7
  •   Nikolai Fetissov    14 年前

    Linux内核了解NUMA,并将尝试将您的进程页从本地内存提供给当前CPU(源代码: U. Drepper, "What Every Programmer Should Know About Memory" )

        2
  •  5
  •   Eric Seppanen    14 年前

    numa-aware内存分配在编译时没有完成。做出这样的假设对可移植性不利。

    在Linux上,这是一个内核函数,尽管您可以在运行时使用 numactl set_mempolicy 或与 libnuma .

        3
  •  4
  •   Michael    14 年前

    对于MS平台,编译器不知道NUMA。但是,系统可以识别NUMA,并尝试在同一节点中分配内存。

    http://code.msdn.microsoft.com/64plusLP 有关最新版本的Windows如何处理NUMA的更多详细信息。