1、GPU的前世今生:从图形卡到通用计算处理器
大家好,我是你们的老朋友。今天咱们聊聊GPU的“发家史”。
很多人觉得GPU就是用来打游戏的。其实不然。我入行那会儿,GPU还叫“图形加速卡”。说白了,就是个专门画图的硬件。但你看现在,它已经成了AI训练的“心脏”。这中间到底发生了什么?
1.1 萌芽期:纯图形加速卡(1990年代)
90年代初,电脑要显示个3D画面,全靠CPU硬算。那画面,卡得跟幻灯片似的。我记得当时玩《毁灭战士》,帧率低得让人想砸键盘。
后来,3dfx公司搞出了Voodoo显卡。这玩意儿只干一件事:加速3D图形。它把“光栅化”、“纹理映射”这些活儿从CPU手里抢了过来。效果立竿见影——游戏流畅了。
这个阶段的GPU,结构很简单:
- 固定功能管线:每个单元干固定的活儿,不能编程。
- 顶点处理:算三角形的顶点位置。
- 像素填充:往屏幕上填颜色。
说白了,就是个“画图专用芯片”。你没法让它干别的。
1.2 可编程时代:从固定到灵活(2000年代)
转折点出现在2001年。NVIDIA发布了GeForce 3。它引入了“可编程着色器”。
什么意思呢?以前你只能调调参数,现在你可以写一小段程序,控制顶点和像素怎么算。这就像从“只能点菜”变成了“可以自己写菜谱”。
我个人习惯把这段历史分成两步:
- 分离式着色器:顶点着色器和像素着色器是分开的硬件单元。你写代码得分别写。
- 统一着色器:2006年,NVIDIA的G80架构(GeForce 8800 GTX)搞了个大新闻——所有着色器统一了。同一个计算单元,既能算顶点,也能算像素。
嗯,这里要注意:统一着色器是GPU走向通用计算的关键一步。为什么?因为硬件不再“挑活儿”了。你给它什么程序,它就算什么。
1.3 通用计算革命:CUDA与GPGPU(2007年至今)
2007年,NVIDIA推出了CUDA。这玩意儿彻底改变了GPU的命运。
CUDA允许你用C语言直接给GPU编程。不用再伪装成图形任务了。你可以把GPU当成一个“超大规模并行计算器”来用。
我在项目中遇到过一件事:有个同事用CPU算一个矩阵乘法,要跑3天。后来改成CUDA,3小时搞定。他当时就愣住了,问我:“这玩意儿怎么这么快?”
原因很简单:
- CPU:几个大核,每个核很聪明,擅长复杂逻辑。
- GPU:几千个小核,每个核很笨,但人多力量大。
你想想看,矩阵乘法这种“简单重复劳动”,GPU简直是天生的王者。
1.4 架构演进:从G80到Hopper
咱们快速过一下关键架构:
| 架构代号 | 发布年份 | 关键特性 | 我的评价 |
|---|---|---|---|
| G80 | 2006 | 统一着色器、CUDA雏形 | 里程碑,开启了新世界 |
| Fermi | 2010 | 完整C++支持、ECC内存 | 终于像个“计算卡”了 |
| Kepler | 2012 | SMX单元、动态并行 | 能效比大幅提升 |
| Maxwell | 2014 | 精简控制逻辑、高吞吐 | 游戏卡性价比之王 |
| Volta | 2017 | Tensor Core、独立线程调度 | AI训练专用武器 |
| Hopper | 2022 | Transformer引擎、NVLink4 | 为大模型而生 |
你看,从G80到Hopper,GPU越来越不像“显卡”了。它更像一个“并行计算加速器”。
核心洞察:GPU的演进,本质上是“从专用走向通用,再从通用走向专用”。
早期专用(只画图)→ 可编程(能算别的)→ 通用计算(CUDA)→ 再次专用(Tensor Core专门算矩阵)。
但这次“专用”是面向AI的专用,不是面向图形的专用。
1.5 避坑指南:我踩过的几个坑
我曾经以为,只要把CPU代码扔给GPU就能加速。结果跑出来比CPU还慢。为什么?
- 数据传输开销:CPU和GPU之间传数据很慢。你算1毫秒,传数据花了10毫秒,那就亏大了。
- 分支发散:GPU的几千个线程是“锁步”执行的。如果线程A走if,线程B走else,那它们得串行执行。性能直接腰斩。
- 内存访问模式:GPU喜欢“连续访问”。你跳着读数据,它就会很慢。这叫“合并访问”原则。
我建议,刚开始接触GPU编程的朋友,先别急着优化。先搞清楚你的算法适不适合并行。不适合的话,再牛的GPU也救不了你。
1.6 总结:GPU的“前世今生”
好了,咱们捋一遍:
- 1990s:固定功能图形卡,只会画图。
- 2000s:可编程着色器,能写小段程序。
- 2007:CUDA发布,GPU变成通用计算处理器。
- 2017至今:Tensor Core等专用单元出现,GPU成为AI算力核心。
说白了,GPU从一个“偏科生”变成了“全能选手”。但它最擅长的,始终是“并行计算”。
下一章,咱们会深入GPU的内部结构,看看那几千个核心到底是怎么协同工作的。到时候你会明白,为什么GPU能“以一当百”。
小提示:如果你对某个架构特别感兴趣,比如Volta的Tensor Core,可以提前查查资料。咱们后面会有专门章节讲它。
警告:别被“通用计算”这个词骗了。GPU不是万能的。它擅长的是“数据并行”任务。像“递归”、“链表遍历”这种任务,CPU才是王道。