为 OpenMP + MPI 应用程序定位资源

Locating resource for OpenMP + MPI application

我目前正在使用 C++ 开发一个混合程序。我同时使用 openMP 和 MPI。但是,我不知道如何为我的作业指定处理器和线程的数量。假设我想使用 5 个节点,每个节点上有一个 MPI 处理器,每个节点有 24 个线程。

这就是我现在提交 my_job 的方式:

qsub -l select=5:ncpus=24:mpiprocs=5 -l place=scatter:exclhost my_job

my_job 脚本上,我正在这样做

#PBS -l select=5:ncpus=24:mpiprocs=5
export OMP_NUM_THREADS=24
mpic++ -O3 myprogram.cpp -o out -fopenmp -lquadmath -std=gnu++11
mpirun -n 5 ./out

但是,性能很慢,这让我觉得我定位资源的方式可能有问题。

有什么建议吗?

https://www2.cisl.ucar.edu/resources/computational-systems/cheyenne/running-jobs/pbs-pro-job-script-examples 就是

#PBS -l select=5:ncpus=24:mpiprocs=1:ompthreads=24

谢谢 Gilles,当 运行 作业时,我也忘记指定每个节点的处理器数:

mpirun -n 5 -ppn 1 ./out

此外,我已将此行添加到 my_job 脚本中:

export IPATH_NO_CPUAFFINITY=1 // - tells the underlying software not to pin each process to one CPU core, which would effectively disable OpenMP parallelism.

两种解决方案都提高了性能 "a lot"。