GPU 图形流水线:从固定功能硬件到 AI 算力主力的演进史
更新时间:2026-09-25。本文是「集成电路大类 · 芯片设计」入门层(beginner)专题文。今天的 GPU 是 AI 时代最耀眼的芯片,但它最初并不是为神经网络设计的——它为图形而生。四十多年里,GPU 图形流水线从一条焊死在硅片上的固定流水线,一步步变成程序员可以任意编程、最终被 CUDA 打开成为通用并行计算器。这条演进线也是理解今天 AI 加速器为什么长这样的最好入口。
本文要回答的问题
- GPU 图形流水线到底在做什么,为什么这件事天然需要并行?
- 「固定功能流水线」时代的显卡能干什么、不能干什么?
- 1999 年的 GeForce 256 凭什么被称为第一颗「GPU」?
- 着色器(shader)可编程和「统一渲染」各自解放了什么?
- 2006 年的 CUDA 做了什么,为什么说它把 GPU 变成了另一类芯片?
一、图形流水线:把三维世界画成屏幕上的像素
GPU 要解决的问题可以一句话概括:给定一个用三角形描述的虚拟三维场景(每个顶点带坐标、法线、颜色、纹理坐标),把它变成屏幕上每个像素的颜色。这件事的标准做法就是图形流水线(graphics pipeline)——前一级的输出喂给下一级,数据像工厂流水线一样单向流动。
为什么场景要用三角形描述?因为三角形是最简单的平面多边形:三个顶点确定唯一平面,光栅化规则可以做成纯硬件电路,任意再复杂的角色、地形都可以拆成几十万片三角形逼近曲面。前面几级叫前端(geometry stage):把每个顶点从模型自己的局部坐标,经过模型变换、视图变换(摆到摄像机视角)、光照、透视投影(近大远小),最后裁剪掉视锥之外的部分。后面几级叫后端(rasterizer):把三角形打碎成一个个像素片元(fragment),对每个片元做深度测试(被挡住的像素丢弃)、查纹理、算颜色,写进帧缓冲;为了画面不撕裂,通常还要准备两块帧缓冲交替显示(双缓冲)。
为什么非用专门芯片不可?数字最直观:1080p 一帧有约 207 万个像素,60 帧每秒意味着每秒要填 1.24 亿个像素,每个像素还要查好几层纹理、算光照;而场景里往往有几十万到上百万个顶点。好消息是,画一个像素和画另一个像素之间几乎完全独立,处理这一批顶点和那一批顶点也彼此独立——这正是大规模并行计算的理想负载,也是后来 GPU 能被改造成通用计算器的伏笔(见 GPU 与 CPU:吞吐优先的设计分歧)。
二、固定功能时代(1981–1998):流水线是焊死的
最早把这条流水线做成硬件的,是 1981 年斯坦福大学 Jim Clark 团队设计的 Geometry Engine 几何引擎芯片。Jim Clark 随后创立 Silicon Graphics(SGI),把几何引擎用在 IRIS 图形工作站上:变换、裁剪、投影这些几何运算从主机 CPU 卸载到了专用硅片。1992 年 SGI 发布 OpenGL,把这套流水线抽象成一套标准 API,成为图形界几十年的共同语言。
那个年代的实时三维图形极其昂贵,SGI 工作站是大学实验室、飞机设计、影视特效部门的专属设备,一台机器价格抵得上一套房子。同一时期街机厅走在消费电子前面:1993 年世嘉 Model 2 基板已经能跑《VR 战士》这类带纹理的实时 3D 格斗游戏,但整套系统由多块专用板卡和昂贵的定制芯片组成,同样无法搬进家里。整个 20 世纪 80 年代到 90 年代中期,PC 上只有二维加速卡。1995 年前后 S3 Virge 等号称支持 3D 的卡面世,但 3D 性能孱弱,被玩家戏称为「3D 减速卡」(开启 3D 反而比纯 CPU 画更慢)。
真正点燃消费级市场的是 1996 年的 3dfx Voodoo Graphics:一块只做 3D、不带 2D 输出的附加卡(要和普通 2D 卡串接使用),板载 4 MB EDO 显存,像素填充率约每秒 4500 万~5000 万,跑《Quake》等游戏时第一次在 PC 上呈现了流畅、带双线性纹理过滤的三维画面,售价约 299 美元,一代玩家为之疯狂。
但这一代硬件有个共同的本质特征:固定功能(fixed-function)。整条流水线是一块巨大的状态机,程序员只能通过 API 扳开关、填参数——开几盏灯、用哪种混合模式、纹理怎么过滤——却不能改变算法本身。你想做一种 OpenGL 没定义的光照模型?做不到。更关键的是,Voodoo 这一代卡只加速后端:几何变换和光照(Transform & Lighting, T&L)仍然要靠 CPU 的浮点指令一个顶点一个顶点地算。CPU 成了瓶颈,场景稍微复杂,帧率就掉。
三、1999 GeForce 256:T&L 进硬件,「GPU」一词诞生
转折点在 1999 年 8 月 31 日。NVIDIA 发布 NV10 芯片,产品名 GeForce 256,并在营销中第一次提出 GPU(Graphics Processing Unit,图形处理器) 这个词。NVIDIA 给它的定义是:「内置变换、光照、设置/裁剪引擎的单芯片处理器」——也就是说,连前端的 T&L 也做进硬件了。
主要规格数字:台积电 220 nm 工艺,集成约 2300 万个晶体管,核心频率 120 MHz,4 条像素流水线,标称每秒处理 1500 万个三角形、4.8 亿像素填充率。对比之下,同期 CPU(Pentium III 主频 500 MHz 上下)软件 T&L 每秒只能处理几百万个三角形。在《Quake III Arena》等新游戏里,开了硬件 T&L 之后,CPU 被解放出来做游戏逻辑和物理,高分辨率下帧率优势立竿见影。
顺带一提,GeForce 256 还率先支持 DDR 显存作为可选配置,显存容量 32 MB;2000 年后续产品 GeForce 2 把工艺推进到 180 nm、核心频率拉到 200 MHz,硬件 T&L 在一两年内迅速成为所有新卡的标配,不支持它的显卡在新游戏里被直接淘汰。这一步的意义不只是「快」:它把几何阶段也变成了大规模并行的硅片电路,GPU 从此成为一条前后端全部硬件化的完整流水线。紧随其后,ATI 在 2000 年以 Radeon DDR(R100)回应,同样支持硬件 T&L,双雄格局形成。但要注意,GeForce 256 本质上仍是固定功能芯片——你能扳的开关更多了,却依然写不出自己的算法。真正的革命在下一站。
四、可编程着色器:程序员开始写「跑在显卡上的程序」
**2001 年的 GeForce 3(NV20)**配合微软 DirectX 8,第一次把流水线中两个关键环节变成了可编程的小程序:**顶点着色器(vertex shader)**接管每个顶点的变换,**像素着色器(pixel shader)**接管每个像素的颜色。NV20 用 150 nm 工艺集成约 5700 万个晶体管。程序员第一次可以说:这个顶点我要让它随正弦波起伏,这个像素我要用自己写的公式算光照。
2002 年的 DirectX 9把可编程性推到主流:ATI Radeon 9700 Pro 用 150 nm 工艺塞进约 1.1 亿个晶体管、8 条像素流水线,像素着色器支持 24 位浮点精度、指令长度上限也大大放宽;NVIDIA 同期推出 Cg、微软推出 HLSL,开发者开始用类 C 的高级语言而不是汇编写着色器。2004 年的《Half-Life 2》《DOOM 3》等 DX9 游戏成了新画面的活广告:逐像素光照让角色脸上的光影随角度变化,法线贴图让一面平面砖墙显出每道凹槽,水面反射、泛光、景深、柔肤等效果接连出现,电影级画面的大门被一脚踹开。
这背后还有一层值得点破:着色器是带循环和分支指令的小程序。为了跑它们,GPU 里第一次出现了真正意义上的处理器核心,而不只是查表和插值电路——也就是说,可编程化已经悄悄把 GPU 改造成了一批「藏在图形 API 后面的并行小 CPU」,只等一个人来把门打开。
但这一代架构有个结构性毛病:顶点着色器单元和像素着色器单元是两批物理上分开的硬件。游戏里粒子特效可能把像素单元喂爆而顶点单元闲置,大几何场景又恰好相反,两边算力常常一边饿死一边撑死。
答案是统一渲染(unified shader)。2006 年 11 月,NVIDIA 发布 G80 架构的 GeForce 8800 GTX:90 nm 工艺、6.81 亿个晶体管、128 个通用流处理器(stream processor)。每个流处理器既可以跑顶点、也可以跑像素和几何着色器,配合 DirectX 10,驱动程序按负载动态分配——再也没有「一边闲着」的浪费。今天所有 GPU 的着色器核心都延续了这个基本形态。
五、代际对比:每一代都在打开「可编程」这扇门
| 代际 | 年代 | 流水线形态 | 代表产品 | 规模与算力数字 |
|---|---|---|---|---|
| 固定功能工作站 | 1981 起 | 全固定,T&L 在专用芯片 | SGI Geometry Engine / IRIS | 实时 3D 仅限专业工作站 |
| 消费级固定功能卡 | 1996 | 后端硬件化,T&L 靠 CPU | 3dfx Voodoo Graphics | 4 MB 显存,约 5000 万像素/秒 |
| 硬件 T&L 定名 GPU | 1999 | 固定功能 + 几何硬件化 | NVIDIA GeForce 256 | 220 nm,2300 万晶体管,1500 万三角形/秒 |
| 分离式可编程 | 2001–2003 | 顶点/像素着色器分别可编程 | GeForce 3、Radeon 9700 Pro | 5700 万 → 1.1 亿晶体管,DX8/DX9 |
| 统一渲染 | 2006 | 全部着色器核心通用 | GeForce 8800 GTX (G80) | 90 nm,6.81 亿晶体管,128 流处理器 |
| 通用计算 + AI | 2006 至今 | 同一批核心跑任意并行程序 | Tesla、V100、H100、B200 | 见下节,算力以 PFLOPS 计 |
贯穿这条线的趋势只有一个方向:焊死的环节越来越少,交给程序员的环节越来越多。而每一步的直接推手,都是游戏对更真实画面的贪婪——从能看见纹理,到光影随角度流动,再到水面、皮肤和金属质感,每一项新体验背后都对应着把某一级流水线从固定电路改写成可编程核心。
这里还能读出一条芯片工程的普遍规律:晶体管预算每翻一倍,行业不会简单地把旧电路复制两份,而是优先用来换取灵活性——可编程核心虽然比同等面积的固定电路效率低一些,但它能承载还没被发明出来的算法。正是这笔交易,让 GPU 在图形之外接住了后来的科学计算和 AI。
六、2006 CUDA:同一块芯片,换个身份当计算器
G80 还有一个比统一渲染影响更深远的副产品。2006 年 NVIDIA 公布 CUDA(2007 年 2 月放出正式 SDK),它不发明新硬件,而是给同一批流处理器套上一层新接口:开发者可以用 C 语言写程序,让成千上万的线程直接跑在 GPU 核心上,完全不需要经过任何图形 API、不需要画一个三角形。
其实在 CUDA 之前,科学家已经在「蹭」GPU:他们把科学计算伪装成纹理绘制,先把数据塞进纹理,再写着色器算,最后从帧缓冲把结果读回来,流程极其别扭。2006 年学术界称之为 GPGPU(General-Purpose GPU)。CUDA 的革命性在于把这层伪装全部撕掉:显存可以直接 malloc、线程可以自由组织成线程块、还能在 GPU 上同步。
为什么这件事可行?因为图形负载天生就是 SIMT(单指令多线程)模式:成百上千个线程执行同一段着色器、各算各的数据,这和矩阵运算、物理模拟、信号处理的并行结构一模一样(调度细节见 GPU 架构与 Warp 调度器)。2007 年的 Tesla C870 计算卡基于 G80,板载 1.5 GB 显存,FP32 算力约 519 GFLOPS;2010 年的 Fermi 补上了真正的缓存层次和 FP64 双精度,GPU 开始严肃进入超算领域。2012 年,搭载 18688 颗 GPU 的超级计算机 Titan 登上全球超算榜首,标志着 GPU 计算从「旁门左道」变成主流。
决定性的引爆点在 2012 年:Alex Krizhevsky 用两块 GeForce GTX 580(每块 3 GB 显存、512 个 Fermi 架构 CUDA 核心)训练出 AlexNet,把 ImageNet 图像识别 Top-5 错误率从约 26% 直接拉低到约 15%,深度学习革命由此开场。一个常被提起的细节是,当时两块 GTX 580 训练五六天就能跑完,而用 CPU 集群要慢一个数量级——研究者发现,神经网络里海量的乘加恰好就是 GPU 最擅长的那类活。GPU 为图形练了三十年的并行肌肉,在另一个赛道上被重新定价。
七、AI 算力主力:驱动力从「像素」变成「参数」
此后 GPU 的算力曲线开始以肉眼可见的速度陡峭上升,新增的晶体管越来越多地服务于 AI:
- 2017 年 V100(Volta):12 nm 工艺,约 211 亿个晶体管,5120 个 CUDA 核心,首创 640 个 Tensor Core(张量核心),矩阵乘算力约 120 TFLOPS(FP16 稀疏),搭配 16/32 GB HBM2,带宽约 900 GB/s;
- 2022 年 H100:台积电 4N 工艺,约 800 亿个晶体管,18432 个 CUDA 核心、528 个第四代 Tensor Core,FP8 稀疏算力约 3958 TFLOPS,80 GB HBM3 带宽约 3.35 TB/s,成为大模型训练时代的标志性芯片;
- 2024 年 B200:双 die 封装合计约 2080 亿个晶体管,192 GB HBM3e、带宽约 8 TB/s,FP4 稠密算力约 10 PFLOPS、稀疏约 20 PFLOPS,单卡性能再次翻倍。
图形并没有被抛弃:2018 年 Turing 架构加入 RT Core 做光线追踪求交(传统光栅化不模拟光线真实传播,反射和阴影要靠各种「作弊」技巧;光线追踪按物理规律逐光线求交,画面更真但计算量爆炸),又加入 DLSS 用 AI 把低分辨率画面超分成高分辨率——等于反过来用 AI 算力补贴图形。游戏仍然是 GPU 架构创新的试验场,光线追踪和 AI 超分也已成为后来各代产品的标配。但产业的主驱动力已经换位——数据中心里训练和推理大模型的需求,接过了当年游戏画面的角色,继续逼 GPU 在并行算力和显存带宽上狂奔。这也是 AI 加速器入门里那条「堆 TOPS、堆 HBM 带宽」路线的历史由来:今天 AI 芯片对片上存储器和带宽的执念,早在光栅化时代就已经埋下。
这一篇在知识体系里的位置
- 想看 GPU 和 CPU 为什么走向两种架构、吞吐优先意味着什么 → GPU 与 CPU:吞吐优先的设计分歧;
- 想看统一渲染后的流处理器内部怎么组织、warp 如何调度 → GPU 架构与 Warp 调度器;
- 想看 CUDA 打开的这扇门最终通向哪些芯片、MAC 阵列与 TOPS 是什么 → AI 加速器入门;
- 想看喂饱这些算力为什么要靠 HBM 高带宽内存 → 片上存储器。
总结
一句话总结:GPU 为图形而生,它的本质是一条把三维三角形场景变成屏幕像素的图形流水线——前端做几何变换、光照、投影裁剪,后端做光栅化、纹理和像素着色,由于顶点之间、像素之间天然彼此独立,整条流水线从第一天起就是大规模并行计算的理想结构;1981 年 SGI 的 Geometry Engine 把流水线固化进硅片、1996 年 3dfx Voodoo 让消费级 3D 成为可能,但这一代硬件是固定功能状态机,T&L 仍要靠 CPU;1999 年 GeForce 256 把变换与光照做进硬件(220 nm、约 2300 万晶体管、每秒 1500 万三角形)并第一次叫出「GPU」之名;2001 年 GeForce 3 与 DX8 让顶点和像素着色器可编程,2002 年 DX9 与 Radeon 9700 Pro 带来浮点像素着色和高级着色语言,2006 年 G80/8800 GTX 以 128 个统一流处理器、6.81 亿晶体管实现统一渲染;同样在 2006 年,CUDA 不改动硬件、却把同一批核心重新暴露为可跑任意 C 程序的成千上万并行线程,GPU 就此从图形芯片变成通用并行计算器,并在 2012 年因 AlexNet 而被深度学习选中;此后 V100 首创 Tensor Core、H100 以约 800 亿晶体管和 3.35 TB/s HBM3 带宽成为大模型时代标志、B200 把 FP4 算力推到约 10 PFLOPS 稠密,驱动力也从游戏的像素变成了模型的参数——四十多年的主线始终是「焊死的环节越来越少、交给程序员的环节越来越多」,每一代都由更真实的游戏画面和更大的并行算力需求向前推。