1、GPU的前世今生:从图形卡到通用计算处理器

大家好,我是你们的老朋友。今天咱们聊聊GPU的“发家史”。

很多人觉得GPU就是用来打游戏的。其实不然。我入行那会儿,GPU还叫“图形加速卡”。说白了,就是个专门画图的硬件。但你看现在,它已经成了AI训练的“心脏”。这中间到底发生了什么?

1.1 萌芽期:纯图形加速卡(1990年代)

90年代初,电脑要显示个3D画面,全靠CPU硬算。那画面,卡得跟幻灯片似的。我记得当时玩《毁灭战士》,帧率低得让人想砸键盘。

后来,3dfx公司搞出了Voodoo显卡。这玩意儿只干一件事:加速3D图形。它把“光栅化”、“纹理映射”这些活儿从CPU手里抢了过来。效果立竿见影——游戏流畅了。

这个阶段的GPU,结构很简单:

  • 固定功能管线:每个单元干固定的活儿,不能编程。
  • 顶点处理:算三角形的顶点位置。
  • 像素填充:往屏幕上填颜色。

说白了,就是个“画图专用芯片”。你没法让它干别的。

1.2 可编程时代:从固定到灵活(2000年代)

转折点出现在2001年。NVIDIA发布了GeForce 3。它引入了“可编程着色器”。

什么意思呢?以前你只能调调参数,现在你可以写一小段程序,控制顶点和像素怎么算。这就像从“只能点菜”变成了“可以自己写菜谱”。

我个人习惯把这段历史分成两步:

  1. 分离式着色器:顶点着色器和像素着色器是分开的硬件单元。你写代码得分别写。
  2. 统一着色器: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的“前世今生”

好了,咱们捋一遍:

  1. 1990s:固定功能图形卡,只会画图。
  2. 2000s:可编程着色器,能写小段程序。
  3. 2007:CUDA发布,GPU变成通用计算处理器。
  4. 2017至今:Tensor Core等专用单元出现,GPU成为AI算力核心。

说白了,GPU从一个“偏科生”变成了“全能选手”。但它最擅长的,始终是“并行计算”。

下一章,咱们会深入GPU的内部结构,看看那几千个核心到底是怎么协同工作的。到时候你会明白,为什么GPU能“以一当百”。

小提示:如果你对某个架构特别感兴趣,比如Volta的Tensor Core,可以提前查查资料。咱们后面会有专门章节讲它。

警告:别被“通用计算”这个词骗了。GPU不是万能的。它擅长的是“数据并行”任务。像“递归”、“链表遍历”这种任务,CPU才是王道。