控制流量效率

Control flow efficiency

如 Branch 统计数据 manual 所述,有两个指标:分支效率和控制流效率。

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

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

Ratio of the average active threads per warp to the maximum number of threads per warp supported on a multiprocessor

对此有何评论?

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

如果使用 CUPTI/NVPROF 硬件事件是:

  • inst_executed:每个 warp 执行的指令数。 警告:描述说明 "per warp"。这应该是总和。
  • 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.

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