计算机芯片内部有两种根本不同的运算电路:
Arithmetic Logic Unit(算术逻辑单元),负责整数加减乘除、位运算、比较等。
输入 A (32位整数) ─┐
├─→ [加法器/移位器] ─→ 输出 (32位整数)
输入 B (32位整数) ─┘
Floating Point Unit(浮点运算单元),负责 IEEE 754 浮点数的加减乘除。
输入 A (float32) ─→ [拆包: 符号/指数/尾数]
输入 B (float32) ─→ [拆包: 符号/指数/尾数]
↓
[比较指数] → [移位对齐] → [尾数运算] → [规格化] → [舍入] → [打包]
↓
输出 C (float32)
| 对比项 | ALU(整数) | FPU(浮点) |
|---|---|---|
| 晶体管数 | ~1000 | ~10000 |
| 电路复杂度 | 低 | 高 |
| 同面积可放数量 | 多 | 少 |
| 单步延迟 | 低 | 高 |
| 功耗 | 低 | 高 |
结论:在有限的芯片面积上,能放几十倍数量的 ALU 但只能放少量 FPU。这就是不同处理器架构差异的根源。
它们的核心区别是:芯片面积如何在"控制逻辑"和"计算单元"之间分配。
┌─────────────────────────────────────┐
│ 控制逻辑(很强) 缓存(很大) │
│ ┌────┐ ┌────┐ ┌────┐ ┌────┐ │
│ │ALU │ │ALU │ │FPU │ │FPU │ ×4~64核│
│ └────┘ └────┘ └────┘ └────┘ │
└─────────────────────────────────────┘
适用场景:操作系统、Web 服务器、数据库、编译器等一切通用软件。
┌─────────────────────────────────────┐
│ 控制逻辑(简单) │
│ ┌───┐┌───┐┌───┐┌───┐ │
│ │FPU││FPU││FPU││FPU│ ×1000~10000 │
│ └───┘└───┘└───┘└───┘ │
│ ┌───┐┌───┐┌───┐┌───┐ │
│ │ALU││ALU││ALU││ALU│ (较少) │
│ └───┘└───┘└───┘└───┘ │
└─────────────────────────────────────┘
适用场景:图形渲染、深度学习训练、科学仿真、密码学暴力搜索。
┌─────────────────────────────────────┐
│ 控制逻辑(极简) │
│ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ │
│ │8b││8b││8b││8b││8b││8b│ ×10000+ │
│ └──┘└──┘└──┘└──┘└──┘└──┘ │
│ int8/int4 乘加阵列(MAC Array) │
└─────────────────────────────────────┘
C += A × B(矩阵乘法的核心操作)适用场景:手机 AI(人脸解锁、语音识别)、边缘推理(摄像头、机器人)、端侧大模型。
NPU vs TPU:NPU(Neural Processing Unit)是通用叫法,各厂商都用;TPU(Tensor Processing Unit)是 Google 的专属名称,原理相同。
┌─────────────────────────────────────┐
│ 可编程逻辑块 × 大量 │
│ ┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ │
│ │CL││CL││CL││CL││CL││CL│ │
│ └──┘└──┘└──┘└──┘└──┘└──┘ │
│ (出厂后由开发者定义电路功能) │
└─────────────────────────────────────┘
适用场景:高频交易、5G 基站、卫星信号处理、定制化 AI 加速。
| 单元 | 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 倍!
| 单元 | int8 算力 | float16 算力 | float32 算力 |
|---|---|---|---|
| CUDA Cores | — | — | 60 TFLOPS |
| Tensor Cores | 3958 TOPS | 1979 TFLOPS | — |
Tensor Core 是 NVIDIA 在 GPU 中嵌入的"小 NPU",专门加速矩阵乘加,int8 算力比 CUDA Cores 的 float32 高 66 倍。
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 | 每秒万亿次运算 |