Cuda 控制流量效率

Cuda 控制流量效率,cuda,control-flow,Cuda,Control Flow,正如分支统计中所述,有两个指标:分支效率和控制流效率 前者有一个硬件计数器分支效率。然而,后者似乎没有直接的硬件计数器。是否有可能找到已执行和发出的控制流指令的比率,并将其用作第二个效率指标?或者控制流利用率指标cf\u fu\u利用率 由于控制流效率可以解释为warp中一条指令的活动线程数,我猜warp\u execution\u efficiency也可以使用,因为定义是 每个扭曲的平均活动线程数与多处理器上支持的每个扭曲的最大线程数的比率 对此有何评论?分支效率和控制流效率都是衡量标准。分

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

前者有一个硬件计数器
分支效率
。然而,后者似乎没有直接的硬件计数器。是否有可能找到已执行和发出的控制流指令的比率,并将其用作第二个效率指标?或者控制流利用率指标
cf\u fu\u利用率

由于控制流效率可以解释为warp中一条指令的活动线程数,我猜
warp\u execution\u efficiency
也可以使用,因为定义是

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


对此有何评论?

分支效率和控制流效率都是衡量标准。分支效率可在单个psd中收集,并按照SM值显示。控制流效率为smsp___线程_inst_执行/smsp_inst_执行/WARP_大小*100.0。这些计数器无法在所有硬件上一次性从所有SMs收集,因此图表上显示的度量值是所有SMs的平均值

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

  • inst_executed:每个扭曲执行的指令数。 警告:说明中表示“每扭曲”。这应该是总数
  • thread_inst_executed:活动线程执行的指令数。对于每一条指令,它都会增加执行该指令的线程数,包括谓词外线程。它不包括回放
  • not_predicated_off_thread_inst_executed:执行的非谓词关闭的线程指令数
这些事件可用于计算每次执行的平均线程数或每次执行的平均线程数。可通过/32 x 100.0将其转换为百分比


如果条件体较小(多条指令),编译器将使用谓词而不是分支。

分支效率和控制流效率都是度量标准。分支效率可在单个psd中收集,并按照SM值显示。控制流效率为smsp___线程_inst_执行/smsp_inst_执行/WARP_大小*100.0。这些计数器无法在所有硬件上一次性从所有SMs收集,因此图表上显示的度量值是所有SMs的平均值

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

  • inst_executed:每个扭曲执行的指令数。 警告:说明中表示“每扭曲”。这应该是总数
  • thread_inst_executed:活动线程执行的指令数。对于每一条指令,它都会增加执行该指令的线程数,包括谓词外线程。它不包括回放
  • not_predicated_off_thread_inst_executed:执行的非谓词关闭的线程指令数
这些事件可用于计算每次执行的平均线程数或每次执行的平均线程数。可通过/32 x 100.0将其转换为百分比


如果条件体较小(多条指令),编译器将使用谓词而不是分支。

分支效率由nvprof报告。因此,对于一个被调用10次的内核,100%意味着对于所有10次调用,32个线程都是活动的,没有分支。执行的smsp线程指令的硬件指标是什么?正确。如果每个块启动奇数个线程,那么即使内核中没有控制流,该值也会降低。我用nvprof/CUPTI的硬件计数器和公式更新了答案。关于执行的指令,nvprof报告了一个数字,例如。100,对于被调用50次的内核。因此,我假设这是来自所有线程的50次失效指令的总数。不是吗?否则,我必须知道调用中扭曲的数量。我看不到第二个和第三个项目符号的任何度量。我的意思是,这里的文档列出了度量标准。它不列出事件。运行nvprof--查询事件以列出所有事件。inst_executed event返回1次网格启动时在所有SMs上执行(失效)的所有指令的总和。如果希望每个扭曲执行指令,则公式为inst_executed/warps_launched。用户界面将打印事件名称,然后是最小值、最大值、平均值、总计。这些是在同一内核的所有启动中计算出来的,在最小/最大/平均值的网格/GPU级别,总计是所有启动的总和。分支效率由nvprof报告。因此,对于一个被调用10次的内核,100%意味着对于所有10次调用,32个线程都是活动的,没有分支。执行的smsp线程指令的硬件指标是什么?正确。如果每个块启动奇数个线程,那么即使内核中没有控制流,该值也会降低。我用nvprof/CUPTI的硬件计数器和公式更新了答案。关于执行的指令,nvprof报告了一个数字,例如。100,对于被调用50次的内核。因此,我假设这是来自所有线程的50次失效指令的总数。不是吗?否则,我必须知道调用中扭曲的数量。我看不到第二个和第三个项目符号的任何度量。我的意思是,这里的文档列出了度量标准。它不列出事件。运行nvprof--查询事件以列出所有事件。inst_executed event返回1次网格启动时在所有SMs上执行(失效)的所有指令的总和。如果希望每个扭曲执行指令,则公式为inst_executed/warps_launched。用户界面将打印事件名称,然后是最小值、最大值、平均值、总计。这些是在同一内核的所有启动中计算的,并且位于grid/G