内核启动指定流,但使用默认共享内存大小
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)
放在那里。实际上,表达式要复杂得多。
静态分配的共享内存和动态分配的共享内存在很多方面是分开处理的。
如果您不打算使用动态分配的共享内存,那么将默认值0作为第三个内核启动参数传递是安全的,无论您是否打算使用静态分配的共享内存。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何使用默认参数等选择模板专业化
- 具有默认模板参数的多态类的模板推导失败
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 初始化具有非默认构造函数的std::数组项的更好方法
- 何时提供默认参数作为模板参数
- 如何从具有移动语义的类对象中生成共享指针
- 是默认情况下分配给char数组常量的值
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 具有默认值的引用获取函数
- 具有默认模板类型的默认构造函数的类型推导
- 我是否误解了此默认参数共享的范围
- 共享接口类和 C++ 派生类中的默认参数值
- 内核启动指定流,但使用默认共享内存大小
- 如何在C++中的基类和派生类之间共享一个通用的默认参数值