У меня ядро openCL,
__kernel
void add(__global float* A, const int inputSize)
{
int threadId = get_local_id(0);
int blockSize = get_local_size(0);
int groupId = get_group_id(0);
int i = 2 * groupId * blockSize + threadId;
if( i < inputSize && i + blockSize < inputSize)
printf("%d %d\n", A[i], A[i + blockSize]);
.....Doing some more things.....
}
Host Side Code:
int main()
{
........
//Main kernel call
int global_item_size = 4
int local_item_size = 2;
clEnqueueNDRangeKernel(command_queue,kernel, 1, NULL, &global_item_size, &local_item_size, 0, NULL, NULL);
.......
}
Таким образом, количество запущенных рабочих групп равно 2.
Каждая рабочая группа имеет 2 потока.
Каждый поток обрабатывает два элемента в массиве A.
Итак, ядро имеет i и i + blockSize в качестве индекса обрабатываемых элементов.
inputSize равен 8.
Теперь проблема, с которой я столкнулся, - это мое ядро работает без ошибок, и я получаю правильные результаты, когда запускаю это ядро в режиме отладки. Оператор printf в ядре также выводит правильные значения, и если я беру значения на CPU, я могу распечатать их правильно.
Как только когда я переключаюсь в режим выпуска. Все, что я получаю, это 0 в моих массивах. Если я печатаю A в ядре, оно выводит все 0.
Я не уверен, что не так в режиме выпуска? Определенно нет проблемы с синхронизацией c или индексом, поскольку я просто печатаю входной массив, как только захожу в ядро. Кто-нибудь сталкивался с подобной проблемой?
Заранее спасибо.