因此,我有一个主从模型,其中唯一的主控启动 MPI_Comm 工作通信,并且所有工作人员都由其中的 MPI_Comm_spawn 产生。当然,在第一次运行时会存在一些错误,并且需要调试工具。
所以对于gdb master来说并不难,但如果我想调试worker那就是另一回事了。 MPICH 指南 常问问题: 并行调试应用程序告诉我 gdb 可以与 MPI 一起使用,但如果它是由另一个进程生成的,我必须创建一个无限循环并等待 gdb 附加到它,每次运行我必须执行 10 次以上。然而我只有 gdb,而那些并行调试器对我来说不可用。有什么可以减少耗时吗?
https://docs.open-mpi.org/en/v5.0 .x/app-debug/serial-debug.html#use-mpirun-to-launch-separate-instances-of-serial-debuggers)。它有助于准备要传递给每个 gdb 实例的命令列表(在我的示例中为 ~/gdb.cmd
)。
mpirun -np 4 /usr/bin/xterm -e 'gdb -x ~/gdb.cmd --args ./a.out 10'
我的命令文件通常包含以下命令,以避免在开始之前与所有终端进行不必要的交互:
set breakpoint pending on
set pagination off
set debuginfod enabled off
break foo
run
对于使用 MPI_Comm_spawn
生成附加进程的用例,您可以将启动应用程序替换为启动在 gdb 中启动应用程序的 xterm。在您的情况下,您甚至可以使用不同的 gdb 命令文件来进行不同的调用
MPI_Comm_spawn
。