如何在 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:如何检查 C++ 数组分配在 RAM 的哪个部分?