我无法理解占用计算器。我遇到了一些开发代码有问题,其中512个线程工作正常,但1024个线程给出了糟糕的数字。
我在Windows 7上运行Tesla C2050,在Matlab中开发(这不是我的错,我必须使用Matlab)和Mexfunction。
我以为我会使用占用率计算器试图找到影响结果的代码的任何其他限制。
当我每块输入1024个线程时,占用率为0%。拥有512个线程,占用率为33%。我原本以为我会得到1024个线程的东西。我注意到代码和占用计算器为最多704个线程提供了良好的结果(这是一个不代表真实的数字)。
我相信我对这方面缺乏了解是我无法纠正我在代码中看到的错误的原因。任何人都可以解释为什么我得到这些结果?
数字是:
ptxas info:使用了44个寄存器,232个字节的cmem [0],144个字节的cmem [2],28个字节的cmem [16]
答案 0 :(得分:4)
每个块的寄存器总数为32768(您可以使用SDK中的deviceQuery进行检查)。 现在根据你的内核它使用44个寄存器/线程。如果你以每块1024个线程启动内核,你将获得总数超过限制的44 * 1024 = 45056个寄存器。 在每个块运行1024个线程的ordet中,您需要优化内核,每个线程使用不超过32个寄存器。