c - 在 CUDA 中使用常量内存和结构数组

标签 c struct cuda constants

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

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

最佳答案

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

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

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

关于c - 在 CUDA 中使用常量内存和结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16099060/

相关文章:

loops - 如何使用嵌套 for 循环将两个二维(倾斜)数组相加?

c - 处理器的 Gigaflops

c - 如何在 C 中使用 printf 遍历 unicode 字符并将它们打印在屏幕上?

c - PortAudio 回调,并在别处更改变量

c - 我们在头文件中有 C 结构,我们希望从头文件中生成一个 XML 模式

c - 分段故障

ruby - Ruby 结构中的命名参数

c - 在 malloc 的结构中初始化原子标志

C# 传递结构作为参数

c++ - nsight eclipse 中的 CUFFT_ALLOC_FAILED 错误