指定流的内核启动,但具有默认的共享内存大小
Kernel lauch specifying the stream, but with default shared memory size
我需要为 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)
再次放在那里。实际上表达式更复杂。
在许多方面,静态分配和动态分配的共享内存是分开处理的。
如果您无意使用动态分配的共享内存,将 the default value 零作为第三个内核启动参数传递是安全的,无论您对使用静态分配的共享内存有任何意图内存。
我需要为 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)
再次放在那里。实际上表达式更复杂。
在许多方面,静态分配和动态分配的共享内存是分开处理的。
如果您无意使用动态分配的共享内存,将 the default value 零作为第三个内核启动参数传递是安全的,无论您对使用静态分配的共享内存有任何意图内存。