我使用并行Nsight 2.2来分析我用CUDA 4.2编写的代码。结果是:分支efficiency=0.9,而控制流执行efficiency=0.26。
根据用户指南,
Branch Efficiency=({Branches} - {Diverged Branches}) / {Branches}
Control Flow Efficiency={Thread Instructions Executed} / {Instructions Executed} / {Warps Size}我很困惑:一个更高的分支效率是否意味着在翘曲中有更多的活动线程执行相同的指令,从而提高控制流的效率?高的分支效率和低的控制流量效率意味着什么?非常感谢您的评论。
发布于 2012-09-22 01:00:30
分支效率是衡量分支的发散程度的指标。100%意味着没有分叉。当分支发散时,翘曲线程活动掩码减少到小于32,因此执行效率不高。此外,根据分支发散的方式的数量,可能需要多次执行分支。
线程指令执行计数对线程进行预测。编译器可以使用谓词标志来避免控制流发散。对于具有较小的执行代码条件块的代码,可以100%地看到此计数器。
控制流效率是衡量每条指令在翘曲中活动的线程数。除非您启动一个非多个32个线程,否则这将是32个线程或100%。如果代码不一致,这个数字将小于100%。
示例1:每个块启动32个线程,并且没有发散分支。
分支效率= 100%控制流量效率= 100%
示例2:每个块启动一个线程,并且没有发散分支。
分支效率= 100%控制流量效率= 3% (1/32)
示例3:每块启动32个线程,并通过两种方式在第一条指令上发散(偶数线程从一个方向运行,奇数线程转到另一个方向),然后执行发散块直到退出。假设这是唯一的分支。
分支效率= 0% (在某些设备上可能更高,因为出口被计算为分支)控制流效率= 50% (大部分时间只执行16个线程/翘曲)
https://stackoverflow.com/questions/12539762
复制相似问题