1. GPU发展简史:从图形加速到通用计算,GPU的演进之路
大家好,我是你们的老朋友。今天咱们聊聊GPU的“前世今生”。
说实话,我入行那会儿,GPU还是个“偏科生”——只会画图。谁能想到,十几年后,它成了AI、科学计算、数据中心里的香饽饽?这背后的演进之路,其实挺有意思的。我个人习惯把这段历史分成三个阶段来讲,这样脉络更清晰。
1.1 萌芽期:图形加速卡的诞生(1980s-1990s)
早期的计算机,图形显示全靠CPU硬扛。你想想看,CPU既要算数据,又要管像素点,效率能高吗?
我记得90年代初,玩个《毁灭战士》都卡成PPT。那时候的“显卡”,其实叫“图形加速卡”。它只干一件事:把CPU从繁重的像素填充、线条绘制中解放出来。
关键节点:
- 1995年,3dfx Voodoo:这玩意儿是3D游戏的里程碑。它引入了“纹理映射”和“Z缓冲”,让游戏画面有了立体感。我在项目里调试过Voodoo的驱动,那会儿的API叫Glide,现在基本绝迹了。
- 1999年,NVIDIA GeForce 256:它第一次喊出“GPU”这个名词。核心卖点是“硬件T&L”(坐标变换与光照)。以前这些计算靠CPU,现在GPU自己干了。说白了,就是把CPU的活抢过来一部分。
1.2 可编程时代:从固定管线到着色器(2000s)
进入21世纪,游戏画面越来越逼真。固定管线(Fixed Pipeline)开始捉襟见肘。为什么?因为开发者想实现“水面反射”、“动态光影”,但硬件不支持,只能靠CPU模拟,效率极低。
这时候,GPU架构发生了一次革命:可编程着色器(Shader)。
- 2001年,DirectX 8:引入了顶点着色器和像素着色器。开发者可以写一小段程序,控制每个顶点和像素的行为。嗯,这里要注意,当时的着色器是分离的,顶点和像素不能混用。
- 2006年,DirectX 10 & NVIDIA GeForce 8800:统一着色器架构(Unified Shader)来了。顶点、像素、几何着色器,全部跑在同一个计算单元上。这为后来的通用计算埋下了伏笔。
我在项目中遇到过一个问题:用老显卡跑新游戏,画面撕裂。后来发现是着色器编译器的bug。那会儿调试着色器,全靠printf打日志,现在想想真是原始。
1.3 通用计算时代:CUDA与AI的爆发(2007-至今)
2007年,NVIDIA发布了CUDA。这玩意儿彻底改变了GPU的命运。
为什么?因为CUDA让GPU不再只是“画图的”,它变成了一个“大规模并行计算引擎”。你想想看,CPU有4个核、8个核,GPU有几千个核。虽然每个核很弱,但架不住人多啊。
关键转折点:
- 2007年,CUDA 1.0:我第一次用CUDA写程序,是在一个图像处理项目里。把一张1024x1024的图片做高斯模糊,CPU跑了200ms,GPU只用了5ms。当时我就意识到,这玩意儿要变天。
- 2012年,AlexNet:深度学习爆发。Alex Krizhevsky用两块GTX 580训练了ImageNet模型,碾压了所有传统算法。从此,GPU成了AI训练的标配。
- 2017年,Volta架构 & Tensor Core:NVIDIA专门为AI矩阵运算设计了Tensor Core。这玩意儿做矩阵乘法,比普通CUDA核快一个数量级。说白了,就是为AI量身定做的“加速器”。
1.4 知识体系总览
下面这张图,是我自己画的GPU演进路线。你可以看到,从固定功能到可编程,再到通用计算,核心逻辑就是“把更多控制权交给开发者”。
1.5 总结与思考
回顾GPU的发展史,你会发现一个规律:每一次架构变革,都是为了解决上一代的痛点。
- 固定管线太死板 → 可编程着色器
- 分离着色器资源浪费 → 统一着色器
- 只能做图形 → 通用计算(CUDA)
- 通用计算不够快 → Tensor Core专用加速
我个人觉得,未来GPU会继续分化:一部分走向“超大规模并行计算”(比如AI训练),另一部分走向“实时渲染”(比如光线追踪)。但无论怎么变,并行计算这个核心思想不会变。
好了,这一章就聊到这儿。下一章,咱们深入GPU的微架构,看看那些成千上万的“小核心”到底是怎么工作的。