启动内核时共享内存和流

时间:2014-11-27 03:04:19

标签: c cuda gpu-programming

我是CUDA的新手并且正在从事个人项目。我知道,如果你想在发布时指定共享内存量:

kernel<<<grid_size,block_size,shared_mem_size>>>(parameters);

另一方面,如果我想将内核放入流中:

kernel<<<grid_size,block_size,0,stream_being_used>>>(parameters);

我不明白为什么第三个参数在流的情况下为0? (我是从#34中的第10章获得的;通过实例和#34;来自Sanders和Kandrot的CUDA)。

如果我想在启动时指定共享内存并将其放入流中,我该如何正确地执行此操作?换句话说,&lt;&lt;&gt;&gt;&gt;之间的参数应该是什么?看起来像?

1 个答案:

答案 0 :(得分:1)

0的唯一原因是因为在该特定示例中,不需要动态共享内存。

Shared memory可以静态分配(不使用extern,在这种情况下,大小在声明中明确说明)或动态分配(使用extern,大小显示为内核启动配置中的第3个参数。)

内核启动配置参数<<<...>>>始终以相同的顺序显示:

  1. 网格尺寸
  2. 主题块尺寸
  3. 动态分配的共享内存的大小( bytes
  4. 中启动内核的流

    1和2是强制性的,3和4是可选的。但是如果你需要指定参数4(流),你必须提供参数3,即使它是零。

    所以正确的顺序是:

    kernel_name<<<grid_dim, threadblock_dim, dynamic_shared_memory_size, stream>>>(...);
    

    您可以在documentation

    中详细了解相关信息