#并行 #mpi

应用 mpigdb

围绕mpiexec、gdbserver和gdb的一个包装器,使调试MPI程序更加容易

6个版本 (3个重大更改)

0.5.1 2024年8月10日
0.5.0 2023年5月10日
0.4.1 2023年4月19日
0.2.0 2023年1月27日
0.1.0 2022年12月16日

#98 in 调试

Download history 1/week @ 2024-07-02 98/week @ 2024-08-06

每月 98次下载

BSD-2-Clause

28KB
634

MPIGDB

围绕mpiexec、gdbserver和gdb的一个包装器,通过适度的进程数量使调试MPI程序更加容易。

示例用法

demo

GDB扩展和有用命令

此包装器定义了几个GDB扩展命令,可以帮助使事情更容易。

mpic 继续所有进程

mpict 继续当前线程,并在有停止的下一个线程上切换(如果有的话)

mpip 使用 -t $tid 在所有或子集线程上打印

mpib 使用 -t $tid 在所有或子集线程上设置断点

mpiw 当所有进程退出时执行一个命令

您可能还应该了解以下内置命令

thread apply all 将命令应用于所有线程

continue & 在GDB中,任何以 & 结尾的命令都在“后台”运行命令,允许用户继续与GDB交互。在这种情况下,在后台继续此线程

info threads 获取线程及其状态的列表

interupt 如果当前线程正在运行,则停止它。

thread $tid 切换到线程ID

CLI参数

  • --mpigdb_frontend 要使用的调试前端,默认为 gdb。还接受 vscode 以支持为VSCode编写launch.json文件
  • --mpigdb_dbg_arg 将参数传递给GDB
  • --mpigdb_helper 工作节点上的MPI GDB辅助程序的路径
  • --mpigdb_gdbserver 工作节点上的gdbserver辅助程序的路径。默认 "gdbserve"
  • --mpigdb_gdb gdb可执行文件路径。默认: "gdb"
  • --mpigdb_port 主进程连接的端口。默认 "8000"
  • --mpigdb_mpi_flag 传递给mpigdb的标志
  • --mpigdb_dryrun 打印命令,但不启动mpigdb

标志 --interpreter=mi--tty= 将转发给GDB,希望将来能在VSCode中使用。

示例

mpigdb-np8 -- ./play/build/heatdist

使用8个进程启动heatdist。

mpigdb-np8 --mpigdb_dbg_flag-x--mpigdb_dbg_flag/tmp/debug.dbg-- ./play/build/heatdist

使用脚本 /tmp/debug.dbg 在8个进程上启动heat dist

mpigdb--mpigdb_gdb cuda-gdb--mpigdb_gdbserver cuda-gdbserver-np8 -- ./play/build/heatdist

相同,但使用cuda-gdb调试GPU程序

构建和安装

依赖

  • gdb 12.1或更高版本,带有gdbserver(有时单独打包)和python支持,如果从源代码编译,可能已禁用
  • 包括mpiexec mpiexec的MPI安装
  • python 3.8或更高版本
  • Rust+Cargo 1.65或更高版本

早期版本可能也可以工作,但未经过测试

限制和已知错误

对于具有有意义规模的HPC系统,我们可能需要与PMIx集成,但我们目前还没有这样做。

目前与LLDB不兼容,LLDB是MacOS所必需的 -- 欢迎PR。

对VSCode的支持有限。 查看有关完整实现的某些问题的issue

致谢

感谢@mystery-e204和他的mpidb工具,该工具演示了如何生成可用于VSCode的文件。这种方法有限,因为VSCode中的调试实例是分开的,并且不能很容易地一起控制。

依赖

~2–13MB
~156K SLoC