【发布时间】:2013-06-23 22:38:16
【问题描述】:
我是 CUDA 的新手,我对内核调用感到困惑。
当您调用内核方法时,您指定块数和每个块的线程,例如 kernelMethod>>(parameters);"
那么为什么可以使用第三个参数呢? kernelMethod>>(参数);
使用 cudaDeviceProp 您可以在变量 maxThreadsPerBlock 中读取每个块的线程数。但是我怎么知道最大块数呢? 谢谢!!
【问题讨论】:
标签: cuda
我是 CUDA 的新手,我对内核调用感到困惑。
当您调用内核方法时,您指定块数和每个块的线程,例如 kernelMethod>>(parameters);"
那么为什么可以使用第三个参数呢? kernelMethod>>(参数);
使用 cudaDeviceProp 您可以在变量 maxThreadsPerBlock 中读取每个块的线程数。但是我怎么知道最大块数呢? 谢谢!!
【问题讨论】:
标签: cuda
第三个参数指定要动态分配的每个块的共享内存量。 programming guide 提供有关 shared memory 以及 description and example 的更多详细信息。
共享内存可以在内核中静态分配:
__shared__ int myints[256];
或动态:
extern __shared__ int myints[];
在后一种情况下,有必要将要分配的共享内存的大小作为附加的内核配置参数(您提到的第三个参数)以字节为单位传递。
在这种情况下,指针 myints 然后指向该动态分配区域的开头。
每个网格维度(x,y,z)指定的最大块数,也可以通过设备属性query获得。它在maxGridSize parameter 中指定。您可能需要参考deviceQuery sample 以获取一个工作示例。
【讨论】: