CPU 理论浮点峰值 Rpeak 计算实战
摘要:理论浮点峰值(Rpeak)是任何 HPL 验收、算力招标和 TOP500 申报都绕不开的第一个数字。本文不讲公式推导,直接用真实项目的机型参数,三步算出一个集群的 Rpeak,并给出常用的速算表和验证工具。
1. 一句话定义
Rpeak(理论浮点峰值)= 每个 CPU 内核每秒最多能做的双精度浮点运算次数 × 内核总数。
单位习惯用 GFlops(每秒 10 亿次浮点运算),大规模集群用 TFlops / PFlops。
2. 核心公式
对 Intel Skylake 及更新架构(支持 AVX-512),每个内核每时钟周期可完成:
- 16 次乘加运算(FMA)= 32 次双精度浮点运算
所以单节点的理论峰值为:
整集群再乘以节点数:
其中 32 是 AVX-512 的"每周期双精度 FLOP 数":1 次 FMA 指令 = 1 次乘 + 1 次加,ZMM 寄存器 512 位可并行 8 个双精度数,8 × 2(乘加)= 16;再乘 2(FMA 单元双流水)= 32。
架构对照速查
| 架构 | 指令集 | 每周期双精度 FLOP 数 |
|---|---|---|
| Sandy Bridge 及更早 | AVX | 16 |
| Haswell / Broadwell | AVX2 | 16 |
| Skylake 及更新(Xeon Scalable) | AVX-512 | 32 |
| Ice Lake / Sapphire Rapids | AVX-512 | 32(FP32 为 64,BF16 更高) |
| AMD EPYC Zen4 | AVX-512 | 32 |
3. 实战算例(真实项目机型)
3.1 算例一:单节点,104 核 @ 2.0 GHz
这是某 HPL 交付项目中 GPU 计算节点的 CPU 规格(双路,单路 52 核,超线程关闭):
约 6.66 TFlops / 节点。
3.2 算例二:单节点,56 核 @ 2.7 GHz
另一类纯 CPU 节点(双路,单路 28 核,超线程开启不影响此计算):
约 4.84 TFlops / 节点。
3.3 算例三:80 节点整集群
沿用算例一的节点规格:
约 532.5 TFlops,即 0.53 PFlops。
3.4 算例四:36 节点
约 239.6 TFlops。
4. 核数与主频怎么取?三个坑
4.1 核数用"物理核 × 插槽数",不是逻辑核
超线程(HT)开启时,nproc 或 lscpu 会显示逻辑核(104 核机可能显示 208)。HPL 按物理核跑满即可,Rpeak 计算用物理核数:
lscpu | grep -E "^(CPU\(s\)|Core|Socket|Model name)"
# 输出示例
# CPU(s): 208 ← 逻辑核,含超线程
# Core(s) per socket: 52
# Socket(s): 2 ← 物理核 = 52 × 2 = 1044.2 主频用标称基频,不是睿频
- 标称基频:2.0 GHz(计算 Rpeak 用它)
- 实测运行中:turbostat 常显示 2.1 GHz 附近(睿频、100% busy)
cpupower frequency-info | grep -E "hardware limits|current CPU frequency"
# hardware limits: 800 MHz - 3.80 GHz
# current CPU frequency: 2.12 GHz (asserted by call to hardware)交付验收时以标称基频算 Rpeak,双方口径一致;实测高于基频属于正常发挥。
4.3 主频 × 核心数要"逐核对",别用 lscpu 的 "CPU max MHz"
lscpu 里的 CPU max MHz 是睿频上限(可能 3.8 GHz),不是基频。计算前用 lscpu 确认 Model name 对应的官方基频。
5. 速算表(32 FLOP/周期基准)
下面这张表可以直接查常见组合的单节点理论峰值(单位 GFlops):
| 主频 \ 核心数 | 56 核 | 64 核 | 96 核 | 104 核 |
|---|---|---|---|---|
| 1.8 GHz | 3225.6 | 3686.4 | 5529.6 | 5990.4 |
| 2.0 GHz | 3584.0 | 4096.0 | 6144.0 | 6656.0 |
| 2.3 GHz | 4121.6 | 4710.4 | 7065.6 | 7654.4 |
| 2.7 GHz | 4838.4 | 5529.6 | 8294.4 | 8985.6 |
| 3.0 GHz | 5376.0 | 6144.0 | 9216.0 | 9984.0 |
6. 验证与工具
6.1 N_calculator 计算器
Intel Linpack 配套的 N_calculator.calculator 交互式工具可直接输出 Rpeak 与各效率档位的 GFlops:
How Many Nodes : 1
How much memory on per node (GB) : 1536
How many cores per node : 104
What is your CPU speed per core (Ghz) : 2.0
--------------------------------------------------
The System's theoretical performance (Rpeak) in Gflops is <<<< 6656.0 Gflops >>>>
*** 80% --> 5324.80 *** 90% --> 5990.40 ***
*** 100%--> 6656.0 ***6.2 一行手算核对
python3 -c "print(32 * 104 * 2.0, 'GFlops per node')"
# 6656.0 GFlops per node7. 结论
- Rpeak 是"纸面数字",只依赖主频、核心数、每周期 FLOP 数、节点数四个参数。
- 同代 x86 服务器按 32 FLOP/周期(AVX-512 双精度)估算即可;老架构按 16。
- 理论峰值 ≠ 实测值。下一篇文章给出"从理论到实测"的预估方法:单节点 HPL 效率可做到 93%+,整集群扩展后通常在 78%~85%。见 HPL 性能预估:从理论到实测。