这是我的代码:
#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 :(得分:1)
问题可能与shell可能产生的最大进程数有关。如何修改此设置取决于shell的类型和操作系统。如果您使用的是cshell或tcshell,则可以使用公共线来验证当前设置&#34; limit&#34;命令。更改设置可以在用户级别或根级别进行(有软限制和硬限制)。
答案 1 :(得分:0)
这不是一个明确的答案,但它的评论时间太长了。
我看了一下失败断言的来源。 codebase略有不同,但我认为它足够接近。你的错误说断言{80}在第80行失败,断言HYDU_ASSERT(!closed, status);
位于第82行。
违规电话位于第77行:
status = HYDU_sock_write(fd, cmd, strlen(cmd), &sent, &closed, HYDU_SOCK_COMM_MSGWAIT);
现在,here的代码表示将设置closed
标志,该函数将在
write(fd, (char *) buf + *sent, maxlen - *sent);
@line 278因errno == ECONNRESET
而失败。
write
的{{3}}文档说:“[ECONNRESET]
在未连接的套接字上尝试写入。“
您确定网络运行正常吗?好像套接字断开了。