CUDA 性能优化思想

算子kernel

核心思路:少访存、访存连续、多复用、少分支。

Global Memory

  • 连续访问,尽量触发 coalescing。
  • 利用局部性,提高 L1/L2 缓存命中率。
  • 必要时调整数据布局,例如矩阵乘中先转置 B,让读取更连续。
  • 使用 float4int4 等向量化加载,提高带宽利用率。

Shared Memory

  • 热数据先搬到 shared memory,减少 global memory 访问。
  • 注意 bank conflict;必要时通过 padding 避免冲突。

Register

  • 线程私有的高频数据尽量放寄存器里,例如 thread tile。
  • 寄存器不能滥用;占用过高会降低 occupancy。

Warp

  • 避免 warp divergence,保证同一 warp 尽量走同一路径。
  • 合理使用 warp primitives,例如 shuffle