我从CUDA Profiler获得了信息。我很困惑为什么 重播指令!= Grobal内存重放+本地内存重放+共享银行冲突重放?
请参阅我从Profiler获得的以下信息:
Replayed Instructions(%): 81.60
Global memory replay(%): 21.80
Local memory replays(%): 0.00
Shared bank conflict replay(%): 0.00
你可以帮我解释一下吗?还有其他案例导致重播指令吗?
答案 0 :(得分:5)
因为SM可以根据其他因素重放指令,例如不同的分支逻辑。
因此,我可以假设60%的代码由于分支而重新发布,20%由于全局内存而重新发布。你可以发一个片段吗?
从Cuda 4.0 Profiler的F1帮助菜单中:
重播说明(%)这给出了百分比 内核执行期间重放的指令。重播说明 是指令数量之间的差异 实际上是由硬件发出的指令数量 由内核执行。理想情况下,这应该为零。这是 计算为100 *(发出指令 - 执行指令)/ 发出的指示
全局内存重播(%)重播说明的百分比 由于全局内存访问而导致的。计算结果为100 *(l1 全局负载未命中)/发布指令
本地内存重播(%)重播指令所造成的百分比 由于本地内存访问。计算结果为100 *(l1 local 加载未命中+ l1本地商店未命中)/发出指令
共享银行冲突重播(%)重播的百分比 由于共享内存库冲突导致的指令。这是 计算为100 *(l1共享冲突)/发出指令