了解这个CUDA内核启动参数

时间:2014-11-06 01:11:00

标签: cuda

我正在尝试分析我在网上发现的一些代码,并且我一直在想自己。我正在查看使用以下参数启动的直方图内核

histogram<<<2500, numBins, numBins * sizeof(unsigned int)>>>(...); 

我知道参数是网格,块,共享内存大小。

那是否意味着每个都有2500个numBins个线程块,每个块还有一个numBins * sizeof(unsigned int)块共享内存可供其线程使用?

此外,在内核本身内有__syncthreads()的调用,在内核调用过程中是否有2500套numBins调用__syncthreads()

1 个答案:

答案 0 :(得分:12)

  

这是否意味着每个都有2500个numBins线程块,   每个块也有一个numBins * sizeof(unsigned int)块   共享内存可用于其线程?

来自CUDA Toolkit documentation

执行配置(全局函数调用)是通过插入<<<Dg,Db,Ns,S>>>形式的表达式来指定的,其中:

  • Dg dim3 )指定网格的尺寸和大小。
  • Db dim3 )指定每个块的尺寸和大小
  • Ns size_t )指定除静态之外,此调用动态分配每个块的共享内存中的字节数分配内存。
  • S cudaStream_t )指定关联的流,是一个默认为0的可选参数。

所以,正如@Fazar指出的那样,答案是肯定的。每个块分配该内存。

  

此外,在内核本身内有__syncthreads()的调用   然后有2500套对__syncthreads()的numBins调用   内核调用的过程?

__syncthreads()等待,直到线程块中的所有线程都达到了这一点。用于协调同一块中线程之间的通信。

因此,每个块都有__syncthread()个调用。