Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cuda SM寄存器限制_Cuda - Fatal编程技术网

cuda SM寄存器限制

cuda SM寄存器限制,cuda,Cuda,我知道一个SM上运行的块数受块数、线程、共享内存和寄存器的限制。是否有任何策略可以避免拥有过多的寄存器?我的意思是我不想拥有太多的寄存器,最终它限制了我在一个SM上运行的块的数量。寄存器数量的主要驱动因素之一是您在内核中声明的本地数据量。然而,PTX汇编程序可以很好地重用寄存器,因此要计算出PTX代码将使用多少寄存器并不总是那么容易——您需要运行ptxas才能得到真正的答案。寄存器数量的主要驱动因素之一是您在内核中声明的本地数据量。然而,PTX汇编程序可以很好地重用寄存器,因此要计算出PTX代码

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

寄存器数量的主要驱动因素之一是您在内核中声明的本地数据量。然而,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节