大模型 | 一文让你彻底了解算力到底是如何计算出来的-(CPU和GPU)
阿里腾讯火山云服务商
2025年12月09日 17:37

好的,这是一份深入浅出、旨在让你彻底理解算力计算方法的详解。我们不仅会讲公式,更会剖析背后的原理和影响因素。

一、 核心概念:什么是“算力”?

在计算领域,尤其是AI和高性能计算中,“算力”通常指硬件(CPU/GPU)每秒钟能执行的浮点运算次数。其标准单位是:

FLOPS: 每秒浮点运算次数。

衍生单位:

MFLOPS(百万次,10^6)

GFLOPS(十亿次,10^9)

TFLOPS(万亿次,10^12)

PFLOPS(千万亿次,10^15)

核心点:“一次浮点运算”通常指一次加法或乘法操作(如 c = a + b 或 c = a * b)。而更复杂的运算(如乘加融合 a*b + c)可以拆解或计为多次基础运算。

二、 CPU算力计算方法

CPU是通用处理器,核心少但每个核心功能强大,擅长处理复杂、串行的逻辑任务。

1. 理论峰值算力估算

公式:

理论峰值算力 (FLOPS) = 核心数 × 每时钟周期指令数 × 每秒时钟周期数 × 每指令浮点运算数

我们分解一下这个公式:

核心数: CPU物理核心数量。例如,16核。

每时钟周期指令数 (IPC): 现代CPU通过SIMD(单指令多数据) 技术,一个指令可以处理多个数据。例如:

SSE: 一个128位寄存器,可同时处理4个单精度浮点数。

AVX/AVX2: 一个256位寄存器,可同时处理8个单精度浮点数或4个双精度浮点数。

AVX-512: 一个512位寄存器,可同时处理16个单精度浮点数或8个双精度浮点数。

这里的“每指令浮点运算数”就是SIMD宽度。

每秒时钟周期数: 即CPU的主频(GHz)。例如,3.0 GHz = 3×10^9 周期/秒。

每指令浮点运算数: 对于FMA(融合乘加)指令 d = a * b + c,它在一个时钟周期内完成了一次乘法和一次加法,因此可以计为2次浮点运算。如果没有FMA,乘加则需要两个独立指令。

计算示例:

假设一颗CPU:

核心数: 16核

支持AVX-512和FMA

主频: 3.0 GHz

计算其单精度浮点(FP32)峰值算力:

= 16核心 × (16 SIMD数据/指令) × (3.0×10^9 周期/秒) × (2 运算/周期/指令)

= 16 × 16 × 3.0×10^9 × 2

= 1536 GFLOPS = 1.536 TFLOPS

对于双精度浮点(FP64),AVX-512宽度减半(8个双精度数):

= 16 × 8 × 3.0×10^9 × 2

= 768 GFLOPS

2. 实际算力与影响因素

CPU的理论峰值在现实中几乎无法达到,因为它受到以下因素的严重制约:

内存墙: 计算速度远快于从内存读取数据的速度。如果数据无法及时供给CPU,计算单元就会闲置。

缓存命中率: 各级缓存(L1/L2/L3)的访问速度远快于内存。算法对缓存友好性至关重要。

指令依赖与分支预测: 复杂的控制流(if/else)会打断流水线,降低IPC。

操作系统开销: 上下文切换、系统调用等会占用计算资源。

因此,CPU的实际算力必须通过基准测试软件(如Linpack, SPECfp)来测量,其结果通常远低于理论峰值。

三、 GPU算力计算方法

GPU是专用并行处理器,拥有数千个精简核心(流处理器),专为高吞吐量的数据并行任务设计,是大模型训练的绝对主力。

1. 理论峰值算力估算(以NVIDIA GPU为例)

GPU的架构比CPU复杂得多,但计算逻辑相似。关键指标是 “流多处理器” 和 “Tensor Core”。

公式(以NVIDIA Ampere架构A100为例):

GPU峰值算力 (FLOPS) = SM数量 × 每个SM的运算单元数量 × 时钟频率 × 每周期的运算数

分解计算(以FP32为例):

NVIDIA A100 GPU参数:

SM数量: 108个

每个SM的FP32 CUDA核心数: 64个

加速频率: 1.41 GHz

FMA操作: 每个CUDA核心每个周期可执行一次FMA(计为2次浮点运算)。

计算其传统CUDA核心的FP32峰值算力:

= 108 SM × (64 核心/SM) × (1.41×10^9 周期/秒) × (2 运算/周期/核心)

= 108 × 64 × 1.41×10^9 × 2

≈ 19.5 TFLOPS

但这只是“基础算力”!GPU真正的算力爆发来自于Tensor Core。

2. Tensor Core带来的革命性算力提升

Tensor Core是专为矩阵乘加(D = A * B + C)设计的专用硬件单元,效率极高。

每个A100的SM包含4个第三代Tensor Core。

每个Tensor Core每个时钟周期可以完成一个 4x4x4 的矩阵运算(即 FP16/FP16 -> FP32 或 BF16/BF16 -> FP32 的矩阵乘加)。

计算其Tensor Core的FP16/BF16混合精度峰值算力:

每个4x4x4矩阵乘加运算包含 4×4×4 = 64 次乘法和 64 次加法。

由于是FMA融合操作,每个乘加计为2次浮点运算,所以一次4x4x4运算相当于 64 × 2 = 128 次浮点运算。

公式:

= 108 SM × (4 Tensor Core/SM) × (1.41×10^9 周期/秒) × (128 运算/周期/Tensor Core)

= 108 × 4 × 1.41×10^9 × 128

≈ 78 TFLOPS (FP16/BF16, 输入输出为FP32)

对于更激进的INT8精度,Tensor Core能力更强,A100的峰值算力可达 312 TOPS(注意这里单位是OPS,针对整数运算)。

3. 实际算力与影响因素

GPU的实际算力同样受限于:

显存带宽: 这是最重要的瓶颈。如果数据无法从显存快速送到SM,算力再高也无用。计算公式:显存带宽 = 位宽 × 有效频率。例如A100的HBM2e显存带宽高达2TB/s。

计算强度: 即“每从内存读取1字节数据,能进行多少次浮点运算”。计算强度低的算子(如逐元素加法)是“内存瓶颈型”,高强度算子(如大矩阵乘法)是“计算瓶颈型”,才能跑满GPU算力。

软件与框架优化: CUDA核函数编写质量、cuDNN/cuBLAS等库的调用、模型并行/数据并行策略,都极大影响实际性能。

四、 算力计算的本质与实践总结

方面 CPU GPU

核心目标 低延迟,强通用性 高吞吐,强并行性

算力核心 复杂核心 + SIMD单元 海量流处理器 + Tensor Core

算力规模 GFLOPS ~ 数TFLOPS 数十 ~ 数百TFLOPS (AI训练)

关键瓶颈 内存延迟、缓存、分支预测 显存带宽、线程调度

算力获取 1. 理论值:查参数,用公式估算。

2. 实际值:运行Linpack、Geekbench等基准测试。 1. 理论值:官方白皮书给出最权威。

2. 实际值:运行MLPerf、使用nvidia-smi看GPU-Util,或自己写矩阵乘法测试。

计算公式核心 核心数 × SIMD宽度 × 频率 × FMA因子 SM数 × (CUDA核心或Tensor Core数) × 频率 × 每周期运算数

核心要义

算力有理论与实际之分:宣传的算力(如A100的312 TOPS)通常是特定条件下的理论峰值,是硬件天花板。

精度决定算力:算力数值与数据类型强相关。INT8 > FP16/BF16 > FP32 > FP64。大模型训练常用FP16/BF16混合精度,以兼顾速度和稳定性。

内存带宽是关键:没有足够“宽”的数据通道,强大的计算引擎就会“饿死”。评价硬件时,必须将峰值算力与内存带宽结合看。

软件定义算力:最终能发挥出多少理论算力,取决于算法、编译器、编程模型和系统架构的协同优化。一个优秀的AI框架(如PyTorch)和算子库,是解锁硬件潜力的钥匙。

希望这篇详解能帮助你从芯片架构层面,而不仅仅是数字层面,理解算力究竟是如何被计算和评估的