错误终止前如何调试MPI程序?

时间:2018-10-18 13:44:10

标签: debugging mpi

我目前正在使用MPI + pthread范例开发用C ++编写的程序。

我在程序中添加了一些功能,但是来自一个MPI进程的终止消息很糟糕,如下所示:

===================================================================================
=   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
=   PID 37805 RUNNING AT node165
=   EXIT CODE: 11
=   CLEANING UP REMAINING PROCESSES
=   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
===================================================================================
[proxy:0:0@node162] HYD_pmcd_pmip_control_cmd_cb (pm/pmiserv/pmip_cb.c:887): assert (!closed) failed
[proxy:0:0@node162] HYDT_dmxu_poll_wait_for_event (tools/demux/demux_poll.c:76): callback returned error status
[proxy:0:2@node166] HYD_pmcd_pmip_control_cmd_cb (pm/pmiserv/pmip_cb.c:887): assert (!closed) failed
[proxy:0:2@node166] HYDT_dmxu_poll_wait_for_event (tools/demux/demux_poll.c:76): callback returned error status
[proxy:0:2@node166] main (pm/pmiserv/pmip.c:202): demux engine error waiting for event
srun: error: node162: task 0: Exited with exit code 7
[proxy:0:0@node162] main (pm/pmiserv/pmip.c:202): demux engine error waiting for event
srun: error: node166: task 2: Exited with exit code 7
[mpiexec@node162] HYDT_bscu_wait_for_completion (tools/bootstrap/utils/bscu_wait.c:76): one of the processes terminated badly; aborting
[mpiexec@node162] HYDT_bsci_wait_for_completion (tools/bootstrap/src/bsci_wait.c:23): launcher returned error waiting for completion
[mpiexec@node162] HYD_pmci_wait_for_completion (pm/pmiserv/pmiserv_pmci.c:218): launcher returned error waiting for completion
[mpiexec@node162] main (ui/mpich/mpiexec.c:340): process manager error waiting for completion

我的问题是我不知道为什么会有这样的消息,以及如何纠正它。

我仅使用MPI中的一些基本功能,并确保没有使用MPI调用的线程(仅允许我的“主进程”调用此类功能)。

我还检查了一个进程没有向自身发送消息,并且在发送消息之前该进程的目标已经存在。

我的问题很简单:如何知道问题的根源然后调试我的应用程序?

非常感谢您。

1 个答案:

答案 0 :(得分:1)

您的一个进程出现了分段错误。这意味着不允许读取或写入内存区域。

这就是原因,MPI函数通常很难在第一时间就正确使用-例如,可能是MPI发送和接收的函数的大小或位置不正确。

最好的解决方案是启动一个并行调试器,以便您可以监视所有进程。看来您使用的是正确的HPC系统,因此系统上可能安装了一个-最受欢迎的是ddt或totalview。

看看How to debug an MPI program