【问题标题】:Using constant memory with struct array in CUDA在 CUDA 中使用带有结构数组的常量内存
【发布时间】:2013-04-19 07:04:54
【问题描述】:

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

#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];

我该如何解决这个问题。感谢您的帮助。 我使用最新的驱动程序和 Visual Studio 2010 以及 compute_30 和 sm_30 配置。

【问题讨论】:

  • 尝试将构造函数定义为__host__ __device__ Point (){ x = 0; y = 0; }
  • 我尝试了,但我得到了同样的错误。

标签: c struct cuda constants


【解决方案1】:

这个问题本质上是this one 的重复。请查看那里的答案,了解为什么会发生这种情况。

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

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

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    相关资源
    最近更新 更多