1. GPU的前世今生

各位同学好,我是你们的老朋友。今天咱们聊聊GPU的进化史。说实话,我入行那会儿,GPU还被人叫做“显卡”,主要任务就是让游戏画面更流畅。谁能想到,十几年后,它成了AI训练、科学计算的绝对主力?

嗯,这背后的故事,其实挺有意思的。你想想看,一个原本只为了画三角形、贴纹理的硬件,怎么就变成了并行计算的巨兽?这中间经历了什么?

1.1 图形卡的诞生:从VGA到DirectX

最早的时候,计算机显示全靠CPU。我记得90年代初,一台486电脑要显示一个简单的3D立方体,CPU得算半天。那时候的“显卡”,说白了就是个帧缓冲器——把CPU算好的图像数据存起来,然后输出到显示器。

转折点出现在1995年。3dfx公司推出了Voodoo显卡,这是第一款真正意义上的3D加速卡。它做了什么?简单说,就是把“画三角形”这件事从CPU手里抢了过来。

核心概念:固定功能管线

早期的GPU采用固定功能管线。什么意思?就是硬件里焊死了几个模块:顶点变换、光栅化、纹理映射、像素着色。开发者只能通过API(比如DirectX 7)去配置这些模块,不能自己写程序控制。

我在做第一个3D游戏项目时,就深刻体会到了固定管线的痛苦。想做一个水面反射效果?对不起,硬件不支持,你得用CPU模拟,帧率直接掉到个位数。

1.2 可编程管线的革命:Shader的诞生

2001年,NVIDIA发布了GeForce 3。这玩意儿划时代——它引入了可编程顶点着色器和像素着色器。说白了,就是允许开发者写一小段程序,在GPU上执行。

为什么会这样?因为固定管线太死板了。游戏开发者想要更炫酷的效果,比如动态光影、复杂材质。硬件厂商一琢磨:与其我们猜开发者需要什么,不如让他们自己写。

我的经验之谈: 当年我第一次写像素着色器,用的是DirectX 8的汇编语言。那叫一个痛苦——寄存器只有几个,指令集也有限。但效果是真的好,一个简单的法线贴图就能让平面看起来凹凸不平。

可编程管线的出现,让GPU从“专用硬件”变成了“半通用硬件”。虽然还是为图形服务,但至少能跑程序了。

1.3 CUDA的诞生:GPU通用计算的引爆点

2006年,NVIDIA发布了CUDA。这绝对是GPU历史上最重要的时刻之一。为什么?因为CUDA让GPU变成了真正的通用计算处理器。

你想想看,GPU里有成百上千个核心,每个核心都能执行简单的数学运算。以前这些核心只能处理图形数据(顶点、像素),现在CUDA告诉你:你可以把任何数据喂进来,让这些核心并行处理。

特性 传统GPU(图形专用) CUDA GPU(通用计算)
编程模型 固定管线/Shader C/C++扩展
数据模型 顶点、像素 任意数据
核心数量 数十个 数百到数千个
典型应用 3D渲染 科学计算、AI、数据分析

我记得2008年,我参与了一个项目,用GPU加速分子动力学模拟。当时CPU跑一个时间步要几秒钟,GPU只要几毫秒。说实话,第一次看到结果时我都不敢相信——这速度提升太夸张了。

1.4 从GPGPU到专用加速器:架构的演进

CUDA之后,GPU架构开始疯狂进化。我简单梳理一下关键节点:

  • Fermi架构(2010年):首次引入真正的缓存层次结构,支持C++异常处理。嗯,这代架构让GPU编程更像CPU了。
  • Kepler架构(2012年):引入动态并行,GPU里的线程可以自己创建新线程。这玩意儿在递归算法里特别好用。
  • Maxwell架构(2014年):大幅提升能效比。说白了,同样的功耗,性能翻倍。
  • Volta架构(2017年):引入Tensor Core,专门为深度学习优化。这代架构直接引爆了AI训练。
  • Ampere架构(2020年):支持稀疏计算,进一步加速AI推理。

避坑指南: 我曾经在项目里踩过一个坑——用Kepler架构的GPU跑动态并行,结果发现线程创建开销巨大。后来才明白,动态并行适合粗粒度任务,细粒度任务还是老老实实用普通线程吧。

1.5 知识体系总览

下面这张图,是我自己画的GPU进化路线图。你可以看到,从固定管线到可编程管线,再到通用计算,最后到专用加速器,GPU的每一步进化都是为了解决特定问题。

GPU进化路线图 1995-2000 固定管线 Voodoo显卡 DirectX 7 2001-2005 可编程管线 GeForce 3 Shader Model 2006-2009 CUDA时代 GPGPU 并行计算 2010-至今 专用加速 Tensor Core 稀疏计算 关键架构演进 Fermi (2010) Kepler (2012) Maxwell (2014) Volta (2017) Ampere (2020) Hopper (2022) 从专用到通用,再到专用加速——GPU的进化是需求驱动的 图形需求 → 通用计算 → AI加速

1.6 总结与思考

回顾GPU的进化史,你会发现一个规律:每一次重大变革,都是因为现有架构无法满足新需求。

  • 固定管线满足不了游戏开发者 → 可编程管线诞生
  • 图形专用满足不了科学计算 → CUDA诞生
  • 通用计算满足不了AI训练 → Tensor Core诞生

我个人觉得,GPU的未来还会继续分化。一方面,图形渲染会越来越逼真(光线追踪、路径追踪);另一方面,AI推理会越来越高效(稀疏计算、存内计算)。

核心启示: 理解GPU的进化史,不是为了背历史,而是为了理解架构设计的权衡。为什么GPU有那么多核心?为什么缓存这么小?为什么内存带宽这么高?这些问题,在后面的章节里我会一一解答。