CUDA 性能优化思想
算子kernel
核心思路:少访存、访存连续、多复用、少分支。
Global Memory
- 连续访问,尽量触发 coalescing。
- 利用局部性,提高 L1/L2 缓存命中率。
- 必要时调整数据布局,例如矩阵乘中先转置
B,让读取更连续。 - 使用
float4、int4等向量化加载,提高带宽利用率。
Shared Memory
- 热数据先搬到 shared memory,减少 global memory 访问。
- 注意 bank conflict;必要时通过 padding 避免冲突。
Register
- 线程私有的高频数据尽量放寄存器里,例如 thread tile。
- 寄存器不能滥用;占用过高会降低 occupancy。
Warp
- 避免 warp divergence,保证同一 warp 尽量走同一路径。
- 合理使用 warp primitives,例如
shuffle。