我正在努力寻找使用MPICH(hydra)执行混合OpenMP/MPI作业的正确方法。在MPICH中执行混合OpenMP/MPI作业
我很容易启动这些进程并且他们确实创建线程,但他们被困在与他们的主线程相同的核心上,无论我尝试什么类型的-bind-to
。
如果我明确设置GOMP_CPU_AFFINITY
为0-15
我得到所有线程传播,但只提供如果我有每个节点1进程。我不希望这样,我想每个套接字一个进程。
设置OMP_PROC_BIND=false
没有明显的效果。
我试图
export OMP_NUM_THREADS=8
export OMP_PROC_BIND="false"
mpiexec.hydra -n 2 -ppn 2 -envall -bind-to numa ./a.out
我得到的是所有的流程坐在核0-7
100%和核心8-15
几个线程,但其中只有一个接近100%的一个许多不同的组合的例子(他们正在等待第一个进程)。
#!/bin/sh
GOMP_CPU_AFFINITY=$(grep ^Cpus_allowed_list /proc/self/status | grep -Eo '[0-9,-]+')
export GOMP_CPU_AFFINITY
exec $*
:
我想你想'grep^Cpus_allowed_list/proc/self/status | grep -Eo'[0-9, - ] +'',工作! –
实际上我错过了一个'猫',但你的更好。 –