0

我是 OpenCL 的新手,我遇到了问题。在我的程序中,我需要一个二维数组。我将一维数组复制到显卡。因为我不需要一维数组,所以我编写了一个方法来初始化所有需要的值。二维数组应该是 __global --- 我只对这个数组进行了读取操作。

这是我的代码

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;

我怎样才能访问每个线程中的重塑数组?

谢谢格莱西恩

4

2 回答 2

0

我不会打扰明确记录您的数据 - 只需将其作为一维缓冲区处理即可。您可以将row_width作为内核参数传递,然后使用 计算适当的索引index = y * row_width + x

于 2012-06-15T19:49:29.567 回答
0

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

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

您需要传入函数输入数组的大小。

这假设您的输入像素在整个数组中都按该顺序排列。RGBARGBARGBA等

于 2012-06-15T16:46:15.470 回答