C++ MPI“u Comm”生成失败,出现“0”;分配给此作业的所有节点都已填充“;

C++ MPI“u Comm”生成失败,出现“0”;分配给此作业的所有节点都已填充“;,c++,openmpi,pbs,qsub,torque,C++,Openmpi,Pbs,Qsub,Torque,我尝试使用Torque的(5.1.1)qsub命令来启动多个OpenMPI 进程,每个节点一个进程,每个进程启动一个 使用MPI_Comm_spawn()在自己的本地节点上处理。MPI_Comm_spawn()正在报告: All nodes which are allocated for this job are already filled. 我的OpenMPI版本是4.0.1 我按照这里的说明来控制节点的映射 使用--map by ppr:1:node选项将其映射到mpiexec,并使用

我尝试使用Torque的(5.1.1)qsub命令来启动多个OpenMPI 进程,每个节点一个进程,每个进程启动一个 使用MPI_Comm_spawn()在自己的本地节点上处理。MPI_Comm_spawn()正在报告:

All nodes which are allocated for this job are already filled.
我的OpenMPI版本是4.0.1

我按照这里的说明来控制节点的映射

使用--map by ppr:1:node选项将其映射到mpiexec,并使用一个hostfile(以编程方式派生) 从Torque生成的${PBS_NODEFILE}文件)。我的派生文件MyHostFile看起来 像这样:

n001.cluster.com slots=2 max_slots=2
n002.cluster.com slots=2 max_slots=2
而原始${PBS_NODEFILE}只有节点名,没有插槽规范

我的qsub命令是

qsub -V -j oe -e ./tempdir -o ./tempdir  -N MyJob   MyJob.bash
MyJob.bash中的mpiexec命令是

mpiexec --display-map --np 2 --hostfile MyNodefile --map-by ppr:1:node <executable>.
mpiexec--display map--np 2--hostfile MyNodefile--ppr:1:node映射。
MPI_Comm_spawn()导致打印此错误:

Data for JOB [22220,1] offset 0 Total slots allocated 1   <=====

 ========================   JOB MAP   ========================

 Data for node: n001    Num slots: 1    Max slots: 0    Num procs: 1
        Process OMPI jobid: [22220,1] App: 0 Process rank: 0 Bound: socket 0[core 0[hwt 0]]:[B/././././././././.][./././././././././.]

 =============================================================

All nodes which are allocated for this job are already filled.

作业[22220,1]的数据偏移量0分配的总插槽数1回答我自己的问题:将参数-l nodes=1:ppn=2添加到qsub命令会在节点上保留两个处理器,即使mpiexec只启动一个进程。然后,MPI_Comm_spawn()可以在第二个保留插槽上生成新进程

我还必须在没有Torque支持的情况下编译OpenMPI,因为包含它会导致忽略我的hostfile参数,并使用Torque生成的hostfile