1

我使用 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}

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

4

1 回答 1

3

分支效率是衡量有多少分支分支的指标。100% 表示没有分支分叉。当分支发散时,经线线程活动掩码减少到小于 32,因此执行效率不高。此外,根据分支分支的方式数量,可能必须多次执行分支。

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

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

示例 1:您每个块启动 32 个线程并且没有分歧分支。

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

示例 2:您每个块启动 1 个线程并且没有分歧分支。

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

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

分支效率 = 0%(在某些设备上可能更高,因为出口被视为分支)控制流效率 = 50%(大部分时间只执行 16 个线程/warp)

于 2012-09-22T01:00:30.717 回答