本示例主要是演示如何使用编译调试工具的HPC并行应用调试功能,调试MPI+OpenMP应用,帮助用户基于该工具快速实现并行调试。
下载的源码包为devkitdemo-devkitdemo-23.0.1.zip,解压后“Compiler_and_Debugger/mpi_demo/”路径下的mpi_openmp_demo.c作为MPI+OpenMP程序源文件,编译时mpicc编译命令后面加-g,-fopenmp,生成带调试信息的可执行文件。
1
|
mpicc -g -fopenmp mpi_openmp_demo.c -o mpi_openmp_demo |
参数 |
说明 |
---|---|
远程服务器配置 |
进行HPC并行应用调试的目标服务器。 |
Linux用户名 |
输入启动MPI+OpenMP应用的Linux用户名称。
说明:
root用户拥有最高权限,为了避免给系统带来不必要的风险,建议使用非root用户进行调试。 |
Linux用户密码 |
使用的Linux用户密码。 |
SSH端口 |
输入启动MPI+OpenMP应用的服务器SSH端口号。 |
应用程序 |
输入的MPI+OpenMP应用,支持动态检索并显示应用程序路径。
请给Linux用户添加当前MPI+OpenMP应用的可读权限以及应用所在目录的可读、可写和可执行权限。
说明:
|
应用程序参数(可选) |
传递给应用程序运行的参数,若存在多个参数需使用空格隔开。 请给Linux用户添加应用程序所在目录的可读、可写、可执行权限及应用程序所在目录父目录的可执行权限。 |
应用程序源码路径 |
源码和MPI+OpenMP应用存放的共享路径,支持动态检索并显示应用程序源码工作目录。
|
环境变量设置(可选) |
输入运行HPC并行应用所需要的环境变量,有以下3种方式可选择,可根据实际情况进行修改。
|
调试启动方式 |
调试启动方式可选:
说明:
mpirun命令运行方式使用mpirun运行命令,mpirun是一个重要的工具,用作启动MPI并行应用程序,并提供进程之间的通信和清理工作等功能。 多瑙调度器是华为全自研的HPC集群调度器,提供大规模集群下的高资源利用率、高吞吐量的作业调度能力。 Slurm是一个开源的、高度可定制的、可扩展的、高性能的作业调度系统,它能够很好地提供资源管理和任务调度功能,广泛用于高性能计算、集群计算领域,如物理、化学、生物学、天文学等领域。 |
MPI运行命令行 |
输入的mpirun命令以及对应的命令参数,rank数目为1~2048。 |
多瑙调度器运行命令行 |
输入的多瑙调度器命令以及对应的命令参数。 |
Slurm调度器运行命令行 |
输入的Slurm调度器命令以及对应的命令参数。 |
OpenMP应用 |
勾选后,需要输入OpenMP线程数。 |
OpenMP线程数 |
输入的OpenMP应用thread数量。 |
死锁检测(可选) |
勾选后,需要输入死锁超时时间。 |
死锁超时时间(s)(可选) |
死锁超时时间,默认为10秒,取值范围10~60。 |
chmod 700 -R 目录名称/
调试方式 |
效果 |
---|---|
全部 |
在RANK信息区域选择“全部”方式进行调试,选择某一个rank,对其进行调试会应用到全部rank。 |
rank |
在RANK信息区域选择“rank”方式进行调试,对单一rank进行调试。 |
通信组 |
在RANK信息区域选择“通信组”方式进行调试,选择通信组中的某一个rank,对其进行调试会应用到整个通信组。 |
操作 |
操作描述 |
---|---|
继续 |
点击执行到下一个断点 |
暂停 |
点击中断正在执行的程序 |
单步跳过 |
点击执行到下一行 |
单步调试 |
点击步入函数 |
单步跳出 |
点击步出函数 |
重启 |
点击后重新启动调试 |
停止 |
点击后停止调试 |
操作描述中有“(进程级/线程级)”字样的按钮,其意义为:选中rank后点击按钮为进程级调试动作,选中thread后点击按钮为线程级调试动作。
支持添加条件断点(表达式、命中次数),条件断点支持修改、启用、禁用和删除。表达式断点是指表达式成立时中断该程序,命中次数断点是指命中指定的次数时中断该程序(当大于等于设置的命中次数时,均可进入断点中)。
MPI_Comm_split(MPI_COMM_WORLD, color, rankNum, &row_comm)是一个用于创建新的通信子组的函数。
thread1是MPI应用的主线程,thread2、thread3是MPI应用的辅助线程,辅助线程不展示源码,仅显示汇编代码。
MPI_Finalize()函数是指终止调用MPI进程的执行环境,执行该函数会清理掉与MPI应用相关的状态。