mpirun 是否需要指定 -np?

Does mpirun require -np to be specified?

我曾经运行喜欢

mpirun -np N ./c_or_python_script 

但是,在具有 PBS 作业提交队列的集群上(我不知道这种类型的提交叫什么),示例脚本不要求这个 -np N 参数!我还是给了。有什么不同?我在下面的集群中指定了一个模拟示例脚本。

#!/bin/sh
#PBS -V
#PBS -N mpi_job
#PBS -q normal
#PBS -A etc
#PBS -l select=4:ncpus=64:mpiprocs=64
#PBS -l walltime=04:00:00

cd $PBS_O_WORKDIR

mpirun ./test_mpi.exe

如果我改成 mpirun -np 256 ./test_mpi.exe 会有什么变化?

谢谢。我不是这方面的专家。

P.S。在bsub提交系统中,我理解了其中的区别。

这取决于您使用的 MPI 实现以及它与资源管理器集成的程度。例如,Open MPI 与许多此类资源管理器紧密集成,包括 PBS、LSF、SLURM 等。当 运行 在批处理作业中时,它会自动发现分配的详细信息并启动与分配的 CPU 槽数一样多的进程,除非您用 -np 另行告诉它。在您的在这种情况下,您要求 4 个节点,每个节点有 64 个 CPU 个插槽,总共有 256 个 CPU 个插槽,因此传递 -np 256 没有任何改变。如果您要求 MPI 启动较少的进程,例如使用 -np 128,那么一些 CPU 槽将保持未使用状态。如果您要求更多进程,例如,使用 -np 300,那么 Open MPI 通常会抱怨并拒绝 运行 程序,除非您使用 -oversubscribe 显式启用超额订阅,这可能不是资源管理器或集群管理员的喜好。其他 MPI 实现以类似的方式工作。