为什么CUDA Profiler会指示重播说明:82%!=全局重播+本地重播+共享重播?

Yik*_*Yik 3 cuda gpu gpgpu

我从CUDA Profiler那里获得了信息.我很困惑为什么重播指令!= Grobal内存重播+本地内存重放+共享银行冲突重播?

请参阅我从profiler获得的以下信息:

Replayed Instructions(%): 81.60
Global memory replay(%): 21.80
Local memory replays(%): 0.00
Shared bank conflict replay(%): 0.00
Run Code Online (Sandbox Code Playgroud)

你能帮我解释一下吗?还有其他案例导致重播指令吗?

fab*_*ioM 5

因为SM可以由于其他因素(例如不同的分支逻辑)而重放指令.

所以我可以假设60%的代码由于分支而重新发布,20%由于全局内存而重新发布.你可以发一个片段吗?

从Cuda 4.0 Profiler的F1帮助菜单中:

重播指令(%)这给出了在内核执行期间重放的指令的百分比.重放指令是硬件实际发出的指令数与内核要执行的指令数之间的差异.理想情况下,这应该为零.这被计算为100*(发出的指令 - 执行的指令)/发出的指令

全局内存重放(%)由于全局内存访问而导致的重放指令的百分比.这被计算为100*(l1全局负载未命中)/发出的指令

本地内存重放(%)由于本地内存访问而导致的重放指令的百分比.这被计算为100*(l1本地加载未命中+ l1本地存储未命中)/发出的指令

共享银行冲突重播(%)由于共享内存库冲突导致的重放指令的百分比.这被计算为100*(l1共享冲突)/发出的指令