我在四个NUMA节点本地存储器中有一个矩阵扩展。现在我想打开4个线程,每个线程在一个CPU上对应一个不同的NUMA节点,这样每个线程都可以尽快访问它的部分矩阵。 OpenMP有" proc_bind(spread)"选项,但它将线程放在同一个NUMA节点上,但是在相隔很远的CPU上。
如何强制线程绑定到不同的NUMA节点?
或者,如果那是不可能的:当我在所有节点上使用所有核心(总共256个线程)时,我知道如何获取NUMA节点的ID,但是我无法控制哪个线程获得哪些索引例如在for循环中。如何针对NUMA配置有效地分配我的工作负载?
答案 0 :(得分:2)
这是我要做的:
numactl -H
OMP_PLACES
以将线程绑定到这些核心:export OMP_PLACES="{0},{1},{2},{3}"
numactl -l myBinary
对于我对你的问题的理解,这应该有用。