Linux gcc、icc或微软';s C/C++;编译器支持或了解NUMA?

Linux gcc、icc或微软';s C/C++;编译器支持或了解NUMA?,linux,gcc,g++,icc,numa,Linux,Gcc,G++,Icc,Numa,如果我有一个多处理器板,每个处理器都有独立的RAM,那么有没有编译器知道如何在不同的内存系统中自动分配数据,以便在本地线程上工作的进程主要从与线程运行的处理器相关联的RAM中检索数据 我有一个设置,其中1 GB连接到处理器0,1 GB连接到处理器1,等等。最多4个处理器。在内存中,第一个处理器上RAM的物理内存是地址0到1GB-1。对于第二个处理器,它是1GB到2GB-1,依此类推 任何编译器,或者特别是malloc,是否会将特定内核上的进程分配的新内存与该内核相关联的物理RAM相关联?对于MS

如果我有一个多处理器板,每个处理器都有独立的RAM,那么有没有编译器知道如何在不同的内存系统中自动分配数据,以便在本地线程上工作的进程主要从与线程运行的处理器相关联的RAM中检索数据

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


任何编译器,或者特别是malloc,是否会将特定内核上的进程分配的新内存与该内核相关联的物理RAM相关联?

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


有关Windows最新版本如何处理NUMA的更多详细信息,请参阅。

Linux内核了解NUMA,并将尝试将进程页从本地内存分配到当前CPU(源代码:)

在编译时未完成NUMA感知内存分配。做出这样的假设将不利于便携性


在Linux上,这是一个内核函数,尽管您可以在运行时使用
numactl
set\u mempolicy
libnuma
控制它。出于兴趣,谁是电路板制造商?我提出了这样的问题,但我最初的问题与一个芯片上的多个内核有关,以及对芯片不同部分的不同内存区域的内核进行内存访问的成本……事实上,这需要在内核中进行,因为在一般情况下,用户空间进程不控制它们的线性地址如何映射到物理地址,因为他们无法控制页面表。