0

我尝试将结构数组传递给常量内存,但我有同样的问题。首先,我的结构是:

#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。

4

1 回答 1

1

这个问题本质上是这个问题的副本。请查看那里的答案以解释为什么会发生这种情况。

作为一种解决方法,您可以使用其他答案中讨论的直接赋值的定义常量(即不在构造函数中),或者您可以简单地省略构造函数初始化,并使用单独的基于主机的例程来初始化__constant__区域您希望使用cudaMemcpyToSymbol的值。

由于指针数组实际上并未分配结构存储,因此在您的第二个示例中未调用构造函数,并且没有问题,因此您看不到错误消息。

于 2013-04-19T13:56:26.027 回答