用途:为优化内核的智能体解释 GPU 执行与内存模型,包括 SIMT 执行、warp(32)与 wavefront(64)分歧代价、全局内存合并规则、共享内存 bank 冲突、L1/L2 缓存行为、原子内存序,以及占用率与延迟隐藏的权衡。
适用场景:诊断理论上高带宽却受内存限制的内核;理解分支导致的 warp 分歧;修复分块算法中的共享内存 bank 冲突;在占用率与寄存器压力之间选择块大小;在 NVIDIA(warp 32)与 AMD(wavefront 64)间移植内核;分析并行归约中的原子竞争。
主要能力:
- SIMT 执行模型:SM/CU 内含 warp 调度器、寄存器文件、共享内存/LDS、L1 缓存,设备级 L2 缓存通向 DRAM/HBM。
- Warp 与 wavefront:NVIDIA 32 线程 warp,AMD 64 线程 wavefront;归约树和块大小需按厂商对齐。
- 分歧代价:同一 warp 内线程走不同分支会被串行化,代价约为各路径之和;可用谓词化、拆分内核、仅按块级数据分支、按 bin 循环等方式缓解。
- 全局内存合并:warp 内线程访问连续 4 字节字可合并为 128 字节事务;跨步访问、非对齐起始、AoS 布局会破坏合并,SoA 布局有利。
- 共享内存 bank 冲突:共享内存分为 32 个 4 字节 bank,不同地址落在同一 bank 会串行化;可通过列填充(如 32x33)打破对齐,用 Nsight Compute 的 bank conflicts 指标检测。
- L1/L2 缓存:L1 每 SM,常与共享内存统一并可配置划分;L2 设备级,缓存行通常 128 字节;应利用空间与时间局部性,避免随机散射和指针追逐。
- 原子与内存序:atomicAdd、atomicCAS、atomicExch 对同一地址具有顺序一致性但高竞争会串行化;可先块级归约再每块一次原子;提供 __threadfence_block、__threadfence、__threadfence_system。
- 占用率与延迟隐藏:内存受限内核宜最大化活跃 warp、合并访问、用共享内存分块;计算受限内核可在寄存器支持更多 ILP 时降低占用率。可用 ncu --metrics sm__warps_active.avg.pct_of_peak_sustained_active ./app 测量。
限制:资料为模型与调优指南,未提供具体安装步骤、依赖版本或费用信息;实际数值需结合硬件计数器验证。