Linpack 基准测试通常指 High-Performance Linpack (HPL),这是一个用于评估高性能计算系统浮点性能的工具,常用于 Top500 超级计算机排名。它依赖于 BLAS 库 (如 OpenBLAS)、MPI (如 OpenMPI) 和 HPL 源代码。
Install Basic Dependency
运行以下命令安装依赖:
sudo apt update
sudo apt install -y build-essential gfortran gcc g++ make wget git
build-essential: 提供 GCC、Make 等编译工具。gfortran: Fortran 编译器,用于 OpenBLAS 和 HPL.git和wget: 用于下载源代码。
Install OpenBLAS from Source
OpenBLAS 是一个高性能的 BLAS (基本线性代数子程序) 库,支持多线程计算,适用于 HPL 的矩阵运算。
- 克隆最新版 OpenBLAS 源码:
cd ~
git clone https://github.com/OpenMathLib/OpenBLAS.git
cd OpenBLAS
- 编译 OpenBLAS,支持多线程 (OpenMP) 和动态架构优化
make DYNAMIC_ARCH=1 USE_OPENMP=1 -j$(nproc)
sudo make PREFIX=/usr/local/openblas install
DYNAMIC_ARCH=1: 支持多种 CPU 架构 (如 Skylake、Zen),自动选择最佳指令集。USE_OPENMP=1: 启用 OpenMP 多线程支持,HPL 性能关键。PREFIX=/usr/local/openblas: 安装到自定义路径,避免覆盖系统库。-j$(nproc): 使用所有 CPU 核心加速编译。
编译完成后,检查生成的库文件:
ls /usr/local/openblas/lib
应看到 libopenblas.so 等文件。
- 配置 OpenBLAS 环境变量:
echo "export LD_LIBRARY_PATH=/usr/local/openblas/lib:$LD_LIBRARY_PATH" >> ~/.bashrc
echo "export CFLAGS=-I/usr/local/openblas/include" >> ~/.bashrc
source ~/.bashrc
验证 OpenBLAS 安装:
pkg-config --libs --cflags openblas
输出类似: -I/usr/local/openblas/include -L/usr/local/openblas/lib -lopenblas.
Install OpenMPI from Source
OpenMPI 是一个开源的 MPI (消息传递接口) 实现,支持分布式并行计算,HPL 需要它来运行多节点或多进程任务
- 下载 OpenMPI 源代码:
cd ~
wget https://download.open-mpi.org/release/open-mpi/v5.0/openmpi-5.0.5.tar.gz
tar -xvzf openmpi-5.0.5.tar.gz
cd openmpi-5.0.5
- 编译和安装 OpenMPI:
./configure --prefix=/usr/local/openmpi --enable-mpi-fortran --with-hwloc=internal
make -j$(nproc)
sudo make install
--prefix=/usr/local/openmpi: 安装到自定义路径。--enable-mpi-fortran: 启用 Fortran 支持 (HPL 需要) 。--with-hwloc=internal: 使用内置 hwloc 库管理硬件拓扑。
- 配置 OpenMPI 环境变量
echo "export PATH=/usr/local/openmpi/bin:$PATH" >> ~/.bashrc
echo "export LD_LIBRARY_PATH=/usr/local/openmpi/lib:$LD_LIBRARY_PATH" >> ~/.bashrc
source ~/.bashrc
验证 OpenMPI 安装:
which mpicc
which mpifort
mpirun --version
应显示 /usr/local/openmpi/bin/mpicc 等路径和版本信息。
Install HPL from Source
HPL 官方源代码来自 Netlib,执行以下命令下载 HPL 2.3 版本,解压并进入目录。
cd ~
wget https://www.netlib.org/benchmark/hpl/hpl-2.3.tar.gz
tar -xvzf hpl-2.3.tar.gz
mv hpl-2.3 hpl
cd hpl
- 配置 HPL 构建
HPL 需要自定义 Makefile 来链接 OpenBLAS 和 OpenMPI. 复制模板并编辑:
cp setup/Make.Linux_PII_CBLAS Make.Linux
将 Make.Linux 相关配置替换为
ARCH = Linux
TOPdir = $(HOME)/hpl
MPdir = /usr/local/openmpi
MPinc = -I$(MPdir)/include
MPlib = $(MPdir)/lib/libmpi.so
LAdir = /usr/local/openblas/lib
LAlib = $(LAdir)/libopenblas.so
LApaths = -L$(LAdir)
CC = $(MPdir)/bin/mpicc
CCFLAGS = $(HPL_DEFS) -fopenmp -O3 -funroll-loops -fPIC
LINKER = $(CC)
LINKFLAGS = $(CCFLAGS)
F77 = $(MPdir)/bin/mpifort
FFLAGS = -fopenmp -O3 -funroll-loops -fPIC
RANLIB = ranlib
HPL_OPTS = -DHPL_CALL_CBLAS
- 构建 HPL
make arch=Linux
会生成可执行文件 xhpl (双精度版本) 。构建过程可能需要几分钟,输出在 bin/Linux/ 目录。
- 测试 HPL
编译成功后,进入 bin/Linux 目录并运行测试:
cd ~/hpl/bin/Linux
export OMP_NUM_THREADS=8 # 替换为 CPU 核心数
mpirun --allow-run-as-root -np 4 ./xhpl
Finished 864 tests with the following results:
864 tests completed and passed residual checks,
0 tests completed and failed residual checks,
0 tests skipped because of illegal input values.
--------------------------------------------------------------------------------
End of Tests.