控制流量效率



如分支统计手册中所述,有两个指标:分支效率和控制流效率。

前者有硬件计数器branch_efficiency。但是,后者似乎没有直接的硬件计数器。是否有可能找到执行和发出的控制流指令的比率并将其用作第二个效率指标?还是控制流利用率指标cf_fu_utilization

由于控制流效率可以解释为扭曲中一条指令的活动线程数,我想也可以使用warp_execution_efficiency,因为定义说

多处理器上支持的每个翘曲的平均活动线程数与每个翘曲的最大线程数之比

对此有何评论?

分支效率和控制流效率都是指标。分支效率可以在单个 psd 中收集,并按 SM 值显示。控制流量效率为smsp__thread_inst_executed/smsp__inst_executed/WARP_SIZE*100.0。这些计数器无法在所有硬件上一次性从所有 SM 收集,因此指标在图表上显示为所有 SM 的平均值。

如果使用 CUPTI/NVPROF,则硬件事件为:

  • inst_executed:每个扭曲执行的指令数。 警告:描述中指出"每经曲"。这应该是总和。
  • thread_inst_executed:活动线程执行的指令数。对于每条指令,它按执行指令的线程数(包括谓词关闭线程)递增。它不包括重播。
  • not_predicated_off_thread_inst_executed:执行的未预测的线程指令数

这些事件可用于计算average_threads_executed_per_inst_executed或average_threads_executed_not_predicated_off_per_inst_executed。这可以转换为 % by/32 x 100.0。

如果条件的主体很小(几个指令),编译器将使用谓词而不是分支。

最新更新