硬件加速基础:CPU、GPU、FPGA、ASIC 的架构对比与选型
做实时 AI 加速,选对硬件等于成功了一半。
我见过太多团队,算法调得飞起,一上板子就卡成幻灯片。为什么?硬件没选对。CPU、GPU、FPGA、ASIC,这四种芯片各有脾气。今天咱们就掰开揉碎,看看它们到底谁适合干什么。
先看一张全景图
下面这张图,是我自己总结的硬件加速四象限。你一看就明白。
这张图我画了很多遍。每次给团队讲选型,我都先亮这张图。四个角,四种哲学。
CPU:老大哥,但不是干粗活的料
CPU 是冯·诺依曼架构的经典代表。它擅长的是「控制」和「串行计算」。你想想看,操作系统调度、网络协议栈、文件读写,这些活儿离了 CPU 不行。
但做实时 AI 推理呢?CPU 就吃力了。一个时钟周期只能处理几条指令,碰上卷积、矩阵乘法这种大规模并行计算,CPU 得排队慢慢来。
CPU 在 AI 加速中的定位:
- 做控制面:管理数据流、触发推理任务
- 做预处理:图像缩放、格式转换、数据打包
- 做后处理:非极大值抑制(NMS)、结果解析
- 跑轻量模型:MobileNet、TinyML 场景
我记得有一次做智能摄像头项目,团队一开始用 CPU 跑 YOLOv3。结果呢?1080P 图像一帧要 2 秒。客户直接说「这哪是实时,这是幻灯片」。后来我们把推理挪到 GPU 上,CPU 只负责取流和显示,延迟降到 30ms。
我的建议:别让 CPU 干卷积。让它管调度、管数据搬运。这才是它的强项。
GPU:并行怪兽,吞吐为王
GPU 天生为并行而生。一个 GPU 有几千个 CUDA 核心,可以同时处理几千个像素、几千个神经元。说白了,它就是为矩阵运算量身定做的。
做深度学习训练,GPU 是王者。推理场景呢?如果对延迟不敏感、批量大,GPU 也香。但实时系统有个痛点——延迟抖动。
我曾经踩过的坑:用 GPU 做实时视频流推理。帧率确实高,但偶尔会卡一下。查了半天,发现是 GPU 驱动在做上下文切换。实时系统里,这种「偶尔卡一下」是不能接受的。后来我加了 GPU 独占模式和锁页内存,才稳住。
GPU 的另一个问题是功耗。一块 RTX 3090 满载 350W,数据中心里散热成本比卡本身还贵。所以边缘端很少用 GPU,除非你不在乎电费。
FPGA:可重构的硬流水线
FPGA 是我个人最喜欢的加速器件。为什么?因为它「软硬通吃」。
FPGA 内部是一堆逻辑单元(LUT)、触发器(FF)、DSP 块和 BRAM。你可以把它们编程成任意数字电路。想做一个 8 级流水线的卷积器?写几行 Verilog,烧进去,它就变成了硬件。
FPGA 的核心优势:
- 硬实时:没有操作系统调度,延迟确定到纳秒级
- 流水线:数据流式处理,一拍接一拍,吞吐极高
- 可重构:算法变了?重新烧 bitstream,不用换板子
- 低功耗:同等算力下,功耗只有 GPU 的 1/5 到 1/10
我做过一个项目:雷达信号处理。要求延迟 < 1ms,帧率 1000fps。GPU 做不到,CPU 更没戏。最后用 Xilinx Zynq FPGA,把 FFT、CFAR 检测、聚类全部做成硬件流水线。延迟 0.3ms,功耗才 8W。
但 FPGA 也有门槛:开发周期长。写 RTL 比写 Python 慢多了。好在现在有 HLS(高层次综合),可以用 C/C++ 写算法,自动生成硬件。我建议新手从 HLS 入手,别一上来就撸 Verilog。
ASIC:极致能效,但只干一件事
ASIC 是专用集成电路。说白了,就是为某个算法量身定做的芯片。比如 Google 的 TPU、华为的昇腾、寒武纪的 MLU。
ASIC 的能效比是最高的。同样做一次矩阵乘法,ASIC 的功耗可能只有 GPU 的 1/10。为什么?因为 ASIC 没有多余的控制逻辑,没有指令取指、译码的开销,数据通路是固定的。
ASIC 的适用场景:
- 算法已经稳定,不再频繁迭代
- 出货量巨大(百万级),摊薄 NRE 成本
- 对功耗和面积有极致要求(手机、IoT、汽车)
但 ASIC 有个致命缺点:不灵活。算法一改,芯片就废了。我见过一家公司,花 2000 万流片做 AI 芯片,结果一年后 Transformer 火了,CNN 芯片直接没人要。嗯,这就是 ASIC 的风险。
选型决策表
下面这张表,是我做项目选型时必查的。你直接拿去用。
| 维度 | CPU | GPU | FPGA | ASIC |
|---|---|---|---|---|
| 算力密度 | 低 | 高 | 中高 | 极高 |
| 延迟确定性 | 中(受 OS 影响) | 低(抖动大) | 极高(纳秒级) | 极高 |
| 功耗效率 | 中 | 低 | 高 | 极高 |
| 灵活性 | 极高 | 高 | 高(可重构) | 低(固定) |
| 开发周期 | 短(天级) | 中(周级) | 长(月级) | 极长(年级) |
| 单位算力成本 | 高 | 中 | 中高 | 低(量产时) |
| 典型场景 | 控制、调度、预处理 | 训练、批量推理 | 实时流水线、信号处理 | 量产终端、手机、汽车 |
我的选型心法
做了十几年加速系统,我总结了一个「三问选型法」:
- 延迟要求多硬? 如果必须 < 1ms 且确定,FPGA 或 ASIC。如果 10ms 以内,GPU 可以。如果 100ms 都行,CPU 凑合。
- 算法变不变? 还在频繁改?别碰 ASIC。用 FPGA 或 GPU。算法冻结了?考虑 ASIC。
- 量有多大? 一年卖几百台?用 FPGA 或 GPU。一年百万台?ASIC 摊薄成本后最划算。
我曾经犯过的错:有个项目,算法还没定型,我就拍板用 ASIC。结果流片回来,算法改了,芯片废了。200 万打水漂。从那以后,我坚持「算法先冻结,再谈 ASIC」。
小结
没有最好的芯片,只有最合适的芯片。CPU 做控制,GPU 做吞吐,FPGA 做实时,ASIC 做极致。选型的关键,是搞清楚你的系统到底要什么。