2.1 存储与访问:先画地址再写优化
CUDA 索引、访存、归约、扫描与 Softmax
| 层 | 典型所有权 | 优化动作 | 常见误判 |
|---|---|---|---|
| Register | Thread | 复用标量、减少重复计算 | 过多寄存器造成 spill |
| Shared Memory | Block | tile 复用、协作装载 | 同步遗漏、Bank Conflict |
| L1/L2 | SM/设备缓存 | 改善局部性 | 命中率高不代表绝对带宽足够 |
| HBM / Global | 设备 | 合并访问、减少字节 | 连续逻辑索引不代表物理连续 |
Coalescing:32 lane 读连续 float 通常比跨 stride 的 32 次散读更容易合并为少量内存事务。Bank Conflict:共享内存同一 Warp 不同地址落同一 bank 会冲突;广播同地址是例外。先根据架构的 bank 组织和元素字节数算映射,再用 Nsight Compute 看 shared load/store 指标。Padding tile[32][33] 是列访问的经典例子,不是所有矩阵都应盲目加一列。