计算单元:ALU、FPU 与 CPU/GPU/NPU 架构差异

两种基础运算单元

计算机芯片内部有两种根本不同的运算电路:

ALU — 整数运算单元

Arithmetic Logic Unit(算术逻辑单元),负责整数加减乘除、位运算、比较等。

输入 A (32位整数) ─┐
                   ├─→ [加法器/移位器] ─→ 输出 (32位整数)
输入 B (32位整数) ─┘

FPU — 浮点运算单元

Floating Point Unit(浮点运算单元),负责 IEEE 754 浮点数的加减乘除。

输入 A (float32) ─→ [拆包: 符号/指数/尾数]
输入 B (float32) ─→ [拆包: 符号/指数/尾数]
    ↓
  [比较指数] → [移位对齐] → [尾数运算] → [规格化] → [舍入] → [打包]
    ↓
输出 C (float32)

根本差异

对比项 ALU(整数) FPU(浮点)
晶体管数 ~1000 ~10000
电路复杂度 低 高
同面积可放数量 多 少
单步延迟 低 高
功耗 低 高

结论:在有限的芯片面积上,能放几十倍数量的 ALU 但只能放少量 FPU。这就是不同处理器架构差异的根源。

四种处理器架构

它们的核心区别是:芯片面积如何在"控制逻辑"和"计算单元"之间分配。

CPU — 全能选手

┌─────────────────────────────────────┐
│  控制逻辑(很强)    缓存(很大)       │
│  ┌────┐ ┌────┐ ┌────┐ ┌────┐        │
│  │ALU │ │ALU │ │FPU │ │FPU │  ×4~64核│
│  └────┘ └────┘ └────┘ └────┘        │
└─────────────────────────────────────┘

适用场景:操作系统、Web 服务器、数据库、编译器等一切通用软件。

GPU — 浮点暴力并行

┌─────────────────────────────────────┐
│  控制逻辑(简单)                       │
│  ┌───┐┌───┐┌───┐┌───┐               │
│  │FPU││FPU││FPU││FPU│  ×1000~10000  │
│  └───┘└───┘└───┘└───┘               │
│  ┌───┐┌───┐┌───┐┌───┐               │
│  │ALU││ALU││ALU││ALU│  (较少)       │
│  └───┘└───┘└───┘└───┘               │
└─────────────────────────────────────┘

适用场景:图形渲染、深度学习训练、科学仿真、密码学暴力搜索。

NPU / TPU — 为 AI 推理而生的整数怪兽

┌─────────────────────────────────────┐
│  控制逻辑(极简)                       │
│  ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐           │
│  │8b││8b││8b││8b││8b││8b│ ×10000+   │
│  └──┘└──┘└──┘└──┘└──┘└──┘           │
│  int8/int4 乘加阵列(MAC Array)       │
└─────────────────────────────────────┘

适用场景:手机 AI(人脸解锁、语音识别)、边缘推理(摄像头、机器人)、端侧大模型。

NPU vs TPU:NPU(Neural Processing Unit)是通用叫法,各厂商都用;TPU(Tensor Processing Unit)是 Google 的专属名称,原理相同。

FPGA — 可编程硬件

┌─────────────────────────────────────┐
│  可编程逻辑块 × 大量                    │
│  ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐          │
│  │CL││CL││CL││CL││CL││CL│          │
│  └──┘└──┘└──┘└──┘└──┘└──┘          │
│  (出厂后由开发者定义电路功能)           │
└─────────────────────────────────────┘

适用场景:高频交易、5G 基站、卫星信号处理、定制化 AI 加速。

算力对比

以 RK3588(香橙派)为例

单元 int8 算力 float16 算力 float32 算力
CPU(4×A76 + 4×A55) ~30 GOPS ~15 GFLOPS ~30 GFLOPS
GPU(Mali-G610) 不支持 ~500 GFLOPS ~1 TFLOPS
NPU(6 TOPS) 6 TOPS ~3 TFLOPS 不支持

1 GOPS / GFLOPS = 10 亿次/秒,1 TOPS / TFLOPS = 1 万亿次/秒

NPU 的 int8 算力是 CPU 的 200 倍!

以 NVIDIA H100(数据中心 GPU)为例

单元 int8 算力 float16 算力 float32 算力
CUDA Cores — — 60 TFLOPS
Tensor Cores 3958 TOPS 1979 TFLOPS —

Tensor Core 是 NVIDIA 在 GPU 中嵌入的"小 NPU",专门加速矩阵乘加,int8 算力比 CUDA Cores 的 float32 高 66 倍。

为什么不能全都用 NPU?

NPU 只会做一件事:固定形状的矩阵乘加。它不能:

所以需要多种处理器协同工作:

┌─────────────────────────────────────────────┐
│              现代 SoC(片上系统)               │
│                                              │
│  CPU(控制一切)                               │
│    ├── GPU(图形渲染 + 浮点并行)                │
│    ├── NPU(AI 推理加速)                      │
│    ├── DSP(音频/信号处理)                     │
│    └── ISP(摄像头图像处理)                     │
└─────────────────────────────────────────────┘

苹果的 M 系列、高通骁龙、瑞芯微 RK3588 都是这种异构 SoC 架构。

与模型量化的关系

理解了计算单元的差异,就能理解模型量化的工程决策:

训练(GPU):用 float32/float16,GPU 的 FPU 多,浮点快
    ↓
推理(NPU):量化到 int8,NPU 的 ALU 多,整数快
    ↓
部署(CPU):如果没 NPU,用 float32 在 CPU 上跑也不差

量化的本质:把计算从"用少量 FPU 做的浮点运算"转换为"用大量 ALU 做的整数运算",从而在 NPU 等硬件上获得数倍的推理加速。代价是精度损失——但神经网络对这种损失有天然的鲁棒性。

术语速查

缩写 英文全称 中文
ALU Arithmetic Logic Unit 算术逻辑单元(整数运算)
FPU Floating Point Unit 浮点运算单元
MAC Multiply-Accumulate 乘加运算单元
CPU Central Processing Unit 中央处理器
GPU Graphics Processing Unit 图形处理器
NPU Neural Processing Unit 神经网络处理器
TPU Tensor Processing Unit 张量处理器(Google 专属)
DSP Digital Signal Processor 数字信号处理器
ISP Image Signal Processor 图像信号处理器
FPGA Field-Programmable Gate Array 现场可编程门阵列
SoC System on Chip 片上系统
SIMT Single Instruction, Multiple Threads 单指令多线程
OPS Operations Per Second 每秒运算次数(整数)
FLOPS Floating Point Operations Per Second 每秒浮点运算次数
TOPS Tera Operations Per Second 每秒万亿次运算

相关笔记