Night Office

CABINET  / The Physical Stack of AI / AI Infra

GPU

24k 字


Physical Stack of AI 系列 · 第三章

上一章拆解了 CPU——串行架构、复杂控制逻辑、多层缓存,一切服务于”低延迟完成单个任务”。这一章看 GPU,它的逻辑是,牺牲单线程速度,换取大规模并行吞吐。

本篇的路线图:

§6  GPU 硬件架构:从芯片平面图开始(自顶向下拆解)
§7  硬件与软件的映射:从 SIMD 到 SIMT
§8  GPU 架构演进:从 Fermi 到 Blackwell(+ 产业史)
§9  显卡:GPU Die 之外的部分
§10 CPU-GPU 联动:Grace-Blackwell 架构

§6. GPU 硬件架构

理解 GPU,最好的方式是从一颗 Die 的俯瞰图开始,自顶向下拆解。我们以 NVIDIA 最新的 Blackwell 架构(2024)为主线,Hopper(2022)作为对比。

6.1 整体结构

先建立全局视角。以数据中心版 GB100 GPU Die(Blackwell 架构)为例:

GB100 GPU Die(Blackwell 架构)
├── GPC (Graphics Processing Cluster) × 8
│   └── TPC (Texture Processing Cluster) × 若干
│       └── SM (Streaming Multiprocessor) × 若干
├── L2 Cache
├── Memory Controller(连接 HBM3e)
├── NVLink 5.0 Controller
└── GigaThread Engine(全局线程调度器)
图:blackwell die shot(图源:NVIDIA Technical Blog, Inside NVIDIA Blackwell Ultra)
图:blackwell die shot(图源:NVIDIA Technical Blog, Inside NVIDIA Blackwell Ultra)

几个关键概念:

  • GPC(Graphics Processing Cluster):名字源自图形渲染时代,但在 AI 计算中只是 SM 的物理分组层级。一颗 GB100 有 8 个 GPC。
  • TPC(Texture Processing Cluster):同样是历史遗留命名。每个 TPC 包含若干 SM。
  • SM(Streaming Multiprocessor):GPU 的基本计算单元,类似于 CPU 的”核心”,但内部结构和设计哲学完全不同。SM 是理解 GPU 的核心抽象层。
图:The Blackwell GPC with Raster Engine, 8 TPCs, 16 SMs, and 16 ROPs.(图源:nvidia-rtx-blackwell-gpu-architecture.pdf)
图:The Blackwell GPC with Raster Engine, 8 TPCs, 16 SMs, and 16 ROPs.(图源:nvidia-rtx-blackwell-gpu-architecture.pdf)

这些名词虽然暂时看起来陌生,不过有了CPU拆解的经验,我们可以想象,这些部件的底层也就是无数Transistors而已。

6.2 SM 内部结构

SM 是 GPU 的核心,我们来拆开它看看里面是什么。

Blackwell 架构 SM(以 GB100 数据中心版为例)

一个 Blackwell SM
├── Processing Block #0
│   ├── 统一 INT32/FP32 CUDA Cores
│   ├── 1 × Fifth-Gen Tensor Core(支持 FP4/FP6/FP8)
│   ├── SFU (Special Function Unit,计算 sin/cos/exp 等)
│   ├── 1 × Warp Scheduler + Dispatch Unit
│   └── Register File (64 KB)
├── Processing Block #1(同上)
├── Processing Block #2(同上)
├── Processing Block #3(同上)
└── Shared Memory / L1 Cache(4 个处理块共享)
图:Blackwell Ultra SM architecture(图源:NVIDIA Technical Blog)
图:Blackwell Ultra SM architecture(图源:NVIDIA Technical Blog)

每个 SM 包含 4 个 Processing Block(也叫 Quadrant / Sub-partition),是 SM 内部的独立调度单元。

6.2.1 CUDA Core

CUDA Core 是 GPU 最基本的计算单元,对应CPU里的ALU。

它的核心操作是 FMA(Fused Multiply-Add)

A × B + C → 一个时钟周期完成

每个 CUDA Core 每周期处理一个 32 位浮点数(FP32)或一个 32 位整数(INT32)的 FMA 运算。就这么简单,没有分支预测,没有乱序执行,没有推测执行。

CUDA Core 底层长什么样?和 CPU 的 ALU 像吗?

本质上,CUDA Core 和 CPU 的 ALU 一样,都是由逻辑门(AND、OR、NOT、XOR)组合而成的组合/时序电路。核心都是**加法器(Adder)和乘法器(Multiplier)**的晶体管级实现。在最底层——晶体管和逻辑门这一层——两者没有本质区别。

区别在于:

  • CPU ALU 被包裹在一层厚厚的控制逻辑中:分支预测器(Branch Predictor)、乱序执行引擎(Out-of-Order Engine)、重排序缓冲区(ROB)、保留站(Reservation Station)……这些控制逻辑的晶体管数量可能是 ALU 本身的 5-10 倍。目的是让单个 ALU 尽可能快地、不间断地工作。
  • CUDA Core 则几乎是”裸奔”的 ALU——没有分支预测,没有乱序执行,只有一个简单的 Warp Scheduler 告诉它”这个周期执行这条指令”。省下来的晶体管全部拿去复制更多的 ALU
  • CUDA Core 做的一个关键优化是 FMA(Fused Multiply-Add)硬件:将 A×B+C 合并为一条指令、一个硬件单元完成,中间不做舍入——既快(1 个周期而非 2 个),又精确(只在最终结果处舍入一次)。这对Tensor Core里的矩阵运算至关重要。

整个 Blackwell B200(双 Die)拥有约 21,760 × 2 = 43,520 个 CUDA Cores(数据中心版)。消费级 GB202 有 24,576 个 CUDA Cores。对比一颗顶级桌面 CPU(如 i9-14900K)的 24 个核心,数量差距超过 1000 倍

[!info] 在上图中,还可以看到SFU(Special Function Unit)这个模块,这是用来进行特殊运算的,比如MAX(), MIN(), 或者三角函数等。

上图没有显示,但还有一个重要的计算模块叫DPU(Double Precision Unit),它是用来进行双精度(FP64)运算的,而CUDA Core专门进行单精度(FP32)的计算。

图:Pascal GPU架构(2016),可以看到DPU
图:Pascal GPU架构(2016),可以看到DPU

6.2.2 Tensor Core

CUDA Core 是通用浮点运算单元,对矩阵乘法并无特别优化。2017 年 Volta 架构首次引入 Tensor Core——一种专为矩阵乘加(Matrix Multiply-Accumulate)设计的硬件单元。

Tensor Core 的核心操作:

D = A × B + C

其中 A, B, C, D 是小矩阵块(如 4×4、8×8、16×16,取决于精度)

一个 Tensor Core 在一个时钟周期内完成整个矩阵块的乘加操作。如果用 CUDA Core 逐元素计算同样的 4×4 矩阵乘法,需要 64 次乘法和 48 次加法——数十个周期。Tensor Core 在矩阵运算场景下的效率是 CUDA Core 的数十倍。

Blackwell 第五代 Tensor Core 的关键升级:引入 FP4 和 FP6 精度支持,通过 Micro-Tensor Scaling 技术实现——在极低位宽下维持模型精度。

Blackwell 支持的完整数据格式表

精度格式位宽说明
FP6464 bit双精度浮点,科学计算
FP3232 bit单精度浮点,通用计算
TF3219 bitTensor Float 32,Ampere 引入的折中格式
BF1616 bitBrain Float 16,Google 提出,训练主流
FP1616 bit半精度浮点,推理常用
FP8 (E4M3/E5M2)8 bitHopper 引入,训练/推理
INT88 bit整数量化,推理
FP66 bitBlackwell 新增,推理优化
FP44 bitBlackwell 新增,极致量化推理

位宽减半,同样的硬件面积可以塞下两倍的计算。所以从 FP32 到 FP4,理论算力跃升约 8 倍。 在AI Infra那一章中,我们会再次回到这里(Quantization,量化)。

如果你对这些精度格式比较陌生,这里用一个具体例子直观感受一下。假设我们要表示数字 0.15625

FP32(32 bit = 1 符号位 + 8 指数位 + 23 尾数位):
  0 01111100 01000000000000000000000
  → 精确表示 0.15625
  → 32 bit 的"豪华房间",几乎不损失任何信息

FP16(16 bit = 1 + 5 + 10):
  0 01100 0100000000
  → 仍然可以精确表示 0.15625
  → 但可表示的范围和精度大幅缩小
  → 最大值 ~65,504(FP32 是 ~3.4×10³⁸),极端值会溢出

BF16(16 bit = 1 + 8 + 7):
  0 01111100 0100000
  → 保留了 FP32 的 8 位指数(范围和 FP32 一样大!)
  → 但尾数只有 7 位(精度比 FP16 低)
  → 训练中"范围比精度更重要",所以 BF16 成为训练主流

FP8 E4M3(8 bit = 1 + 4 + 3):
  0 1100 010
  → 只有 3 位尾数,精度很粗糙
  → 但对于 inference 来说,模型权重本身有冗余,
    8 bit 够用了——这就是"量化"的核心思想

FP4(4 bit = 1 + 2 + 1):
  0 10 1
  → 整个数只有 4 bit,能表示的不同值只有 16 个
  → 必须配合 Micro-Tensor Scaling(每组数据共享一个缩放因子)
    才能维持模型质量

核心 trade-off:位宽越低 → 算力越高(同样的硬件塞更多运算)+ 显存占用越少(同样的 HBM 装更大模型)→ 但精度越低 → 需要精巧的训练/推理技巧来弥补。这就是为什么”混合精度训练”和”量化推理”是 AI 工程的核心技能。

HGX B200 单 GPU 峰值算力

精度DenseSparse (2:4 结构化稀疏)
FP4 Tensor Core9 petaFLOPS18 petaFLOPS
FP8 Tensor Core4.5 petaFLOPS9 petaFLOPS
FP16/BF16 Tensor Core2.25 petaFLOPS4.5 petaFLOPS
TF32 Tensor Core1.125 petaFLOPS2.25 petaFLOPS
FP32 (CUDA Core)75 teraFLOPS

注意 FP4 Dense 算力(9 PFLOPS)是 FP32(75 TFLOPS)的 120 倍。这就是为什么”混合精度训练”和”量化推理”对 AI 如此重要——用更低的精度换取数量级的算力提升,同时通过 Micro-Tensor Scaling 等技术维持模型质量。

**HGX B300(Ultra)**进一步提升:FP4 达到 14 petaFLOPS(Dense)/ 18 petaFLOPS(Sparse)

6.2.3 Ray Tracing Core

Blackwell 搭载了第四代 RT Core,从它的名字“光线追踪”可知,其主要服务于游戏和专业可视化场景。RT Core 是硬件加速的 BVH(Bounding Volume Hierarchy)遍历和光线-三角形求交单元,将实时光线追踪的计算从 CUDA Core 卸载到专用硬件上。

在 AI 计算场景中,RT Core 不参与工作——但它占据了消费级 GPU Die 的一部分面积。数据中心版 GPU(如 B200)通常不包含 RT Core。

图:RT Core的功能(图源:nvidia-rtx-blackwell-gpu-architecture.pdf)
图:RT Core的功能(图源:nvidia-rtx-blackwell-gpu-architecture.pdf)

6.3 存储与互联

6.3.1 存储与延时

GPU 也有存储层次结构,但和 CPU 呈现出明显的差别:

图:GPU 存储 I/O 层级
图:GPU 存储 I/O 层级
                    CPU                              GPU
              ┌─────────────┐               ┌──────────────────┐
  最快/最小   │  寄存器       │               │  寄存器 (256KB/SM)│
              │  (~数十个/核) │               │                   │
              ├─────────────┤               ├──────────────────┤
              │  L1 Cache    │               │  Shared Mem/L1   │
              │  (~64KB/核)  │               │  (~256KB/SM)     │
              ├─────────────┤               ├──────────────────┤
              │  L2 Cache    │               │  L2 Cache        │
              │  (~数MB)     │               │  (50-65MB)       │
              ├─────────────┤               ├──────────────────┤
  最慢/最大   │  DRAM        │               │  HBM / GDDR      │
              │  (~64GB/s)   │               │  (数TB/s)        │
              └─────────────┘               └──────────────────┘

Register File(寄存器堆):每个 SM 有 256 KB 寄存器——这比一颗 CPU 核心的全部 Cache 还大!为什么?

因为 SM 需要同时维护 2,048 个活跃线程的状态。每个线程都有自己独占的一组寄存器。当线程切换时,不需要保存/恢复寄存器内容(CPU 的上下文切换需要这步),直接跳到另一组寄存器即可。这就是 GPU **零开销线程切换(Zero-Overhead Context Switch)**的硬件基础——也是 Latency Hiding 能工作的前提。

Latency Hiding(延迟隐藏):以向量加法为例

假设我们在 H100 上对一个长度为 65,536 的向量做 y[i] = a * x[i] + b。每个线程处理一个元素,共 2,048 个 Warp(65,536 / 32)。聚焦一个 SM(分配到 64 个 Warp = 2,048 个线程),看它的 Warp Scheduler 在做什么:

真实延迟数据(H100 实测):

  • HBM → Register 的全局内存访问延迟:~400 个时钟周期
  • 一次 FMA 运算(a * x[i] + b):4 个时钟周期(含流水线延迟)
  • Warp 切换开销:0 周期(寄存器已经分配好,调度器直接切换指针)
周期 0:    Warp 0  发出 Load x[0..31] 请求 → 数据在 HBM,400 周期后回来
           调度器:Warp 0 进入等待队列 → 切换到 Warp 1
周期 1:    Warp 1  发出 Load x[32..63] 请求 → 进入等待
           → 切换到 Warp 2
...(每周期切换一个 Warp,连续发出内存请求)
周期 63:   Warp 63 发出 Load 请求 → 进入等待

周期 64-399: 所有 64 个 Warp 都在等内存。
            但 HBM 端正在并行处理这 64 个请求。
            如果 Warp 不够多,这里 ALU 就会空闲——这就是 Occupancy 不足的场景。

周期 ~400:  Warp 0 的数据到了!调度器立刻将 Warp 0 切回执行态
            → 32 个 CUDA Core 同时执行 FMA(4 周期)
周期 ~401:  Warp 1 的数据到了!→ 执行 FMA
...
→ 从周期 400 开始,每 1-4 个周期就有一个 Warp 的数据就绪
→ ALU 几乎不再空闲,400 周期的内存延迟被 64 个 Warp 的流水"填满"了

算一下需要多少个 Warp 才够

  • 内存延迟 400 周期,每个 Warp 的 FMA 计算 4 周期
  • 要完全隐藏延迟:需要 400 / 4 = 100 个 Warp 同时驻留
  • H100 每个 SM 最多 64 个 Warp(2,048 线程)——不够 100 个!
  • 所以这个例子实际上是 memory-bound(算力闲置,瓶颈在内存带宽)
  • 如果每个线程的计算量更大(比如矩阵乘法中每个线程做几百次 FMA),那 64 个 Warp 就绰绰有余了——这就是 compute-bound 的场景

这就是为什么 GPU 需要那么大的 Register File(256KB/SM)——它必须同时保存所有 64 个 Warp(2,048 个线程)的寄存器状态,才能在它们之间零开销瞬间切换。如果寄存器不够大,能同时驻留的 Warp 就少,一旦所有活跃 Warp 都在等内存,ALU 就会空闲——这叫做 Occupancy 不足,是 GPU 性能调优的核心指标之一。

关键对比:CPU 用复杂的硬件(乱序执行、预取器、大缓存)来减少延迟;GPU 用大量线程来隐藏延迟。两种策略,殊途同归,都是为了让 ALU 不要闲着。

Shared Memory(共享内存):SM 内部所有线程共享的高速 SRAM。

和 CPU 的 Cache 有一个根本区别:

  • CPU Cache:由硬件自动管理(你写一段 C 代码,不需要考虑数据在 L1 还是 L2)
  • GPU Shared Memory:由程序员显式控制(你需要手动写代码把数据从 HBM 搬到 Shared Memory)

这增加了编程难度,但给了高性能计算极大的优化空间。FlashAttention 的核心优化就在这里——通过重新设计 Shared Memory 的数据访问模式(tiling strategy),将 Attention 计算从 memory-bound 变为 compute-bound,实现了 2-4 倍的加速。

L2 Cache 是全芯片所有 SM 共享的缓存:

  • Hopper (H100):50 MB,双分区设计(split into two partitions)
  • Blackwell 消费级 (GB202):65 MB,单分区设计
  • Blackwell 数据中心 (B200):更大容量

单分区 vs 双分区的区别:双分区设计中,某些访问模式可能导致跨分区流量,增加延迟。单分区设计消除了这个问题,访问更均匀。

Memory Controller 负责连接片外显存:

  • 数据中心 GPU → 连接 HBM(High Bandwidth Memory)
  • 消费级 GPU → 连接 GDDR

B200 通过多个 Memory Controller 连接 8 个 HBM3e Stack,实现 192-270 GB 容量和 7.7-8 TB/s 带宽。

6.3.2 调度与通讯

GigaThread Engine:GPU 的总调度,负责将 Thread Blocks(一组需要协作的线程)分配到各个 SM 上执行。

NVLink Controller:Blackwell 架构下的第五代NVLink

  • 每 GPU 1.8 TB/s 双向带宽(Hopper 的 NVLink 4.0 是 900 GB/s)
  • 通过 NVLink Switch 可扩展到 576 颗 GPU 互联
  • 这是多 GPU 并行训练的基础互联——远超 PCIe 的带宽(详见 §10)

我们会在AI Infra讲GPU互联时详细看NVLink,这里先带过,知道其存在就好。

6.4 Blackwell架构的更新

参数变化

Hopper (GH100)Blackwell 消费级 (GB202)Blackwell 数据中心 (GB100)
FP32 CUDA Cores / SM128128~128
INT32 Cores / SM64(独立管线)统一到 FP32 管线统一到 FP32 管线
Tensor Core 代4th Gen5th Gen5th Gen
Tensor Core 新增精度FP8FP4, FP6FP4, FP6
Shared Mem / L1256 KB~128 KB L1, ~99 KB Shared更大
Register File / SM256 KB256 KB256 KB
L2 Cache(全芯片)50 MB(双分区)65 MB(单分区)更大
HBM 容量(旗舰)80 GB HBM332 GB GDDR7 (RTX 5090)192-270 GB HBM3e
HBM 带宽(旗舰)3.35 TB/s1.79 TB/s7.7-8 TB/s

关键变化:Blackwell 将 INT32 和 FP32 执行管线统一。在 Hopper 中,INT32 和 FP32 有各自独立的 pipeline——当工作负载只需要浮点计算时,INT32 管线就闲置了。合并后,所有管线都能灵活执行 INT32 或 FP32,减少混合工作负载时的空闲周期。

Dual-Die设计

数据中心版 Blackwell GPU(如 B200)实际上是两颗 GB100 Die 通过 NV-HBI(High Bandwidth Interface)连接在一起的。 两颗 Die 合计约 2,080 亿个晶体管

为什么要双 Die?因为单颗 Die 的面积已经逼近光刻极限(reticle limit)——TSMC 的 EUV 光刻机单次曝光面积上限约 858mm²,GB100 单 Die 面积已经非常接近这个极限。要继续堆更多计算单元,唯一的办法就是”两颗芯拼一颗用”。

NV-HBI 提供 10 TB/s 的 Die-to-Die 带宽,让两颗 GB100 对软件透明地呈现为一颗 GPU,程序员不需要感知底层是双 Die。

消费级则是另一条路线:最大的消费级 Die 是 GB202(用于 RTX 5090),面积约 750mm²,单 Die 设计,包含 24,576 个 CUDA Cores,不需要双 Die 也能在光刻极限内。

Binning

这里顺带讲一个半导体行业的生产知识。一块巨大的 Die(如 GA102,用于 RTX 30 系列)在生产时,部分 SM 不可避免会有缺陷。与其扔掉整颗 Die,不如屏蔽有缺陷的 SM,降级成低端产品

GA102 Die(Ampere 消费级)的 Binning 策略:

RTX 3090 Ti ──  0 个有缺陷 SM ── 全部 SM 启用,最高频率
RTX 3090    ──  2 个有缺陷 SM ── 略微降低 SM 数量
RTX 3080 Ti ──  4 个有缺陷 SM ── 进一步降低
RTX 3080    ── 16 个有缺陷 SM ── 大幅屏蔽,入门旗舰

          同一颗 GA102 Die,但不同价格

频率也有差异——“体质好”的 Die 在更高电压下也能稳定运行,所以高端型号的 Boost Clock 更高。

Blackwell 的 GB202 也是如此:RTX 5090 使用完整的 GB202 Die(24,576 CUDA Cores 全部启用),而 RTX 5080 使用的是更小的 GB203 Die(不是 GB202 的屏蔽版,而是独立设计的较小 Die)。

Binning 让同一条生产线的产出覆盖从旗舰到中端的完整产品线,极大提高了晶圆利用率和利润率。这是半导体公司的核心定价策略之一。

§7. 硬件与软件的映射

理解了硬件结构,接下来看软件如何映射到硬件上。

7.1 CUDA结构和硬件结构的一一对应

图:GPU 软件与硬件的映射关系
图:GPU 软件与硬件的映射关系

一个具体的例子:假设你要做一个 1024×1024 的矩阵乘法。

  1. 你把结果矩阵划分成若干个 Tile(比如每个 Tile 是 32×32 = 1024 个元素)
  2. 每个 Tile 的计算对应一个 Block(包含 1024 个 Thread)
  3. Block 内部被自动划分为若干 Warp(每个 Warp 32 个 Thread)
  4. GigaThread Engine 把这些 Block 分配到各个 SM 上
  5. 每个 SM 内部,Warp Scheduler 按周期调度 Warp 执行

7.2 从 SIMD 到 SIMT

SIMD(Single Instruction, Multiple Data)

SIMD 指令(如 x86 的 AVX-512):

一条指令同时对 16 个 FP32 数据执行相同操作:

     a₁  a₂  a₃ ... a₁₆     ← 16 个数据打包成一个向量
  ×  b₁  b₂  b₃ ... b₁₆
  ─────────────────────────
  =  c₁  c₂  c₃ ... c₁₆     ← 一条指令完成 16 次乘法

SIMD 的限制:一个Warp内的所有数据必须执行完全相同的操作。如果其中某个元素需要走不同的分支,不行。数据必须严格对齐,逻辑必须完全一致。

SIMT(Single Instruction, Multiple Threads):GPU 的创新。

SIMT(GPU 的 Warp 执行模型):

一个 Warp = 32 个 Thread,通常执行同一条指令:

  Thread 0:  z₀ = a₀ × b₀ + c₀
  Thread 1:  z₁ = a₁ × b₁ + c₁
  Thread 2:  z₂ = a₂ × b₂ + c₂
  ...
  Thread 31: z₃₁ = a₃₁ × b₃₁ + c₃₁

关键区别:每个 Thread 有独立的程序计数器(PC)和执行路径。

如果 Warp 内出现分支分歧(Warp Divergence):

if (thread_id < 16) {
    path_A();    // Thread 0-15 走这条路
} else {
    path_B();    // Thread 16-31 走这条路
}

GPU 的处理方式:

Step 1: 执行 path_A()
        Thread 0-15:  ✅ 活跃执行
        Thread 16-31: 🔇 被 mask 掉(空等)

Step 2: 执行 path_B()
        Thread 0-15:  🔇 被 mask 掉(空等)
        Thread 16-31: ✅ 活跃执行

→ 两个分支串行执行,效率降低 50%,但不会出错!只是慢了。

在 SIMD 中,你根本无法在一个向量内做条件分支。SIMT 允许分支,只是性能会下降。

历史演进

  • 2016 年之前:Warp 内线程严格 Lockstep(步调完全一致),分支 diverge 后必须在同一点重新汇合
  • **Volta 架构(2017)**之后:引入 Independent Thread Scheduling,每个线程有独立的 PC 和调用栈,允许更灵活的执行模式(比如 Warp 内不同线程执行不同的循环次数)

7.3 GPU并行架构的具体应用

让我们用一个图形渲染的具体例子来说明为什么GPU叫Graphics Processing Unit.

场景:你在游戏中放置了一个 3D 物体模型,假设是一个最简单的单位正方体。3D意味着物体是在一个三维直角坐标系中,由数个**顶点(Vertices)**组成,每个顶点有一个 (x, y, z) 坐标。顶点之间连接自然成了三角形(Mesh)。

但问题是,这些坐标定义在**模型空间(Model Space)**中——即模型自己的局部坐标系。假设这个单位正方体的一个顶点在原点上,那就可以知道这个正方体别的顶点在哪里,比如(0,0,1),(1,1,1)

图:3D坐标系与正方体
图:3D坐标系与正方体

但问题是,在游戏里,我不是只有一个正方体,而是有无数个物体,物体之间还有空间关系,我还会四处移动,从不同角度去看物体。所以,要把模型放进游戏世界,需要经过以下变换:

Model Space (模型空间)

    │  ① 模型变换 (Model Transform)
    │     平移 (Translation) + 旋转 (Rotation) + 缩放 (Scale)

World Space (世界空间)

    │  ② 视图变换 (View Transform)
    │     Camera 的位置和朝向

Camera Space (相机空间)

    │  ③ 投影变换 (Projection Transform)
    │     透视投影 → 近大远小

Screen Space (屏幕空间)

    │  ④ 深度测试 (Depth/Z-Buffer Test)
    │     Camera 知道哪个物体在前、哪个在后

最终 2D 画面
图:从 Model Space 到 World Space 的映射(Gemini 生成,bug 太多但我懒得调了,请意会)
图:从 Model Space 到 World Space 的映射(Gemini 生成,bug 太多但我懒得调了,请意会)

这些变换的本质是什么?矩阵乘法。

对每个顶点 v = (x, y, z, 1):

v_world = M_model × v        ← 4×4 矩阵 × 4×1 向量
v_camera = M_view × v_world
v_screen = M_proj × v_camera

或者合并为一步:
v_screen = M_proj × M_view × M_model × v = M_MVP × v

关键洞察

  1. 每个顶点的变换是独立的——顶点 A 的新坐标不依赖顶点 B 的结果
  2. 每个顶点执行的指令完全相同——都是乘同一个变换矩阵 $M_{\text{MVP}}$
  3. 一个模型可能有 10,000+ 个顶点,一个场景可能有数百个模型

这是 embarrassingly parallel(令人尴尬的并行)——并行化如此自然,以至于不做并行反而不合理。

一个 Warp 同时处理 32 个顶点的变换:

Thread 0:  v_screen_0  = M_MVP × v₀
Thread 1:  v_screen_1  = M_MVP × v₁
Thread 2:  v_screen_2  = M_MVP × v₂
...
Thread 31: v_screen_31 = M_MVP × v₃₁

→ 同一指令(矩阵乘法),不同数据(不同顶点)
→ SIMT 的完美场景,0% Warp Divergence

这就是为什么 GPU 最初为图形渲染而设计,但天然适合所有”对大量数据执行相同操作”的任务——包括深度学习中的矩阵乘法、卷积运算等。 架构上的匹配不是巧合,而是同一种计算模式的不同应用。

§8. GPU 编年史

8.1 NVIDIA GPU 架构代际总览

这张表是 NVIDIA GPU 十五年架构演进的全景图。

架构年份核心代号代表产品(数据中心)代表产品(消费级)工艺晶体管数SM 数CUDA Cores 总数Tensor Core 代显存类型旗舰显存容量显存带宽TDPNVLink 代/带宽关键创新
Fermi2010GF100Tesla M2050/M2070GTX 48040nm30 亿16512GDDR56 GB177 GB/s250W首个完整 GPU 计算架构,统一 Shader
Kepler2012GK110Tesla K80GTX 680 / Titan28nm71 亿152,880GDDR512 GB (K80 双芯)480 GB/s235WDynamic Parallelism, GPU Boost, SMX
Maxwell2014GM200Tesla M40GTX 980 / Titan X28nm80 亿243,072GDDR512 GB336 GB/s250W能效比大幅提升,SMM 架构
Pascal2016GP100Tesla P100GTX 108016nm153 亿563,584HBM216 GB720 GB/s300WNVLink 1.0 (160 GB/s)首次引入 HBM2 + NVLink,统一内存
Volta2017GV100Tesla V100Titan V12nm211 亿805,1201st Gen (640)HBM232 GB900 GB/s300WNVLink 2.0 (300 GB/s)⭐ 首次引入 Tensor Core,Independent Thread Scheduling
Turing2018TU102RTX 2080 Ti12nm186 亿724,6082nd GenGDDR611 GB616 GB/s250W⭐ 首次引入 RT Core,INT32+FP32 并行管线
Ampere2020GA100A100RTX 30907nm (TSMC) / 8nm (Samsung)542 亿1086,9123rd GenHBM2e80 GB2.0 TB/s400WNVLink 3.0 (600 GB/s)TF32 精度,结构化稀疏 2:4,MIG 多实例
Hopper2022GH100H1004nm (TSMC)800 亿13216,8964th GenHBM380 GB3.35 TB/s700WNVLink 4.0 (900 GB/s)FP8 支持,Transformer Engine,DPX 指令
Ada Lovelace2022AD102RTX 40904nm (TSMC)763 亿14418,4324th GenGDDR6X24 GB1.01 TB/s450WDLSS 3 Frame Generation,4th Gen RT Core
Blackwell2024GB100 / GB202B200 / B300RTX 50904NP (TSMC)2,080 亿 (双 Die)~160 (每 Die)~21,760 (每 Die)5th GenHBM3e192-270 GB7.7-8 TB/s1,000-1,100WNVLink 5.0 (1.8 TB/s)⭐ 双 Die NV-HBI,FP4/FP6,2nd Gen Transformer Engine,Decompression Engine

注:消费级 GB202 有 24,576 CUDA Cores,比 AD102 的 18,432 多 28.5%

几个关键趋势从表中清晰可见:

  1. 晶体管数量:从 30 亿(Fermi)到 2,080 亿(Blackwell),15 年增长约 70 倍
  2. 显存带宽:从 177 GB/s 到 8 TB/s,增长约 45 倍——但跟不上算力的增长速度,“存储墙”在加剧
  3. 功耗:从 250W 到 1,000W+,液冷从”可选”变为标配
  4. Tensor Core 是分水岭:Volta(2017)之前是通用 GPU 计算时代,之后是 AI 专用加速时代
  5. 精度不断降低:FP32 → FP16 → BF16 → FP8 → FP4,每降一级算力近乎翻倍

8.2 GPU 的产业历史

GPU 的历史远不止 NVIDIA 一家。让我们回溯完整的产业演化。

早期(1990s - 2000s)

1996   3dfx 发布 Voodoo ── 开创消费级 3D 加速时代
1997   3dfx Voodoo 2 统治市场,《Quake》等游戏推动 3D 需求爆发
1999   NVIDIA GeForce 256 ── 自称"世界第一款 GPU"
       集成 T&L 硬件加速,2D + 3D 一体化
2000   NVIDIA 以 ~1.5 亿美元收购 3dfx

同期其他玩家:
├── ATI Technologies(Rage → Radeon 系列)
├── S3 Graphics(Savage 系列)
├── Matrox(专业可视化市场)
└── PowerVR(移动 GPU 架构 IP)

为什么 3dfx 输了? 3dfx 坚持垂直整合(自己设计+自己制造),而 NVIDIA 选择 Fabless 模式(只设计,TSMC 代工)。Fabless 模式让 NVIDIA 可以把所有资源投入设计和软件,同时享受代工厂的规模经济。这是商业模式的胜利。

NVIDIA VS AMD(2006 - 至今)

2006 年,AMD 以 54 亿美元收购 ATI Technologies,从此形成了 NVIDIA vs AMD 的双寡头格局。

维度NVIDIAAMD
消费级 GPU 架构GeForce(Ada Lovelace / Blackwell)Radeon(RDNA 架构)
数据中心 GPU 架构Tesla / A100 / H100 / B200Instinct(CDNA 架构)
软件生态CUDA(2007 年至今,15+ 年积累)ROCm + HIP(追赶中)
AI 市场份额~80-90%(事实上的垄断)~5-10%(快速增长中)
核心优势CUDA 生态 + 全栈平台性价比 + 开放标准

NVIDIA 通过 CUDA 生态在 AI 计算领域建立了几乎垄断地位——不是因为硬件碾压(AMD MI300X 的 HBM 容量甚至更大),而是因为 15 年的软件生态积累:cuBLAS、cuDNN、TensorRT、NCCL、Triton……几乎所有 AI 框架和库都优先优化 CUDA。

数据中心 GPU / AI 加速器竞争格局

厂商产品架构特点显存容量显存带宽软件生态
NVIDIAB200 / B300Blackwell, Tensor Core192-270 GB HBM3e7.7-8 TB/sCUDA(事实标准)
AMDMI300XCDNA 3, 多 Chiplet192 GB HBM35.3 TB/sROCm(PyTorch 已支持)
AMDMI325XCDNA 3 改进256 GB HBM3e6.0 TB/sROCm
GoogleTPU v5p脉动阵列(Systolic Array)HBMJAX / XLA
IntelGaudi 3独立加速器架构HBM2eOneAPI / PyTorch 插件
寒武纪思元 590自研 IPU 架构Neuware
沐曦曦云 C500通用 GPU 路线兼容 ROCm
华为昇腾 910BDa Vinci 架构HBMCANN + MindSpore

判断国产 GPU 能否替代 NVIDIA,需要看三个层: 算力差距(1-2 代)+ 软件生态(CUDA 壁垒)+ 先进制造能力(EUV 受限)。三层都不能有短板。


§9. GPU之外的显卡

到目前为止,我们一直在讨论 GPU Die 本身。但一张完整的显卡(Graphics Card / Board)上,GPU Die 只是核心——PCB 上还有一系列关键组件协同工作。

以一张 RTX 3090(GA102 Die)为参考,拆解显卡的完整组成:

图:NVIDIA GeForce RTX 3090 Ti 主板平面图——中间为 GPU,环绕的 12 个黑色小方块为 Memory,外侧为 VRM,再往外是 I/O 及 PCIe
图:NVIDIA GeForce RTX 3090 Ti 主板平面图——中间为 GPU,环绕的 12 个黑色小方块为 Memory,外侧为 VRM,再往外是 I/O 及 PCIe

9.1 显存芯片(Graphics Memory)

显存是 GPU Die 之外最重要的组件,GPU 的所有数据(模型权重、激活值、纹理等)都存在这里。

GDDR

GDDR(Graphics Double Data Rate)是专为图形/计算优化的同步 DRAM。主要供应商包括 Micron、Samsung、SK Hynix

年份信号编码代表显卡关键升级
GDDR52008NRZ (0/1 二电平)GTX 480 ~ GTX 1080标准长达近十年
GDDR5X2016NRZGTX 1080 Ti位宽加大
GDDR62018NRZRTX 2080双通道架构
GDDR6X2020PAM-4 (四电平)RTX 3090每时钟传 2 bit → 带宽翻倍
GDDR72024PAM-3 (三电平)RTX 5090信号完整性优于 PAM-4

解释一下PAM-3和PAM-4:在CPU一章里我们讲到0和1在电路上就是高压和低压,但除了二分之外,其实还可以多分。PAM-4 就像在一根电线上用 4 种电压等级(而不是传统的 2 种)来编码数据——每个时钟周期传输 2 bit 而非 1 bit。GDDR7 的 PAM-3 使用 3 种电平,虽然每周期传输略少于 PAM-4,但信号更干净、误码率更低,实际频率可以拉得更高。

RTX 3090 的显存配置

  • 24 GB GDDR6X(Micron 制造)
  • 384-bit 总线位宽
  • 带宽 ~936 GB/s(OC 可达 ~1.15 TB/s)

[!info] Bus Width 和 Bandwidth:从电路层面理解

Bus Width(总线位宽)= 同时有多少根数据线在并行传输。

在物理层面,GPU 和显存之间的连接就是 PCB 上的一组铜走线(traces)——每根线在一个时钟周期内传输 1 bit。所谓”384-bit bus width”,就是 GPU 和显存芯片之间有 384 根数据线并排走,每个时钟周期可以同时传输 384 bit 的数据。

GPU Die                                          显存芯片(12颗)
┌──────┐    ┌─ 线 1  ──────────────────────┐    ┌──────┐
│      │    ├─ 线 2  ──────────────────────┤    │ Chip │
│      │    ├─ 线 3  ──────────────────────┤    │  #1  │
│      │    │  ...(每颗芯片 32 根线)       │    │(32b) │
│      │    ├─ 线 32 ──────────────────────┤    └──────┘
│      │    │                               │
│      │    ├─ 线 33 ──────────────────────┤    ┌──────┐
│      │    │  ...                          │    │ Chip │
│      │    ├─ 线 64 ──────────────────────┤    │  #2  │
│      │    │                               │    │(32b) │
│      │    │  ...                          │    └──────┘
│      │    │                               │
│      │    ├─ 线 353 ─────────────────────┤    ┌──────┐
│      │    │  ...                          │    │ Chip │
│      │    └─ 线 384 ─────────────────────┘    │ #12  │
└──────┘                                        │(32b) │
                                                 └──────┘
         12 颗芯片 × 32 bit/颗 = 384-bit bus width

RTX 3090 的 PCB 上有 12 颗 Micron GDDR6X 芯片(就是上面照片里 GPU 周围那一圈黑色小方块),每颗提供 32-bit 的数据通道,合计 12 × 32 = 384 bit。这就是为什么显卡 PCB 的布线如此复杂——384 根高速信号线要从 GPU 精确走到 12 颗芯片,长度差异不能超过几毫米(否则信号不同步)。

Bandwidth(带宽)= Bus Width × 时钟频率 × 每周期传输次数。

Bandwidth = Bus Width × Clock Speed × Data Rate per Clock

RTX 3090 GDDR6X:
= 384 bit × 1.219 GHz × 16(GDDR6X 每周期传 16 次,PAM-4 × 4-pump)
= 384 × 1.219 × 16 / 8(换算成 Byte)
≈ 936 GB/s

所以提升带宽有三条路:

  1. 加宽总线(更多根线)—— 但 PCB 面积和布线复杂度限制了上限
  2. 提高频率(线上信号切换更快)—— 但频率越高,信号完整性越差
  3. 每周期塞更多数据(PAM-4/PAM-3 编码)—— GDDR6X/GDDR7 走的就是这条路

对比 DDR5 内存:64-bit bus width × ~4.8 GHz × 2(DDR = Double Data Rate)≈ 50-60 GB/s。GPU 的 384-bit 位宽是 CPU 内存 64-bit 的 6 倍,再加上更高的等效频率,最终带宽差距达到 15-20 倍

而 HBM 更激进:通过 TSV 硅通孔实现 1024-bit 甚至更宽的总线,虽然时钟频率比 GDDR 低得多,但靠极宽的位宽照样实现数 TB/s 级带宽。“条条大路通罗马”——GDDR 走高频窄线路,HBM 走低频宽线路。

对比 CPU 内存:DDR5 只有 64-bit 总线位宽,带宽约 50-64 GB/s——GPU 显存带宽是 CPU 内存的 15-20 倍。这是因为 GPU 需要同时喂饱数千个计算单元。

HBM

HBM(High Bandwidth Memory)采用完全不同的物理架构来实现极致带宽:

图:HBM3E 示意图(图源:Micron Technology)
图:HBM3E 示意图(图源:Micron Technology)

传统的GDDR,如显卡平面图中所示,GPU和记忆之间通过电线连接,而HBM 通过硅通线和GPU连接。 **TSV(Through-Silicon Via,硅通孔)**垂直堆叠 8-12 层 DRAM Die。每层都有数千个微小的硅通孔穿过 Die,形成极宽的数据总线——数千 bit 位宽(对比 GDDR6X 的 384-bit 和 DDR5 的 64-bit)。

HBM 不是靠更高的时钟频率,而是靠极宽的并行数据通路实现高带宽。

HBM3e(最新一代)

  • 每 Stack 容量:36 GB
  • 每 Stack 带宽:~1.2 TB/s
  • 三大供应商:SK Hynix(市场份额最大,NVIDIA 首选供应商)、SamsungMicron

B200 配备 8 个 HBM3e Stack = 192-270 GB 总容量,7.7-8 TB/s 总带宽。

数据流动全景:从 SSD 到 CUDA Core

以游戏加载一个场景为例:

SSD/硬盘(存储)
    │ ① 读取游戏资源文件(纹理、模型)

系统内存 / CPU DRAM
    │ ② CPU 解压、预处理
    │ ③ 通过 PCIe 总线传输(~64 GB/s)

显存 / HBM(GPU 外部)
    │ ④ GPU 从显存读取数据
    │ ⑤ 进入 L2 Cache(~65 MB)

L1 Cache / Shared Memory(SM 内部)
    │ ⑥ CUDA Core / Tensor Core 从这里读取计算

Register File(最快,零延迟)

瓶颈在哪? 通常在步骤 ③——PCIe 的 ~64 GB/s 远远低于 HBM 的数 TB/s 带宽。这就是为什么 NVIDIA 要搞 NVLink-C2C 来绕过 PCIe 瓶颈(详见 §10)。

9.2 供电模块(VRM - Voltage Regulator Module)

GPU 核心工作在约 0.8-1.1V 的低电压下,但主板(通过 PCIe 供电和外接 12V 电源线)提供的是 12V 直流。VRM 负责这个电压转换。

VRM 由 MOSFET + 电感 + 电容 组成多相供电电路。RTX 3090 有 20 相供电——相数越多,供电越稳、纹波越小、效率越高。

为什么 VRM 重要?因为 GPU 的瞬态电流变化极大——从空闲到满载,电流可能在微秒内从几安培飙升到数百安培。VRM 必须在这种剧烈波动下维持电压稳定。如果供电不稳,GPU 要么降频(性能损失),要么蓝屏。

9.3 PCIe 接口

PCIe(Peripheral Component Interconnect Express)是连接 CPU 和 GPU 的标准总线。

PCIe 版本每通道带宽(单向)x16 总带宽(双向)
Gen 3 (2010)~1 GB/s~32 GB/s
Gen 4 (2017)~2 GB/s~64 GB/s
Gen 5 (2019)~4 GB/s~128 GB/s
Gen 6 (2025)~8 GB/s~256 GB/s

当前主流消费级显卡使用 PCIe Gen 4 x16。Blackwell GB300 NVL72 首次引入 PCIe Gen 6 支持。

痛点:即使 PCIe Gen 5 x16 的 128 GB/s 双向带宽,对比 HBM3e 的 8 TB/s 也只有 1/60。CPU → GPU 的数据传输通道(PCIe)远远慢于 GPU 内部的数据供应能力——这就是 §10 中 Grace-Blackwell 用 NVLink-C2C 替代 PCIe 的根本原因。

9.4 视频输出接口(I/O)

消费级显卡提供视频输出接口:DisplayPort(主流)和 HDMI。RTX 5090 支持 DP 2.1 和 HDMI 2.1a。

数据中心 GPU(如 B200 SXM)通常没有视频输出接口——它们通过网络将计算结果传回,无需直接连接显示器。

9.5 散热方案

GPU 是一台计算机中发热量最大的组件:

类型散热方案典型功耗代表产品
消费级风冷(散热片 + 2-3 个风扇)250-575WRTX 5090
数据中心(上一代)被动风冷(服务器风道)400-700WA100 / H100 SXM
数据中心(当代)液冷(冷板 + 循环水冷)1,000-1,100WB200 / B300(标配液冷)

从 Blackwell 开始,数据中心 GPU 的功耗突破 1,000W,液冷已从”可选”变为标配。这对数据中心的基础设施(冷却管路、泵站)提出了全新要求。


§10. CPU-GPU 联动:Grace-Blackwell 架构

10.1 为什么需要 CPU-GPU 联动?

一个常见误解是”GPU 独立完成所有计算”。事实上,GPU 不能独立工作——它需要 CPU 作为”指挥官”:

CPU 的角色:                         GPU 的角色:
├── 启动和管理操作系统               ├── 执行大规模并行计算
├── 分配 GPU 任务                     ├── 矩阵乘法、卷积等
├── 管理内存编排                     ├── 训练 / 推理的核心运算
├── 处理网络 I/O                     └── 结果写回显存
├── 文件系统操作
└── 预处理 / 后处理数据

传统方式中,CPU 和 GPU 通过 PCIe 连接。我们已经看到了问题:

PCIe Gen 5 x16: ~128 GB/s(双向)
HBM3e 带宽:      ~8,000 GB/s

→ PCIe 带宽只有 HBM 的 1/60
→ CPU-GPU 之间的数据搬运成为严重瓶颈

在大模型时代,模型参数可能有数百 GB,需要频繁在 CPU 和 GPU 之间传输——PCIe 的瓶颈越来越不可接受。

10.2 NVIDIA Grace CPU:从 GPU 公司到全栈平台

NVIDIA Grace 是 NVIDIA 自研的服务器 CPU:

规格Grace CPU
架构ARM Neoverse V2(注意:不是 x86!)
核心数72
内存LPDDR5X
内存带宽546 GB/s
互联NVLink-C2C(连接 GPU)

战略意义:NVIDIA 自研 CPU 的决定,标志着它从”GPU 公司”转型为”完整计算平台公司”。选择 ARM(而非 x86)有几个原因:(1) ARM 授权模式允许高度定制;(2) ARM 在能效比上有优势;(3) 避免依赖 Intel 的 x86 授权。

10.3 Grace-Blackwell Superchip

**Grace-Blackwell Superchip(GB200 / GB300)**是 NVIDIA 的杀手级产品——将 CPU 和 GPU 深度集成:

关键数据:

  • 1 颗 Grace CPU + 2 颗 Blackwell GPU
  • CPU 和 GPU 之间通过 **NVLink-C2C(Chip-to-Chip)**连接
  • NVLink-C2C 带宽:900 GB/s(双向)—— 对比 PCIe Gen 5 x16 的 128 GB/s,快了 7 倍
  • 这意味着 CPU-GPU 之间的数据传输不再是瓶颈

两个版本:

型号配置定位
GB200Grace + 2× Blackwell GPUNVL72 机架的基础单元
GB300Grace + 2× Blackwell Ultra GPUNVL72 机架的升级版

10.4 NVL72 Rack-Scale 系统:整个机架就是一颗 GPU

NVL72 是 NVIDIA 最激进的系统架构——把 72 颗 GPU + 36 颗 Grace CPU 装进一个标准机架,通过 NVLink Switch 全互联:

┌─────────────────────────────────────────────────────────────┐
│                     NVL72 Rack                               │
│                                                              │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐      ┌─────────┐     │
│  │ GB200/  │ │ GB200/  │ │ GB200/  │ ···  │ GB200/  │     │
│  │ GB300   │ │ GB300   │ │ GB300   │      │ GB300   │     │
│  │ #1      │ │ #2      │ │ #3      │      │ #36     │     │
│  └────┬────┘ └────┬────┘ └────┬────┘      └────┬────┘     │
│       │           │           │                 │          │
│  ═════╧═══════════╧═══════════╧═════════════════╧══════    │
│              NVLink Switch Fabric                           │
│       (每 GPU 1.8 TB/s, 全互联, 非阻塞)                    │
│                                                              │
│  总计:72 GPU + 36 Grace CPU                                │
│  整个机架对外表现为一个巨型 GPU                               │
└─────────────────────────────────────────────────────────────┘

GB300 NVL72 的关键规格

指标GB200 NVL72GB300 NVL72
FP4 算力(Dense/Sparse)720 / 1,440 petaFLOPS1,080 / 1,440 petaFLOPS
HBM3e 总容量13.5 TB20 TB
HBM 总带宽576 TB/s
GPU 间互联NVLink 5.0NVLink 5.0
CPU-GPU 互联NVLink-C2CNVLink-C2C
外部互联PCIe Gen 5PCIe Gen 6(首次引入)
功耗(整机架)~120 kW~120 kW
散热液冷液冷

直觉:一个 GB300 NVL72 机架的 FP4 算力达到 1.44 ExaFLOPS(稀疏)——这已经超过了几年前整个国家级超算中心的峰值算力。而且这 72 颗 GPU 通过 NVLink 全互联,可以像一颗巨型 GPU 一样协同工作。

这才是 NVIDIA 真正的护城河——不只在单颗 GPU,而在于从芯片到机架到集群的全栈系统能力——Grace CPU + Blackwell GPU + NVLink + NVSwitch + 液冷,全部自研、深度集成。


本章到此结束。我们自顶向下拆解了 GPU 的完整图景:从 SM、CUDA Core、Tensor Core 的硬件结构,到 CUDA/SIMT 的软件映射,到 Fermi 至 Blackwell 的十五年架构演进,再到显卡上 GPU Die 之外的存储、供电、散热,最后到 Grace-Blackwell 这样的 CPU-GPU 联动系统。半导体产业链(芯片如何被制造出来)在 CPU 一章的第二部分已经展开过。

但单颗 GPU(甚至单个 NVL72 机架)的能力仍然是有限的。训练一个万亿参数的大模型,需要数千张 GPU 卡跨机架协同工作。数据如何在 GPU 之间高效传输?模型如何切分到多颗 GPU 上?推理时如何优化延迟和吞吐?下一章 AI Infra 将聚焦这些问题:

  • 系统互联:NVLink 与 InfiniBand 的分工,RDMA,GPUDirect
  • 软件栈:CUDA 到底是什么?为什么说它是 NVIDIA 70% 的护城河?
  • 分布式训练:数据并行 vs 模型并行 vs 流水线并行
  • 推理优化:vLLM、量化、KV Cache、PagedAttention

参考资料:

  1. NVIDIA Technical Blog. Inside NVIDIA Blackwell Ultra: The Chip Powering the AI Factory Era.
  2. NVIDIA. NVIDIA RTX Blackwell GPU Architecture(PDF).
  3. Micron Technology. High-Bandwidth Memory (HBM).
  4. NVIDIA. Multi-Node NVLink Systems Tuning Guide.
  5. 知乎专栏. GPU 架构与显卡技术解析.
  6. Luo, Y. et al. Dissecting the NVIDIA Blackwell Architecture with Microbenchmarks. arXiv, 2025.