当我们使用CUDA
分析器nvvp
,有几个与指令相关的“开销”,例如:
- 分支发散开销;
- 共享/全局内存重播开销;和
- 本地/全局缓存重播开销。
我的问题是:
- 是什么导致了这些开销?
- 它们是如何计算的?
- 同样,全局加载/存储效率是如何计算的?
附件:我在 CUDA 5 工具包中的“CUDA Profiler 用户指南”中找到了计算这些开销的所有公式。
您可以在这里找到您问题的一些答案:
为什么 CUDA Profiler 指示重放指令:82% != 全局重放 + 本地重放 + 共享重放? https://stackoverflow.com/questions/7187489/why-does-cuda-profiler-indicate-replayed-instructions-82-global-replay-lo
重播指令 (%)这给出了百分比
在内核执行期间重放指令。重播指令
是指令数量之间的差异
硬件实际发出的指令数
由内核执行。理想情况下,该值应为零。这是
计算公式为 100 *(发出的指令 - 执行的指令)/
发出指示
全局内存回放 (%)重播指令的百分比
由于全局内存访问而引起。计算公式为 100 * (l1
全局负载未命中)/发出指令
本地内存回放(%)导致指令重播的百分比
由于本地内存访问。计算方法为 100 * (l1 local
加载未命中 + l1 本地存储未命中)/发出指令
共享银行冲突重播 (%)重播百分比
由于共享内存库冲突而导致的指令。这是
计算方式为 100 *(l1 共享冲突)/发出的指令
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)