我正在尝试分析一些我在网上找到的代码,但我一直想不通。我正在查看使用以下参数启动的直方图内核
histogram<<<2500, numBins, numBins * sizeof(unsigned int)>>>(...);
我知道参数是网格、块、共享内存大小。
那是否意味着有2500个块,每个块都有numBins
个线程,每个块还有一个numBins * sizeof(unsigned int)
大小的共享内存块可用于其线程?
此外,在内核内部也会调用__syncthreads()
,那么在内核调用过程中会有2500组numBins
个对__syncthreads()
的调用吗?
__syncthreads()
点,等待直到该块内所有线程更新共享内存到该点并到达,然后继续执行后续指令。该块中的所有线程都必须看到__syncthreads()
,因此可以说有2500组对numBins
的__syncthreads()
调用,但这与普通函数调用不同。 这是用于块内线程同步的屏障例程。 - Farzad