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