1. GPU 整体鸟瞰

GPU 由多个 Streaming Multiprocessor (SM) 组成,SM 通过 L2 Cache 和 DRAM 交互。点击任意 SM 查看提示。

NVIDIA GPU(示例:RTX 5060,26 SMs)

关键组件

数据流动

Thread ↔ Register ↔ Shared Memory/L1 ↔ L2 ↔ DRAM。越靠近 thread,越快、越小。

2. SM 内部结构

一个 SM 就像一个小型工厂:Warp Scheduler 是调度员,CUDA Cores 是工人,Register File 和 Shared Memory 是车间里的快速缓存。

Streaming Multiprocessor (SM) Warp Scheduler 1 Warp Scheduler 2 Warp Scheduler 3 Warp Scheduler 4 Dispatch Dispatch Dispatch Dispatch CUDA Cores / Execution Units Register File Shared Memory / L1 Load/Store Units SFU / Tensor Cores

组件说明

3. 执行层级:Grid → Block → Warp → Thread

Grid (2×3 blocks)
一个 Block = 4 Warps
一个 Warp = 32 Threads

关键数字

索引公式

1D:global_id = blockIdx.x * blockDim.x + threadIdx.x

2D:row = blockIdx.y * blockDim.y + threadIdx.y; col = blockIdx.x * blockDim.x + threadIdx.x

4. Warp Scheduler:隐藏延迟的秘密

当某个 warp 等待内存数据时,Warp Scheduler 会立刻切换到另一个 ready warp,让 CUDA Cores 几乎不空闲。

SM with 4 Warp Schedulers Scheduler 0 Scheduler 1 Scheduler 2 Scheduler 3 Eligible Warp Pool Waiting on Memory CUDA Cores / Execution Units

调度过程

  1. Kernel launch 后,grid 被切成多个 block。
  2. Block 被分配到空闲的 SM 上。
  3. 每个 block 内部的 threads 被进一步切成 32-thread 的 warp。
  4. Warp Scheduler 每周期检查 eligible warp pool,选一个 ready 的 warp。
  5. 如果选中的 warp 需要访问内存,把它移到 waiting pool,同时调度另一个 warp。
  6. 内存数据到达后,waiting warp 回到 eligible pool。

为什么这叫 latency hiding? 内存访问可能需要几百个时钟周期。Warp Scheduler 通过快速切换 warp,让 CUDA Cores 总有事情做。

5. SIMT、Warp Divergence 与 Memory Coalescing

SIMT:同一条指令

所有 threads 同步执行 ADD。

Divergence

绿色执行 A,红色执行 B;两边串行执行。

Coalescing

32 个相邻地址合并成少量 cache line 访问。

如何避免 divergence?

6. Occupancy 计算器

Occupancy = 每个 SM 上同时活跃的 warp 数 / SM 支持的最大 warp 数。它决定了 latency hiding 的能力。

输入你的 kernel 参数



计算结果
Max Warps per SM48
Max Threads per SM1536
Max Registers per SM65536
Max Shared Memory per SM (KB)48
Warps per Block4
Limiting Factorthreads
Blocks per SM12
Warps per SM48
Occupancy100%

常见瓶颈