我尝试将struct数组传递给常量内存,但我遇到了同样的问题。首先,我的结构是:
#define point_size 1024
struct Point {
short x;
short y;
Point (short xx, short yy){
x = xx;
y = yy;
}
Point (){
x = 0;
y = 0;
}
};
当我使用以下声明时,我收到编译错误:无法为设备上的非空构造函数或析构函数生成代码
__constant__ Point points_once[point_size];
当我使用下面的声明时,它的奇怪一面,它已经消失了。但是,它对我无效。
__constant__ Point *points_once[point_size];
我该如何解决这个问题。谢谢您帮忙。 我使用带有compute_30和sm_30配置的最新驱动程序和Visual Studio 2010。
答案 0 :(得分:1)
这个问题基本上是this one的副本。请查看答案,以解释为什么会发生这种情况。
作为一种解决方法,您可以使用直接赋值的定义常量(即不在构造函数中),如另一个答案中所讨论的那样,或者您可以简单地省略构造函数初始化,并使用单独的基于主机的例程来初始化使用cudaMemcpyToSymbol获取所需值的__constant__
区域。
由于指针数组实际上并没有分配结构存储,因此在第二个示例中不会调用构造函数,并且没有问题,因此您没有看到错误消息。