2013-06-23 138 views
-1

我是CUDA新手,我对内核调用感到困惑。CUDA中的内核调用

当你打电话给你指定的块数和每块的线程内核的方法,这样kernelMethod < < <块,线程>>>(参数);”

那么,为什么它可以使用第3参数 kernelMethod < < <块,线,??? >>>(参数);使用

cudaDeviceProp可以读取每块线程的数量变量maxThreadsPerBlock但我怎么能知道最大。块数? 谢谢!!

回答

3

第三个参数指定每个块要动态分配的共享内存量。 programming guide提供了有关shared memory以及description and example的其他详细信息。

共享存储器可以在一个内核静态分配:

__shared__ int myints[256]; 

或动态:

extern __shared__ int myints[]; 

在后一种情况下,有必要通过作为附加内核配置参数(第三参数你提到)共享内存的大小要按字节分配。

在那种情况下,指针myints然后指向该动态分配区域的开始。

每个网格尺寸(x,y,z)指定块的最大数量,也可以通过设备属性query获取。它在maxGridSize parameter中指定。你可能想参考deviceQuery sample一个工作的例子。