Я запускаю ядро OpenCL ниже с двумерным глобальным размером работы 1000000 x 100 и локальным размером работы 1 x 100.
__kernel void myKernel(
const int length,
const int height,
and a bunch of other parameters) {
//declare some local arrays to be shared by all 100 work item in this group
__local float LP [length];
__local float LT [height];
__local int bitErrors = 0;
__local bool failed = false;
//here come my actual computations which utilize the space in LP and LT
}
Однако он отказывается компилировать, поскольку параметры length
и height
не известны во время компиляции. Но мне совершенно не ясно, как это сделать правильно. Должен ли я использовать указатели с memalloc? Как справиться с этим так, чтобы память выделялась только один раз для всей рабочей группы, а не один раз за рабочий элемент?
Все, что мне нужно, - это 2 массива float, 1 int и 1 boolean, которые разделены между всей рабочей группой (так что все 100 рабочих элементов). Но я не могу найти какой-либо метод, который сделает это правильно...