我正在尝试使用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。

我正在按照此处的说明控制节点的映射。

Controlling node mapping of MPI_COMM_SPAWN

使用mmapexec的--map-by ppr:1:node选项和一个主机文件(以编程方式派生
从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>.

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.

我发生两件事:
(1)“分配的插槽总数”是上面的1,但是我至少需要两个插槽。
(2)在以下情况下尝试为mpiexec指定主机文件可能是不正确的
使用Torque(尽管它来自Torque主机文件$ {PBS_NODEFILE})。也许我的派生主机文件被忽略了。

有没有办法使这项工作?我试过重新编译OpenMPI
没有扭矩支持,有望防止OpenMPI进行交互
它,但它没有更改错误消息。

最佳答案

回答我自己的问题:即使mpiexec仅启动一个进程,在qsub命令中添加参数 -l nodes = 1:ppn = 2 仍可在该节点上保留2个处理器。然后,MPI_Comm_spawn()可以在第二个保留插槽上产生新进程。

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

关于c++ - MPI_Comm_spawn失败,显示 “All nodes which are allocated for this job are already filled”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57452877/

10-10 02:30