内核调用CUDA

时间:2013-06-23 22:38:17

标签: cuda

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

当您调用内核方法时,您可以指定块数和每个块的线程,例如此kernelMethod<<< block,Threads>>>(参数);“

那么为什么可以使用第三个参数呢? kernelMethod<<< block,Threads,???>>>(参数);

使用cudaDeviceProp,您可以读取变量maxThreadsPerBlock中每个块的线程数。但是我怎么知道最大块数? 谢谢!

1 个答案:

答案 0 :(得分:4)

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

共享内存可以在内核中静态分配:

__shared__ int myints[256];

或动态:

extern __shared__ int myints[];

在后一种情况下,有必要作为额外的内核配置参数(您提到的第三个参数)传递要以字节为单位分配的共享内存的 size

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

每个网格尺寸(x,y,z)指定最大块数,也可以通过设备属性query获取。它在maxGridSize parameter中指定。您可能需要参考deviceQuery sample以获得有用的示例。