当mpirun启动时,让OpenMp的每个线程使用一个内核

时间:2020-09-25 06:37:07

标签: mpi openmp openmpi

我正在使用OpenMP运行MPI,即使使用此命令我也发现了这一点,即使 OpenMP启动了我定义的线程号,它们都坚持使用一个CPU内核。

read -r -d '' SSH_SCRIPT <<EOM
    \$(grep "$(<"$Pubkey")" ~/.ssh/authorized_keys")
EOM

2 个答案:

答案 0 :(得分:0)

通过更多搜索,我发现--cpu-set 0-15将允许OpenMp线程绑定到群集中的所有16个内核。

export OMP_NUM_THREADS=8
export OMP_PLACES=cores
export OMP_PROC_BIND=true
mpirun --host n1,n2,n3,n4 -np 4 a.out # the threads all stick to one core at each node 

 mpirun --host n1,n2,n3,n4 -np 4 grep Cpus_allowed_list /proc/self/status
Cpus_allowed_list:      0
Cpus_allowed_list:      0
Cpus_allowed_list:      0
Cpus_allowed_list:      0

答案 1 :(得分:0)

最后,我找到了这个解决方案,它在我的集群上工作正常:

#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=16

echo "Nodelist: $SLURM_JOB_NODELIST"
echo "CoerPerTask: $SLURM_CPUS_PER_TASK"

export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
mpirun --map-by node:PE=$SLURM_CPUS_PER_TASK ./main 14000