EN
注册

调试MPI应用

MPI(Message Passing Interface)是消息传递并行程序设计的标准之一,当前通用的是MPI1.1规范。需要安装Open MPI或者是MPI CH实现MPI标准。

  1. 通讯器(communication),定义了一组能够互相发消息的进程。在这组进程中,每个进程赋予一个叫做秩(rank)的序号,进程间显性地通过指定秩来进行通信。
  2. 点对点(point-to-point)通信,一个进程可以通过指定另一个进程的秩以及唯一的消息标签(tag)来发送消息给另一个进程。接受者可以发送一个接收特定标签标记的消息的请求,然后依次处理接收到的数据。类似一个发送者以及一个接受者的通信被称作点对点通信。
  3. 集体性(collective)通信,某个进程可能需要跟所有其他进程通信,比如主进程想发一个广播给所有的从进程,MPI提供专门的接口实现这类所有进程间的集体性通信。

编写语言:C/C++

  1. 单击左侧树快捷功能区按钮,或单击“开发”选择编译调试下方的“调试”,打开调试页面,选择“HPC并行应用”,配置MPI应用调试参数,如图1所示。
    图1 HPC并行应用调试

    调试MPI应用无需打开“OpenMP应用”参数。

    表1 HPC并行应用调试参数说明

    参数

    说明

    远程服务器配置

    进行HPC并行应用调试的目标服务器。

    Linux用户名

    输入启动MPI应用的Linux用户名称。

    说明:

    root用户拥有最高权限,为了避免给系统带来不必要的风险,建议使用非root用户进行调试。

    Linux用户密码

    使用的Linux用户密码。

    记住密码

    勾选后可记住当前远程服务器Linux用户密码。

    SSH端口

    输入启动MPI应用的服务器SSH端口号。

    应用程序

    输入的MPI应用,支持动态检索并显示应用程序路径。

    请给Linux用户添加当前MPI应用的可读权限以及应用所在目录的可读、可写和可执行权限。
    说明:
    • MPI应用要为可执行文件。
    • 若MPI应用中无源码信息,则调试器默认以汇编形式进行调试。

    应用程序参数(可选)

    传递给应用程序运行的参数。

    请给Linux用户添加应用程序所在目录的可读、可写、可执行权限及应用程序所在目录父目录的可执行权限。

    应用程序源码路径

    源码和MPI应用存放的共享路径,支持动态检索并显示应用程序源码路径。

    1. 若MPI应用已配置共享路径,源码与MPI应用都应存放在共享路径下。
    2. 请给Linux用户添加当前MPI应用源码路径的可读、可执行权限及源码文件所在目录父目录的可执行权限。

    环境变量设置(可选)

    输入运行HPC并行应用所需要的环境变量,有以下3种方式可选择,可根据实际情况进行修改。

    • export PATH=$PATH:/path/to/mpi
    • source /configure/mpi/path/file
    • module load/mpi/modulefiles

    调试启动方式

    调试启动方式可选:

    • mpirun命令运行方式
    • 多瑙调度器运行方式
    • Slurm调度器运行方式
    说明:

    mpirun命令运行方式使用mpirun运行命令,mpirun是一个重要的工具,用作启动MPI并行应用程序,并提供进程之间的通信和清理工作等功能。

    多瑙调度器是华为全自研的HPC集群调度器,提供大规模集群下的高资源利用率、高吞吐量的作业调度能力。

    Slurm是一个开源的、高度可定制的、可扩展的、高性能的作业调度系统,它能够很好地提供资源管理和任务调度功能,广泛用于高性能计算、集群计算领域,如物理、化学、生物学、天文学等领域。

    MPI运行命令行

    输入的mpirun命令以及对应的命令参数,rank数目为1~2048。

    多瑙调度器运行命令行

    输入的多瑙调度器命令以及对应的命令参数。

    Slurm调度器运行命令行

    输入的Slurm调度器命令以及对应的命令参数。

    OpenMP应用(可选)

    勾选后,需要输入OpenMP线程数。

    OpenMP线程数(可选)

    输入的OpenMP应用thread数量。

    死锁检测(可选)

    勾选后,需要输入死锁超时时间。

    死锁超时时间(s)(可选)

    死锁超时时间,默认为10秒,取值范围10~60。

  2. 配置完成后,单击“开始调试”,右下角弹框提示“HPC并行应用调试启动中”,检测所输入的配置信息是否正确,若检测结果错误,请根据提示信息进行处理。若检测成功,右下角弹出弹框提示rank状态读取中,如图2所示。
    图2 rank状态读取中

    若HPC并行应用调试启动失败,请参见HPC并行应用调试启动失败的解决办法进行处理。

  3. 在rank状态读取过程中,若rank状态读取存在失败,请根据提示下载最新日志文件了解失败详情。如图3所示。
    图3 rank状态读取失败
  4. 在rank状态读取过程中,若rank状态读取全部成功,会自动跳转到MPI应用调试页面。页面上获取到运行和调试区、源码区和调试功能区,运行和调试区域包括调试信息区和RANK信息区,如图4所示。
    图4 rank状态读取成功
  5. MPI应用支持三种调试粒度,分别为“全部”调试、“rank”调试或“通信组”调试,还可以选择调试功能区的其他操作按钮来进行调试操作。如表2所示。
    表2 调试按钮操作描述

    操作

    操作描述

    继续

    点击执行到下一个断点

    暂停

    点击中断正在执行的程序

    单步跳过

    点击执行到下一行

    单步调试

    点击步入函数

    单步跳出

    点击步出函数

    重启

    点击后重新启动调试

    停止

    点击后停止调试

    1. 调试方式
      • 以“全部”方式进行调试,选择某一个rank,会对全部rank进行调试,在rank信息区域所有通信组右侧显示定位图标。
      • 以“rank”方式进行调试,对单一rank进行调试,在rank信息区域对应rank右侧显示定位图标。
      • 以“通信组”方式进行调试,选择通信组中的某一个rank,会对其对应的通信组进行调试,在RANK信息区域对应rank的通信组右侧显示定位图标。
    2. 设置断点
      • 进行调试时,当前调试的代码行会高亮显示,在代码行号处单击,会设置上断点标记。
    3. rank状态展示
      • rank前的状态灯表示当前rank的状态,绿色表示rank停止,红色表示rank正在运行,灰色表示rank已退出。
  6. 单击调试功能区的按钮,将重新启动MPI应用调试,重启后右下角弹出弹框提示rank状态读取中,读取成功后打开MPI应用调试页面。
    图5 重启调试任务
  7. 单击左侧调试信息区域会显示对应的变量(Locals、Register)、监视、断点和调用堆栈信息。
    1. 在调试过程中可以修改变量值,右击变量表达式,可设置变量值,也可将变量表达式添加到监视中(Register表达式不能添加到监视中);
    2. 在监视区域中,支持添加、修改、单个删除、全部删除监视表达式,仅支持C/C++语言格式的表达式。
    展开调试信息如图6所示。
    图6 调试信息
    1. 单击调用堆栈区域展开显示堆栈信息,包含函数名、文件名、当前运行的行数和地址。
    2. 在调试信息区单击某个堆栈,源码区会切换到对应的源码或汇编语言。
  8. 在RANK信息区域单击按钮,在VS Code面板显示“通信子组变化”页面。
    • 单击“变化概览”,显示通信子组的变化概览,每100ms显示通信子组的变化。通信子组的变化用不同颜色的菱形来区分,蓝色表示通信子组创建,紫色表示通信子组清除,黄色表示100ms内存在通信子组创建和通信子组清除。
      图7 通信子组变化概览

      鼠标悬浮到菱形上,显示通信子组变化的详细信息。

      图8 通信子组悬浮信息
    • 单击“变化详情”,显示通信子组的变化详情,鼠标悬浮到对应位置会显示所属通信子组以及rank信息。
      图9 通信子组变化详情
    • 调试过程中若检测到死锁,提示通信组发生死锁,单击“查看详情”或“死锁”,显示死锁详细信息,如死锁状态图以及表格信息。表格展示rank、源进程(rank)、目标进程(rank)、标记、数据大小(byte)和调用栈信息。
      图10 通信子组死锁详情

      若未单击按钮,调试过程中发生死锁,右下角弹框会提示检测到死锁,如图11所示,单击“查看详情”,跳转到死锁页面,查看通信组死锁的详细信息。

      图11 检测到死锁

      在RANK信息区域,单击按钮,开启后对通信子组的创建和清除进行采集,并在VS Code面板上显示变化概览。

      在通信子组变化概览页面中,单击“通信子组创建”、“通信子组清除”或“通信子组创建并清除”,可以不查看对应相关信息。

      死锁是指两个或多个进程各自在等待另一个进程释放资源,或两个或多个进程在循环链中等待资源的情况。在MPI应用中进行点对点通信时,MPI点对点函数顺序不当则会发生死锁的现象。

编写语言:Fortran

Fortran是目前国际上广泛流行的一种高级语言,适用于科学计算。Fortran也是一种编译型语言,源代码必须通过编译器以生成的可以运行的机器可执行文件。安装编译器GFortran参考链接:https://gcc.gnu.org/fortran/

Fortran90程序是一种分块形式的程序,整个程序由若干个程序模块组成,各模块都有相似的语句组织形式,其中主程序起整体控制作用,各辅程序模块各自完成问题中的一个算法。Fortran95是对Fortran90的补充,两者差别不大,都可支持调试。

  1. 单击左侧树快捷功能区按钮,或单击“开发”选择编译调试下方的“调试”,打开调试页面,选择“HPC并行应用”,配置MPI应用调试参数,如图12所示。
    图12 HPC并行应用调试

    调试MPI应用无需打开“OpenMP应用”参数。

    Fortran文件扩展名为.f90,.f90是现代Fortran源文件的标准文件扩展名。 90指的是1990年的第一个现代Fortran标准。

    表3 HPC并行应用调试参数说明

    参数

    说明

    远程服务器配置

    进行HPC并行应用调试的目标服务器。

    Linux用户名

    输入启动MPI应用的Linux用户名称。

    说明:

    root用户拥有最高权限,为了避免给系统带来不必要的风险,建议使用非root用户进行调试。

    Linux用户密码

    使用的Linux用户密码。

    记住密码

    勾选后可记住当前远程服务器Linux用户密码。

    SSH端口

    输入启动MPI应用的服务器SSH端口号。

    应用程序

    输入的MPI应用,支持动态检索并显示应用程序路径。

    请给Linux用户添加当前MPI应用的可读权限以及应用所在目录的可读、可写和可执行权限。
    说明:
    • MPI应用要为可执行文件。
    • 若MPI应用中无源码信息,则调试器默认以汇编形式进行调试。

    应用程序参数(可选)

    传递给应用程序运行的参数。

    请给Linux用户添加应用程序所在目录的可读、可写、可执行权限及应用程序所在目录父目录的可执行权限。

    应用程序源码路径

    源码和MPI应用存放的共享路径,支持动态检索并显示应用程序源码路径。

    1. 若MPI应用已配置共享路径,源码与MPI应用都应存放在共享路径下。
    2. 请给Linux用户添加当前MPI应用源码路径的可读、可执行权限及源码文件所在目录父目录的可执行权限。

    环境变量设置(可选)

    输入运行HPC并行应用所需要的环境变量,有以下3种方式可选,可根据实际情况进行修改。

    • export PATH=$PATH:/path/to/mpi
    • source /configure/mpi/path/file
    • module load/mpi/modulefiles

    调试启动方式

    调试启动方式可选:

    • mpirun命令运行方式
    • 多瑙调度器运行方式
    • Slurm调度器运行方式
    说明:

    mpirun命令运行方式使用mpirun运行命令,mpirun是一个重要的工具,用作启动MPI并行应用程序,并提供进程之间的通信和清理工作等功能。

    多瑙调度器是华为全自研的HPC集群调度器,提供大规模集群下的高资源利用率、高吞吐量的作业调度能力。

    Slurm是一个开源的、高度可定制的、可扩展的、高性能的作业调度系统,它能够很好地提供资源管理和任务调度功能,广泛用于高性能计算、集群计算领域,如物理、化学、生物学、天文学等领域。

    MPI运行命令行

    输入的mpirun命令以及对应的命令参数,rank数目为1~2048。

    多瑙调度器运行命令行

    输入的多瑙调度器命令以及对应的命令参数。

    Slurm调度器运行命令行

    输入的Slurm调度器命令以及对应的命令参数。

    OpenMP应用(可选)

    勾选后,需要输入OpenMP线程数。

    OpenMP线程数(可选)

    输入的OpenMP应用thread数量。

    死锁检测(可选)

    勾选后,需要输入死锁超时时间。

    死锁超时时间(s)(可选)

    死锁超时时间,默认为10秒,取值范围10~60。

  2. 配置完成后,单击“开始调试”,右下角弹框提示“HPC并行应用调试启动中”,检测所输入的信息是否正确,若检测结果错误,请根据提示信息进行处理。若检测成功,右下角弹出弹框提示rank状态读取中,如图13所示。
    图13 rank状态读取中

    若HPC并行应用调试启动失败,请参见HPC并行应用调试启动失败的解决办法进行处理。

  3. 在rank状态读取过程中,若rank状态读取存在失败,请根据提示下载日志文件了解失败详情。如图14所示。
    图14 rank状态读取失败
  4. 在rank状态读取过程中,若rank状态读取全部成功,会自动跳转到MPI应用调试页面。页面上获取到运行和调试区、源码区和调试功能区,运行和调试区域包括调试信息区和RANK信息区,如图15所示。
    图15 rank状态读取成功
  5. MPI应用支持三种调试粒度,分别为“全部”调试、“rank”调试或“通信组”调试,还可以选择调试功能区的其他操作按钮来进行调试操作。如表4所示。
    表4 调试按钮操作描述

    操作

    操作描述

    继续

    点击执行到下一个断点

    暂停

    点击中断正在执行的程序

    单步跳过

    点击执行到下一行

    单步调试

    点击步入函数

    单步跳出

    点击步出函数

    重启

    点击后重新启动调试

    停止

    点击后停止调试

    1. 调试方式
      • 以“全部”方式进行调试,选择某一个rank,会对全部rank进行调试,在rank信息区域所有通信组右侧显示定位图标。
      • 以“rank”方式进行调试,对单一rank进行调试,在rank信息区域对应rank右侧显示定位图标。
      • 以“通信组”方式进行调试,选择通信组中的某一个rank,会对其对应的通信组进行调试,在RANK信息区域对应rank的通信组右侧显示定位图标。
    2. 设置断点
      • 进行调试时,当前调试的代码行会高亮显示,在代码行号处单击,会设置上断点标记。
    3. rank状态展示
      • rank前的状态灯表示当前rank的状态,绿色表示rank停止,红色表示rank正在运行,灰色表示rank已退出。
  6. 单击按钮,弹出重启任务弹框,单击“确定”将重新启动编译任务,跳转到rank状态读取页面,读取成功后重新打开MPI应用调试页面。
    图16 重启任务
  7. 单击左侧调试信息区域会显示对应的变量(Locals、Register)、监视、断点和调用堆栈信息。
    1. 在调试过程中可以修改变量值,右击变量表达式,可设置变量值,也可将变量表达式添加到监视中(Register表达式不能添加到监视中);
    2. 在监视区域中,支持添加、修改、单个删除、全部删除监视表达式,仅支持C/C++语言格式的表达式。
    展开调试信息如图17所示。
    图17 调试信息
    1. 单击调用堆栈区域展开显示堆栈信息,包含函数名、文件名、当前运行的行数和地址。
    2. 在调试信息区单击某个堆栈,源码区会切换到对应的源码或汇编语言。
  8. 在RANK信息区域单击按钮,在VS Code面板显示“通信子组变化”页面。
    • 单击“变化概览”,显示通信子组的变化概览,每100ms显示通信子组的变化。通信子组的变化用不同颜色的菱形来区分,蓝色表示通信子组创建,紫色表示通信子组清除,黄色表示100ms内存在通信子组创建和通信子组清除。
      图18 通信子组变化概览

      鼠标悬浮到菱形上,显示通信子组变化的详细信息。

      图19 通信子组悬浮信息
  9. 单击“查看详情”按钮,切换到通信组变化详情页面,鼠标悬浮到对应位置会显示所属通信子组以及rank信息。
    图20 通信组变化详情

    在RANK信息区域,单击按钮,点击后在界面下方展示通信子组的创建和清除信息。

    在通信子组变化概览页面中,单击“通信子组创建”、“通信子组清除”或“通信子组创建并清除”,可以不查看对应相关信息。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词