我似乎无法理解CUDA内核参数<<<gridSize, blockSize>>>
在我正在审核的代码中,它们被定义为
const dim3 blockSize(1, 1, 1);
const dim3 gridSize( 1, 1, 1);
用变量引用替换硬编码的1,如果它们的命名是这样的话,它们是否正确命名
const dim3 blockSize(nThreadsX, nThreadsY, nThreadsZ);
const dim3 gridSize(nBlocksX, nBlocksY, nBlocksZ);
其中blockSize
的任何参数的最大值可以由硬件设置(类似于512或1024?),并且是一个块中运行的最大线程数尺寸
答案 0 :(得分:2)
是的,建议的命名是明智的。那些dim3
参数旨在表示(x,y,z)维度。该块由线程组成。网格由块组成。
使用您的命名,nBlocksX
,nBlocksY
和nBlocksZ
必须都小于相应的硬件定义限制。可以从programming guide(表12)或使用deviceQuery示例应用程序中包含的方法以编程方式发现这些限制。
nThreadsX
,nThreadsY
和nThreadsZ
有类似限制,但另外,产品nThreadsX
* nThreadsY
* nThreadsZ
还必须满足另一个限制(Maximum number of threads per block,当前CUDA GPU硬件为512或1024.