1. 项目背景
在国产化平台进行性能评估时,HPL(High Performance Linpack)是最常用的双精度浮点性能测试工具。但由于官方文档主要面向 x86 平台,在飞腾 CPU + 银河麒麟系统下部署 HPL 时,经常会遇到 MPI、BLAS 库路径、Makefile 配置等问题。
本文基于飞腾 D2000 + 银河麒麟 V10 环境,完整记录 MPICH、OpenBLAS、HPL 的编译部署过程,并详细介绍 HPL.dat 参数配置及性能调优思路,希望帮助读者快速完成国产化平台 HPL 环境搭建。
2. 测试环境
| 项目 | 内容 |
|---|---|
| CPU | 飞腾 D2000 |
| 操作系统 | 银河麒麟V10 |
| GCC | 9.3.1 |
| MPI | mpich-3.3.2 |
| HPL | 2.3 |
| 内存 | 64GB |
| 编译器 | gcc/gfortran |
2.1 环境准备
主要包含hpl-2.3、mpich-3.3.2、OpenBLAS-develop软件源码的编译安装,软件源码可以私信我获取。
2.2 测试原理
HPL测试工具
│
调用BLAS接口
│
OpenBLAS
│
MPI通信
│
MPICH/OpenMPI
HPL 本身不提供矩阵计算能力,它依赖 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.3
5.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 | 平台架构 |
| TOPdir | HPL源码目录 |
| MPdir | MPI安装目录 |
| LAdir | OpenBLAS安装目录 |
| LINKER | Fortran链接器 |
5.3 使用make arch=Linux_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 (6=stdout,7=stderr,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 (0=Row-,1=Column-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 (0=left, 1=Crout, 2=Right)
1 # of recursive stopping criterium
4 NBMINs (>= 1)
1 # of panels in recursion
2 NDIVs
1 # of recursive panel fact.
1 RFACTs (0=left, 1=Crout, 2=Right)
1 # of broadcast
0 BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)
1 # of lookahead depth
0 DEPTHs (>=0)
0 SWAP (0=bin-exch,1=long,2=mix)
64 swapping threshold
0 L1 in (0=transposed,1=no-transposed) form
0 U in (0=transposed,1=no-transposed) form
1 Equilibration (0=no,1=yes)
8 memory alignment in double (> 0)
7. HPL测试
测试运行命令
先切换到HPL测试程序所在目录
cd bin/Linux_Arm
执行如下测试指令
/root/install/bin/mpirun -np 4 ./xhpl
8. 常见问题
问题1
编译hpl源码时报如下错误:
/usr/bin/ld: blas_server.c:(.text+0x538): 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:(.text+0x70c): undefined reference to `pthread_create'
/usr/bin/ld: topology-linux.c:(.text+0x3500): undefined reference to `udev_device_get_property_value'
/usr/bin/ld: topology-linux.c:(.text+0x3528): undefined reference to `udev_device_get_property_value'
/usr/bin/ld: topology-linux.c:(.text+0x3550): undefined reference to `udev_device_get_property_value'
/usr/bin/ld: topology-linux.c:(.text+0x3578): undefined reference to `udev_device_get_property_value'
/usr/bin/ld: topology-linux.c:(.text+0x35a0): undefined reference to `udev_device_get_property_value'
/usr/bin/ld: topology-linux.c:(.text+0x35bc): undefined reference to `udev_device_unref'
解决方法:修改编译配置文件,增加-ludev -lpthread编译选项
9. 平台理论算力计算
理论值:
双精度算力理论GFLOPS=CPU主频*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 性能测试系列文章。

513

被折叠的 条评论
为什么被折叠?



