我正在尝试分析我在网上发现的一些代码,并且我一直在想自己。我正在查看使用以下参数启动的直方图内核
histogram<<<2500, numBins, numBins * sizeof(unsigned int)>>>(...);
我知道参数是网格,块,共享内存大小。
那是否意味着每个都有2500个numBins
个线程块,每个块还有一个numBins * sizeof(unsigned int)
块共享内存可供其线程使用?
此外,在内核本身内有__syncthreads()
的调用,在内核调用过程中是否有2500套numBins
调用__syncthreads()
?
答案 0 :(得分:12)
这是否意味着每个都有2500个numBins线程块, 每个块也有一个numBins * sizeof(unsigned int)块 共享内存可用于其线程?
执行配置(全局函数调用)是通过插入<<<Dg,Db,Ns,S>>>
形式的表达式来指定的,其中:
所以,正如@Fazar指出的那样,答案是肯定的。每个块分配该内存。
此外,在内核本身内有__syncthreads()的调用 然后有2500套对__syncthreads()的numBins调用 内核调用的过程?
__syncthreads()
等待,直到线程块中的所有线程都达到了这一点。用于协调同一块中线程之间的通信。
因此,每个块都有__syncthread()
个调用。