【国产化实践】飞腾+麒麟平台OpenBLAS编译与HPL性能测试

📅 2026/7/10 3:32:30
【国产化实践】飞腾+麒麟平台OpenBLAS编译与HPL性能测试
1. 项目背景在国产化平台进行性能评估时HPLHigh Performance Linpack是最常用的双精度浮点性能测试工具。但由于官方文档主要面向 x86 平台在飞腾 CPU 银河麒麟系统下部署 HPL 时经常会遇到 MPI、BLAS 库路径、Makefile 配置等问题。本文基于飞腾 D2000 银河麒麟 V10 环境完整记录 MPICH、OpenBLAS、HPL 的编译部署过程并详细介绍 HPL.dat 参数配置及性能调优思路希望帮助读者快速完成国产化平台 HPL 环境搭建。2. 测试环境项目内容CPU飞腾 D2000操作系统银河麒麟V10GCC9.3.1MPImpich-3.3.2HPL2.3内存64GB编译器gcc/gfortran2.1 环境准备主要包含hpl-2.3、mpich-3.3.2、OpenBLAS-develop软件源码的编译安装软件源码可以私信我获取。2.2 测试原理HPL测试工具 │ 调用BLAS接口 │ OpenBLAS │ MPI通信 │ MPICH/OpenMPIHPL 本身不提供矩阵计算能力它依赖 BLAS 库完成矩阵运算并依赖 MPI 完成多进程通信因此需要先安装 MPI 和 OpenBLAS。3.1 安装依赖apt install gcc g gfortran make cmake (麒麟服务器版dnf install gcc-c gcc-gfortran make cmake)3. mpich源码编译安装将mipch-3.3.2.tar.gz源码解压到系统路径下验证tar -xzvf mpich-3.3.2.tar.gz cd mpich-3.3.2 ./configure -prefix/root/install (指定安装目录) make make install /root/install/bin/mpicc -v #查mpi是否安装成功和版本号4. OpenBLAS库源码编译4.1 解压源码到系统目录4.2 使用make 命令编译OpenBLAS库编译完成之后可在目录下看到libopenblas.a验证库是否正常。4.3 使用make install 命令安装库文件make install之后库文件会安装在/opt/OpenBLAS目录下可ls /opt/OpenBLAS查看是否安装成功5. HPL源码编译安装5.1 解压HPL源码到系统目录下tar -xzvf hpl-2.3.tar.gz . cd hpl-2.35.2 从setup目录下拷贝相近的编译配置文件并修改cp setup/Make.Linux_PII_CBLAS Make.Linux_Arm 修改Make.Linux_Arm编译配置文件需要修改以下配置 ARCH Linux_Arm #编译的平台架构 TOPdir /root/kylin/linpack/hpl-2.3 #实际的HPL源码目录 HPLlib $(LIBdir)/libhpl.a MPdir /root/install #mpi的实际安装目录 MPlib $(MPdir)/lib/libmpi.a LAdir /opt/OpenBLAS #OpenBLAS库的实际安装目录 LAlib $(LAdir)/lib/libopenblas.a HPL_LIBS $(HPLlib) $(LAlib) $(MPlib) -ludev -lpthread -lrt #编译报错增加此编译选项 LINKER /usr/bin/gfortran #修改链接器 LINKFLAGS $(CCFLAGS) -ludev #编译报错增加此编译选项参数说明ARCH平台架构TOPdirHPL源码目录MPdirMPI安装目录LAdirOpenBLAS安装目录LINKERFortran链接器5.3 使用make archLinux_Arm命令开始编译5.4 编译完成之后可在bin/Linux_Arm目录下看到HPL.dat和xhpl测试程序6. HPL.dat配置详解HPLinpack benchmark input file Innovative Computing Laboratory, University of Tennessee HPL.out output file name (if any) 6 device out (6stdout,7stderr,file) 1 # of problems sizes (N) 100000 Ns #求解一个100000*100000的矩阵矩阵规模N*N,矩阵大小为100000^2*8约等于80G,最好占物理内存的80~90%。 1 # of NBs 192 NBs #192*192为1个block,HPL会将整个矩阵切成很多block,逐块计算 0 PMAP process mapping (0Row-,1Column-major) #MPI映射方式默认即可 1 # of process grids (P x Q) 2 Ps #P和Q表示MPI进程排列不是进程随便排而是2行2列 2 Qs 16.0 threshold 1 # of panel fact 2 PFACTs (0left, 1Crout, 2Right) 1 # of recursive stopping criterium 4 NBMINs ( 1) 1 # of panels in recursion 2 NDIVs 1 # of recursive panel fact. 1 RFACTs (0left, 1Crout, 2Right) 1 # of broadcast 0 BCASTs (01rg,11rM,22rg,32rM,4Lng,5LnM) 1 # of lookahead depth 0 DEPTHs (0) 0 SWAP (0bin-exch,1long,2mix) 64 swapping threshold 0 L1 in (0transposed,1no-transposed) form 0 U in (0transposed,1no-transposed) form 1 Equilibration (0no,1yes) 8 memory alignment in double ( 0)7. HPL测试测试运行命令先切换到HPL测试程序所在目录 cd bin/Linux_Arm 执行如下测试指令 /root/install/bin/mpirun -np 4 ./xhpl8. 常见问题问题1编译hpl源码时报如下错误/usr/bin/ld: blas_server.c:(.text0x538): undefined reference to pthread_getaffinity_np /usr/bin/ld: /opt/OpenBLAS/lib/libopenblas.a(blas_server.o): in function blas_thread_init: blas_server.c:(.text0x70c): undefined reference to pthread_create /usr/bin/ld: topology-linux.c:(.text0x3500): undefined reference to udev_device_get_property_value /usr/bin/ld: topology-linux.c:(.text0x3528): undefined reference to udev_device_get_property_value /usr/bin/ld: topology-linux.c:(.text0x3550): undefined reference to udev_device_get_property_value /usr/bin/ld: topology-linux.c:(.text0x3578): undefined reference to udev_device_get_property_value /usr/bin/ld: topology-linux.c:(.text0x35a0): undefined reference to udev_device_get_property_value /usr/bin/ld: topology-linux.c:(.text0x35bc): undefined reference to udev_device_unref解决方法修改编译配置文件增加-ludev -lpthread编译选项9. 平台理论算力计算理论值双精度算力理论GFLOPSCPU主频*CPU核心数*CPU每个指令周期执行的浮点运算次数 举个例子 飞腾S5000C-16核开发板CPU的主频是2.3GHz,拥有16个核心每个指令周期能够执行8次浮点运算所以飞腾S5000C-16核开发板的理论算力为294.4GFlops,实际测试结果为230GFlops,达到78%。10. 总结本文完成了飞腾 D2000 银河麒麟 V10 平台下 MPICH、OpenBLAS 和 HPL 的部署并成功完成双精度浮点性能测试。HPL 的性能不仅与编译过程有关更与 HPL.dat 参数配置、MPI 进程绑定、NUMA 架构及 BLAS 库优化密切相关。后续将继续分享 HPL.dat 参数调优、MPI CPU 绑定、NUMA 优化以及飞腾平台性能调优等内容希望逐步形成国产化平台 HPC 性能测试系列文章。