我是CUDA的新手,正在从事个人项目。我知道,如果要在启动时指定共享内存量:
kernel<<<grid_size,block_size,shared_mem_size>>>(parameters);
另一方面,如果我想将内核放入流中:
kernel<<<grid_size,block_size,0,stream_being_used>>>(parameters);
我不明白为什么在流的情况下第三个参数为0?(我从Sanders和Kandrot的“ CUDA示例”中的第10章中获得了它)。
如果要在启动时指定共享内存并将其放入流中,如何正确执行此操作?换句话说,<<< ... >>>之间的参数应该是什么样的?
存在0的唯一原因是因为在该特定示例中,不需要动态共享内存。
共享内存可以静态分配(不使用extern
,在声明中显式指定大小),也可以动态分配(使用extern
,并且大小显示为内核启动配置中的第三个参数)。
内核启动配置参数<<<...>>>
始终以相同的顺序显示:
1和2是必填项,3和4是可选项。但是,如果您需要指定参数4(流),则即使它为零,也必须提供参数3。
因此正确的顺序是:
kernel_name<<<grid_dim, threadblock_dim, dynamic_shared_memory_size, stream>>>(...);
您可以在文档中了解更多信息
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句