[问题] MPI 相关,执行绪失踪

楼主: GeoMeTric ( )   2014-08-06 23:58:23
开发平台(Platform):
gcc 4.1.2 / mpich 1.2.7p1
问题(Question):
虽然程式是以 C 写成,但问题与 MPI 较相关联,如不妥于此发问,烦请告知。
程式于单一核心执行时并无问题(使用 gcc 编译并执行,或使用 mpicc 编译并
只使用一个核心执行,此两种情况)。但当使用两个以上的核心执行时,在其中
一个 while 循环运行时,中途会发生其中一个指定的核心消失,导致于循环中
用于资料传输的 MPI_Wait 等不到讯息而卡住。
程式码(Code):(请善用置底文网页, 记得排版)
由于程式用途为数值模拟,有点繁杂,所以这里仅列出(或许是)重点部份并简化。
i = 1;
while (statement) {
printf ("Processor %d starts iteration %d\n", Rank, i);
fflush (stdout);
transfer data via MPI_Isend / MPI_Irecv / MPI_Wait
call some subroutines and do jobs
i += 1;
printf ("Processor %d ends iteration %d\n", Rank, i);
fflush (stdout);
}
其中循环内头尾讯息输出为除错用,Rank 为使用 MPI_Comm_rank 得到的值。
假设使用(同节点的)两个核心执行时,程式最后输出讯息为
Processor 0 starts iteration 275
Processor 1 starts iteration 275
Processor 1 ends iteration 275
Processor 0 ends iteration 275
Processor 0 starts iteration 276
但一直没出现 Processor 1 执行第 276 次循环的讯息(几天时间),也因此
整个程式于核心间的资料传输过程中卡住,无法继续运行。
不知版上各位对于这个问题,有无朝哪方向着手除错的想法/建议?
作者: sunneo (艾斯寇德)   2014-08-07 02:58:00
让行程定期写入档案,说自己进入/离开哪个 函式/行数用signal,收SIGQUIT,SIGTERM,SIGINT收到讯息印一下前一刻他还在哪行这样也许ENOMEM,EPIPE...你的程式要检查每个MPI的回传值
作者: cywec   2014-08-07 16:53:00
感觉是存取违规才发生当中一个点中断结束,你要不要检查一下你的资料切割范围

Links booklink

Contact Us: admin [ a t ] ucptt.com