在CUDA中使用带有struct数组的常量内存

时间:2013-04-19 07:04:54

标签: c struct cuda constants

我尝试将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。

1 个答案:

答案 0 :(得分:1)

这个问题基本上是this one的副本。请查看答案,以解释为什么会发生这种情况。

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

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