【问题标题】:How to find out if kernel is memory bound or computation bound?如何确定内核是否受内存限制或计算限制?
【发布时间】:2017-01-26 18:18:12
【问题描述】:

我认为我的内核受内存限制(因为大多数 GPGPU 代码受内存限制),但我实际上并不确定。我怎么能自己发现它。可能必须使用视觉分析器,因为它取决于使用的 GPU。

如果 CUDA 编程指南或其他 NVIDIA 文档中对此进行了解释,请不要犹豫,发布带有页码的链接,以便我自己阅读。

澄清

我更喜欢一般“规则”如何确定限制因素,但在我的特殊情况下,您可以在此处找到有关我的内核的详细信息:Using `overlap`, `kernel time` and `utilization` to optimize one's kernels

【问题讨论】:

  • 您是否根据 CUDA 占用率计算器检查了内核启动配置和属性?一定要试试。然后,分析也是一个好主意。源代码分析也很有用......你的算术强度是多少?您的全局内存访问是否已合并?等等。

标签: cuda


【解决方案1】:

来自 NVIDIA 的 presentation 讨论了通过修改源代码来选择性地禁用内核中的内存访问和算术,以确定其中之一是否会限制您的性能。

【讨论】:

    【解决方案2】:

    计算能力2.0及以上(基于answer here)编译的代码可以使用无需任何源代码修改的好技巧

    使用“--use_fast_math”标志可以轻松增加\减少计算压力。

    • 如果设置此标志会产生很大的加速,这将表明计算绑定内核。

    • 如果设置此标志几乎没有加速,这将表明一个平衡的\内存绑定内核。

    【讨论】:

      【解决方案3】:

      虽然我会提出一个答案,即使有一个公认的答案并且这个问题是旧的。

      我的代码中也有类似的问题,虽然当时我并不知道。 我运行了 Nvidia Visual Profiler (nvvp) 并分析了我的程序。我发现分析器检测到我的程序在某些方面受到限制并且有一些建议。

      如果您不确定从哪里开始,这是一个很好的工具。

      【讨论】:

        猜你喜欢
        • 2011-05-14
        • 2011-03-10
        • 2013-02-05
        • 2011-10-04
        • 1970-01-01
        • 1970-01-01
        • 2022-06-26
        • 2014-06-10
        • 2012-05-08
        相关资源
        最近更新 更多