【问题标题】: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?),并且是将在块中运行的最大线程数在单个维度中?

【问题讨论】:

    标签: cuda


    【解决方案1】:

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

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

    nThreadsXnThreadsYnThreadsZ 也有类似的限制,但此外,产品 nThreadsX * nThreadsY * nThreadsZ 还必须满足另一个限制 ( Maximum number of threads per block,对于当前的 CUDA GPU 硬件,它是 512 或 1024。

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2021-01-07
      • 2014-10-14
      • 1970-01-01
      • 2020-03-06
      • 2014-01-19
      • 2020-01-14
      相关资源
      最近更新 更多