[英]Simple MPI program fail with large number of processes
這是我的代碼:
#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它失敗時......
有什么建議嗎? 謝謝。
問題可能與shell可能產生的最大進程數有關。 如何修改此設置取決於shell的類型和操作系統。 如果您使用的是cshell或tcshell,則可以使用公共行“limit”命令驗證當前設置。 更改設置可以在用戶級別或根級別進行(存在軟限制和硬限制)。
這不是一個明確的答案,但它的評論時間太長了。
我看了一下失敗斷言的來源。 代碼庫略有不同,但我認為它足夠接近。 你的錯誤說assert在第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]在未連接的套接字上嘗試寫入。”
你確定網絡工作正常嗎? 好像套接字斷開了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.