GPU 架构学习
第十六课:从 GPU 框图理解完整芯片
这一课把前面的 SM、缓存、显存控制器和图形单元放回整块 GPU 中,学习如何阅读一张完整的 GPU 架构框图。
目录
一、GPU 为什么要划分层次二、GPC 是什么三、TPC 是什么四、SM 在整块 GPU 中的位置五、为什么不直接把 SM 称为 GPU Core六、GPU Front End 是什么七、命令处理器和 SM 调度器不是同一个东西八、计算任务如何进入 GPC 和 SM九、Raster Engine 是什么十、PolyMorph Engine 是什么十一、Texture Unit 位于哪里十二、GPU 中的片上互连十三、为什么片上互连很重要十四、Crossbar 和 NoC 的区别十五、L2 Cache 为什么被划分为多个 Slice十六、Memory Partition 的基本结构十七、为什么地址要分散到不同分区十八、一个 Load 请求如何穿过整块 GPU十九、一个 Store 请求如何穿过 GPU二十、原子操作在哪里执行二十一、ROP 与 Memory Partition 的关系二十二、为什么 GPU 要采用多个重复分区1. 易于扩展产品规模2. 提高制造良率3. 简化物理设计4. 形成产品分级二十三、为什么实际 GPU 常有部分单元被关闭二十四、频率并不是整块 GPU 完全相同二十五、GPU 的功耗管理二十六、为什么标称频率和实际频率不同二十七、数据中心 GPU 为什么常没有显示输出二十八、视频编解码器在哪里二十九、DMA 和 Copy Engine 在整块芯片中的位置三十、PCIe 和 NVLink 接口属于哪里三十一、如何阅读一张 NVIDIA GPU 框图第一层:找 SM第二层:找 GPC 和 TPC第三层:找 L2 和内存控制器第四层:找固定功能单元第五层:找片上互连和外部接口三十二、不要用方框面积直接推断真实性能三十三、逻辑框图和物理 Floorplan 的区别三十四、GPU 为什么容易扩展成多个 Die三十五、多 Die GPU 为什么难于多核 CPU三十六、从 RTL 角度看完整 GPU三十七、一块 GPU 的完整工作路径三十八、本课核心结论第十七课:NVIDIA GPU 架构如何演进导语:这一课把前面的 SM、缓存、显存控制器和图形单元放回整块 GPU 中,学习如何阅读一张完整的 GPU 架构框图。
此前我们主要研究了 SM 内部:
Warp Scheduler
Register File
CUDA Core
Tensor Core
Load/Store Unit
Shared Memory / L1
但一块完整 GPU 不只有 SM,还包括:
命令处理前端
多个计算与图形处理分区
片上互连
L2 Cache
显存控制器
PCIe / NVLink 接口
显示与视频单元
可以先建立一个高度简化的整体结构:

图示:第十六课:从 GPU 框图理解完整芯片
一、GPU 为什么要划分层次
如果一块 GPU 有上百个 SM,不可能把所有单元平铺后直接连接到一个中央控制器。
否则会出现:
- 连线过长;
- 扇出过大;
- 时序困难;
- 功耗过高;
- 中央调度器成为瓶颈;
- 物理布局难以扩展。
所以 GPU 通常采用层次化和分区化设计:

图示:一、GPU 为什么要划分层次
这种层次有利于:
- 复制相同模块;
- 扩展 GPU 规模;
- 缩短局部连线;
- 分散控制压力;
- 提高物理设计规则性;
- 屏蔽部分故障单元。
二、GPC 是什么
在 NVIDIA 图形 GPU 的架构描述中,经常出现:
GPC:Graphics Processing Cluster,图形处理簇。
可以把 GPC 理解为 GPU 内部一个较大的计算和图形处理分区。
一个 GPC 中通常可能包含:
- 多个 TPC;
- 多个 SM;
- Raster Engine;
- 图形相关控制结构;
- 局部任务分发逻辑。
简化结构:

图示:二、GPC 是什么
GPC 的具体内部结构会随架构变化,因此不能认为所有 NVIDIA GPU 都具有完全相同的 GPC 组成。
三、TPC 是什么
TPC 通常指:
Texture Processing Cluster,纹理处理簇。
它位于 GPC 和 SM 之间。
简化理解:
GPC
└── TPC
├── 一个或多个 SM
├── Texture Unit
└── 部分图形处理结构
在某些架构中,一个 TPC 包含两个 SM;在其他架构或产品中,组织方式可能不同。
所以应该记住的是层级关系,而不是死记固定数量:
GPC
↓
TPC
↓
SM
对于纯 CUDA 或 AI 计算,程序员通常主要关注 SM。但在完整 GPU 芯片中,TPC 和 GPC 有助于组织图形、纹理和计算资源。
四、SM 在整块 GPU 中的位置
SM 是实际执行 Warp 指令的核心模块。
一个 SM 内部大致包含:

图示:四、SM 在整块 GPU 中的位置
多个 SM 组成 TPC,多个 TPC 再组成 GPC。
可以类比为:
GPU:整座工厂
GPC:大型车间区域
TPC:车间中的生产组
SM:具体生产单元
Warp:进入生产线的一批任务
五、为什么不直接把 SM 称为 GPU Core
SM 确实比 CUDA Core 更接近“处理器核心”,但它与 CPU Core 仍然有明显差异。
CPU Core 通常强调:
- 单线程性能;
- 乱序执行;
- 复杂分支预测;
- 大型私有缓存;
- 低延迟响应。
SM 强调:
- 大量 Warp 状态;
- 高吞吐率;
- 多线程延迟隐藏;
- 大寄存器文件;
- 多种并行执行管线。
所以可以把 SM 理解为:
面向大规模线程吞吐的多线程处理器。
六、GPU Front End 是什么
GPU Front End 是整块 GPU 的任务入口。
它接收来自 CPU、驱动或其他设备的命令,例如:
启动 Kernel
执行 Draw Call
复制数据
记录 Event
启动光线追踪任务
前端通常负责或参与:
- 解析命令缓冲区;
- 读取 Kernel 启动参数;
- 管理图形和计算上下文;
- 生成 Grid 或图形工作;
- 将任务分发到不同处理分区;
- 管理部分同步和依赖。
简化过程:

图示:六、GPU Front End 是什么
七、命令处理器和 SM 调度器不是同一个东西
GPU 中至少存在两种完全不同粒度的调度。
上层前端处理:
哪个 Kernel 可以开始
哪个 Draw Call 可以执行
还有多少 Block 未分发
SM 内的 Warp Scheduler 处理:
下一个周期发射哪个 Warp
因此:
GPU Front End
管理大任务和命令
Warp Scheduler
管理 SM 内的具体指令发射
两者的时间尺度和工作内容完全不同。
八、计算任务如何进入 GPC 和 SM
假设一个 Kernel 有很多 Block。
大致过程如下:

图示:八、计算任务如何进入 GPC 和 SM
一个 Block 并不需要关心自己属于哪个 GPC。
这些映射由硬件完成。
九、Raster Engine 是什么
Raster Engine 是图形流水线中的固定功能结构之一。
它主要服务于:
- 三角形设置;
- 屏幕空间划分;
- 光栅化任务分发;
- 生成 Fragment 或像素工作。
一个 GPC 中配置 Raster Engine,可以让不同 GPC 并行处理不同的图元或屏幕区域。
简化过程:

图示:九、Raster Engine 是什么
纯 CUDA 计算不会直接使用传统光栅化流程,但 Raster Engine 仍是完整图形 GPU 的重要组成部分。
十、PolyMorph Engine 是什么
在部分 NVIDIA 架构图中,还会看到 PolyMorph Engine。
它通常与几何处理有关,可能承担:
- 顶点属性获取;
- Tessellation 相关操作;
- Viewport Transform;
- 图元处理;
- 顶点输出管理。
它通常与 TPC 或 SM 附近的图形处理结构相关。
对于学习 CUDA 和 AI 架构,不必深入记忆其所有细节,只需知道:
GPU 中既有可编程 SM,也有服务图形流水线的固定功能单元。
十一、Texture Unit 位于哪里
纹理单元通常靠近 SM 或 TPC。
它负责:
- 纹理地址计算;
- 纹理格式处理;
- Texture Cache 查询;
- 双线性或三线性过滤;
- 部分插值操作。
示意:

图示:十一、Texture Unit 位于哪里
Texture Unit 和普通 Load/Store Unit 都能读取数据,但纹理单元针对图像采样模式和过滤操作进行了专门优化。
十二、GPU 中的片上互连
大量 SM、L2 Cache 分片和显存控制器之间需要交换数据。
这通常依靠:
- Crossbar;
- NoC;
- 分层交换网络;
- 环形或网格互连;
- 厂商专有互连结构。
可以简化为:

图示:十二、GPU 中的片上互连
片上互连负责传输:
- Load 请求;
- Store 数据;
- Cache 返回数据;
- 原子操作;
- 一致性消息;
- 图形输出数据。
十三、为什么片上互连很重要
假设 GPU 有大量 Tensor Core,但片上互连带宽不足:

图示:十三、为什么片上互连很重要
最终计算单元仍会空闲。
因此 GPU 性能不仅由:
- SM 数量;
- Tensor Core 数量;
- 显存带宽;
决定,还受到片上网络能力影响。
这与 SoC 中 NoC 的作用类似。
十四、Crossbar 和 NoC 的区别
Crossbar 可以让多个输入连接多个输出:
输入 0 ─┬─ 输出 0
输入 1 ─┼─ 输出 1
输入 2 ─┼─ 输出 2
输入 3 ─┴─ 输出 3
优点:
- 路径灵活;
- 低负载时延迟较低。
缺点:
- 规模扩大后面积和连线复杂度迅速增加。
NoC 通常采用分布式路由:
节点 ─ Router ─ Router ─ 节点
│
Router
优点:
- 更容易扩展;
- 物理设计更规则;
- 适合大型芯片。
现代大型 GPU 的实际互连通常是复杂的专用分层网络,不能简单归类为单一教科书结构。
十五、L2 Cache 为什么被划分为多个 Slice
一整块巨大的集中式 L2 Cache 会产生:
- 访问端口过多;
- 连线太长;
- 带宽难以扩展;
- 单点瓶颈;
- 物理布局困难。
因此 L2 通常被划分成多个 Slice 或 Partition:
L2 Cache
├── Slice 0
├── Slice 1
├── Slice 2
└── Slice 3
每个 Slice 可能与某个显存控制器分区关系密切。
地址通过某种映射函数决定进入哪个 L2 Slice。
十六、Memory Partition 的基本结构
一个简化的显存分区可以表示为:

图示:十六、Memory Partition 的基本结构
整块 GPU 具有多个 Memory Partition:

图示:十六、Memory Partition 的基本结构
多个分区并行工作,共同提供总显存带宽。
十七、为什么地址要分散到不同分区
假设有4个内存分区。
连续数据块可以交织映射:

图示:十七、为什么地址要分散到不同分区
这样连续大块访问可以同时使用多个分区。
如果所有请求都落到同一分区:
Partition 0:拥塞
Partition 1:空闲
Partition 2:空闲
Partition 3:空闲
则整体带宽无法充分发挥。
所以数据布局和地址模式会影响整个 GPU 的内存分区利用率。
十八、一个 Load 请求如何穿过整块 GPU
假设 SM 中的 Warp 执行:
float x = A[i];
完整路径可以抽象为:
1. Warp Scheduler 发射 Load
2. LSU 计算每个线程的地址
3. Warp 地址被合并成内存事务
4. 查询本 SM 附近的 L1 Cache
5. L1 未命中
6. 请求进入片上互连
7. 根据地址路由到对应 L2 Slice
8. 查询 L2
9. L2 未命中
10. 请求进入对应 Memory Controller
11. 访问 GDDR/HBM
12. 数据返回 L2
13. 通过片上互连返回目标 SM
14. 可能进入 L1
15. 写入线程寄存器
16. Scoreboard 标记结果 Ready
图示如下:

图示:十八、一个 Load 请求如何穿过整块 GPU
十九、一个 Store 请求如何穿过 GPU
线程执行:
C[i] = value;
路径可能是:
1. Warp 生成写地址和写数据
2. LSU 合并写请求
3. 通过 Cache 或写缓冲
4. 请求进入片上互连
5. 路由到对应 L2 Slice
6. 更新缓存状态
7. 最终由内存控制器写入显存
Store 不一定立即到达物理显存。
它可能暂存在:
- Store Queue;
- Write Buffer;
- L1 或 L2;
- 合并缓冲区。
这也是为什么内存可见性需要同步和 Fence 语义。
二十、原子操作在哪里执行
假设多个 SM 对同一个 Global Memory 地址执行:
atomicAdd(&counter, 1);
如果完全把数据送回 SM 内部做读—改—写,容易产生严重冲突。
因此某些 Global Memory 原子操作会在靠近 L2 或内存分区的位置进行处理。
简化为:

图示:二十、原子操作在哪里执行
这样可以在共享地址的集中位置保证原子性。
具体实现随架构和数据类型变化。
二十一、ROP 与 Memory Partition 的关系
图形渲染末端的颜色、深度和模板操作需要高效访问帧缓冲区。
在部分传统架构图中,ROP 分区常与 L2 Cache 和显存分区关系密切。
简化理解:

图示:二十一、ROP 与 Memory Partition 的关系
因为 ROP 需要大量读写显存,所以把它与内存分区紧密组织有利于提高带宽。
具体组织在不同 GPU 架构中可能变化。
二十二、为什么 GPU 要采用多个重复分区
大型 GPU 设计常使用重复模块:
GPC 0
GPC 1
GPC 2
GPC 3
...
以及:
Memory Partition 0
Memory Partition 1
Memory Partition 2
...
这种模块化设计具有几个优点。
1. 易于扩展产品规模
高端型号:
启用更多 GPC 和 SM
低端型号:
启用较少 GPC 和 SM
2. 提高制造良率
如果某个 SM 或分区存在制造缺陷,可以关闭部分单元,芯片仍可能作为较低规格产品使用。
3. 简化物理设计
重复单元布局更规则,更容易进行布线和时钟设计。
4. 形成产品分级
同一架构可以通过启用不同数量的资源形成不同型号。
二十三、为什么实际 GPU 常有部分单元被关闭
芯片设计可能包含:
物理 SM 数量 > 产品启用 SM 数量
原因包括:
- 制造缺陷;
- 功耗限制;
- 产品定位;
- 频率目标;
- 市场分级;
- 提高良率。
例如同一晶圆上的芯片,完整可用者用于高端型号,部分单元有缺陷者关闭相应区域后用于低一级型号。
这种方法称为:
- Harvesting;
- Fuse-off;
- Die Binning。
二十四、频率并不是整块 GPU 完全相同
大型 GPU 内可能存在多个时钟域,例如:
SM Core Clock
Memory Clock
Display Clock
Video Engine Clock
NVLink Clock
PCIe Clock
不同模块工作频率不同,并通过:
- 异步 FIFO;
- Clock Domain Crossing;
- 握手机制;
进行数据交换。
因此不能认为 GPU 中所有晶体管都以同一个频率工作。
二十五、GPU 的功耗管理
整块 GPU 的所有单元并不一定始终全速运行。
硬件可能采用:
- Clock Gating;
- Power Gating;
- Dynamic Voltage and Frequency Scaling;
- Boost Clock;
- 温度和功耗限制;
- 单元空闲检测。
例如没有 Tensor Core 工作时,可以减少相关时钟翻转。
没有显示输出时,显示相关单元也可以进入低功耗状态。
二十六、为什么标称频率和实际频率不同
GPU 实际频率受到:
- 温度;
- 功耗上限;
- 电压;
- 工作负载类型;
- 芯片体质;
- 散热条件;
影响。
例如 Tensor Core 密集任务和显存密集任务的功耗分布不同,实际 Boost 频率也可能不同。
所以峰值算力公式中的频率往往是理论或特定条件下的频率。
实际持续性能需要看真实运行频率。
二十七、数据中心 GPU 为什么常没有显示输出
数据中心 GPU 主要面向:
- AI 训练;
- AI 推理;
- HPC;
- 大规模并行计算。
它们可能弱化或不提供传统显示接口和部分消费图形功能。
芯片面积和功耗可以更多用于:
- Tensor Core;
- HBM 接口;
- NVLink;
- ECC;
- RAS;
- 大容量缓存。
因此数据中心 GPU 与消费显卡即使基于相近架构,整体资源配置也可能不同。
二十八、视频编解码器在哪里
现代 GPU 通常还有独立视频引擎,例如:
Video Decode Engine
Video Encode Engine
Optical Flow Engine
它们负责:
- H.264/H.265/AV1 解码;
- 视频编码;
- 视频转码;
- 运动估计;
- 流媒体处理。
这些任务并不一定主要占用 SM。
因此视频播放时,GPU 利用率可能不高,但专用视频引擎正在工作。
二十九、DMA 和 Copy Engine 在整块芯片中的位置
Copy Engine 负责数据搬运,例如:
CPU Memory ↔ GPU Memory
GPU Memory ↔ GPU Memory
GPU ↔ GPU
它通常独立于 SM 计算核心。
简化结构:

图示:二十九、DMA 和 Copy Engine 在整块芯片中的位置
这样可以在 SM 计算时并行进行部分数据传输。
三十、PCIe 和 NVLink 接口属于哪里
它们位于 GPU 芯片的高速 I/O 子系统。
PCIe 主要连接:
- CPU;
- 主板;
- 网卡;
- 其他 PCIe 设备。
NVLink 主要连接:
- 其他 GPU;
- NVSwitch;
- Grace CPU;
- 特定高速系统组件。
数据进入 GPU 后,通常仍需要经过:
I/O 接口
↓
内部互连
↓
L2 / 显存系统或其他目标单元
三十一、如何阅读一张 NVIDIA GPU 框图
看到框图时,建议按以下顺序分析。
第一层:找 SM
先看:
- 一共有多少 SM;
- SM 如何分组;
- 每组 SM 附近有什么。
SM 决定大部分通用计算能力。
第二层:找 GPC 和 TPC
看清:
每个 GPC 有多少 TPC
每个 TPC 有多少 SM
但要注意不同架构数量可能变化。
第三层:找 L2 和内存控制器
观察:
- L2 是否分片;
- 有多少内存分区;
- 显存接口如何组织。
第四层:找固定功能单元
例如:
- Raster Engine;
- Texture Unit;
- ROP;
- RT Core;
- Video Engine。
第五层:找片上互连和外部接口
例如:
- Crossbar / NoC;
- PCIe;
- NVLink;
- HBM/GDDR PHY。
三十二、不要用方框面积直接推断真实性能
架构图中的方框大小通常只是示意。
例如一个很小的 Tensor Core 方框,不代表芯片面积真的很小;一个很大的控制框,也不代表它占据大量晶体管。
架构图主要表达:
- 层次;
- 数量;
- 连接关系;
- 功能分区。
它通常不精确表达:
- 物理面积;
- 布线;
- 时钟树;
- 电源网络;
- 实际芯片 Floorplan。
三十三、逻辑框图和物理 Floorplan 的区别
逻辑框图:
表达模块功能和连接关系
物理 Floorplan:
表达模块在芯片上的真实摆放位置
逻辑上相邻的两个模块,物理上不一定紧挨着。
物理设计还要考虑:
- 存储器宏块;
- I/O PHY;
- HBM 接口;
- 电源完整性;
- 热点;
- 时钟;
- 长连线;
- 布局对称性。
所以公开架构图不能直接当作真实芯片版图。
三十四、GPU 为什么容易扩展成多个 Die
当单块芯片尺寸接近制造极限时,可以采用多 Die 或 Chiplet 思路。
简化为:
Compute Die 0
↕ 高速封装内互连
Compute Die 1
↕
Memory / I/O 结构
多 Die 的优势:
- 避免单 Die 过大;
- 改善良率;
- 增加晶体管数量;
- 允许不同功能采用不同芯片。
挑战包括:
- Die 间带宽;
- Die 间延迟;
- 缓存一致性;
- 地址映射;
- 软件透明性;
- 封装功耗。
Blackwell 数据中心 GPU 使用两个计算 Die,通过高速封装内互连协同工作,就是这种扩展方向的代表。
三十五、多 Die GPU 为什么难于多核 CPU
GPU 工作负载具有极高带宽需求。
如果两个 Die 之间频繁交换:
- Warp 数据;
- Cache Line;
- Tensor 数据;
- 原子请求;
Die 间互连可能成为瓶颈。
所以多 Die GPU 需要非常高的封装内带宽,并需要合理划分:
- SM;
- Cache;
- Memory Partition;
- 调度;
- 地址空间。
目标是让软件尽可能把它视为统一 GPU,同时控制跨 Die 通信成本。
三十六、从 RTL 角度看完整 GPU
如果高度抽象,一个 GPU 顶层 RTL 可能类似:

图示:三十六、从 RTL 角度看完整 GPU
真实 GPU 远比这个复杂,但这个层次已经可以帮助理解模块关系。
三十七、一块 GPU 的完整工作路径
以 CUDA Kernel 为例:

图示:三十七、一块 GPU 的完整工作路径
以图形渲染为例:

图示:三十七、一块 GPU 的完整工作路径
三十八、本课核心结论
第一,完整 GPU 由前端、多个计算分区、片上互连、L2、显存控制器和专用硬件共同组成。
第二,NVIDIA 图形 GPU 常使用:
GPU → GPC → TPC → SM
这样的层级组织,但具体数量随架构变化。
第三,SM 是执行 Warp 的核心模块,CUDA Core 只是 SM 内的一类执行单元。
第四,GPU Front End 处理命令、Kernel 启动和上层任务分发。
第五,Raster Engine、Texture Unit 和 ROP 是面向图形的专用结构。
第六,大量 SM 通过片上互连访问分片式 L2 Cache 和显存分区。
第七,L2 被划分为多个 Slice,是为了提高带宽、扩展性和物理实现能力。
第八,显存控制器负责把请求映射到 HBM/GDDR 的通道、Bank、Row 和 Column。
第九,一个 Global Load 会经过 LSU、L1、片上互连、L2、内存控制器和显存。
第十,GPU 采用重复的 GPC、SM 和 Memory Partition,有利于产品扩展、良率和物理设计。
第十一,架构逻辑图不等于实际物理 Floorplan,方框大小通常不能表示真实面积。
第十二,Copy Engine、Video Engine、PCIe 和 NVLink 等单元可以独立于 SM 工作。
第十三,多 Die GPU 可以突破单芯片面积限制,但要求极高的 Die 间带宽和统一管理能力。
第十四,判断 GPU 性能不能只看 SM 数量,还要同时看 L2、片上互连、显存带宽、功耗和专用单元。
下一课可以进一步学习:
第十七课:NVIDIA GPU 架构如何演进
重点包括:
Tesla:统一着色器与 CUDA 起点
Fermi:Cache 和通用计算增强
Kepler:提高能效与并行规模
Maxwell:重构 SM 分区
Pascal:FP16 与 NVLink
Volta:Tensor Core 与独立线程调度
Turing:RT Core
Ampere:TF32、稀疏 Tensor Core
Hopper:Transformer Engine、TMA
Blackwell:多 Die、FP4 和机架级 GPU