作为类的静态属性的常量内存符号
Constant memory symbol as static property of class
很抱歉标题不正确。。。我想要一个具有静态属性值的类,可以在设备代码中使用。我尝试的是:
struct MyConstValue
{
static __constant__ int value;
};
理论上,现在,我应该定义MyConstValue::value,初始化它,可能是通过cudaMemcpyToSymbol
,然后我可以编写一个内核,通过MyGlobalValue::value
访问这个值。
如果我添加
int __constant__ MyConstValue::value;
为了定义符号(有和没有__constant__
),nvcc输出
error: ‘static’ may not be used when defining (as opposed to declaring) a static data member [-fpermissive]
有办法实现我的想法吗?
我使用的是CUDA 5.5,我的目标计算能力>2.0。
提前谢谢。
CUDA中不支持静态类成员。
原因可能是没有定义初始化的点,如果所有线程都会初始化,或者如果只有一个,如果是,哪个线程。因此,静态数据在这种情况下是没有意义的。
来自NVIDIA论坛:
但是"静态类成员"习语在GPU上意味着什么?它不能和GPU一样,因为有很多关于它的定义。也许每个线程都有自己的静态成员,甚至如果该线程访问类的多个副本?每个区块都有一个静态成员?每个内核?每个设备,因为类可以存在于内核调用之外的内存中?
来自CUDA编程指南的B 2.2:
常量限定符,可与设备一起使用,声明一个变量:
驻留在恒定的内存空间中,具有应用程序的生命周期,可从网格内的所有线程和主机访问通过运行库(cudaGetSymbolAddress()/cudaGetSymbolSize()/cudaMemcpyToSymbol()/cduaMemcpyFromSymbol()用于运行时API,用于驱动程序API的cuModuleGetGlobal())。
您可以看看这个线程。
相关文章:
- 多个"常量引用"变量可以共享同一个内存吗?
- 犰狳C++ - 从常量内存初始化只读矩阵而不复制
- C++ 在类中使用常量引用文本时 O2 内存泄漏
- c++ 编译器是否保护常量内存地址免受任何更改?
- 常量引用的内存位置
- 常量类实例的C++内存地址
- 使用函数中的语句数作为内存分配的常量
- 使用常量可以节省内存吗?
- 如何将常量字符* []隐藏到单个内存块,例如char* ptr
- 使用新的位置来创建静态常量指针,指向静态内存缓冲区
- 作为类的静态属性的常量内存符号
- 堆上是否会分配内存以支持临时对象到常量引用的嵌套绑定
- 如何在C++中打印已定义常量的内存地址
- c++中用于常量数据的内存存储
- 强制 NVCC 不考虑常量内存的构造函数
- 其中C++内存中的文字常量存储
- 如何避免内存泄漏与返回常量字符*
- 为什么右值/常量引用有内存地址和大小
- C编译器是否有义务在内存中放置一个静态常量
- 具有常量变量的类的多个实例使用相同的常量内存