我目前正在使用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
但是,性能非常慢,这让我觉得我的资源定位方式可能存在问题。
有什么建议吗?
答案 0 :(得分:2)
#PBS -l select=5:ncpus=24:mpiprocs=1:ompthreads=24
答案 1 :(得分:0)
感谢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.
这两种解决方案都有很好的性能提升,并且很多"。