GPU 与异构计算:现代计算平台的扩展方向

到这里,组成原理系列已经从数据表示、逻辑电路、CPU、流水线、存储层次、I/O、并行和 ISA 风格一路讲了下来。如果继续往现代计算平台的现实形态看,就会发现一个越来越明显的趋势:

今天的计算机系统,已经不再只是“一个 CPU 包打天下”,而是越来越依赖多种不同计算单元协同工作。

这就引出了 GPU 与异构计算。

理解它,不是为了立刻去写 CUDA,而是为了建立一个更完整的现代体系结构视角:为什么 CPU、GPU、NPU、加速器会同时存在,它们各自擅长什么,又为什么会在同一平台上协作。

一、为什么 CPU 不是所有计算任务的最优选择

前面已经看到,CPU 的设计目标通常偏向:

  • 通用性强;
  • 控制流复杂处理能力强;
  • 单线程延迟敏感任务表现好;
  • 对分支、系统调用、复杂逻辑和多样化负载适应力强。

但如果任务具有这些特征:

  • 数据量极大;
  • 计算模式重复;
  • 同一种操作要在大量元素上反复执行;
  • 分支相对简单;

那么单纯依赖通用 CPU 往往不是最优解。

这时候,系统就会倾向于使用更适合大规模并行吞吐的处理单元,例如 GPU。

二、GPU 最初是为了解决什么问题

GPU 的起点当然是图形处理。

图形渲染中存在大量天然并行任务,例如:

  • 顶点处理;
  • 像素着色;
  • 纹理采样;
  • 大量相似计算的批量执行。

这些任务有一个共同特点:

对很多数据做相似运算,而且希望吞吐量极高。

这和 CPU 更重视通用控制、低延迟单线程的风格明显不同。所以 GPU 逐渐发展出一种更偏向大规模数据并行的体系结构。

三、GPU 和 CPU 最本质的差异是什么

如果只抓一句话,可以这样理解:

  • CPU 更擅长少量复杂任务的灵活控制与低延迟处理;
  • GPU 更擅长海量相似任务的高吞吐并行计算。

进一步展开,就是两种不同设计目标:

  • CPU 会投入更多资源在复杂控制、预测、缓存和通用执行能力上;
  • GPU 会投入更多资源在大量并行算术单元和吞吐能力上。

所以不是 GPU “比 CPU 更强”,而是它们在不同问题上更有优势。

四、为什么 GPU 特别适合数据并行任务

因为很多数据并行任务都长这样:

  • 同一段计算逻辑;
  • 要对成千上万份数据重复执行;
  • 各数据项之间依赖较少;
  • 更看重总体吞吐,而不是单个任务的超低延迟。

例如:

  • 图像处理;
  • 矩阵运算;
  • 深度学习训练与推理;
  • 科学计算中的大规模向量化任务。

GPU 在这类场景中的优势,本质上来自:

它愿意把大量硬件预算投入到并行算力密度上。

五、GPU 为什么不擅长所有任务

因为它的强项也意味着它的局限。

如果任务具有以下特征:

  • 分支复杂;
  • 控制流高度不规则;
  • 数据依赖强;
  • 任务粒度小且频繁切换;
  • 系统调用和 I/O 协调很多;

那么 GPU 通常不会像 CPU 那样自然高效。

这说明:

  • GPU 不是“更通用的 CPU”;
  • CPU 也不是“慢版 GPU”;
  • 它们是两类面向不同负载优化的处理器。

六、什么是异构计算

异构计算可以理解成:

在同一计算平台中,让不同类型的处理单元协同工作,各自承担自己更擅长的任务部分。

这些处理单元可能包括:

  • CPU;
  • GPU;
  • NPU / AI 加速器;
  • DSP;
  • FPGA;
  • 其他专用协处理器。

异构计算的核心思想不是“堆更多芯片”,而是:

让合适的任务跑在合适的硬件上。

七、为什么现代平台越来越走向异构

因为通用处理器很难在所有维度上都最优。

现实工作负载非常多样:

  • Web 服务重控制和 I/O;
  • 图形渲染重像素并行;
  • AI 推理重矩阵和张量运算;
  • 音视频编解码有强专用模式;
  • 科学计算重数值并行吞吐。

如果所有任务都强行让 CPU 做,效率会不够理想;如果所有任务都强行让 GPU 做,也同样不现实。

所以异构平台存在的根本逻辑是:

不同计算问题,值得用不同的体系结构去优化。

八、异构计算的难点是什么

异构并不是“多一种处理器就白赚”,它会带来新的系统复杂度,例如:

  • 任务如何划分;
  • 数据如何在不同处理器之间搬运;
  • 内存空间是否共享;
  • 调度和同步如何完成;
  • 编程模型是否易用;
  • 能耗与带宽是否成为新瓶颈。

所以异构计算的挑战,往往不只在“算得快不快”,还在“协作成本高不高”。

九、为什么数据搬运常常是异构系统的关键瓶颈

因为很多时候,真正昂贵的不是算,而是:

  • 把数据从主存搬到 GPU;
  • 或者从 GPU 结果再搬回 CPU;
  • 或者在多个加速器之间同步状态。

如果搬运成本太高,就可能抵消加速器本身的计算优势。

所以现代异构平台非常关注:

  • 互连带宽;
  • 共享内存模型;
  • 零拷贝;
  • 数据局部性;
  • 任务粒度设计。

这再次说明,体系结构性能从来不只是看算力本身,还要看数据流动路径。

十、从工程和后端视角,这部分为什么值得理解

即使你主要做后端开发,理解 GPU 和异构计算也越来越有现实意义。

例如:

  • AI 服务部署越来越常依赖 GPU / NPU;
  • 数据库、搜索、视频处理和推荐系统越来越多地调用专用加速能力;
  • 云平台调度资源时已经不只看 CPU 和内存,还要看 GPU 卡型、带宽和拓扑;
  • 性能优化很多时候不只是代码问题,而是“任务该放到哪类硬件上跑”的问题。

也就是说,现代工程实践正在把体系结构选择直接推到软件开发者面前。

十一、学习这一部分最容易踩的坑

1. 把 GPU 理解成“更强的 CPU”

它们面向的优化目标不同,不是简单强弱替代关系。

2. 以为只要上 GPU 就一定快

如果任务不适合并行,或者数据搬运成本过高,收益可能并不理想。

3. 把异构计算理解成单纯堆硬件

真正难的地方常常在调度、编程模型和数据流动上。

总结

GPU 与异构计算代表了现代计算平台的重要扩展方向。真正值得先抓住的,是这些认识:

  • CPU 和 GPU 优化的是不同类型的工作负载;
  • GPU 特别适合大规模数据并行和高吞吐计算;
  • 异构计算强调让不同处理单元各司其职;
  • 系统收益不仅取决于算力本身,还取决于任务划分和数据搬运成本;
  • 现代工程系统越来越需要在软件设计时就考虑底层计算平台的异构特性。

到这里,组成原理前 30 篇的主线已经基本搭起来了:从最底层的数据表示和逻辑门,到 CPU、存储、I/O、并行,再到现代平台扩展方向,已经形成了一条比较完整的学习路径。后面如果继续往下写,就可以开始进入更偏“体系结构进阶”和“软硬件协同优化”的主题了。

参考资源