了解这个CUDA内核启动参数

KDe*_*ker 9 cuda

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

histogram<<<2500, numBins, numBins * sizeof(unsigned int)>>>(...); 
Run Code Online (Sandbox Code Playgroud)

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

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

此外,内核中有将呼叫__syncthreads(),是否有那么2500台的numBins呼叫__syncthreads()在内核调用的过程?

sro*_*drb 13

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

CUDA Toolkit文档:

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

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

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

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

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

所以,__syncthread()每个块都有一个调用.