我是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;之间的参数应该是什么?看起来像?
答案 0 :(得分:1)
0的唯一原因是因为在该特定示例中,不需要动态共享内存。
Shared memory可以静态分配(不使用extern
,在这种情况下,大小在声明中明确说明)或动态分配(使用extern
,大小显示为内核启动配置中的第3个参数。)
内核启动配置参数<<<...>>>
始终以相同的顺序显示:
1和2是强制性的,3和4是可选的。但是如果你需要指定参数4(流),你必须提供参数3,即使它是零。
所以正确的顺序是:
kernel_name<<<grid_dim, threadblock_dim, dynamic_shared_memory_size, stream>>>(...);
您可以在documentation
中详细了解相关信息