Я новичок в OpenCL, и у меня есть проблема. В моей программе мне нужен 2-мерный массив. Я скопировал 1-мерный массив на графическую карту. Поскольку мне не нужен 1-мерный массив, я написал метод, который shoudl инициализирует все значения потребностей. 2-мерный массив должен быть __global --- У меня есть только операции чтения в этом массиве.Глобальный массив 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;
Как я могу иметь доступ к видоизмененному массиву в каждом потоке?
Благодаря Glethien
вход представляет собой массив длины: 16384 неподписанных символов. Я хочу преобразовать это в массив формы (4096,4) и сохранить его в глобальном массиве. Если я использую ваш путь, не создавал бы массив с формой (0, x, y)? – glethien
@glethien Я внесла некоторые изменения в свой ответ, дайте мне знать, если это то, что вы ищете? –
не очень .... В python я делаю так: self.grid = numpy.load ("./ testData.npy") self.grid = self.grid.reshape ((4096,4)) В исходном вводе каждый блок из 4 является одним ColorRGBA – glethien