写点什么

鲲鹏 DevKit 实战!华为开发者空间体验 MPI 应用并行调试与编译

  • 2025-09-16
    中国香港
  • 本文字数:4175 字

    阅读完需:约 14 分钟

鲲鹏 DevKit 实战!华为开发者空间体验MPI 应用并行调试与编译

1 概述

1.1 背景介绍

鲲鹏DevKit是覆盖软件迁移、应用开发和性能调优的全流程鲲鹏原生开发工具,可以帮助开发者加速应用迁移和算力升级,提供鲲鹏开发套件,包括应用迁移和性能分析等一些列软件工具。


通过实际操作,让大家了解如何通过鲲鹏 DevKit 插件远程连接 DevKit 工具,并对应用进行远程编译调试,体验鲲鹏 DevKit 在鲲鹏原生开发过程中给开发者提供的便利。

1.2 适用对象

  • 企业

  • 个人开发者

  • 高校学生

1.3 案例时间

本案例总时长预计 120 分钟。

1.4 案例流程


说明:


① 自动部署鲲鹏云服务器;② 安装鲲鹏 DevKit 插件;③ 下载 MPI 程序源文件;④ 环境安装;⑤ 编译应用;⑥ 并行调试。

1.5 资源总览

本案例预计花费总计 0 元。

最新案例动态,请查阅 《鲲鹏DevKit之多点并行调试》。小伙伴快来领取华为开发者空间进行实操吧!

2 操作步骤

2.1 自动部署鲲鹏云服务器

进入华为开发者空间工作台界面,点击打开云主机 > 进入桌面连接云主机。如果还没有领取云主机进入工作台界面后点击配置云主机,选择 Ubuntu 操作系统。




在云主机桌面右键选择“Open Terminal Here”,打开命令终端窗口。



执行自动部署命令如下:


hcd deploy --password abcd1234@ --time 7200
复制代码


命令的参数说明:


  • password:password 关键字后设置的是鲲鹏云服务器的 root 用户密码,命令中给出的默认为 abcd1234@,开发者可以替换成自定义密码(至少 8 个字符)。

  • time:time 关键字后面设置的为鲲鹏云服务器的可用时间,单位为秒,至少 600 秒。本案例建议申请的时间为 120 分钟,即 7200 秒。


记录部署鲲鹏云服务器公网 IP,如图:


2.2 安装鲲鹏 DevKit 插件

在云主机桌面,打开 CodeArts IDE for Python/Java 开发环境,单击右侧“扩展”按钮,搜索 Kunpeng DevKit,点击安装该插件。


2.3 下载 MPI 程序源文件

在云主机桌面右键选择“Open Terminal Here”,打开命令终端窗口,输入以下命令下载并解压待使用的 MPI 程序源文件。


wget https://codeload.github.com/kunpengcompute/devkitdemo/zip/refs/heads/devkitdemo-23.0.1unzip devkitdemo-23.0.1
复制代码



解压后“Compiler_and_Debugger/mpi_demo/”路径下的 bcast_demo.c 作为 MPI 程序源文件。

2.4 环境安装

以下工具或依赖库安装更新都是在2.1自动部署的鲲鹏云服务器上进行的,不是云主机,确定好操作环境再进行安装。


使用“ssh root@鲲鹏云服务器公网 IP”命令连接远程鲲鹏云服务器,“鲲鹏云服务器公网”就是自动部署鲲鹏云服务器后记录的 IP 地址。

2.4.1 安装 mpicc

由于在自动部署拉起的服务器上进行编译调试时,需要使用 mpicc,mpicc 是 MPI 实现的一部分,常见的 MPI 实现有 OpenMPI 和 MPICH。这里安装 OpenMPI。


使用 ssh 命令(ssh root@鲲鹏云服务器公网 IP)连接远程鲲鹏云服务器后,执行以下命令安装 OpenMPI。


sudo yum update -ysudo yum install -y openmpi openmpi-devel
复制代码



配置环境变量:


1.编辑配置文件,进入 Vim 窗口后,按“i”编辑 profile。


sudo vim /etc/profile
复制代码


2.在文件末尾添加以下内容。


export PATH=$PATH:/usr/lib64/openmpi/bin
复制代码


3.按“ESC”退出编辑,再按“:wq”保存修改并退出,然后刷新配置文件。


source /etc/profile
复制代码


安装 OpenMPI 后会提供 mpicc,查看 mpicc 的版本信息成功,表明 mpicc 已经成功安装在你的系统中。


mpicc --version
复制代码


2.4.2 安装 MPI

由于目前环境中 mpirun 版本为 2.1.1,不满足 lldb-server 服务要求,需要更新。这里我们安装 MPI 4.1.4 版本。


同样在远程鲲鹏云服务器中,下载安装包。


mkdir -p /path/to/OpenMPIcd /path/to/OpenMPIwget https://dtse-mirrors.obs.cn-north-4.myhuaweicloud.com/case/0018/openmpi-4.1.4.tar.gztar -zxvf openmpi-4.1.4.tar.gz
复制代码


安装依赖包。


yum install -y numactl-devel-* systemd-devel-*
复制代码



加载编译器。


export PATH=/path/to/GUN/bin:$PATHexport LD_LIBRARY_PATH=/path/to/GUN/lib64:$LD_LIBRARY_PATH
复制代码


执行以下命令进行配置预编译。


cd openmpi-4.1.4./configure --prefix=/path/to/OPENMPI --enable-pretty-print-stacktrace --enable-orterun-prefix-by-default --with-cma  --enable-mpi1-compatibility CC=gcc CXX=g++ FC=gfortran
复制代码



安装编译。


make -j 2
复制代码



make install
复制代码



配置环境变量:


1.编辑配置文件,进入 Vim 窗口后,按“i”编辑 profile


sudo vim /etc/profile
复制代码


2.在文件末尾添加


export PATH=/path/to/GNU/bin:/path/to/OPENMPI/bin:$PATHexport LD_LIBRARY_PATH=/path/to/GNU/lib64:/path/to/OPENMPI/lib:$LD_LIBRARY_PATH
复制代码


3.按“ESC”退出编辑,再按“:wq”保存修改并退出,然后刷新配置文件。


source /etc/profile
复制代码


/path/to/OPENMPI/:OpenMPI 实际安装的路径,请根据实际情况进行替换。


执行以下命令验证 OpenMPI 是否安装成功。


mpirun --version
复制代码


2.4.3 创建 libstdc++.so.6 软链接

由于/usr/lib64/libstdc++.so.6 版本较旧,不包含 GLIBCXX_3.4.26,不满足 lldb-server 需求。这里用软链接方式将/usr/lib64/libstdc++.so.6 的链接指向 /opt/Devkit/tools/libstdc++.so.6。


建议备份/usr/lib64/libstdc++.so.6。


sudo mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
复制代码


建立软链接。


sudo ln -s /opt/DevKit/tools/libstdc++.so.6 /usr/lib64/libstdc++.so.6
复制代码


检查软链接。


ls -l /usr/lib64/libstdc++.so.6
复制代码


2.5 编译应用

在云主机桌面双击打开 CodeArts IDE,打开解压后的 MPI 程序,即解压后“Compiler_and_Debugger/mpi_demo/”路径。



打开工程后,点击打开 bcast_demo.c 文件,修改 85 行为:“int color = rankNum / 1;”。即将调试时划分通信子组规则由 2 个 rank 为 1 个通信子组改为 1 个 rank 为 1 个通信子组。



进入鲲鹏 DevKit 插件,选择使用鲲鹏 DevKit 窗口中的“开始使用”,配置 IP 和端口,IP 是2.1自动部署鲲鹏云服务器得到的弹性公网 IP,端口是 8086,服务证书选择“信任当前服务证书”。



首次登录需要创建管理员密码,登录成功后,点击“编译”,添加目标服务器。



添加远程鲲鹏云服务器为目标服务器,服务器 IP 地址为鲲鹏云服务器弹性公网 IP 地址。



然后再次点击“编译”到编译配置窗口,服务器信息会自动带出,配置编译命令后再点击“编译”。编译命令如下:


mpicc -g bcast_demo.c -o bcast_demo
复制代码



首次创建后再修改编译和调试配置可以通过点击 CodeArts IDE 底部“鲲鹏 DevKit”,点击右上角“设置”按钮,再选择 “工程设置”即可对编译和调试配置进行二次修改。



根据提示输入鲲鹏云服务器密码,编译成功会在鲲鹏云服务器/root/workspace/mpi_demo 目录下生成带调试信息的可执行文件 bcast_demo。


2.6 并行调试

在 DevKit 插件中点击“调试”,打开调试页面,选择“HPC 并行应用”,配置 MPI 应用调试参数,点击“开始调试”。


应用程序:/root/workspace/mpi_demo/bcast_demo


应用程序源码路径:/root/workspace/mpi_demo


MPI 运行命令行:mpirun --allow-run-as-root -np 2



参数说明如下:



rank:rank 用于标识 MPI 并行程序中各个进程的唯一编号,在特定通信组内具有唯一性,且决定进程间通信和数据交互的顺序与方式。在 MPI 并行程序执行时,会启动多个进程协同工作,rank 就像是每个进程的 “身份证号”。


开始调试后会读取 rank 状态:



在 rank 状态读取过程中,若 rank 状态读取全部成功,会自动跳转到 MPI 应用调试页面。页面上获取到运行和调试区、源码区和调试功能区,运行和调试区域包括调试信息区和 rank 信息区。HPC 并行应用调试支持三种调试粒度,分别为“全部”调试、“rank”调试或“通信组”调试。





调试按钮操作描述:



RANK 信息区域选择“全部”调试方式,在 89 行代码处、47 行代码处和 93 行代码处打上断点,再继续执行后续操作。


选择“全部”调试方式,单击“继续”按钮,代码执行到 89 行,再单击“下一步”执行 MPI_Comm_split(MPI_COMM_WORLD, color, rankNum, &row_comm)函数,该函数可将所有的 rank 进行通信分组。这里将 2 个 rank 生成 2 个通信子组,rank1 在通信子组 1,rank0 在通信子组 2。



生成 2 个通信子组后,所有 rank 的源码执行到 90 行代码处,选择“通信组”调试方式,选择通信子组 1 中的 rank1,单击“下一步”按钮,通信子组 1 中的 rank 代码执行到 92 行,通信子组 2 中的 rank0 代码无变化,停留在 90 行。


调试通信子组 1:



未调试通信子组 2:



选择“通信组”调试方式,在左侧通信子组 1 中选择 rank1,单击“继续”按钮,代码执行到 47 行,单击“下一步”按钮,执行 MPI_Barrier(MPI_COMM_WORLD)函数,函数执行完成后,通信子组 1 会一直处于等待状态,此时,在左侧通信子组 2 中选择 rank0,单击“继续”按钮,代码执行到 47 行,单击“下一步”按钮,执行 MPI_Barrier(MPI_COMM_WORLD)函数,函数执行完成后,通信子组 1 不再等待,同步执行到 49 行代码处。


rank1 处于等待状态:



rank0 执行后,rank1、rank 同步执行到 49 行:



单击“点击放大”按钮,在 CodeArts IDE 面板中能看到通信子组的变化概览,每 100ms 显示通信子组的变化。通信子组的变化用不同颜色的菱形来区分,蓝色表示通信子组创建,紫色表示通信子组清除,黄色表示 100ms 内存在通信子组创建和通信子组清除。



释放掉 47 行断点,RANK 信息区域选择“全部”调试方式,循环点击“继续”按钮,代码执行到 93 行,在单击“下一步”按钮,执行 MPI_Comm_free(&row_comm)函数,当不再调试某一通信子组时,可以释放创建的通信子组,该函数能实现释放创建的通信子组。



点击侧边或下方工具栏中“运行和调试”查看调试信息。



至此,使用鲲鹏 DevKit 工具进行 MPI 应用并行调试完成。


更多鲲鹏 DevKit 调试能力探索:介绍-编译调试工具-IDE插件-用户指南-鲲鹏开发套件开发文档-鲲鹏社区

3 问题记录

3.1 编译调试问题

1、重复操作案例或更换鲲鹏云服务器重新编译失败报错:cd: /root/workspace/mpi_demo: No such file or directory



原因:mpi_demo 在第一次编译时同步项目到鲲鹏云服务器中,并在项目下缓存了记录,想要再次编译时触发同步项目需要删除 mpi_demo 下的缓存文件。


解决:删除云主机中 mpi_demo 项目下的缓存文件./devkit,删除后重新点击编译,参考2.5编译应用配置编译命令(mpicc -g bcast_demo.c -o bcast_demo)即可。


cd /home/developer/Desktop/devkitdemo-devkitdemo-23.0.1/Compiler_and_Debugger/mpi_demorm -rf .devkit/
复制代码


“/home/developer/Desktop/devkitdemo-devkitdemo-23.0.1/Compiler_and_Debugger/mpi_demo”是云主机本地 mpi_demo 路径,以个人操作时实际路径为准。

3.2 反馈改进建议

如您在案例实操过程中遇到问题或有改进建议,可以到论坛帖评论区反馈即可,我们会及时响应处理,谢谢!


用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
鲲鹏 DevKit 实战!华为开发者空间体验MPI 应用并行调试与编译_鲲鹏 DevKit_华为云开发者联盟_InfoQ写作社区