4

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

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

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

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

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

数字是:

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

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

4

1 回答 1

4

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

于 2012-07-31T07:45:47.490 回答