当我们使用CUDA
profilernvvp
时,有几个与指令相关的“开销”,例如:
- 分支分歧开销;
- 共享/全局内存重播开销;和
- 本地/全局缓存重播开销。
我的问题是:
- 是什么导致了这些间接费用?以及
- 它们是如何计算的?
- 同样,如何计算全局加载/存储效率?
附件:我在 CUDA5 工具包中的“CUDA Profiler 用户指南”中找到了计算这些开销的所有公式。
当我们使用CUDA
profilernvvp
时,有几个与指令相关的“开销”,例如:
我的问题是:
附件:我在 CUDA5 工具包中的“CUDA Profiler 用户指南”中找到了计算这些开销的所有公式。
您可以在此处找到您的问题的一些答案:
为什么 CUDA Profiler 指示重放指令:82% != 全局重放 + 本地重放 + 共享重放?
Replayed Instructions (%)这给出了在内核执行期间重放的指令的百分比。重放指令是硬件实际发出的指令数与内核要执行的指令数之差。理想情况下,这应该为零。这计算为 100 *(发出的指令 - 执行的指令)/发出的指令
全局内存重播 (%)由于全局内存访问而导致的重播指令的百分比。这计算为 100 *(l1 全局加载未命中)/发出的指令
本地内存重播 (%)由于本地内存访问而导致的重播指令的百分比。这计算为 100 * (l1 本地加载未命中 + l1 本地存储未命中) / 发出的指令
共享存储库冲突重播 (%)由于共享存储库冲突而导致的重播指令的百分比。这计算为 100 *(l1 共享冲突)/发出的指令