【问题标题】:Why does CUDA Profiler indicate replayed instructions: 82% != global replay + local replay + shared replay?为什么 CUDA Profiler 指示重放指令:82% != 全局重放 + 本地重放 + 共享重放?
【发布时间】:2011-08-25 08:48:40
【问题描述】:

我从 CUDA Profiler 获得了信息。我很困惑为什么 回放指令!= 全局内存回放 + 本地内存回放 + 共享库冲突回放?

查看我从分析器获得的以下信息:

Replayed Instructions(%): 81.60
Global memory replay(%): 21.80
Local memory replays(%): 0.00
Shared bank conflict replay(%): 0.00

你能帮我解释一下吗?是否有其他情况导致指令重放?

【问题讨论】:

    标签: cuda gpu gpgpu


    【解决方案1】:

    因为 SM 会因为其他因素而重播指令,例如不同的分支逻辑。

    所以我可以假设 60% 的代码由于分支而被重新发布,而 20% 的代码由于全局内存而被重新发布。能发个sn-p吗?

    从 Cuda 4.0 分析器的 F1 帮助菜单:

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

    全局内存重放 (%) 重放指令的百分比 由于全局内存访问引起的。这计算为 100 * (l1 全局加载未命中)/已发出指令

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

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

    【讨论】:

    • 谢谢 FabrizioM。你的解释很有道理。我确实有很多 if-else 会导致分支,但在那个程序中很难避免。简而言之,我在该程序中使用二进制搜索。 if-else 难逃一劫~~
    • 我认为在大多数情况下,共享存储库冲突占重播的主要部分,然后是全局内存重播,然后是其他冲突,例如常量内存冲突、指令缓存未命中等。遗憾的是没有官方信息关于这个。
    猜你喜欢
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2019-07-19
    • 1970-01-01
    • 2012-11-13
    相关资源
    最近更新 更多