强制NVCC不要考虑构造函数的常量内存

时间:2014-02-07 06:37:26

标签: c++ constructor cuda nvcc

我声明了一个包含构造函数的结构数组(myVector)。

struct decoderdata{
  myVector<int> code; 
  myVector<int> sequence;
};
__constant__ decoderdata var[4];

myVector是我自己的类,包含构造函数和析构函数。我在我的主机代码中使用那些构造函数。我在分配常量内存时不想调用构造函数。我将使用cudaMemcpyToSymbol分别初始化常量内存。我想要的是,常量内存空间,大小为4'decoderdata对象',类型为decoderdata数组。

编译时,nvcc编译器创建 错误:无法为设备上的非空构造函数或析构函数生成代码

我不希望nvcc考虑我的构造函数。如何在NVCC中抑制/禁用此特定错误? 或者CUDA中是否有任何解决方法可以达到我的目的?

1 个答案:

答案 0 :(得分:1)

如果你只想要内存,没有对象,那就这样做:

__constant__ char data[4 * sizeof(decoderdata)];

您必须清楚这里没有任何对象这一事实,并且您不能将原始内存视为对象。而且由于记忆是不变的,你也不能把它放入新的位置。最好你可以将一些易于复制的对象复制到其中,但这似乎不太可能(因为使用用户定义的构造函数的东西不是可以复制的)。