03 寄存器堆物理组织与 Register Spill¶
1. 庞大的片上寄存器堆 (Register File)¶
现代 GPU 的 SM 配置了较大的寄存器堆(通常单个 SM 包含 64K 个 32-bit 寄存器,即 256KB SRAM,全芯片超过 30MB+ 寄存器)。 - 寄存器堆采用高度多 Bank 化的物理 SRAM 组织(如 16~32 Bank),每个周期为 32 个 Lane 同时提供 3 个源操作数(\(32 imes 3 imes 4 ext{ Bytes} = 384 ext{ Bytes/cycle}\) 内部吞吐)。
2. Register Spill(寄存器溢出)与性能断崖¶
当编译器编译复杂 Kernel 时,若单个线程所需寄存器数量超过上限(如超过 255 个,或为了提升 SM Occupancy 限制每线程最多使用 32 个寄存器): 1. 编译器会将多余的局部变量溢出(Spill)到 Local Memory(局部内存)。 2. 硬件本质:Local Memory 在物理上并不存在独立片上 SRAM,而是映射在外部物理显存 VRAM 中(仅由 L1/L2 Cache 缓存)。 3. 性能影响:Register Spill 增加 Local Memory 读写,可能延长 Warp 等待。应结合 Spill 量、缓存命中与执行时间判断其影响。