如何在 NUMA 机器上的不同节点上分配数组的一部分?

Posted

技术标签:

【中文标题】如何在 NUMA 机器上的不同节点上分配数组的一部分?【英文标题】:How to allocate parts of an array on different nodes on NUMA machines? 【发布时间】:2013-10-08 21:45:09 【问题描述】:

我有 2 个节点的 NUMA 机器。我想分别在两个节点上分配数组的两半。我该怎么做?

请注意,“一半”是指连续的虚拟内存块。我找到了numa_alloc_interleaved函数,但它不能满足我的要求。

【问题讨论】:

具有迭代器和[] 操作符的 C++ 数据结构是否足以使其表现得像连续分配一样好? 感谢您的建议。但是除了分配语句我不想改变程序。 【参考方案1】:

你有几个选择。

您可以有一段代码使用numa_alloc_onnode 在您要使用的每个节点上分配一个块,然后将该块的控制/所有权授予在该节点上运行的代码。

或者,您可以在每个节点上启动代码,然后让每个节点的代码使用 numa_alloc_local 在本地分配自己的内存。

【讨论】:

您的回答建议我更改程序,以便我操作两个数组而不是一个数组,我试图避免这种情况。有没有办法控制交错粒度?说不是页面交错,而是 K-page interleaved,其中 K 是可控的。 @dalibocai:我不知道有这样的功能,没有。

以上是关于如何在 NUMA 机器上的不同节点上分配数组的一部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何将所有内存分配限制到一个 NUMA 节点

页面缓存堆积并在其他节点上强制分配内存

NUMA:如何检查 C++ 数组分配在 RAM 的哪个部分?

怎么查看一个计算节点具体的Numa资源分布详情

在 linux(CentOS)/多处理器设置中,如何将 CPU 内核分配给 NUMA 节点?

NUMA 处理器上的 OpenMP 内存分配