Ядро OpenCL не работает / не печатает в режиме выпуска? - PullRequest
0 голосов
/ 20 июня 2020

У меня ядро ​​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 или индексом, поскольку я просто печатаю входной массив, как только захожу в ядро. Кто-нибудь сталкивался с подобной проблемой?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...