Arrays OpenCL全局阵列

Arrays OpenCL全局阵列,arrays,parallel-processing,opencl,global,Arrays,Parallel Processing,Opencl,Global,我是OpenCL的新手,我遇到了一个问题。 在我的程序中,我需要一个二维数组。我把一个一维数组复制到图形卡上。 因为我不需要一维数组,所以我写了一个方法,它应该初始化所有需要的值。二维数组应该是全局的——我只对这个数组进行了读取操作 这是我的密码 typedef struct{ unsigned char r; unsigned char g; unsigned char b; unsigned char a; } ColorRGBA; __constant C

我是OpenCL的新手,我遇到了一个问题。 在我的程序中,我需要一个二维数组。我把一个一维数组复制到图形卡上。 因为我不需要一维数组,所以我写了一个方法,它应该初始化所有需要的值。二维数组应该是全局的——我只对这个数组进行了读取操作

这是我的密码

typedef struct{
    unsigned char r;
    unsigned char g;
    unsigned char b;
    unsigned char a;
} ColorRGBA;

__constant ColorRGBA array[4096];

__kernel void marchingCubes(__global unsigned char* output)
{
    // DO SOMETHING WITH array

}


__kernel void initValues(__global unsigned char* input){
    // FILL array MAKE 1-dimensional to 2-dimensional (4096,4)
    array = (ColorRGBA*) input;
}
编译OpenCL程序时,出现以下错误:

:28:8: error: array type 'ColorRGBA __attribute__((address_space(2))) [4096]' is not assignable
        array = (ColorRGBA*) input;
如何在每个线程中访问重塑后的阵列

谢谢
Glethine

我不确定您的演员阵容,但您不能为整个数组分配指针。您应该这样做:

for (int x = 0; x < size_of_input; ++x)
  {
    array[x].r = input[x];
    array[x].g = input[x];
    array[x].b = input[x];
    array[x].a = input[x];
  }
for(int x=0;x
您需要传入函数的输入数组的大小


这假设您的输入像素在整个阵列中都是按该顺序排列的。RGBARGBA等。

我不会费心明确记录您的数据,只需将其作为1D缓冲区处理即可。您可以将
row\u width
作为内核参数传递,然后使用
index=y*row\u width+x

计算适当的索引。输入是一个长度数组:16384个无符号字符。我想将其转换为一个shape数组(4096,4),并将其存储在一个全局数组中。如果我用你的方式,它不会创建一个形状为(0,x,y)的数组吗?@Glethine我对我的答案做了一些编辑,请告诉我这是否是你想要的?不是真的。。。。在python中,我是这样做的:self.grid=numpy.load(“./testData.npy”)self.grid=self.grid.reformate((4096,4))在原始输入中,4的每个块都是一个ColorRGBA@glethen,您不能这样做,因为它是强类型的,而Python不太关心类型。这是我所知道的唯一一种方法。我用一种肮脏的方式解决了它,但它对我有用。由于我是stackOverflow的新手,我无法发布我问题的答案……好吧,继续参与,一旦你有能力自我回答,就重新审视这个问题。很高兴你找到了解决办法。