0

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

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

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

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

4

1 回答 1

5

第三个参数指定要动态分配的每个块的共享内存量。编程指南提供了有关共享内存的更多详细信息,以及描述和示例

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

__shared__ int myints[256];

或动态:

extern __shared__ int myints[];

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

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

每个网格维度(x,y,z)指定最大块数,也可以通过设备属性查询获得。它在maxGridSize 参数中指定。您可能需要参考deviceQuery 示例以获取工作示例。

于 2013-06-23T22:53:28.617 回答