1. GPU架构概述:从图形渲染到通用计算,GPU的演变之路
大家好,我是你们这堂课的主讲人。在正式开始之前,我想先聊聊一个有趣的问题:为什么我们今天要学GPU?
十几年前,我刚开始做芯片设计时,GPU还只是个「画图卡」。谁能想到,今天它成了AI时代的算力引擎。这中间到底发生了什么?
嗯,这就要从GPU的「前世今生」说起了。
1.1 图形渲染时代:GPU的「初心」
GPU最初的设计目标很纯粹——加速图形渲染。说白了,就是让游戏画面更流畅,让3D建模更逼真。
图形渲染的核心是什么?是大量的并行计算。你想想看,屏幕上几百万个像素点,每个都要计算颜色、光照、纹理。如果让CPU一个个算,那得等到猴年马月。
所以,GPU的设计哲学从一开始就与CPU截然不同:
- CPU:追求单线程性能,擅长复杂逻辑控制
- GPU:追求大规模并行,擅长简单重复计算
我记得第一次看GPU的架构图时,印象最深的就是那密密麻麻的「小核心」。CPU是几个大块头,GPU是成千上万个小家伙。这就是所谓的「众核架构」。
核心差异:CPU用大量晶体管做缓存和控制单元,GPU则把这些资源都给了计算单元。说白了,GPU就是「用数量堆死质量」的典型代表。
1.2 可编程管线的诞生:从固定功能到灵活计算
早期的GPU是「固定功能管线」。什么意思?就是每个阶段做什么事,都是硬件写死的。你只能调参数,不能改逻辑。
后来,图形程序员们不干了。他们想要更灵活的控制,比如自己写光照算法、自己定义顶点变换。于是,可编程着色器(Shader)诞生了。
这个过程很有意思。我当年参与过一个项目,客户非要在一个老旧的固定管线GPU上实现自定义特效。那叫一个痛苦——各种hack,各种workaround。后来换了可编程管线,一周就搞定了。
可编程管线的出现,让GPU从「专用硬件」迈向了「半通用硬件」。程序员可以写自己的着色器程序,虽然还是为图形服务,但已经打开了「通用计算」的大门。
1.3 CUDA的诞生:GPU通用计算的「引爆点」
2006年,NVIDIA发布了CUDA。这绝对是个里程碑事件。
为什么?因为CUDA让GPU不再只是「图形加速卡」,它变成了一个真正的「通用并行计算平台」。
我个人觉得,CUDA最聪明的地方在于:它没有重新发明轮子。它用C语言的扩展,让程序员可以像写CPU程序一样写GPU程序。学习成本极低,上手极快。
来看一个最简单的CUDA程序示例:
// 一个简单的向量加法
__global__ void vecAdd(float* A, float* B, float* C, int N) {
int i = threadIdx.x + blockIdx.x * blockDim.x;
if (i < N) {
C[i] = A[i] + B[i];
}
}
int main() {
// ... 分配内存、拷贝数据 ...
vecAdd<<<numBlocks, blockSize>>>(d_A, d_B, d_C, N);
// ... 拷贝结果回CPU ...
}
你看,代码结构跟C语言几乎一样。但背后,成千上万个线程在同时执行这个函数。这就是GPU的威力。
避坑指南:我曾经遇到一个新手,把GPU线程当成CPU线程来用——在核函数里加锁、做同步。结果性能惨不忍睹。记住:GPU是「数据并行」,不是「任务并行」。别用CPU的思维写GPU代码。
1.4 从G80到Hopper:架构演进的「三部曲」
CUDA之后,GPU架构的演进大致可以分为三个阶段:
| 阶段 | 代表架构 | 核心改进 |
|---|---|---|
| 奠基期 | G80、Fermi | 统一着色器、CUDA核心、共享内存 |
| 成熟期 | Kepler、Maxwell、Pascal | 动态并行、统一内存、NVLink |
| 爆发期 | Volta、Turing、Ampere、Hopper | Tensor Core、RT Core、MIG、DPX |
每个阶段都有标志性的技术突破。我挑几个重点说说:
- Fermi:首次引入真正的共享内存,让线程间协作成为可能。我当年用Fermi做矩阵乘法优化,性能直接翻了3倍。
- Kepler:动态并行,让GPU可以自己启动新的核函数,不用CPU插手。这个特性在递归算法中特别有用。
- Volta:Tensor Core横空出世,专门为深度学习矩阵运算优化。说实话,我当时看到这个设计,就知道AI要起飞了。
1.5 为什么GPU适合通用计算?
你可能会问:GPU到底凭什么能「跨界」到通用计算领域?
原因其实很简单:很多计算问题本质上就是「图形渲染」的变种。
图形渲染要处理的是像素矩阵,通用计算要处理的是数据矩阵。图形渲染要做光照计算,通用计算要做数值计算。本质上,都是「对大量数据做相同操作」。
GPU的架构优势体现在三个方面:
- 高吞吐量:几千个核心同时工作,算力是CPU的几十倍
- 高带宽:HBM显存带宽可达2TB/s,CPU望尘莫及
- 低成本:每瓦性能比CPU高得多,数据中心的最爱
注意:GPU不是万能的。它擅长的是「数据并行」任务,比如矩阵运算、图像处理、物理模拟。对于逻辑复杂、分支多的任务(比如编译、数据库查询),GPU反而可能比CPU慢。选对工具很重要。
1.6 现代GPU的「三驾马车」
今天的GPU已经不再是单纯的图形处理器或计算加速器。它变成了一个「全能选手」:
- 图形渲染:依然是基本盘,光线追踪、DLSS等技术让画质达到新高度
- 通用计算:科学计算、数据分析、密码学等领域的标配
- AI加速:深度学习训练和推理的核心引擎,Tensor Core功不可没
我记得去年帮一个客户做AI推理优化,他们用的是老款GPU,没有Tensor Core。同样的模型,在带Tensor Core的新GPU上,推理速度提升了8倍。这就是专用硬件的力量。
1.7 小结:GPU演变的「底层逻辑」
回顾GPU的演变之路,你会发现一个清晰的脉络:
从专用到通用,从固定到可编程,从图形到计算。
每一次演进,都是在「扩大GPU的适用场景」。而推动这一切的,是三个核心需求:
- 图形渲染需要更高的真实感和帧率
- 科学计算需要更强的算力和带宽
- 人工智能需要更高效的矩阵运算
嗯,说到这里,我想起一个很有意思的类比:GPU就像瑞士军刀,最初只能削苹果,后来能开瓶盖,现在连锯木头都行了。但它的「核心功能」——并行处理大量简单任务——始终没变。
下一章,我们会深入GPU的微架构,看看这些「小核心」到底是怎么工作的。到时候我会分享一些我在实际项目中遇到的缓存一致性问题和优化技巧,保证干货满满。
今天就到这里。记住一句话:理解GPU的过去,才能用好GPU的现在,预判GPU的未来。