Skip to content

CPU Theoretical Peak (Rpeak) Calculation in Practice ​

流程示意

Abstract: Rpeak is the first number every HPL acceptance, capacity bid, and TOP500 submission needs. No theory dump here — three steps, real machine specs, and a ready-to-use lookup table.

1. Definition in One Line ​

Rpeak (theoretical peak) = max double-precision FLOPs per second per core × total physical cores.

Units: GFlops (10⁹ FLOP/s); large clusters use TFlops / PFlops.

2. Core Formula ​

On Intel Skylake and newer (AVX-512), each core completes 16 FMA = 32 double-precision FLOPs per clock cycle:

Rpeaknode=Clock (GHz)×Cores×32(GFlops) \text{Rpeak}_{\text{node}} = \text{Clock (GHz)} \times \text{Cores} \times 32 \quad (\text{GFlops})

Full cluster:

Rpeakcluster=Clock (GHz)×Cores×32×Nodes(GFlops) \text{Rpeak}_{\text{cluster}} = \text{Clock (GHz)} \times \text{Cores} \times 32 \times \text{Nodes} \quad (\text{GFlops})

Why 32: one FMA instruction = 1 multiply + 1 add; a 512-bit ZMM register holds 8 doubles; 8 × 2 = 16 per FMA unit; × 2 FMA pipelines = 32.

Architecture quick reference

ArchitectureISADP FLOPs / cycle
Sandy Bridge and earlierAVX16
Haswell / BroadwellAVX216
Skylake+ (Xeon Scalable)AVX-51232
Ice Lake / Sapphire RapidsAVX-51232
AMD EPYC Zen4AVX-51232

3. Worked Examples (Real Production Specs) ​

3.1 Single node, 104 cores @ 2.0 GHz ​

Dual-socket, 52 physical cores per socket, hyper-threading off:

Rpeak=32×104×2.0=6656 GFlops≈6.66 TFlops \text{Rpeak} = 32 \times 104 \times 2.0 = 6656 \text{ GFlops} \approx 6.66 \text{ TFlops}

3.2 Single node, 56 cores @ 2.7 GHz ​

Rpeak=32×56×2.7=4838.4 GFlops≈4.84 TFlops \text{Rpeak} = 32 \times 56 \times 2.7 = 4838.4 \text{ GFlops} \approx 4.84 \text{ TFlops}

3.3 80-node cluster (spec of 3.1) ​

Rpeak=6656×80=532480 GFlops≈532.5 TFlops \text{Rpeak} = 6656 \times 80 = 532480 \text{ GFlops} \approx 532.5 \text{ TFlops}

3.4 36-node cluster ​

Rpeak=6656×36=239616 GFlops≈239.6 TFlops \text{Rpeak} = 6656 \times 36 = 239616 \text{ GFlops} \approx 239.6 \text{ TFlops}

4. Three Traps: Cores and Clock ​

4.1 Use physical cores × sockets, not logical cores ​

With hyper-threading on, lscpu shows 208 logical CPUs for a 104-core box. HPL runs physical cores; use physical for Rpeak:

bash
lscpu | grep -E "^(CPU\(s\)|Core|Socket|Model name)"
# CPU(s):                208      <- logical, includes HT
# Core(s) per socket:    52
# Socket(s):             2        <- physical = 52 × 2 = 104

4.2 Use the nominal base clock, not boost ​

  • Base 2.0 GHz: use for Rpeak
  • Turbostat during a run typically shows ~2.1 GHz (boost, 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)

Acceptance uses the nominal base clock so both sides agree; measured results above base are normal headroom.

4.3 Don't use lscpu "CPU max MHz" ​

That is the turbo ceiling (e.g., 3.8 GHz), not the base clock. Confirm the vendor base frequency for the Model name.

5. Lookup Table (32 FLOP/cycle) ​

Per-node Rpeak in GFlops:

Clock \ Cores566496104
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. Verification ​

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

The Intel Linpack N_calculator.calculator also prints Rpeak plus an efficiency table:

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     ***

7. Takeaway ​

AI-HPC Expert · Contact: openaihpc@gmail.com