内核网格大小是否确定了块数,而块大小是否决定了线程数?

时间:2014-09-09 01:45:13

标签: cuda

我似乎无法理解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?),并且是一个块中运行的最大线程数尺寸

1 个答案:

答案 0 :(得分:2)

是的,建议的命名是明智的。那些dim3参数旨在表示(x,y,z)维度。该块由线程组成。网格由块组成。

使用您的命名,nBlocksXnBlocksYnBlocksZ必须都小于相应的硬件定义限制。可以从programming guide(表12)或使用deviceQuery示例应用程序中包含的方法以编程方式发现这些限制。

nThreadsXnThreadsYnThreadsZ有类似限制,但另外,产品nThreadsX * nThreadsY * nThreadsZ还必须满足另一个限制(Maximum number of threads per block,当前CUDA GPU硬件为512或1024.