gpt4 book ai didi

c++ - 在 NUMA 节点之间传播 OpenMP 线程

转载 作者:太空狗 更新时间:2023-10-29 21:33:46 25 4
gpt4 key购买 nike

我有一个分布在四个 NUMA 节点本地内存中的矩阵。现在我想打开 4 个线程,每个线程对应一个 CPU 上的不同 NUMA 节点,以便每个线程都可以尽快访问它的矩阵部分。 OpenMP 有“proc_bind(spread)”选项,但它将线程放在同一个 NUMA 节点上,但在相距很远的 CPU 上。

如何强制线程绑定(bind)到不同的 NUMA 节点?

或者,如果这不可能:当我在所有节点上使用所有内核(总共 256 个线程)时,我知道如何获取 NUMA 节点的 ID,但我无法控制哪个线程获取哪个索引,例如在一个for循环中。如何根据 NUMA 配置有效地分配我的工作负载?

最佳答案

这是我要做的:

  1. 使用 numactl -H
  2. 检查哪些内核连接到哪个 NUMA 节点
  3. 假设核心 0、1、2 和 3 分别位于您要使用的 4 个 NUMA 节点之一,设置环境变量 OMP_PLACES 以将线程绑定(bind)到这些核心:export OMP_PLACES="{0},{1},{2},{3}"
  4. 最终使用 numactl 的本地内存分配策略启动 OpenMP 二进制文件:numactl -l myBinary

根据我对您问题的理解,这应该可行。

关于c++ - 在 NUMA 节点之间传播 OpenMP 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50090515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com