我想分析一些我在网上找到的代码,并且不断思考自己到了一个角落。我正在看一个直方图内核推出与以下参数了解此CUDA内核启动参数
histogram<<<2500, numBins, numBins * sizeof(unsigned int)>>>(...);
我知道参数是网格,块,共享内存大小。
那么这是否意味着每个线程有numBins
个线程的2500个块,每个块还有一个numBins * sizeof(unsigned int)
块的共享内存可用于其线程?
另外,在内核本身内部有__syncthreads()
的调用,那么在内核调用的过程中,有没有2500组调用__syncthreads()
?
第一个问题:是的。第二个问题:这些2500块内的线程独立于其他块中的线程,将进入'__syncthreads()'点,直到块中的所有线程完成对共享内存的更新直到该点到达,并且然后继续执行更多指令。块内的所有线程都必须看到'__syncthreads()',所以你可以说有'2500个'numBins'对'__syncthreads()'*的调用,但它与通常的函数调用不同。这是块内线程同步的屏障程序。 – Farzad 2014-11-06 06:31:03