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的活抢过来一部分。
核心变化: 从“画图工具”变成了“3D图形处理器”。但此时,它依然是个专用芯片,只认图形指令。

1.2 可编程时代:从固定管线到着色器(2000s)

进入21世纪,游戏画面越来越逼真。固定管线(Fixed Pipeline)开始捉襟见肘。为什么?因为开发者想实现“水面反射”、“动态光影”,但硬件不支持,只能靠CPU模拟,效率极低。

这时候,GPU架构发生了一次革命:可编程着色器(Shader)

  • 2001年,DirectX 8:引入了顶点着色器和像素着色器。开发者可以写一小段程序,控制每个顶点和像素的行为。嗯,这里要注意,当时的着色器是分离的,顶点和像素不能混用。
  • 2006年,DirectX 10 & NVIDIA GeForce 8800:统一着色器架构(Unified Shader)来了。顶点、像素、几何着色器,全部跑在同一个计算单元上。这为后来的通用计算埋下了伏笔。

我在项目中遇到过一个问题:用老显卡跑新游戏,画面撕裂。后来发现是着色器编译器的bug。那会儿调试着色器,全靠printf打日志,现在想想真是原始。

避坑指南: 我曾经以为着色器代码越短越快。后来发现,分支预测失败的代价远高于多写几行代码。GPU的并行执行模型,对分支非常敏感。

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量身定做的“加速器”。
注意: 通用计算不是万能的。GPU擅长“数据并行”,但不擅长“任务并行”。如果你的程序有大量分支、递归、链表操作,GPU反而比CPU慢。我见过有人硬把二叉树遍历塞进GPU,结果性能惨不忍睹。

1.4 知识体系总览

下面这张图,是我自己画的GPU演进路线。你可以看到,从固定功能到可编程,再到通用计算,核心逻辑就是“把更多控制权交给开发者”。

1 固定管线 1990s 硬件固定,不可编程 2 可编程着色器 2000s 顶点/像素/几何着色器 3 统一着色器 2006 所有着色器统一计算单元 4 通用计算 2007-至今 CUDA/OpenCL/Tensor Core GPU架构演进路线图 从固定功能 → 可编程 → 统一架构 → 通用计算 核心趋势:硬件越来越灵活,软件控制权越来越大

1.5 总结与思考

回顾GPU的发展史,你会发现一个规律:每一次架构变革,都是为了解决上一代的痛点

  • 固定管线太死板 → 可编程着色器
  • 分离着色器资源浪费 → 统一着色器
  • 只能做图形 → 通用计算(CUDA)
  • 通用计算不够快 → Tensor Core专用加速

我个人觉得,未来GPU会继续分化:一部分走向“超大规模并行计算”(比如AI训练),另一部分走向“实时渲染”(比如光线追踪)。但无论怎么变,并行计算这个核心思想不会变。

一句话总结: GPU从“画图卡”变成了“算力卡”。它用几千个简单核心,解决了CPU搞不定的并行问题。这就是它存在的意义。

好了,这一章就聊到这儿。下一章,咱们深入GPU的微架构,看看那些成千上万的“小核心”到底是怎么工作的。


专注资料整理