内核网格大小是不是决定块数,而块大小决定线程数?
Posted
技术标签:
【中文标题】内核网格大小是不是决定块数,而块大小决定线程数?【英文标题】:Does a kernels grid size determine the number of blocks, and the blocksize determine the numbers of threads?内核网格大小是否决定块数,而块大小决定线程数? 【发布时间】:2014-11-02 08:10:05 【问题描述】:我似乎无法理解 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】:是的,建议的命名是明智的。那些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。
【讨论】:
以上是关于内核网格大小是不是决定块数,而块大小决定线程数?的主要内容,如果未能解决你的问题,请参考以下文章
在决定线程池大小时,如何理解“将每个任务需要的资源加起来并将其划分为可用的总数”