CUDA内核profiling时predicated-on相关Avg thread executed指标异常偏高如何解读
Avg Thread Executed 指标正确解读
首先原有0~32的合理区间认知存在偏差,该范围仅适用于单条机器指令单次在一个warp上执行时的predicated-on线程数统计。Nsight Compute源码行维度的Avg Thread Executed指标统计范围和计算逻辑如下:
- 统计覆盖当前源码行对应的所有汇编指令,在内核全运行周期内所有warp的全部执行实例
- 计算公式为
所有关联指令执行时的predicated-on线程总数 ÷ 该源码行对应指令的总调度次数
如果源码行处于循环结构中,或是被大量warp高频执行,该指标数值完全可以超过32。比如某行代码对应指令被100个warp各执行1次,单次执行时每个warp都有32个活跃线程,最终指标值就会达到3200,远高于32的单warp上限。
predicated-on线程数指单条指令单次调度时,满足谓词条件、未被掩码屏蔽、实际执行运算的线程数量,该数值直接反应单warp单次执行该指令时的线程利用率,数值越接近32说明warp内分支分化程度越低。
可基于该指标得出的结论
- 若指标值远低于「源码行预估总执行warp数 × 32」,说明该行代码存在严重的warp内分支分化,大量线程执行时被掩码屏蔽,算力浪费严重,是分支优化的核心目标
- 若指标值和「源码行预估总执行warp数 × 32」数值接近,说明该行代码的分支分化程度极低,线程利用率良好
- 结合内核总耗时占比指标,若该指标数值很高同时对应行的耗时占比也高,说明该行属于内核热点执行路径,是性能优化的核心关注对象
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

