2010-01-26 28 views
10

如果我有一个多处理器板,它具有cache-coherentnon-uniform memory access (NUMA),即单独"northbridges"具有单独的RAM为每个处理器,是否任何编译器知道如何自动传播数据跨越不同的内存系统,使本地线程上工作的进程大多是检索他们的数据来自与线程正在运行的处理器相关的RAM?gcc,icc或Microsoft的C/C++编译器是否支持或了解有关NUMA的任何内容?

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

是否有任何编译器或可能是malloc将特定内核上的进程分配的新内存与该内核关联的物理RAM关联?

+0

出于兴趣,谁是董事会制造商? – 2010-01-26 21:31:50

+0

我提出了这样的问题,但我最初的问题是与一个芯片上的多个内核以及针对不同内存区域的芯片不同部分的内核访问内存的成本有关。 – 2010-01-27 01:32:43

回答

7

Linux内核知道NUMA,并会尽量给从内存中的程序页面,当地当前的CPU(来源:U. Drepper, "What Every Programmer Should Know About Memory"

+5

..实际上它需要*在内核中完成,因为一般来说,用户空间进程不控制他们的线性地址如何映射到物理地址,因为他们没有控制他们的页表。 – caf 2010-01-26 23:25:10

4

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

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

5

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

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

相关问题