【发布时间】:2014-06-07 20:34:00
【问题描述】:
这是我的代码:
#include "mpi.h"
#include <stdio.h>
int main (int argc, char** argv) {
int numtasks, rank;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
// the code fail with or without printf
printf ("Number of tasks= %d My rank= %d\n", numtasks,rank);
MPI_Barrier(MPI_COMM_WORLD);
MPI_Finalize();
return 0;
}
这就是我运行它和输出的方式:
$ mpirun -n 160 ./mpi_example1
[proxy:0:0@ubuntu] send_cmd_downstream (./pm/pmiserv/pmip_pmi_v1.c:80): assert (!closed) failed
[proxy:0:0@ubuntu] fn_get (./pm/pmiserv/pmip_pmi_v1.c:349): error sending PMI response
[proxy:0:0@ubuntu] pmi_cb (./pm/pmiserv/pmip_cb.c:327): PMI handler returned error
[proxy:0:0@ubuntu] HYDT_dmxu_poll_wait_for_event (./tools/demux/demux_poll.c:77): callback returned error status
[proxy:0:0@ubuntu] main (./pm/pmiserv/pmip.c:226): demux engine error waiting for event
[mpiexec@ubuntu] control_cb (./pm/pmiserv/pmiserv_cb.c:215): assert (!closed) failed
[mpiexec@ubuntu] HYDT_dmxu_poll_wait_for_event (./tools/demux/demux_poll.c:77): callback returned error status
[mpiexec@ubuntu] HYD_pmci_wait_for_completion (./pm/pmiserv/pmiserv_pmci.c:181): error waiting for event
[mpiexec@ubuntu] main (./ui/mpich/mpiexec.c:405): process manager error waiting for completion
当我使用 -n 128 或更低的代码运行代码时,它运行良好。我还尝试在 32 核 x 8 节点计算机上运行代码,并且能够运行到 -n 192,当我尝试 -n 224 时它失败了......
有什么建议吗?谢谢。
【问题讨论】:
-
您的根进程(等级 0)在所有其他进程正常启动之前就退出了,我相信。如果是这样的话,在
MPI_Finalize();之前添加MPI_Barrier(MPI_COMM_WORLD);应该可以解决它。请你试试看好吗? -
谢谢,我会尽快回复的!
-
@Nominal Animal 可悲的是,我尝试了您建议的方法,但出现了同样的错误... :(
-
@NominalAnimal
MPI_Finalize不隐式调用Barrier? Cray materials 说有,但可能是实现细节。 -
@luk32 我个人认为 MPI_Finalize 也应该这样做。所以我真的不知道这里发生了什么。有什么建议吗?