CentOS 7.9 环境下 HPC 性能基准测试:从 Linpack 安装到调优实战
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-fastall,O3 --disable-error-checking make -j$(nproc) make install安装完成后别忘了设置环境变量。我习惯直接修改/etc/profileecho 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 CCgcc BINARY64 TARGETNEHALEM如果遇到链接错误可能需要修改f_check文件。这是我总结的修复方法sed -i 298s/.*/print MAKEFILE FEXTRALIB$linker_L -lgfortran -lm -lquadmath -lm $linker_a\\n;/ f_check make clean make CCgcc BINARY64 TARGETNEHALEM看到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 archmytest 21 | 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可以取整到76000NB分块大小通常设置为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调整N80000NB256 结果1.2 TFLOPS优化P×Q为7×4 结果1.5 TFLOPS最终调整NB384 结果1.65 TFLOPS效率91%5.3 常见问题排查内存不足减小N值或关闭其他程序MPI进程崩溃检查ulimit设置建议ulimit -s unlimited ulimit -l unlimited性能波动大关闭CPU频率调节cpupower frequency-set --governor performance6. 测试结果分析完成测试后重点关注这几个指标实测浮点峰值即测试结果中的Gflops值理论浮点峰值计算公式为CPU主频(GHz) × 每周期浮点运算次数 × 核心数例如E5-2680v4是2.4GHz×16(DP Flops)×14核1.075 TFLOPS/颗效率实测值/理论值×100%好的HPC系统效率通常在80-95%之间。如果低于70%就需要检查配置了。7. 进阶调优技巧经过多次实战我总结出几个提升性能的秘诀内存通道优化确保NUMA节点配置正确可以用numactl --hardware查看内存通道分布编译器优化尝试使用Intel编译器或更新版本的GCCBIOS设置开启Turbo Boost禁用节能模式设置合适的PCIe参数网络调优如果是多节点测试需要优化MPI网络参数这些优化可能需要反复测试建议每次只改一个参数记录变化情况。