cuda SM寄存器限制
我知道一个SM上运行的块数受块数、线程、共享内存和寄存器的限制。是否有任何策略可以避免拥有过多的寄存器?我的意思是我不想拥有太多的寄存器,最终它限制了我在一个SM上运行的块的数量。寄存器数量的主要驱动因素之一是您在内核中声明的本地数据量。然而,PTX汇编程序可以很好地重用寄存器,因此要计算出PTX代码将使用多少寄存器并不总是那么容易——您需要运行cuda SM寄存器限制,cuda,Cuda,我知道一个SM上运行的块数受块数、线程、共享内存和寄存器的限制。是否有任何策略可以避免拥有过多的寄存器?我的意思是我不想拥有太多的寄存器,最终它限制了我在一个SM上运行的块的数量。寄存器数量的主要驱动因素之一是您在内核中声明的本地数据量。然而,PTX汇编程序可以很好地重用寄存器,因此要计算出PTX代码将使用多少寄存器并不总是那么容易——您需要运行ptxas才能得到真正的答案。寄存器数量的主要驱动因素之一是您在内核中声明的本地数据量。然而,PTX汇编程序可以很好地重用寄存器,因此要计算出PTX代码
ptxas
才能得到真正的答案。寄存器数量的主要驱动因素之一是您在内核中声明的本地数据量。然而,PTX汇编程序可以很好地重用寄存器,因此要计算出PTX代码将使用多少寄存器并不总是容易的-您需要运行ptxas
才能得到真正的答案。使用nvcc-Xptxas-v
编译将打印出Edric提到的诊断信息。此外,您可以使用\uuuu启动\uu界限\uuuu
限定符强制编译器保存寄存器。比如说
__global__ void
__launch_bounds__(maxThreadsPerBlock, minBlocksPerMultiprocessor)
MyKernel(...)
{
...
}
保证至少
minblocksMultiProcessor
大小为maxThreadsPerBlock
的块将适合单个SM。请参阅的B.16节,以了解有关使用nvcc-Xptxas-v编译将打印所述诊断信息的完整说明。此外,您可以使用\uuuu启动\uu界限\uuuu
限定符强制编译器保存寄存器。比如说
__global__ void
__launch_bounds__(maxThreadsPerBlock, minBlocksPerMultiprocessor)
MyKernel(...)
{
...
}
保证至少minblocksMultiProcessor
大小为maxThreadsPerBlock
的块将适合单个SM。有关\uuu启动\uu边界\uuuu
的完整说明,请参阅的B.16节