【问题标题】:Shared memory and streams when launching kernel启动内核时共享内存和流
【发布时间】:2014-11-27 03:04:18
【问题描述】:

我是 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 章中得到它)。

如果我想在启动时指定共享内存并将其放入流中,我该如何正确执行?换句话说,>> 之间的参数应该是什么样的?

【问题讨论】:

    标签: c cuda gpu


    【解决方案1】:

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

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

    内核启动配置参数&lt;&lt;&lt;...&gt;&gt;&gt;总是以相同的顺序显示:

    1. 网格尺寸
    2. 线程块尺寸
    3. 动态分配的共享内存的大小(以字节为单位)
    4. 启动内核的流

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

    所以正确的顺序是:

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

    您可以在documentation了解更多信息

    【讨论】:

    • 为了清楚起见,如果您有静态分配的共享内存,第三个参数仍将保持为 0。即像 __ shared __ int array[10];
    猜你喜欢
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 2018-05-07
    • 2018-12-30
    • 1970-01-01
    • 2015-06-04
    • 2015-02-18
    相关资源
    最近更新 更多