11

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

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

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

4

3 回答 3

7

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

于 2010-01-26T19:55:58.593 回答
5

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

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

于 2010-01-26T20:27:36.657 回答
4

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

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

于 2010-01-26T19:50:30.587 回答