cuda SM注册限制

时间:2010-10-06 16:37:58

标签: cuda

我知道在一个SM上运行的块数受块号,线程,共享内存和寄存器的限制。是否有任何避免拥有太多寄存器的策略?我的意思是我只是不想拥有太多它们,最终它限制了我在一个SM上运行的块数。

2 个答案:

答案 0 :(得分:9)

使用nvcc -Xptxas -v进行编译将打印出Edric提到的诊断信息。此外,您可以使用__launch_bounds__限定符强制编译器保存寄存器。例如

__global__ void
__launch_bounds__(maxThreadsPerBlock, minBlocksPerMultiprocessor)
MyKernel(...)
{ 
   ...
}

保证至少minBlocksPerMultiprocessormaxThreadsPerBlock块大小适合单个SM。有关__launch_bounds__的完整说明,请参阅CUDA Programming Guide的B.16节。

答案 1 :(得分:4)

寄存器数量的主要驱动因素之一是您在内核中声明的本地数据量。但是,PTX汇编器可以很好地重复使用寄存器,因此从PTX代码中计算出使用的数量并不总是很容易 - 您需要运行ptxas来获得真正的答案。