我是 CUDA 的新手,我对内核调用感到困惑。
当您调用内核方法时,您指定块数和每个块的线程,例如 kernelMethod<<< block, Threads >>>(parameters);"
那么为什么可以使用第三个参数呢?kernelMethod<<< 块,线程,???>>>(参数);
使用 cudaDeviceProp 您可以在变量 maxThreadsPerBlock 中读取每个块的线程数。但是我怎么知道最大块数呢?谢谢!!
我是 CUDA 的新手,我对内核调用感到困惑。
当您调用内核方法时,您指定块数和每个块的线程,例如 kernelMethod<<< block, Threads >>>(parameters);"
那么为什么可以使用第三个参数呢?kernelMethod<<< 块,线程,???>>>(参数);
使用 cudaDeviceProp 您可以在变量 maxThreadsPerBlock 中读取每个块的线程数。但是我怎么知道最大块数呢?谢谢!!
第三个参数指定要动态分配的每个块的共享内存量。编程指南提供了有关共享内存的更多详细信息,以及描述和示例。
共享内存可以在内核中静态分配:
__shared__ int myints[256];
或动态:
extern __shared__ int myints[];
在后一种情况下,有必要将要分配的共享内存的大小作为额外的内核配置参数(您提到的第三个参数)以字节为单位传递。
在那种情况下,指针myints
然后指向该动态分配区域的开始。
每个网格维度(x,y,z)指定最大块数,也可以通过设备属性查询获得。它在maxGridSize 参数中指定。您可能需要参考deviceQuery 示例以获取工作示例。