【问题标题】:Kernel calls in CUDACUDA 中的内核调用
【发布时间】:2013-06-23 22:38:16
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: cuda


    【解决方案1】:

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

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

    __shared__ int myints[256];
    

    或动态:

    extern __shared__ int myints[];
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-02-07
      • 1970-01-01
      • 2013-03-17
      • 2014-02-01
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多