GPU Computing & CUDA

GPU计算可视化实验室

从 GPU 硬件架构到 CUDA 编程模型,从 Warp 调度到内存层次优化,深入解析 GPU 并行计算的核心机制与性能调优原理。每个模块含可交互 SVG 演示。

DomainCS / Systems
Modules8
Accent#34d399 emerald
StackHTML / SVG / JS
Interactive Modules
GPU 架构概览
01
GPU Die GPC 0 SM×4 GPC 1 SM×4 GPC 2 SM×4 L2 Cache (shared) HBM / GDDR (Global Memory) GPC → SM → CUDA Core · 层次化并行

GPU 由多个 GPC(图形处理集群)组成,每个 GPC 含多个 SM(流多处理器),每 SM 含数十 CUDA Core。SM 内含寄存器、共享内存、调度单元。HBM 提供高带宽全局内存。

SMGPCHBM
CUDA 线程层次
02
Grid Block(0,0) Block(1,0) Block(2,0) ... × N blocks Block(0,1) Block(1,1) Block(2,1) Grid → Block → Thread · blockIdx / threadIdx

CUDA 三级层次:Grid(网格)含多个 Block,每 Block 含多个 Thread。Block 内线程共享共享内存与同步;Block 间独立调度。通过 blockIdx/threadIdx 计算全局坐标映射数据。

GridBlockThreadIdx
Warp 调度机制
03
Warp (32 threads) SIMT 同步执行 分支分歧 divergence if-true if-false Warp Scheduler 2 warps / cycle 轮转调度 · 隐藏延迟

Warp 是 32 线程的执行单元,SM 以 SIMT 方式同步执行。分支分歧导致 warp 内线程串行化执行不同分支,性能损失。调度器轮转多个 warp 隐藏内存延迟。

SIMTDivergenceLatency Hide
内存层次
04
Reg ~1 cycle · per-thread Shared / L1 ~20 cyc · per-block L2 Cache ~200 cyc · chip-wide Global (HBM) ~500 cyc · all threads Host (CPU RAM) PCIe ~10000 cyc ↑快/小 · ↓慢/大 · 越靠近计算单元越快

GPU 内存层次:寄存器(每线程)→ 共享内存/L1(每 block)→ L2(全芯片)→ 全局内存 HBM。访问延迟从 1 到 500+ 周期递增。优化核心是数据局部性与减少全局访问。

RegisterShared MemHBM
共享内存优化
05
Shared Memory Banks (32) b0 b1 b2 b3 线程访问模式: stride 1 (coalesced) padding 消除 bank conflict

共享内存分 32 个 bank,可并行访问。stride=1 访问无冲突;多线程访问同 bank 串行化(bank conflict)。通过 padding 改变访问模式消除冲突。Tile 化利用共享内存减少全局访问。

Bank ConflictTilingPadding
全局内存合并
06
Global Memory Access addr: 0 ... 128B 合并访问:1 次事务

warp 内 32 线程访问连续对齐地址时,硬件合并为 1 次事务(128B/256B)。跨步或随机访问导致多次事务,带宽利用率骤降。结构数组(AoS)应转为数组结构(SoA)优化合并。

CoalescedSoAAlignment
流与异步
07
Stream 1 H2D kernel A D2H Stream 2 H2D kernel B D2H t=0 t 多流重叠 · 传输与计算并行

CUDA Stream 是异步操作序列。多流允许 H2D 传输、kernel 计算、D2H 传输重叠执行,隐藏 PCIe 延迟。事件(Event)用于流间同步。双缓冲技术进一步流水线化数据传输。

AsyncOverlapDouble Buffer
性能分析
08
arithmetic intensity (FLOP/B) perf (FLOP/s) mem bound compute bound k1 k2 k3 Roofline Model · 内存墙 vs 计算墙

Roofline 模型横轴算术强度(FLOP/字节),纵轴性能。曲线由内存带宽(左斜坡)和峰值算力(右平台)决定。kernel 落点判断瓶颈:内存受限需优化访问,计算受限需优化指令。

RooflineNsightOccupancy