
算力引擎的内核:GPU 架构深度解析与 H100 技术密码 原创
本文聚焦 GPU 这一 AI 时代的核心算力引擎,从 CPU 与 GPU 的本质差异切入,解析二者在架构设计(运算单元占比、并行能力)和协同工作流程(数据传输、指令注入、并行计算、结果回传)的底层逻辑。
以 NVIDIA H100(Hopper 架构)为核心案例,深入拆解其基本架构:80GB HBM3 显存的高带宽设计、PCI-E 5.0 接口的传输能力,以及内部层级化结构 —— 从顶层 GPC(图形处理集群)、中层 TPC(纹理处理集群)到核心 SM(流式多处理器)的功能分工。同时,详解 SM 的四象限组成(Tensor Core、CUDA Core 等计算单元及缓存系统)、五级缓存机制(寄存器、L0/L1/L2 缓存、HBM3)的动态调度策略,以及 TMA(张量内存加速器)对数据搬运效率的革命性提升,为理解 GPU 高性能计算原理提供全景视角。
GPU:AI时代的算力引擎
在AI技术蓬勃发展的今天,大模型训练和推理应用正在各个行业快速普及。越来越多的企业开始自行训练AI模型,或是基于大厂提供的基础模型进行二次开发。在这个过程中,数据隐私保护的要求促使企业倾向于在本地部署AI模型,而不是完全依赖云端服务。这种趋势使得硬件部署成为了AI应用落地的重要课题,而GPU作为AI计算的核心硬件,自然成为了关注的焦点。
CPU VS GPU
在计算机系统中,CPU(中央处理单元)和GPU(图形处理单元)是两个核心组件,它们各自承担着不同的任务,设计理念和架构也有所不同。CPU是计算机的大脑,负责处理操作系统和应用程序运行所需的各类计算任务。它具有强大的通用性,能够处理各种复杂的数据类型和逻辑判断。CPU的内部结构非常复杂,因为它需要应对大量的分支跳转和中断处理,以确保程序能够高效、稳定地运行。由于CPU需要处理的任务种类繁多,它的设计更注重逻辑控制和串行计算能力,通过流水线技术等手段缩短程序的执行时间。
如下图所示,从架构上看,CPU和GPU都包含运算单元(ALU)、控制单元(Control)和缓存单元(Cache),但三者所占的比例截然不同。CPU的缓存单元占据了很大一部分空间,大约占50%,控制单元占25%,运算单元仅占25%。这种设计使得CPU能够通过缓存减少数据访问的延迟,提高处理效率。而GPU的缓存单元仅占5%,控制单元占5%,运算单元则占据了90%。GPU的设计更注重运算能力的提升,通过大量运算单元和线程来实现高吞吐量。
在并行处理能力方面,CPU拥有少量的强大计算单元,适合处理顺序执行的任务。它的时钟频率很高,能够在很少的时钟周期内完成算术运算。CPU还具备复杂的控制逻辑单元,可以提供分支预测能力,使其在处理逻辑控制和串行计算时表现出色。相比之下,GPU采用了数量众多的计算单元和线程,能够实现非常大的计算吞吐量。GPU的超配线程设计可以很好地平衡内存延迟问题,从而同时处理多个任务,专注于大规模高度并行的计算任务。
一言以蔽之,CPU更适合处理顺序执行的任务,如操作系统、数据分析等;而GPU则适合处理需要大规模并行计算的任务,如图形处理、深度学习等。
CPU 与 GPU 协同工作
在了解了CPU(中央处理器)和GPU(图形处理器)的不同功能和特点后,我们可以进一步探讨它们是如何协同工作的。CPU和GPU虽然在设计和功能上有所不同,但通过高效协作,能够充分发挥各自的性能优势,提升整体系统的计算效率。接下来,我将通过下面这张图来展示CPU与GPU协作的全过程。
根据图上的标号,进行详细解释:
数据传输阶段
- CPU发起DMA(Direct Memory Access,直接内存访问),将系统主内存中的数据复制到GPU内存中。
指令注入阶段
- CPU向GPU注入指令,告诉GPU需要执行的任务。
- 例如,在深度学习任务中,这些指令可能包括模型推理或训练的命令。
并行计算阶段
- GPU中的多个计算线程会并行执行CPU注入的指令。
- 由于GPU拥有大量计算核心,特别适合处理高度并行化的任务,如矩阵运算。
结果回传阶段
- GPU完成计算后,会通过DMA将结果数据从GPU内存复制回系统主内存中。
- 这些结果可能包括模型的推理输出或训练过程中的中间结果。通过这种协作机制,CPU负责任务的调度和管理,而GPU则专注于执行高并行化的计算任务,从而实现了计算资源的高效利用。
GPU 基本架构
在介绍了CPU和GPU的协作方式后,我们接下来将聚焦于GPU的内部机构,特别是以NVIDIA H100(基于Hopper架构)为例,深入了解其高性能计算的核心秘密。作为英伟达于2022年发布的旗舰级GPU加速器,H100专为高性能计算(HPC)、人工智能(AI)和大规模数据中心设计,是前代A100(Ampere架构)的升级版。其内部设计采用了多项突破性技术,其中最引人注目的是其高带宽内存(HBM)和PCI-E 5.0接口的结合。
如下图所示,H100配备了80GB的HBM3显存,这是其性能的核心保障之一。与之配套的显存技术——高带宽内存(HBM),是一种基于3D堆叠技术的高性能内存标准。通过将多个DRAM芯片垂直堆叠在GPU芯片旁边(图的左侧)。多个 HBM 堆叠的部分就是显卡的显存。而在它右边通过双箭头连接的绿色区域就是显卡的运算核心,包含:运算、缓存、控制等功能,在后面的内容中会展开描述。
让我们将上面的图片放大, 关注 HBM 显存本身,如下图所示。多个显存芯片(HBM)通过硅通孔(TSV, Through-Silicon Via)实现层间通信,像一栋高楼,每层楼是一个DRAM芯片,通过“电梯”(TSV)快速连通所有楼层,从而实现了更高的传输效率。HBM显著提升了内存带宽,同时减少了功耗和占用面积。
需要注意的是,H100芯片支持6个HBM堆栈(HBM Stack),每个堆栈可提供800GB/s的传输带宽,总内存带宽高达4.8TB/s。
在连接方面,H100通过16个PCI-E 5.0通道与CPU相连,每个通道的单向带宽约为4GB/s(双向约8GB/s),总理论传输带宽可达63GB/s。这一设计确保了CPU能够高效地将程序指令发送到GPU,并为GPU提供访问计算机主存储器的快速通道。
GPU 内部结构
在对 GPU 的基本架构有所了解之后,然后深入到 GPU 的运算核心中一探究竟。如果笼统而言,GPU 的运算核心包含:运算、缓存和控制。不过设计到的组件和单元较多,需要通过下图来了解。
我们可以清晰地看到 NVIDIA GH100 芯片的层级架构,从顶层的 GPC 到下层的 TPC、SM,再到具体的运算核心(CUDA Core、Tensor Core、RT Core)和缓存(L2 Cache)的分布与功能。
从图片整体而言,描述了 GPU 的运算单元与其他组件的协同情况。图的上方通过 PCI-E5.0 的接口与 CPU 沟通,左右两侧与 HBM 显存进行数据交换,下方利用英伟达的 NVLinke 接口技术与其他 GPU 显卡进行沟通。
接下来,让我们把目光放到这张图的中间部分:
GPC(Graphics Processing Cluster,图形处理集群)
它用绿色的区域表示,在 H100 GPU 中有 8 个 GPC。它负责管理和协调多个下级计算单元(如 TPC、SM)。每个 GPC 包含 9 个 TPC。每 4 个 GPC 共享 30MB L2 缓存,整颗芯片总计 60MB L2 Cache。
它用来分配计算任务,将图形渲染或计算任务分发到下属 TPC/SM。同时避免不同任务间的资源争用(如光线追踪与 AI 计算)。
TPC(Texture Processing Cluster,纹理处理集群)
它是 GPC 的子模块,传统上专注于纹理处理(图形渲染),但在现代 GPU 中已扩展为通用计算单元。每个 GPC 包含 9 个 TPC,整颗芯片共 72 个 TPC。每个 TPC 包含 2 个 SM,整颗芯片总计 144 个 SM。它用来做纹理映射,例如:加速游戏/图形中的纹理采样(虽命名保留“纹理”,实际功能已泛化)。负责与 SM 协作处理通用计算(如 CUDA 核心的并行任务)。
SM(Streaming Multiprocessor,流式多处理器)
它是 NVIDIA GPU 的最小计算单元,位于 GPC 内部,H100 的 TPC 中包含了 2 个 SM 单元,SM 直接执行 CUDA 核心、Tensor Core 等运算任务。换句话说它就是运算的主力军。每个 SM 包含:128 个 CUDA Core(FP32/INT32 运算)。4 个 Tensor Core(FP8/FP16/TF32 加速 AI)。1 个 RT Core(光线追踪加速)。整颗芯片总计 144 个 SM→总计 18,432 个 CUDA Core(144 × 128)。
L2 Cache(二级缓存)
它位于整个运算核心的中间,是全局共享的高速缓存,用于减少访问显存(HBM)的延迟。我们可以看到 H100 拥有 60MB L2 Cache(8 GPC ÷ 4 × 30MB)。采用 非均匀分配(NUMA):每 4 个 GPC 共享 30MB,优化数据局部性。这起到了数据复用的效果,频繁访问的数据(如 AI 模型参数)缓存在 L2,降低 HBM 访问功耗。还会肩负协调多个 GPC 间数据同步的责任。
SM 流式多处理器
通过前面对 GPU 内部结构的介绍,我们发现在GPU的层级架构中,SM(Streaming Multiprocessor) 是执行实际计算任务的核心单元。每个SM如同一个高度并行的微型计算集群,负责管理数百个并发线程的计算资源调度。当GPU接收来自CPU的指令后,任务会被拆解成线程块(Thread Block)分配到各个SM上执行。这种设计使数万个线程能高效协同,尤其适合处理图形渲染与AI计算中的海量并行任务。
SM 内部组成结构
接下来,通过下图对 SM 的内部结构进行了解。
每个SM被划分为4个对称的象限(Quadrant),形成高度复用的计算单元集群:
- 计算资源分层部署:每个象限配备 1个第四代Tensor Core(专精矩阵运算,如FP16矩阵乘法提速10倍)和 32个FP32 CUDA Core(处理标量计算与逻辑控制)。二者互补协作——Tensor Core像“矩阵流水线”高效处理大块数据,CUDA Core则如“精密工具组”执行激活函数、数据转换等细粒度操作。
- 执行单元全域覆盖:INT32单元(地址计算)与FP64单元(科学计算)分布其间,确保整数/双精度需求无缝衔接。特殊函数单元(SFU)独立处理超越函数(如SIN/COS),释放主计算管线压力。
- 存储系统紧耦合:每象限独占 1KB寄存器文件(线程私有,1-2周期延迟),构成最速数据通道;共享的 L0指令缓存实时输送指令流,避免计算单元“饥饿”。全局 L1缓存(256KB/SM)作为数据中转站,减少高延迟内存访问。
- 动态调度中枢:Warp调度器(每SM配4个)持续监控32线程束状态,将矩阵运算分派至Tensor Core,标量指令路由到CUDA Core,实现零空闲的流水线作业。
从上图得知,每个SM采用四象限(Quadrant)架构,这里我们将象限中的组件列了一个清单方便查看:
组件类型 | 数量/象限 | 功能说明 | 关键技术特性 |
Tensor Core | 1个 | 加速矩阵运算(GEMM) | 第四代架构,支持FP8/FP16/TF32 |
FP32 CUDA Core | 32个 | 单精度浮点运算(激活函数等) | 传统标量计算核心 |
INT32单元 | 16 个 | 整数运算与地址计算 | 独立于FP32单元 |
FP64单元 | 16 个 | 双精度科学计算 | 面向HPC场景 |
寄存器文件 | 1KB | 线程私有存储(速度最快) | 延迟1-2周期 |
L0指令缓存 | 1 个 | 减少指令获取延迟 | 服务象限内所有核心 |
LD/ST | 8 个 | 加载参数训练集 | |
SFU | 1 个 | 保存特殊函数 | |
Warp Scheduler | 1 个 | 运算线程调度器 | |
Dispatch Unit | 1 个 | 发送指令 |
SM内部工作机制
在了解了 SM 的组成结构之后, 再来看看它是如何工作。 SM通过三级流水线机制实现组件高效协作,以执行一条典型指令为例:
阶段1:指令调度
- Warp Scheduler监控32线程组成的Warp状态,选择就绪的Warp。
- Dispatch Unit解析指令类型,分配至对应硬件单元:
A.FP32/INT32运算→CUDA Core
B.矩阵乘法 (GEMM)→Tensor Core
C.超越函数 (e.g. SIN)→SFU(特殊函数单元)
D.数据搬运→LD/ST(加载/存储单元)
阶段2:数据供给
- 寄存器文件提供线程级瞬时数据(如矩阵计算中的中间值)
- L1 Cache缓存共享数据(若寄存器溢出则暂存至此处,延迟20-30周期)
- TMA(Tensor Memory Accelerator)优化矩阵分块访问(自动处理子矩阵内存布局)
阶段3:并行执行
假设上图完成 Transform 模型架构的运算,大致工作流程如下:
- Tensor Core率先处理核心矩阵运算:接收16×16矩阵块(如QK<sup>T</sup>),执行FP16/FP8混合精度GEMM,提供10倍于标量单元的吞吐量。
- FP32 CUDA Core承接后续计算:处理非矩阵操作,包括Softmax归一化、激活函数(GELU/ReLU)等标量密集型任务。
- SFU加速特殊函数:专精超越函数计算(如Softmax中的指数运算),降低主计算管线延迟。
- 分级存储体系保障数据供给:结果优先写回寄存器(1-2周期延迟)或L1缓存(20-30周期),最终由L2缓存(60MB)协调写入HBM显存(3.35TB/s带宽)。
GPU 的缓存机制
通过对 SM 的内部组成和工作原理的介绍,让我们对 GPU 的运算有了更加深刻的了解,不过在探究 GPU 内部的过程中发现遇到了很多的“缓存”。这里我们以英伟达 H100 显卡为例,对其缓存按照五级分层给大家做详细介绍。
这五级分层分别是:顶层的寄存器文件(1周期延迟/1KB线程)与L0指令缓存如同贴身工作台,专精服务线程的即时计算与指令吞吐;中层的L1缓存(256KB/SM)与L2缓存(60MB/GPU)扮演共享枢纽,以容量换带宽,高效缓存高频数据块(如Attention矩阵切片);底层的HBM3显存(80GB/3.35TB/s)则如中央仓库,承载全量模型参数。这套机制通过动态路由策略——将98%的“热数据”锁定在高速缓存,仅5%的“冷数据”下沉至显存——使H100的Tensor Core利用率突破98%,同时将AI训练的吞吐量推升6倍。
GPU 缓存分层
如下图所示,我们将 GPU (以英伟达 H100 为例)缓存分成五个层次。
针对这五个层级,按照功能和服务的对象将其分为顶层、中层和底层,如下:
顶层:专注运算命令的极速通道(服务线程即时需求)
组件 | 速度优势 | 容量限制 | 高频场景示例 |
寄存器文件 | 1周期延迟(硬件极限) | 1KB/线程 | 矩阵乘法中间累加值 |
L0指令缓存 | 2-5周期取指(0空转) | 4KB/象限 | Tensor Core的HMMA指令预取 |
中层:专注数据缓存的均衡通道(服务SM协作需求)
组件 | 速度-容量平衡点 | 核心功能 | 实战价值 |
L1数据缓存 | 256KB/SM(20-30周期) | 缓存Attention头的K/V块 | 使QK^T计算减少76% HBM访问 |
L2 数据缓存 | 60MB/GPU(100-200周期) | 聚合多SM的梯度数据 | AllReduce通信延迟降低40% |
底层:专注参数模型的海量通道(服务全局存储需求)
组件 | 容量王者 | 速度代价 | 不可替代性 |
HBM3显存 | 80GB(存储全量参数) | 300+周期 | 承载百亿参数大模型 |
GPU 缓存策略
1. 热度感知缓存
基于访问频率动态调整数据层级, L2缓存通过内置的访问计数器自动识别热点数据,例如Transformer的Embedding表。当某个数据块被连续访问超过三次时,其缓存优先级会被提升,可能被保留在L2缓存的Bank0高速区。此外,在多个SM共享相同权重的情况下,例如在AllReduce期间,L2缓存会采用单副本缓存策略,以优化资源使用。
2. 寄存器压力释放
通过编译器驱动数据生命周期管理。通过路由逻辑实现高效的资源分配和性能优化。在实施机制方面,寄存器分配算法优先保留循环计数器、矩阵累加器等关键变量,确保核心计算任务的高效执行。当寄存器不足,例如线程使用超过1KB时,系统会自动将中间变量暂存至L1缓存,以避免性能瓶颈。
此外,针对长生命周期变量,如优化器状态等,系统采用动态降级策略,直接路由至L2或HBM,进一步优化内存使用效率。在性能防护方面,编译器引入了寄存器溢出警告机制,当寄存器溢出时会触发性能悬崖警告(通过NVCC编译选项--ptxas-warnings实现),提醒开发者关注潜在性能问题。同时,Hopper架构新增寄存器文件压缩技术,使寄存器的有效容量提升40%,从而在有限的硬件资源下实现更高的计算效率。
3. 显存预取流水线
路由逻辑主要关注计算与数据搬运的时空重叠,通过三级预取流水线和TMA加速器来优化数据传输与计算的并行性。在实施机制方面,三级预取流水线分为三个层级:Tier1阶段,Tensor Core启动时,DMA预取相邻数据至L2缓存;Tier2阶段,L2到L1的数据搬运与标量函数单元(SFU)的计算任务并行执行;Tier3阶段,寄存器加载与矩阵乘法操作实现重叠执行。
此外,TMA(张量内存加速器)通过张量坐标的直接定位,能够快速访问HBM中的数据块,从而减少地址计算的开销。在带宽优化方面,系统将细碎的数据传输请求合并为128字节的大块传输,这使得HBM3的效率提升了4倍;同时,当Tensor Core正在处理一个16×16的矩阵时,DMA已经预取了下一个64×64的数据块,进一步提升了数据传输的效率和计算的连续性。
缓存路由策略全景图
这里我们将路由策略做一个总结,通过下面矩阵表格的方式展示。
数据特性 | 路由目标 | 策略实现 | 硬件支持 |
指令流 | → L0缓存 | 分支预测预取下4条指令 | PC-Relative Addressing |
线程私有中间结果 | → 寄存器 | 编译器寄存器分配算法 | 寄存器文件压缩 |
高频共享数据 | → L1缓存 | LRU替换策略+硬件预取 | 256KB SRAM阵列 |
跨SM共享权重 | → L2缓存 | 访问计数晋升机制 | 60MB全域缓存 |
历史参数/冷数据 | → HBM | DMA异步搬运+缓存逐出 | HBM3 3.35TB/s带宽 |
TMA 加速原理
前面我们花费了很多的篇幅在讲解 GPU 的构成和工作方式,并且在 GPU 的运算单元上停留了很长时间。我们知道,在大模型训练和高性能计算任务中,GPU 的计算效率并不仅仅取决于 Tensor Core 的运算能力,还极大依赖于数据搬运是否高效。而传统架构中,计算线程必须亲自负责内存地址生成与数据传输任务,这使得原本用于数学运算的资源被“数据搬运”占用,效率无法最大化。
为了解决这个问题,NVIDIA 在 Hopper 架构的 H100 中引入了 TMA(Tensor Memory Accelerator)单元,彻底改变了数据在 GPU 内部的传输机制。
为了把 TMA 这种重要的概念搞清楚,通过下图给大家做详细讲解,先看图的左边。
在 A100 中,数据从显存搬运到 SM(流式多处理器)内部缓存的全过程,依赖指令线程来完成。
当计算需要数据时,线程首先要手动生成内存地址,再通过 LDGSTS 指令从显存读取数据。这意味着线程不仅要负责发起读写操作,还要等待数据搬运完成。在这个过程中,线程无法继续进行其他计算任务,Tensor Core 的计算资源也被闲置下来。
换句话说,在 A100 架构中,“线程+数据线程”是合并在一起的,既要思考如何计算,也要亲自去“搬砖”。尤其在大模型训练这种需要频繁搬运大块数据的任务中,这种紧耦合的模式会严重限制整体吞吐率。
既然 A100 的设计限制了整体吞吐量,那么我们看看图的右边 H100 在加入了 TMA 有何改观。H100 的最大变化在于新增了一个名为 TMA 的硬件单元,专门负责地址生成和数据搬运。现在,线程只需告诉 TMA 自己需要哪一块数据、数据的尺寸和布局等信息,TMA 就能自动生成地址,直接将数据从 GPU 显存搬运到共享内存或一级缓存中。
图中可以看到,H100 的指令线程与数据线程已经分离,原本由线程执行的数据搬运操作完全交由 TMA 处理。线程和 Tensor Core 因此可以继续执行数学运算,不再被等待或阻塞。
这种架构上的优化,使得 SM 内部的资源调度更加高效,计算与数据访问可以并行进行,尤其对 AI 和 HPC 等任务密集型场景,带来显著的性能提升。
TMA 的出现最大程度上利用了缓存的时间局部性和空间局部性原则,将频繁使用的数据及时搬入共享内存,让计算单元可以高速、低延迟地访问数据。
在 GPU 这样数以千计线程并行执行的环境中,避免线程在 I/O 上的等待成为提升效率的关键。而 TMA 的加入,则是在这一关键点上,迈出的决定性一步。
补充说明:什么是时间局部性和空间局部性?
GPU(以及 CPU)之所以设置缓存,是为了避免频繁访问速度较慢的显存或主存,而缓存的命中效率依赖于“数据局部性”原则。
时间局部性指的是:刚刚访问过的数据,很快可能会再次被访问。比如你正在做一段矩阵计算,某个数据块多次参与乘法,就体现了时间局部性。
空间局部性则是指:如果某个地址的数据被访问,那么它附近的数据也很可能在接下来被访问。比如读取一个数组时,往往会按序读取多个相邻元素,这就属于空间局部性。
TMA 支持批量搬运连续的数据块,正好契合这两个局部性原则。它能预判和预取有可能用到的数据,减少线程频繁请求显存的次数,让共享内存和一级缓存的命中率大大提高,进而提升整体计算效率。
总结
本文系统剖析了 GPU 的架构设计与工作机制,核心揭示了其作为并行计算引擎的独特优势。通过对比 CPU 与 GPU 的架构差异(运算单元占比、并行能力侧重),阐明二者协同工作的高效模式。以 H100 为实例,层层拆解其层级化结构:GPC 的任务分配、TPC 的功能扩展、SM 的并行计算核心,尤其是 SM 内部 Tensor Core 与 CUDA Core 的分工协作,构成了高效处理 AI 与图形任务的基础。
五级缓存机制通过动态调度热数据,平衡了速度与容量;TMA 技术则通过分离指令与数据线程,突破了数据搬运的效率瓶颈。这些设计共同支撑了 H100 的高性能表现,使其成为 AI 训练、高性能计算的核心硬件,也为理解现代 GPU 的技术演进与应用价值提供了清晰框架。
作者介绍
崔皓,51CTO社区编辑,资深架构师,拥有18年的软件开发和架构经验,10年分布式架构经验。
