gcc,icc或Microsoft的C / C ++编译器是否支持或了解有关NUMA的任何信息?

时间:2010-01-26 19:46:29

标签: linux gcc g++ icc numa

如果我的多处理器板有cache-coherent non-uniform memory access ( NUMA ),即每个处理器都有单独的"northbridges",那么任何编译器都知道如何在数据库中自动传播数据不同的内存系统,使得在本地线程上工作的进程主要从与运行该线程的处理器相关联的RAM中检索它们的数据?

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

是否有任何编译器(或者malloc具体地)将特定内核上的进程分配的新内存与该内核关联的物理RAM相关联?

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

NUMA感知内存分配不是在编译时完成的。做出这样的假设对于便携性来说是不好的。

在Linux上,这是一个内核函数,尽管您可以在运行时使用numactlset_mempolicylibnuma来控制它。

答案 2 :(得分:4)

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

有关最近版本的Windows如何处理NUMA的详细信息,请参阅http://code.msdn.microsoft.com/64plusLP