我声明了一个包含构造函数的结构数组(myVector)。
struct decoderdata{
myVector<int> code;
myVector<int> sequence;
};
__constant__ decoderdata var[4];
myVector是我自己的类,包含构造函数和析构函数。我在我的主机代码中使用那些构造函数。我在分配常量内存时不想调用构造函数。我将使用cudaMemcpyToSymbol分别初始化常量内存。我想要的是,常量内存空间,大小为4'decoderdata对象',类型为decoderdata数组。
编译时,nvcc编译器创建 错误:无法为设备上的非空构造函数或析构函数生成代码。
我不希望nvcc考虑我的构造函数。如何在NVCC中抑制/禁用此特定错误? 或者CUDA中是否有任何解决方法可以达到我的目的?
答案 0 :(得分:1)
如果你只想要内存,没有对象,那就这样做:
__constant__ char data[4 * sizeof(decoderdata)];
您必须清楚这里没有任何对象这一事实,并且您不能将原始内存视为对象。而且由于记忆是不变的,你也不能把它放入新的位置。最好你可以将一些易于复制的对象复制到其中,但这似乎不太可能(因为使用用户定义的构造函数的东西不是可以复制的)。