HPC 基准测试:HPL/Linpack、HPCG 与 TOP500 实战

基准测试是衡量 HPC 系统的标尺。本文系统讲解 HPL/Linpack 的理论与实践:浮点峰值与实测性能、HPL 的参数调优(N/P×Q/block size)、HPCG 面向真实应用的基准、TOP500 与 Green500 排名、跑分的常见陷阱,以及基准测试如何指导系统选型与调优。

引言

「这台超算多强?」——不能靠嘴说,要靠基准测试(Benchmark)。从 1970 年代 LINPACK 到今天的 HPL,基准测试一直是 HPC 领域公认的标尺:TOP500 的排名、Green500 的能效、HPCG 的真实应用模拟。理解基准测试,才能真正读懂「一台机器的 FLOPS」意味着什么,也才能用它指导选型与调优。

本文系统讲解 HPC 基准测试:浮点峰值与实测性能、HPL/Linpack 的原理与调优参数、HPCG 面向真实应用、TOP500/Green500 排名、跑分的常见陷阱,以及基准测试如何指导系统设计。

前置:/hpc-roofline-model/(性能模型)、/hpc-cuda-mpi-hybrid/(异构并行)、/hpc-parallel-algorithms/(并行算法)、/hpc-memory-hierarchy/(内存层次)。


目录


1. 为什么需要基准测试:FLOPS 的承诺与现实

FLOPS(每秒浮点运算次数) 是 HPC 的「马力」单位,但有理论峰值与实测性能之别:

理论峰值(Peak):硬件的理想上限
  例:2.1GHz × 双精度 FMA × 512-bit 向量 × 核数
实测性能(Measured):跑真实 benchmark 得到
效率 = 实测 / 理论

基准测试的价值:

□ 横向对比:不同系统「同题竞技」分出高下
□ 选型依据:买机器前用跑分预估
□ 调优标尺:优化前后看性能变化
□ 可信度:排名公开可复现(TOP500)

认知:峰值是「纸面马力」,实测是「真实输出」——效率(实测/峰值)才是衡量优化的关键指标。


2. 浮点峰值:理论值怎么算

双精度浮点峰值公式:

Peak = 主频 × FMA 系数 × 向量宽度 × 核数
例:3.0 GHz × 2(FMA 算两次)× 8(512-bit = 8 个 double)× 64 核
   = 3.0e9 × 2 × 8 × 64 ≈ 3.07 TFLOPS

几个概念:

□ FMA(Fused Multiply-Add):一条指令算一次乘 + 一次加 → 2 FLOP
□ 向量宽度:AVX-512 = 16 个 float 或 8 个 double
□ 累加器/时钟:部分架构每周期多组 FMA
□ GPU:按 CUDA 核数 × 频率 × FMA 估算

HPL 跑分的现实效率:

□ 大型 HPL:通常达到峰值的 80–95%
□ 小型/瓶颈场景:远低于峰值(受内存/网络限制)
□ 说明:HPL 是「优化极好的计算密集基准」,不代表所有负载

记忆:峰值 = 主频 × FMA × 向量宽 × 核数——但真实负载往往远低于峰值,效率比绝对值更重要。


3. HPL/Linpack:TOP500 的标尺

HPL(High Performance LINPACK) 求解大规模稠密线性方程组(LU 分解),是 TOP500 的官方基准。

问题:求解 Ax = b(A 为 N×N 稠密矩阵)
核心:LU 分解(LAPACK 的 dgetrf 的并行版)
→ 报告:Rmax(实测 GFLOPS)

为什么用 LU 分解:

□ 稠密矩阵运算:计算密集 + 内存访问可优化
□ 并行好:矩阵分块 + 行/列分布
□ 历史标准:LINPACK 几十年一脉相承
□ 可用 BLAS 库(MKL/OpenBLAS)达到高效率

HPL 的关键特征:

□ 性能高度依赖 BLAS 库与参数调优
□ 对内存带宽/通信有一定要求但不苛刻
□ 大 N 通常效率更高(计算/通信比改善)
□ 是「纯计算」基准——不代表稀疏/真实负载

记忆:HPL = 「求解稠密 LU 分解的并行基准」——BLAS 优化得好、参数调得对,就能逼近峰值;它是 TOP500 的计分卡。


4. HPL 调优:N、P×Q 与 block size

HPL 的性能由几个参数决定:

N:矩阵规模(越大计算/通信比越高,但内存消耗大)
P × Q:进程网格(行 × 列)
NB:block size(分块大小,通常 192–256)
PFACT / NBMIN / NDIV / RFACT:LU 分解变体参数

关键参数:

参数作用典型值
N矩阵维度(问题规模)大到内存允许
P×Q进程网格尽量方(P≈Q)
NB分块大小192 / 256
panel 因子列块内的分解方式默认优化
关键路径L1/L2 优化—

HPL.dat 示例:

HPLinpack benchmark input file
2               # device out
6               # problem size (N)
4096            # Ns
...
3               # process grid
1 4             # Ps Qs(如 1×4)
4               # NB
192 256         # NBs

调优思路:

□ N 取「内存允许的最大值」(如 80% 内存)
□ P×Q 尽量接近正方形(减少通信)
□ NB 按 BLAS 库与缓存试探(192/256 常用)
□ 逐个参数扫描:HPL 自带的参数扫描功能

心法:HPL 调优 = 「把矩阵撑满内存 + 网格放方 + block size 匹配 BLAS」——性能上不去先看 N 与网格,再看 NB。


5. HPCG:面向真实应用的基准

HPCG(High Performance Conjugate Gradient) 用稀疏线性求解(共轭梯度)模拟真实 HPC 负载,被指为「比 HPL 更接近现实」。

HPCG 与 HPL 的本质差异:

HPL:稠密矩阵,计算密集,易逼近峰值
HPCG:稀疏矩阵,访存密集(stencil),效率通常 < 5%

HPCG 为什么效率低:

□ 稀疏矩阵:不规则访存,缓存命中率低
□ 每 FLOP 的访存量大(访存受限)
□ 通信频繁:每次迭代全局归约
□ 反映「真实科学计算」:有限元/网格/稀疏求解
HPCG 三件套:
□ SPMV(稀疏矩阵向量乘)
□ 多层预处理(MG)
□ 全局点积(通信)

认知:HPL 测「算力天花板」,HPCG 测「真实应用手感」——一台 HPL 效率 95% 的机器,HPCG 可能只有 2–5%——两者缺一不可。


6. TOP500 与 Green500:排名解读

TOP500:全球超算按 HPL Rmax 排名(每半年发布)。

□ 第一名:当前 HPL 最高实测 GFLOPS
□ 代表「理论算力的顶级玩家」
□ 主要用 HPL(自 1993 年以来一致口径)

Green500:按能效排名(每 GFLOPS 的功率)。

□ 指标:FLOPS/Watt(能效)
□ 鼓励节能与异构(GPU/专用加速器常领先)
□ 反映「每度电能换多少算力」

排名解读要点:

□ HPL 排名高 ≠ 真实应用快(要看 HPCG 与具体负载)
□ 能效领先 ≠ 绝对算力强(小机器能效可高)
□ 榜单看趋势:异构加速(GPU/DPU)崛起
□ 用榜单选型:先明确「你的负载更像 HPL 还是 HPCG」

记忆:TOP500 比「算力峰值」,Green500 比「每瓦算力」——看排名要懂「HPL 是天花板、HPCG 是现实、能效是可持续」。


7. 跑基准的常见陷阱

跑分不是过家家,常见陷阱:

□ N 取太小:内存没用满 → 效率虚高
□ 网格不匹配:P×Q 非方 → 通信拖累
□ 单次跑分:没跑最优参数(要多轮扫描)
□ 只报 HPL 不报 HPCG:掩盖访存短板
□ 作弊式调优:改基准代码/只测理论
□ 忽略能耗:跑分前要说明功率(Green500 口径)

正确的跑分姿势:

□ N 撑满内存、多次扫描最优参数
□ 同时报告 HPL + HPCG + 应用基准
□ 记录配置(版本/编译器/BLAS)
□ 可复现:公开输入与脚本
□ 报告效率(实测/峰值)而非裸数值

记忆:跑分陷阱 = 「小 N 虚高、网格乱设、只跑一次、只报 HPL」——规范跑分:满内存、多扫描、双基准、可复现、报效率。


8. 基准测试如何指导选型与调优

选型:不同负载对应不同基准:

□ 纯计算密集(稠密求解)→ 看 HPL + BLAS 优化
□ 访存密集(稀疏/网格/CFD)→ 看 HPCG + STREAM
□ 通信密集(MPI 大作业)→ 看 OSU latency/bw + 网络
□ 机器学习/GPU → MLPerf / 训练吞吐
□ 综合 → 多种基准加权(真实应用 benchmark 最准)

调优:基准测试定位瓶颈:

□ HPL 上不去:先查 BLAS 库(MKL/OpenBLAS)与 NUMA
□ HPCG 上不去:访存/缓存/通信瓶颈
□ STREAM 带宽不足:内存通道/NUMA/页大小
□ 网络延迟高:跨节点 MPI 调优/网卡

真实应用基准最重要:

□ 自建「你的负载的迷你基准」(代表性输入)
□ 与 HPL/HPCG 对照,解释「为何我的负载达不到 HPL 效率」
□ 作为持续回归:每次架构/软件升级跑一遍

心法:选型看「负载匹配的基准」,调优用基准「分离瓶颈」——别只看 HPL 一个数字,真实应用基准才是最终裁判。


9. 一套跑 HPL 的完整流程

从零跑一次 HPL(以 CPU 集群为例):

# 1. 准备编译好的 HPL(链接 MKL/OpenBLAS)
module load intel-mkl mpich
# 下载编译 HPL(配置 Make.<arch>)

# 2. 编写 HPL.dat
#    N ≈ 内存×80% / 8 字节估算
#    P×Q 取进程网格(接近方阵)

# 3. 运行
mpirun -np 16 ./xhpl > hpl.out

# 4. 解析结果
grep "Gflops" hpl.out        # 找 Rmax
#    efficiency = Rmax / Peak

# 5. 参数扫描(可选:多组 N/NB 对比)
for nb in 192 256 384; do
  sed "s/^192$/$nb/" HPL.dat > HPL.dat.tmp
  mpirun -np 16 ./xhpl < HPL.dat.tmp | grep Gflops
done

关键步骤:

□ 编译器/BLAS 选对(MKL 通常最优)
□ N 与内存匹配(估算:N²×8 字节 ≈ 80% 可用内存)
□ 网格 P×Q ≈ 进程数且尽量方
□ 多次跑取最优,记录全部配置

落地:跑 HPL = 「MKL + 满内存 N + 方网格 + NB 扫描」——一条命令出 Rmax,配效率与 HPCG 一起报。


10. 速查表与一句话记忆

概念要点
峰值 FLOPS主频 × FMA × 向量宽 × 核数
效率实测 / 峰值
HPL稠密 LU 分解,TOP500 标尺
HPL 参数N、P×Q、NB
HPCG稀疏共轭梯度,访存密集
TOP500HPL Rmax 排名
Green500每瓦 FLOPS 排名
陷阱小 N / 单次 / 只报 HPL
选型按负载匹配基准
调优基准分离瓶颈

一句话记忆:HPL 测稠密算力天花板(TOP500 口径,靠 BLAS 与参数逼近峰值),HPCG 测真实稀疏应用的「手感」(访存密集、效率低);选型按负载匹配基准、调优用基准分离瓶颈、排名要懂「HPL 是纸面、HPCG 是现实、Green500 是能效」。


延伸阅读

  • /hpc-roofline-model/ — 性能模型与计算强度
  • /hpc-cuda-mpi-hybrid/ — 异构并行与 GPU 跑分
  • /hpc-parallel-algorithms/ — 并行算法与负载平衡
  • /hpc-memory-hierarchy/ — 内存层次与访存优化
  • /hpc-performance-profiling/ — 剖析方法学
  • [[hpc]] — 高性能计算专题

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「hpc」更多文章

  1. ARM 超算与专用加速器:A64FX 与 NVIDIA Grace
  2. HPC 与 AI 融合:超算跑大模型训练
  3. 绿色 HPC:能耗优化与功率封顶实战