gcc、icc或微软的C/C++编译器是否支持或了解NUMA?

12
如果我有一个拥有高速缓存一致性非均匀内存访问(NUMA)的多处理器板,即每个处理器都有单独的北桥和单独的RAM,是否有任何编译器知道如何自动将数据分配到不同的内存系统中,以便在本地线程上工作的进程大部分从与线程正在运行的处理器相关联的RAM中检索其数据?
我的设置是:1 GB附加到处理器0,1 GB附加到处理器1,等等,最多4个处理器。在一致内存空间中,第一个处理器的RAM物理内存地址为0到1GB-1。对于第二个处理器,它是1GB到2GB-1,依此类推。
是否有任何编译器或者特别是malloc,会将由特定核心上的进程新分配的内存关联到与该核心相关联的物理RAM?

出于好奇,板子制造商是谁? - rama-jka toti
我是这样提出问题的,但我的原始问题与一个芯片上的核心数量有关,以及在芯片不同部分的核心进行内存访问的成本和不同内存区域。 - Ross Rogers
3个回答

7

5
实际上,这需要在内核中完成,因为通常用户空间进程无法控制它们的线性地址映射到物理地址的方式,因为它们无法控制自己的页表。请注意,这里"needs"是必须的意思。 - caf

5

NUMA感知内存分配并非在编译时完成。假设这样做会对可移植性产生不利影响。

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


4

对于微软平台,编译器不会意识到NUMA。然而,系统是NUMA感知的,并会尝试在同一节点中分配内存。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接