【问题标题】:understanding the occupancy calculator了解占用计算器
【发布时间】:2012-07-28 22:04:46
【问题描述】:

我无法理解占用率计算器。我在一些开发代码中遇到问题,其中 512 个线程可以正常工作,但 1024 个线程给出的数字很糟糕。

我在 Windows 7 上运行 Tesla C2050,在 Matlab 中开发(这不是我的错,我必须使用 Matlab)和 Mexfunction。

我想我会使用占用计算器来尝试找出影响结果的代码的任何其他限制。

当我每个块输入 1024 个线程时,占用率为 0%。使用 512 个线程,占用率为 33%。我原以为我至少会得到 1024 个线程的东西。我注意到代码和占用计算器最多可以为 704 个线程提供良好的结果(这是一个不代表任何真实的数字)。

我相信我对这方面缺乏了解是我无法纠正我在代码中看到的错误的原因。谁能解释为什么我会得到这些结果?

数字是:

  • 计算能力 2.0
  • 共享内存大小 49152
  • 每块 512 或 1024 个线程
  • 每个线程 44 个寄存器
  • 每块 0 共享内存

ptxas info : 使用了 44 个寄存器,232 字节 cmem[0],144 字节 cmem[2],28 字节 cmem[16]

【问题讨论】:

    标签: cuda calculator


    【解决方案1】:

    每个块拥有的寄存器总数为 32768(您可以使用 SDK 中的 deviceQuery 进行检查)。 现在根据您的内核,它使用 44 个寄存器/线程。如果您以每块 1024 个线程启动内核,您将获得总共 44*1024 = 45056 个寄存器,这超出了限制。 为了以每块 1024 个线程运行它,您需要优化内核以使每个线程使用不超过 32 个寄存器。

    【讨论】:

    • 请注意,0.33的占用率还不错,应该有足够的线程来覆盖内存延迟。为了获得更高的占用率,将块大小减少到 128 个线程可能是个好主意,这应该使 640 个线程(5 个块,每个块 128 个线程)能够在每个 SM 上同时运行。一旦覆盖了基本延迟,占用率和性能之间就没有很强的相关性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多