![如何使用混合 MPI/Openmp 启动 PBS 作业](https://linux22.com/image/744705/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%B7%B7%E5%90%88%20MPI%2FOpenmp%20%E5%90%AF%E5%8A%A8%20PBS%20%E4%BD%9C%E4%B8%9A.png)
我想了解使用混合并行化 MPI/OpenMPI 的 PBS/Torque 在我的 SGI 集群上启动的 GROMACS 作业的工作原理。
该集群启用了超线程,每个节点有 16 个物理核心(32 个逻辑核心)。
我期望:使用 4 个节点和每个节点的所有可用 CPU(因此每个节点有 16 个物理 CPU 和 32 个线程,如果我没记错的话,总共有 64 个核心和 128 个线程)。
我做了一个测试工作,应该能满足我的期望。这些是我在 PBS 脚本中用于询问资源的行:
...
#PBS -l select=4:ncpus=16:mpiprocs=16
#PBS -l place=scatter:excl
nprocs=$(cat $PBS_NODEFILE|wc -l)
...
这是我在同一个脚本中用来启动 Gromacs 作业的命令:
mpiexec_mpt -n $nprocs mdrun_mpi -v -s test.tpr -deffnm test
我期望,正如 Gromacs 文档中所写,他能自动猜测要使用的 openmp 线程数。由于每个核心有 2 个线程,所以应该是 2,对吗?
因此,Gromacs 在实际计算之前给出了这个详细的输出,这是我无法理解发生了什么的地方:
Note: 32 CPUs configured, but only 16 of them are online.
Number of logical cores detected (16) does not match the number reported by OpenMP (1).
Consider setting the launch configuration manually!
Running on 4 nodes with total 64 cores, 64 logical cores
Cores per node: 16
Logical cores per node: 16
Hardware detected on host r1i0n13 (the node of MPI rank 0):
CPU info:
Vendor: GenuineIntel
Brand: Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz
SIMD instructions most likely to fit this hardware: AVX_256
SIMD instructions selected at GROMACS compile time: AVX_256
Reading file test-515-short.tpr, VERSION 5.1.1 (single precision)
Changing nstlist from 10 to 25, rlist from 1.2 to 1.222
The number of OpenMP threads was set by environment variable OMP_NUM_THREADS to 1
Will use 56 particle-particle and 8 PME only ranks
This is a guess, check the performance at the end of the log file
Using 64 MPI processes
Using 1 OpenMP thread per MPI process
1) 16/32 CPU 在线/节点... 仅?
2) 检测到的逻辑核心是 16 != 32,为什么? 而且 openmp 仅报告 1 ?
3) 我预计每个 MPI 进程有 64 个 MPI 进程和 2 个 openmp 线程,这不合逻辑吗?
答案1
好的,所以我刚刚明白了为什么会发生这种情况......以前的同事安装了用于启动 GROMACS 作业的 SGI MPT,但是这个工具与 openMP 冲突,所以要么是这个,要么是那个!