GPU 由多个 Streaming Multiprocessor (SM) 组成,SM 通过 L2 Cache 和 DRAM 交互。点击任意 SM 查看提示。
Thread ↔ Register ↔ Shared Memory/L1 ↔ L2 ↔ DRAM。越靠近 thread,越快、越小。
一个 SM 就像一个小型工厂:Warp Scheduler 是调度员,CUDA Cores 是工人,Register File 和 Shared Memory 是车间里的快速缓存。
__syncthreads)。1D:global_id = blockIdx.x * blockDim.x + threadIdx.x
2D:row = blockIdx.y * blockDim.y + threadIdx.y; col = blockIdx.x * blockDim.x + threadIdx.x
当某个 warp 等待内存数据时,Warp Scheduler 会立刻切换到另一个 ready warp,让 CUDA Cores 几乎不空闲。
为什么这叫 latency hiding? 内存访问可能需要几百个时钟周期。Warp Scheduler 通过快速切换 warp,让 CUDA Cores 总有事情做。
所有 threads 同步执行 ADD。
绿色执行 A,红色执行 B;两边串行执行。
32 个相邻地址合并成少量 cache line 访问。
Occupancy = 每个 SM 上同时活跃的 warp 数 / SM 支持的最大 warp 数。它决定了 latency hiding 的能力。
| Max Warps per SM | 48 |
| Max Threads per SM | 1536 |
| Max Registers per SM | 65536 |
| Max Shared Memory per SM (KB) | 48 |
| Warps per Block | 4 |
| Limiting Factor | threads |
| Blocks per SM | 12 |
| Warps per SM | 48 |
| Occupancy | 100% |