2 min read

CUDA 13.0 共享内存寄存器溢出优化:释放 GPU 性能新维度

CUDA 13.0 共享内存寄存器溢出优化:释放 GPU 性能新维度

NVIDIA 在 CUDA Toolkit 13.0 中引入了一项名为“共享内存寄存器溢出” (shared memory register spilling) 的新优化功能。此功能允许编译器将寄存器溢出(当硬件寄存器不足时,将变量移至本地内存的过程)优先导向到片上共享内存,而非传统的全局内存。此举旨在降低因访问全局内存导致的延迟,并减轻 L2 缓存的压力,尤其对寄存器使用量大的 CUDA 内核性能提升显著。

通过利用低延迟的共享内存来存储溢出数据,该优化显著改善了性能。在 CUDA 13.0 之前的版本中,所有寄存器溢出都写入全局内存的本地内存,这可能导致 L2 缓存行被驱逐,影响整体性能。新优化功能通过在编译时插入 `.pragma "enable_smem_spilling";` 指令来启用,并已在 QUDA 库的实际应用中展现出 5-10% 的性能提升。

然而,此功能并非万能,仅适用于函数作用域,且在 PTXAS 全程序编译模式下有效。使用动态分配共享内存的内核、动态重分配寄存器或未明确指定启动边界 (launch bounds) 的内核,可能会导致编译错误或性能下降。因此,建议在具有明确启动边界和一致共享内存利用率的内核上使用此优化。

查看消息来源

订阅情报