Skip to content

CPU 理论浮点峰值 Rpeak 计算实战 ​

流程示意

摘要:理论浮点峰值(Rpeak)是任何 HPL 验收、算力招标和 TOP500 申报都绕不开的第一个数字。本文不讲公式推导,直接用真实项目的机型参数,三步算出一个集群的 Rpeak,并给出常用的速算表和验证工具。

1. 一句话定义 ​

Rpeak(理论浮点峰值)= 每个 CPU 内核每秒最多能做的双精度浮点运算次数 × 内核总数。

单位习惯用 GFlops(每秒 10 亿次浮点运算),大规模集群用 TFlops / PFlops。

2. 核心公式 ​

对 Intel Skylake 及更新架构(支持 AVX-512),每个内核每时钟周期可完成:

  • 16 次乘加运算(FMA)= 32 次双精度浮点运算

所以单节点的理论峰值为:

Rpeak节点=主频 (GHz)×核心数×32(GFlops) \text{Rpeak}_{\text{节点}} = \text{主频 (GHz)} \times \text{核心数} \times 32 \quad (\text{GFlops})

整集群再乘以节点数:

Rpeak集群=主频 (GHz)×核心数×32×节点数(GFlops) \text{Rpeak}_{\text{集群}} = \text{主频 (GHz)} \times \text{核心数} \times 32 \times \text{节点数} \quad (\text{GFlops})

其中 32 是 AVX-512 的"每周期双精度 FLOP 数":1 次 FMA 指令 = 1 次乘 + 1 次加,ZMM 寄存器 512 位可并行 8 个双精度数,8 × 2(乘加)= 16;再乘 2(FMA 单元双流水)= 32。

架构对照速查

架构指令集每周期双精度 FLOP 数
Sandy Bridge 及更早AVX16
Haswell / BroadwellAVX216
Skylake 及更新(Xeon Scalable)AVX-51232
Ice Lake / Sapphire RapidsAVX-51232(FP32 为 64,BF16 更高)
AMD EPYC Zen4AVX-51232

3. 实战算例(真实项目机型) ​

3.1 算例一:单节点,104 核 @ 2.0 GHz ​

这是某 HPL 交付项目中 GPU 计算节点的 CPU 规格(双路,单路 52 核,超线程关闭):

Rpeak=32×104×2.0=6656 GFlops \text{Rpeak} = 32 \times 104 \times 2.0 = 6656 \text{ GFlops}

约 6.66 TFlops / 节点。

3.2 算例二:单节点,56 核 @ 2.7 GHz ​

另一类纯 CPU 节点(双路,单路 28 核,超线程开启不影响此计算):

Rpeak=32×56×2.7=4838.4 GFlops \text{Rpeak} = 32 \times 56 \times 2.7 = 4838.4 \text{ GFlops}

约 4.84 TFlops / 节点。

3.3 算例三:80 节点整集群 ​

沿用算例一的节点规格:

Rpeak=6656×80=532480 GFlops \text{Rpeak} = 6656 \times 80 = 532480 \text{ GFlops}

约 532.5 TFlops,即 0.53 PFlops。

3.4 算例四:36 节点 ​

Rpeak=6656×36=239616 GFlops \text{Rpeak} = 6656 \times 36 = 239616 \text{ GFlops}

约 239.6 TFlops。

4. 核数与主频怎么取?三个坑 ​

4.1 核数用"物理核 × 插槽数",不是逻辑核 ​

超线程(HT)开启时,nproc 或 lscpu 会显示逻辑核(104 核机可能显示 208)。HPL 按物理核跑满即可,Rpeak 计算用物理核数:

bash
lscpu | grep -E "^(CPU\(s\)|Core|Socket|Model name)"
# 输出示例
# CPU(s):                208        ← 逻辑核,含超线程
# Core(s) per socket:    52
# Socket(s):             2          ← 物理核 = 52 × 2 = 104

4.2 主频用标称基频,不是睿频 ​

  • 标称基频:2.0 GHz(计算 Rpeak 用它)
  • 实测运行中:turbostat 常显示 2.1 GHz 附近(睿频、100% busy)
bash
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 GHz3225.63686.45529.65990.4
2.0 GHz3584.04096.06144.06656.0
2.3 GHz4121.64710.47065.67654.4
2.7 GHz4838.45529.68294.48985.6
3.0 GHz5376.06144.09216.09984.0

6. 验证与工具 ​

6.1 N_calculator 计算器 ​

Intel Linpack 配套的 N_calculator.calculator 交互式工具可直接输出 Rpeak 与各效率档位的 GFlops:

text
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 一行手算核对 ​

bash
python3 -c "print(32 * 104 * 2.0, 'GFlops per node')"
# 6656.0 GFlops per node

7. 结论 ​

  • Rpeak 是"纸面数字",只依赖主频、核心数、每周期 FLOP 数、节点数四个参数。
  • 同代 x86 服务器按 32 FLOP/周期(AVX-512 双精度)估算即可;老架构按 16。
  • 理论峰值 ≠ 实测值。下一篇文章给出"从理论到实测"的预估方法:单节点 HPL 效率可做到 93%+,整集群扩展后通常在 78%~85%。见 HPL 性能预估:从理论到实测。

AI-HPC 智算超算专家 · Contact: openaihpc@gmail.com