高分支效率和低控制流效率表明了什么?

时间:2012-09-22 00:44:59

标签: cuda

我使用Parallel Nsight 2.2来分析用CUDA 4.2编写的代码。结果是:分支效率= 0.9 ,而控制流执行效率= 0.26

从用户指南

Branch Efficiency=({Branches} - {Diverged Branches}) / {Branches}
Control Flow Efficiency={Thread Instructions Executed} / {Instructions Executed} / {Warps Size}

我很困惑:不是更高的分支效率意味着有更多的活动线程在warp中执行相同的指令,因此控制流效率更高?高分支效率和低控制流效率表明了什么?非常感谢任何评论。

1 个答案:

答案 0 :(得分:3)

分支效率衡量分支的数量。 100%意味着没有分支分歧。当分支发散时,经线的有效掩模减小到小于32,因此执行效率不高。此外,分支可能必须根据分支分散的方式多次执行。

执行的线程指令对谓词关闭线程进行计数。编译器可以使用谓词标志来避免控制流分歧。对于具有较小条件执行代码块的代码,可以看到此计数器的100%。

控制流效率衡量每条指令中warp中有多少线程处于活动状态。除非您启动32个线程的非多个,否则这将是32个线程或100%。如果代码分歧,这个数字将小于100%。

示例1 :每个块启动32个线程,并且没有不同的分支。

分支效率= 100% 控制流量效率= 100%

示例2 :每个块启动1个线程,并且没有发散分支。

分支效率= 100% 控制流量效率= 3%(1/32)

示例3 :每个块启动32个线程,并在第一个指令上以2种方式发散(甚至线程朝一个方向,奇数线程另一个)并执行发散块直到退出。假设这是唯一的分支。

分支效率= 0%(某些设备可能会更高,因为退出计算为分支) 控制流效率= 50%(大多数时间仅执行16个线程/扭曲)

相关问题