在cuda中定义模板常量变量

5
我该如何在cuda中实现模板化的常量变量?我有一个struct
template<typename T> mystruct{ T d1; T d2[10];}

我希望可以在上述struct中拥有一个常量变量,并使用以下代码(目前该代码可能不正确)。
template<typename T> __constant__ mystruct<T> const_data;

在此之后,在主程序中我想要复制一些内容

  mystruct<float> data; 

将数据存储到const_data中,并在设备代码中访问它,有没有人能指出如何实现这一点呢?提前感谢。


你忘记初始化常量 data 结构。你还忘了 struct 和它的终止分号。 - Some programmer dude
这是我代码中唯一的错误吗?也就是说,如果我初始化数据结构它就能正常工作了吗?请再解释详细一些,因为我对CUDA还不熟悉。 - user1612986
1个回答

5
在CUDA中,__constant__变量具有隐含的静态存储。从您的问题中并不清楚您何时想要实例化常量内存变量,但是考虑到常量内存变量是静态的,并且需要在标准编译模型中在同一翻译单元中声明和使用,您的选择非常有限。
您可以定义一个模板类型,然后在常量内存中静态定义该类型的特定实例,例如:
template<typename T> struct mystruct{ T d1; T d2[10]; };

__constant__ mystruct<float> const_data;

但据我所知,这就是你能做的全部。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接