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

Ros*_*ers 11 linux gcc g++ icc numa

如果我有一个具有缓存一致的 非均匀内存访问(NUMA)的多处理器板,即为每个处理器分开的"北桥"和单独的RAM,那么任何编译器都知道如何在不同的内存系统中自动传播数据在本地线程上工作的进程主要是从与运行该线程的处理器相关联的RAM中检索它们的数据?

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

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

Nik*_*sov 7

Linux内核知道NUMA并将尝试将您的进程页面从本地内存提供给当前CPU(来源:U.Drepper,"每个程序员应该知道的内存".)

  • ..实际上它*需要*在内核中完成,因为通常用户空间进程不控制它们的线性地址如何映射到物理地址,因为它们无法控制它们的页表. (5认同)

Eri*_*nen 5

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

在Linux上,这是一个内核函数,虽然你可以在运行时控制这种numactlset_mempolicylibnuma.