Смещение вложенного цикла OpenCL

Я пытаюсь использовать графический процессор для обработки изображений. В моей функции ядра я уловил исключение «несоосность» как

Поток пытался прочитать или записать данные, которые выровнены на оборудовании, которое не обеспечивает выравнивание. Например, 16-битные значения должны быть выровнены по 2-байтовым границам; 32-битные значения на 4-байтовых границах и т. Д.

Я сократил код ядра только до циклов, но у меня все еще есть эта проблема. мой уменьшенный функция ядра:

__kernel void TestKernel(
global const uchar* iImage,
global uchar* oImage,
uint width,
uint heigth,
uchar dif,
float power)
{
uint y = get_global_id(0);

if (y >= heigth)
return;

for (uint x = 0; x< width; ++x){
for (uint i = 0; i < 5; ++i) {
uint sum = 0;
for (uint j = 0; j<5; ++j) {
sum += 3;
}
}

}
}

(программа выдает исключение во втором цикле)

Я использую оболочку C ++ для вызова моего ядра

kernel.setArg(iArg++, iImage);
kernel.setArg(iArg++, oImage);
kernel.setArg(iArg++, header.GetVal(header.Width));
kernel.setArg(iArg++, header.GetVal(header.Height));
kernel.setArg(iArg++, (unsigned char)10);
kernel.setArg(iArg++, saturation);queue.enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(header.GetVal(header.Height)), cl::NDRange(128));

oImage а также iImage являются cl::Buffer

saturation является float

header.GetVal() возвращается int

Я использую Visual Studio 2015 с плагином CodeXL и запускаю программу на AMD Spectre (Radion R7).

Что может вызвать эту проблему?

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …