【发布时间】:2014-11-06 18:48:51
【问题描述】:
我正在尝试分析我在网上找到的一些代码,但我一直认为自己陷入了困境。我正在查看使用以下参数启动的直方图内核
histogram<<<2500, numBins, numBins * sizeof(unsigned int)>>>(...);
我知道参数是网格、块、共享内存大小。
那么这是否意味着每个有 2500 个 numBins 线程块,每个块也有一个 numBins * sizeof(unsigned int) 块可供其线程使用的共享内存?
此外,在内核本身内部有对__syncthreads() 的调用,在内核调用过程中是否有2500 组numBins 对__syncthreads() 的调用?
【问题讨论】:
-
第一个问题:是的。第二个问题:那些 2500 块内的线程,独立于其他块中的线程,将到达
__syncthreads()点,一直停留到块中的所有线程完成对共享内存的更新并到达该点,然后继续执行进一步的指令。块内的所有线程都必须看到__syncthreads(),因此您可以说有2500 组numBins调用__syncthreads(),但这与通常的函数调用不同。这是块内线程同步的屏障例程。
标签: cuda