GPU基础:从图形加速器到并行计算引擎

2.1 GPU架构演进:一场从“画图”到“算数”的逆袭

GPU(Graphics Processing Unit,图形处理器)的诞生并非为了通用计算,而是为了加速图形渲染。理解其架构演进,是理解它为何能在AI与超大规模数据中心中占据核心地位的前提。

早期GPU采用固定功能管线(Fixed-Function Pipeline),顶点变换、光照计算、像素填充等步骤由专用硬件单元完成,程序员无法改变其行为。2001年,NVIDIA GeForce 3首次引入可编程顶点着色器(Vertex Shader),随后像素着色器(Pixel Shader)也开放编程能力,GPU开始从“专用硬件”向“可编程处理器”转变。

真正的转折点是2006年NVIDIA发布GeForce 8800 GTX,其内部采用统一着色器架构(Unified Shader Architecture),将顶点、几何、像素着色器统一为通用的流处理器(Stream Processor)。这一设计意味着GPU不再区分图形任务的类型,所有计算单元可以执行任意类型的着色程序——这为通用计算(GPGPU)铺平了道路。同年,NVIDIA推出CUDA(Compute Unified Device Architecture)编程框架,让开发者可以用C语言直接操作GPU进行并行计算。

此后GPU架构沿两条主线演进:计算单元密度持续提升(从Fermi到Ampere再到Hopper,SM数量、CUDA核心数、Tensor Core能力不断强化),以及显存带宽与容量同步扩展(HBM高带宽显存取代GDDR成为高性能计算标配)。以NVIDIA A100为例,其拥有6912个CUDA核心、432个Tensor Core,搭配40GB/80GB HBM2e显存,带宽超过2TB/s——这已完全是为大规模并行计算而生的形态。

核心认知:GPU架构演进的主线是从“固定功能图形硬件”走向“大规模可编程并行处理器”。统一着色器架构是关键分水岭,CUDA等编程框架则完成了从“硬件可用”到“生态可用”的跨越。
GPU架构演进关键节点 1 固定功能管线 顶点/像素专用硬件 不可编程 仅用于图形渲染 ~1990s - 2000 2 可编程着色器 顶点/像素着色器 有限可编程能力 图形专用指令集 2001 - 2005 3 统一着色器架构 G80/G92 (2006) 流处理器统一 CUDA发布 (2007) C语言可编程 2006 - 2008 4 大规模并行计算 Fermi→Ampere→Hopper Tensor Core (2017) HBM高带宽显存 NVLink高速互联 2009 - 至今 关键驱动因素 • 游戏/图形需求推动硬件可编程化 → 意外打开通用计算大门 • AI训练/推理需求推动Tensor Core、高带宽显存、超大规模互联演进 • 制程工艺与封装技术(CoWoS)支撑晶体管密度持续翻倍

2.2 GPU与CPU的本质区别:并行 vs 串行

CPU与GPU的设计哲学截然不同。CPU追求低延迟,擅长处理复杂的控制逻辑和串行任务;GPU追求高吞吐,擅长同时处理大量简单、相互独立的计算任务。

从芯片资源分配来看,CPU将大量晶体管用于控制单元(分支预测、乱序执行)和大容量缓存(L1/L2/L3),计算单元(ALU)占比相对较小。GPU则相反,将超过80%的晶体管用于计算单元(ALU),控制单元和缓存被大幅精简。以NVIDIA A100为例,其拥有108个SM(流式多处理器),每个SM包含64个FP32 CUDA核心,总计6912个核心,而一颗高端服务器CPU(如AMD EPYC 9654)核心数仅为96个。

这种差异导致两者在任务处理方式上截然不同:

  • CPU:单核性能极强,主频高(3-4GHz),支持复杂的指令流水线、分支预测、乱序执行,适合运行操作系统、数据库、逻辑判断密集的应用。
  • GPU:单核性能弱(主频约1.5GHz),但核心数量庞大,采用SIMT(单指令多线程)执行模型,一个指令同时驱动数百个线程执行相同操作,适合矩阵乘法、卷积等数据并行任务。
对比维度 CPU GPU
设计目标 低延迟,快速完成单个复杂任务 高吞吐,同时完成海量简单任务
核心数量 数十个(如64核) 数千个(如A100有6912个CUDA核心)
晶体管分配 大量用于控制单元和缓存 大量用于计算单元(ALU)
执行模型 MIMD,多指令多数据,复杂调度 SIMT,单指令多线程,轻量调度
内存带宽 较低(几十GB/s),依赖缓存降低延迟 极高(A100达2TB/s),依赖带宽支撑并行
适用场景 操作系统、逻辑控制、单线程性能敏感任务 矩阵运算、图像处理、深度学习训练/推理
类比理解:CPU像一位“全能博士”,能解决极其复杂的问题,但一次只能处理一个;GPU像一支“千人工厂流水线”,每个工人只会简单操作,但成千上万人同时工作,总产出远超博士。AI训练正是“简单操作重复千万次”的典型场景。

2.3 GPU在并行计算中的核心优势

GPU之所以成为AI时代的主角,源于其在并行计算领域的三项核心优势:大规模线程并行、高内存带宽、能效比优势。

第一,大规模线程并行。GPU通过线程分级调度机制实现海量并发。以CUDA为例,线程组织为三层结构:Grid(网格)→ Block(线程块)→ Thread(线程)。一个Grid可包含数百万个线程,硬件通过SM内的Warp调度器(每Warp包含32个线程)以零开销切换线程,隐藏内存访问延迟。这种机制使得GPU能够同时执行数万个并发线程,远超CPU的几十个线程。

第二,高内存带宽。并行计算的核心瓶颈往往不是计算速度,而是数据搬运速度。GPU采用HBM(高带宽内存)技术,通过3D堆叠和硅中介层实现超宽位宽(A100为5120位),提供超过2TB/s的带宽。相比之下,CPU的DDR5内存带宽通常仅为100-200GB/s。对于矩阵乘法、卷积等访存密集型算子,高带宽意味着数据能更快送达计算单元,避免计算单元空转。

第三,能效比优势。在相同功耗下,GPU提供的并行计算能力远超CPU。以NVIDIA H100 SXM为例,其FP16算力达到约2000 TFLOPS(含稀疏性),功耗700W,能效比约2.86 TFLOPS/W。而一颗CPU的FP32算力通常不超过10 TFLOPS,功耗350W,能效比不足0.03 TFLOPS/W。在超大规模数据中心中,能效比直接决定运营成本和散热设计,GPU的优势使其成为大规模AI集群的唯一现实选择。

案例:矩阵乘法(C = A × B)
假设矩阵维度为4096×4096,需要约2750亿次乘加运算。CPU单核需数秒完成,而A100 GPU通过将矩阵分块(Tiling)加载到共享内存,利用Tensor Core执行4×4矩阵乘加指令,可在毫秒级完成。关键在于:
1. 数据分块后并行加载,隐藏内存延迟;
2. Tensor Core单指令完成多个乘加,减少指令开销;
3. 数千个SM同时计算,线性扩展吞吐量。

2.4 常见误区与设计复盘

在GPU选型与并行程序设计中,存在几个高频误区,值得深入理解以避免踩坑。

误区一:GPU核心数越多,程序一定越快。实际上,GPU加速的前提是程序具有足够的并行度。如果算法存在严重的数据依赖(如递归、全局串行逻辑),大量核心将处于空闲状态。例如,链表遍历、图的最短路径等任务在GPU上可能比CPU更慢。判断标准是:任务能否分解为大量相互独立的子任务。

误区二:忽略CPU与GPU之间的数据传输开销。PCIe 5.0 x16的理论带宽为64GB/s,但实际有效带宽通常只有理论值的50%-70%。如果每次计算都需要将数据从CPU内存拷贝到GPU显存,再拷贝回来,传输时间可能远超计算时间。正确做法是:尽量在GPU显存中保留数据,减少CPU-GPU往返。NVIDIA的NVLink技术(H100提供900GB/s双向带宽)正是为解决此问题而生。

误区三:将GPU视为“万能加速器”。GPU适合计算密集型(Compute-Bound)和访存密集型(Memory-Bound)任务,但不适合I/O密集型(如频繁读写磁盘)或延迟敏感型(如高频交易)任务。在超大规模数据中心中,GPU通常与CPU协同工作:CPU负责数据预处理、任务调度、I/O管理,GPU负责核心计算。

架构设计复盘:在规划GPU集群时,需同时考虑三个维度:
1. 算力维度:FP16/BF16/FP8算力是否满足训练/推理需求;
2. 显存维度:容量是否装得下模型参数与中间激活值,带宽是否匹配计算吞吐;
3. 互联维度:GPU间通信带宽(NVLink/InfiniBand)是否成为扩展瓶颈。
仅关注算力而忽视显存与互联,是超大规模GPU集群设计中最常见的失误。