是否有一种无需并行调试器即可有效调试 MPI 主从模型的方法?

问题描述 投票:0回答:1

因此,我有一个主从模型,其中唯一的主控启动 MPI_Comm 工作通信,并且所有工作人员都由其中的 MPI_Comm_spawn 产生。当然,在第一次运行时会存在一些错误,并且需要调试工具。

所以对于gdb master来说并不难,但如果我想调试worker那就是另一回事了。 MPICH 指南 常问问题: 并行调试应用程序告诉我 gdb 可以与 MPI 一起使用,但如果它是由另一个进程生成的,我必须创建一个无限循环并等待 gdb 附加到它,每次运行我必须执行 10 次以上。然而我只有 gdb,而那些并行调试器对我来说不可用。有什么可以减少耗时吗?

c++ gdb mpi openmpi
1个回答
0
投票
使用 gdb 调试 MPI 程序的一种方法是为每个进程生成一个终端模拟器,该模拟器在 gdb 的控制下执行应用程序,如 OpenMPI 文档 (

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

© www.soinside.com 2019 - 2024. All rights reserved.