Kunpeng DevKit MPI 调试实验配置说明
本实验只使用服务器 /home/kunpeng/ 目录下的两个示例源码:
服务器信息:
不要把服务器密码写入文档、脚本或命令历史中。建议后续改用 SSH key 登录。
1. 实验前置环境
1.1 需要的软件
本实验需要服务器具备以下环境:
之前检查服务器时,发现当前还没有安装好 MPI:
所以需要先安装 OpenMPI。系统仓库里的 OpenMPI 可以让命令行示例先跑起来:
安装后检查:
在这台 Huawei Cloud EulerOS 上,OpenMPI 安装后常见路径是:
但要注意:DevKit MPI 调试器本身可能要求 OpenMPI 4.x 的运行库 libmpi.so.40。当前系统仓库安装的是 OpenMPI 2.1.1,只提供:
如果 DevKit 启动日志里出现 libmpi.so.40: cannot open shared object file,说明需要额外安装 OpenMPI 4.x,不能只依赖系统仓库的 OpenMPI 2.1.1。
1.2 DevKit MPI 调试器需要的 OpenMPI 4.x
DevKit MPI 调试器启动 lldb-server 时,如果依赖 libmpi.so.40,需要准备 OpenMPI 4.x。建议安装到独立目录,避免覆盖系统自带 OpenMPI:
安装完成后应能看到:
如果使用 OpenMPI 4.x,后续编译和 DevKit 调试都应使用同一套 OpenMPI 4.x:
本实验服务器 /home/kunpeng 下已经有源码包:
从源码安装 OpenMPI 4.1.4:
参数说明:
安装后验证:
再用 OpenMPI 4.1.4 重新编译本实验程序:
命令行验证:
1.3 检查示例源码
这两个 .c 文件是源码,不能直接填到 DevKit 的 应用程序 字段中。应用程序 字段要填编译后的可执行文件路径。
2. 编译示例程序
建议使用 -g -O0 编译,方便 DevKit Debugger 单步调试和查看变量。
进入源码目录:
编译纯 MPI 示例:
编译 MPI + OpenMP 示例:
如果已安装 OpenMPI 4.x,建议明确使用 OpenMPI 4.x 的 mpicc:
检查可执行文件:
3. 命令行运行验证
在填 DevKit 前,建议先在服务器命令行确认程序可以运行。
3.1 纯 MPI 示例:bcast_demo
如果使用 root 用户运行 OpenMPI,需要加 --allow-run-as-root:
如果使用普通用户运行:
3.2 MPI + OpenMP 示例:mpi_openmp_demo
服务器是 4 核,推荐先用 2 个 MPI 进程,每个进程 2 个 OpenMP 线程:
含义:
也可以简化为 1 个 MPI 进程,4 个 OpenMP 线程:
4. DevKit 配置:纯 MPI 应用
适用文件:
编译后 DevKit 使用的应用程序:
4.1 字段填写
4.2 说明
应用程序 填 /home/kunpeng/bcast_demo,不要填 /home/kunpeng/bcast_demo.c。 MPI 运行命令行 填 mpirun 和启动参数,不要重复写应用程序路径。 - 如果换成普通用户运行,可以把
--allow-run-as-root 去掉。
普通用户示例:
5. DevKit 配置:MPI + OpenMP 应用
适用文件:
编译后 DevKit 使用的应用程序:
5.1 推荐配置:2 个 MPI 进程,每个进程 2 个 OpenMP 线程
含义:
5.2 简化配置:1 个 MPI 进程,4 个 OpenMP 线程
含义:
5.3 线程数建议
这台服务器共有 4 个 CPU 核,建议满足:
推荐组合:
6. mpirun 路径查询
安装 MPI 后,可以用下面命令查询 mpirun 路径:
7.3 root 用户运行 OpenMPI 报错
OpenMPI 默认不建议用 root 运行。如果实验中必须用 root,在 MPI 运行命令行 加:
如果 DevKit 不方便加这个参数,也可以在环境变量设置中加入:
7.4 OpenFabrics/openib 网络接口警告
如果运行时看到类似下面的提示:
这不是程序运行失败,只是 OpenMPI 没找到 openib 高性能网络接口,会自动改用其他通信方式。本实验是单台服务器示范,可以在 MPI 运行命令行 中加入:
例如:
这样可以屏蔽这个警告。
7.5 MPI+OpenMP 的线程数不一致
保持这两个位置一致:
如果一个填 2,另一个填 4,调试时线程数量可能和预期不一致。
7.6 mpi_openmp_demo 输出很多、看起来很乱
mpi_openmp_demo.c 中 COUNT 是 10000,并且循环内每次都会 printf。使用 -np 2 和 OMP_NUM_THREADS=2 时,会有大量并行输出,顺序交错是正常现象。
验证是否真正运行成功,优先看命令返回码和最后几行输出。正常结束时会看到类似:
7.7 DevKit 启动失败:缺少 libmpi.so.40
如果 DevKit 报:
并且日志中有:
原因是 DevKit 启动的 lldb-server 依赖 OpenMPI 4.x 的 libmpi.so.40,而当前系统仓库安装的 OpenMPI 2.1.1 只提供 libmpi.so.20。
检查命令:
正确修复方式:
不要把 libmpi.so.20 强行软链接成 libmpi.so.40。这两个库 ABI 版本不同,可能导致调试器启动后崩溃或行为异常。
8. 本实验推荐最终填写
纯 MPI:bcast_demo
MPI + OpenMP:mpi_openmp_demo
Kunpeng DevKit MPI 调试实验配置说明
本实验只使用服务器
/home/kunpeng/目录下的两个示例源码:/home/kunpeng/bcast_demo.cOpenMP应用/home/kunpeng/mpi_openmp_demo.cOpenMP应用服务器信息:
121.36.46.xx22aarch64/home/kunpeng1. 实验前置环境
1.1 需要的软件
本实验需要服务器具备以下环境:
gccgcc --versionmpicccommand -v mpiccmpiruncommand -v mpirungcc -fopenmp --version之前检查服务器时,发现当前还没有安装好 MPI:
所以需要先安装 OpenMPI。系统仓库里的 OpenMPI 可以让命令行示例先跑起来:
安装后检查:
在这台 Huawei Cloud EulerOS 上,OpenMPI 安装后常见路径是:
但要注意:DevKit MPI 调试器本身可能要求 OpenMPI 4.x 的运行库
libmpi.so.40。当前系统仓库安装的是 OpenMPI 2.1.1,只提供:如果 DevKit 启动日志里出现
libmpi.so.40: cannot open shared object file,说明需要额外安装 OpenMPI 4.x,不能只依赖系统仓库的 OpenMPI 2.1.1。1.2 DevKit MPI 调试器需要的 OpenMPI 4.x
DevKit MPI 调试器启动
lldb-server时,如果依赖libmpi.so.40,需要准备 OpenMPI 4.x。建议安装到独立目录,避免覆盖系统自带 OpenMPI:安装完成后应能看到:
如果使用 OpenMPI 4.x,后续编译和 DevKit 调试都应使用同一套 OpenMPI 4.x:
本实验服务器
/home/kunpeng下已经有源码包:从源码安装 OpenMPI 4.1.4:
参数说明:
--prefix=/opt/openmpi-4.1.4--disable-mpi-fortran--disable-oshmem--without-verbs--enable-mpirun-prefix-by-defaultmpirun自动使用当前安装前缀下的库和组件安装后验证:
再用 OpenMPI 4.1.4 重新编译本实验程序:
命令行验证:
1.3 检查示例源码
这两个
.c文件是源码,不能直接填到 DevKit 的应用程序字段中。应用程序字段要填编译后的可执行文件路径。2. 编译示例程序
建议使用
-g -O0编译,方便 DevKit Debugger 单步调试和查看变量。进入源码目录:
编译纯 MPI 示例:
编译 MPI + OpenMP 示例:
如果已安装 OpenMPI 4.x,建议明确使用 OpenMPI 4.x 的
mpicc:检查可执行文件:
3. 命令行运行验证
在填 DevKit 前,建议先在服务器命令行确认程序可以运行。
3.1 纯 MPI 示例:
bcast_demo如果使用
root用户运行 OpenMPI,需要加--allow-run-as-root:如果使用普通用户运行:
3.2 MPI + OpenMP 示例:
mpi_openmp_demo服务器是 4 核,推荐先用
2个 MPI 进程,每个进程2个 OpenMP 线程:含义:
也可以简化为
1个 MPI 进程,4个 OpenMP 线程:4. DevKit 配置:纯 MPI 应用
适用文件:
编译后 DevKit 使用的应用程序:
4.1 字段填写
121.36.46.xx22root/home/kunpeng/bcast_demo/home/kunpengexport PATH=/opt/openmpi-4.1.4/bin:$PATH; export LD_LIBRARY_PATH=/opt/openmpi-4.1.4/lib:$LD_LIBRARY_PATHmpirun 命令运行方式mpirun --allow-run-as-root --mca btl ^openib -np 24.2 说明
应用程序填/home/kunpeng/bcast_demo,不要填/home/kunpeng/bcast_demo.c。MPI 运行命令行填mpirun和启动参数,不要重复写应用程序路径。--allow-run-as-root去掉。普通用户示例:
5. DevKit 配置:MPI + OpenMP 应用
适用文件:
编译后 DevKit 使用的应用程序:
5.1 推荐配置:2 个 MPI 进程,每个进程 2 个 OpenMP 线程
121.36.46.xx22root/home/kunpeng/mpi_openmp_demo/home/kunpengexport OMP_NUM_THREADS=2; export PATH=/opt/openmpi-4.1.4/bin:$PATH; export LD_LIBRARY_PATH=/opt/openmpi-4.1.4/lib:$LD_LIBRARY_PATHmpirun 命令运行方式mpirun --allow-run-as-root --mca btl ^openib -np 22含义:
5.2 简化配置:1 个 MPI 进程,4 个 OpenMP 线程
/home/kunpeng/mpi_openmp_demo/home/kunpengexport OMP_NUM_THREADS=4; export PATH=/opt/openmpi-4.1.4/bin:$PATH; export LD_LIBRARY_PATH=/opt/openmpi-4.1.4/lib:$LD_LIBRARY_PATHmpirun 命令运行方式mpirun --allow-run-as-root --mca btl ^openib -np 14含义:
5.3 线程数建议
这台服务器共有 4 个 CPU 核,建议满足:
推荐组合:
1442244146.
mpirun路径查询安装 MPI 后,可以用下面命令查询
mpirun路径:7.3 root 用户运行 OpenMPI 报错
OpenMPI 默认不建议用
root运行。如果实验中必须用root,在MPI 运行命令行加:如果 DevKit 不方便加这个参数,也可以在环境变量设置中加入:
7.4 OpenFabrics/openib 网络接口警告
如果运行时看到类似下面的提示:
这不是程序运行失败,只是 OpenMPI 没找到
openib高性能网络接口,会自动改用其他通信方式。本实验是单台服务器示范,可以在MPI 运行命令行中加入:例如:
这样可以屏蔽这个警告。
7.5 MPI+OpenMP 的线程数不一致
保持这两个位置一致:
如果一个填
2,另一个填4,调试时线程数量可能和预期不一致。7.6
mpi_openmp_demo输出很多、看起来很乱mpi_openmp_demo.c中COUNT是10000,并且循环内每次都会printf。使用-np 2和OMP_NUM_THREADS=2时,会有大量并行输出,顺序交错是正常现象。验证是否真正运行成功,优先看命令返回码和最后几行输出。正常结束时会看到类似:
7.7 DevKit 启动失败:缺少
libmpi.so.40如果 DevKit 报:
并且日志中有:
原因是 DevKit 启动的
lldb-server依赖 OpenMPI 4.x 的libmpi.so.40,而当前系统仓库安装的 OpenMPI 2.1.1 只提供libmpi.so.20。检查命令:
正确修复方式:
不要把
libmpi.so.20强行软链接成libmpi.so.40。这两个库 ABI 版本不同,可能导致调试器启动后崩溃或行为异常。8. 本实验推荐最终填写
纯 MPI:
bcast_demoMPI + OpenMP:
mpi_openmp_demo