1. 为什么需要Linpack测试?
当你刚接触高性能计算(HPC)时,可能会好奇:怎么知道我的服务器到底有多强?这就好比买车要看发动机马力一样,Linpack就是测量HPC系统"马力"的标准工具。我在实际项目中做过几十次Linpack测试,发现它不仅能反映硬件性能,更能暴露系统配置问题。
Linpack通过解线性方程组来测试浮点计算能力,这个测试特别"吃"CPU和内存带宽。记得我第一次测试时,用默认参数跑出来的成绩只有理论值的30%,经过调优后才提升到75%以上。这中间的差距,就是系统优化的重要空间。
2. 环境准备:打好基础才能跑得稳
2.1 安装必备工具链
在CentOS 7.9上做HPC测试,首先要搭建完整的开发环境。我习惯用yum快速安装基础组件:
# 安装编译工具链 yum install -y gcc gcc-c++ gcc-gfortran # 安装构建工具 yum install -y cmake python3 zlib*这里有个小技巧:安装完成后建议验证gfortran是否正常:
gfortran --version如果报错,可能需要手动安装libgfortran。我遇到过几次这种情况,都是因为默认仓库的包依赖有问题。
2.2 MPI环境配置实战
MPICH是Linpack测试的关键组件,我推荐用源码编译安装以获得最佳性能。最新版MPICH可以从官网获取,这里以4.1版本为例:
mkdir -p /root/linpack cd /root/linpack wget http://www.mcs.anl.gov/research/projects/mpich2/downloads/tarballs/4.1/mpich-4.1.tar.gz tar xzvf mpich-4.1.tar.gz mkdir -p /install/mpich cd mpich-4.1配置时我通常会加上优化参数:
./configure --prefix=/install/mpich --enable-fast=all,O3 --disable-error-checking make -j$(nproc) && make install安装完成后,别忘了设置环境变量。我习惯直接修改/etc/profile:
echo 'export PATH=/install/mpich/bin:$PATH' >> /etc/profile echo 'export LD_LIBRARY_PATH=/install/mpich/lib:$LD_LIBRARY_PATH' >> /etc/profile source /etc/profile验证安装是否成功:
mpicc -v && mpiexec --version3. 数学库的选择与优化
3.1 GotoBLAS2编译指南
BLAS库对性能影响巨大,GotoBLAS2是我测试过在x86架构上表现最好的。编译时需要特别注意CPU架构匹配:
tar -zxvf GotoBLAS2-1.13.tar.gz cd GotoBLAS2确定CPU架构很关键,我一般用这个命令查看:
cat /proc/cpuinfo | grep 'model name' | head -1对于Intel CPU,常见的架构有NEHALEM、SANDYBRIDGE等。编译命令示例:
make CC=gcc BINARY=64 TARGET=NEHALEM如果遇到链接错误,可能需要修改f_check文件。这是我总结的修复方法:
sed -i '298s/.*/print MAKEFILE "FEXTRALIB=$linker_L -lgfortran -lm -lquadmath -lm $linker_a\\n";/' f_check make clean make CC=gcc BINARY=64 TARGET=NEHALEM看到"GotoBLAS build complete"就说明成功了。
4. HPL的配置与编译
4.1 获取和准备HPL
从官网下载最新版HPL后,解压并准备编译:
tar -zxvf hpl-2.3.tar.gz cd hpl-2.3选择最接近的模板配置,我通常用:
cp setup/Make.Linux_PII_FBLAS Make.mytest4.2 关键配置详解
修改Make.mytest时需要特别注意这几个参数:
ARCH = mytest TOPdir = /root/linpack/hpl-2.3 MPdir = /install/mpich LAdir = /root/linpack/GotoBLAS2 LAlib = $(LAdir)/libgoto2_nehalemp-r1.13.a有两个常见坑需要注意:
- 将libmpich.a改为libmpich.so
- 在CCFLAGS最后添加-pthread
完整编译命令:
make arch=mytest 2>&1 | tee compile.log编译成功后,在bin/mytest目录会生成xhpl可执行文件和HPL.dat配置文件。
5. 性能调优实战
5.1 HPL.dat参数解析
HPL.dat是调优的核心,主要参数包括:
N(矩阵大小):计算方法是N×N×8 ≈ 总内存×80%。例如64GB内存的机器:
echo "sqrt(64*1024^3*0.8/8)" | bc得到N≈75848,可以取整到76000
NB(分块大小):通常设置为256-512之间,需要实际测试
P×Q(进程网格):要满足P×Q=总进程数,且P≤Q。对于16核的机器,4×4通常是不错的选择
5.2 实际测试案例
这是我最近在一台双路E5-2680v4服务器上的优化过程:
首次测试(默认参数):
mpirun -np 28 ./xhpl结果:0.8 TFLOPS(理论峰值1.8 TFLOPS)
调整N=80000,NB=256: 结果:1.2 TFLOPS
优化P×Q为7×4: 结果:1.5 TFLOPS
最终调整NB=384: 结果:1.65 TFLOPS(效率91%)
5.3 常见问题排查
- 内存不足:减小N值或关闭其他程序
- MPI进程崩溃:检查ulimit设置,建议:
ulimit -s unlimited ulimit -l unlimited - 性能波动大:关闭CPU频率调节:
cpupower frequency-set --governor performance
6. 测试结果分析
完成测试后,重点关注这几个指标:
实测浮点峰值:即测试结果中的"Gflops"值
理论浮点峰值:计算公式为:
CPU主频(GHz) × 每周期浮点运算次数 × 核心数例如E5-2680v4是2.4GHz×16(DP Flops)×14核=1.075 TFLOPS/颗
效率:实测值/理论值×100%
好的HPC系统效率通常在80-95%之间。如果低于70%,就需要检查配置了。
7. 进阶调优技巧
经过多次实战,我总结出几个提升性能的秘诀:
内存通道优化:确保NUMA节点配置正确,可以用:
numactl --hardware查看内存通道分布
编译器优化:尝试使用Intel编译器或更新版本的GCC
BIOS设置:
- 开启Turbo Boost
- 禁用节能模式
- 设置合适的PCIe参数
网络调优:如果是多节点测试,需要优化MPI网络参数
这些优化可能需要反复测试,建议每次只改一个参数,记录变化情况。