内核启动指定流,但使用默认共享内存大小

Kernel lauch specifying the stream, but with default shared memory size

本文关键字:默认 共享 内存 启动 内核      更新时间:2023-10-16

我需要在CUDA中指定内核启动的流。内核使用一些共享内存,其大小在内核代码中定义。

static const int cBlockSize = 256;
__global__ fooKernel(void* param)
{
    __shared__ uint32_t words[cBlockSize/16];
    // implementation follows, using 2 bits of shared memory per thread
}

然而,在内核启动表达式中,共享内存大小参数位于流参数之前。那么如何告诉CUDA使用内核代码指定的共享内存大小,而忽略启动代码中的内容?

fooKernel<<<N/cBlockSize, cBlockSize, /* What to put here? */, stream>>>(param);

显然,我想避免代码重复,再次将(cBlockSize/16)*sizeof(uint32_t)放在那里。实际上,表达式要复杂得多。

静态分配的共享内存和动态分配的共享内存在很多方面是分开处理的。

如果您不打算使用动态分配的共享内存,那么将默认值0作为第三个内核启动参数传递是安全的,无论您是否打算使用静态分配的共享内存。