У меня возникли проблемы с пониманием размеров рабочей группы OpenCL 2D.Размеры рабочей группы OpenCL 2D
Я хочу создать матрицу N x N и дать каждой строке набор рабочих групп для вычисления. Например, если у меня есть матрица размером 1000 x 1000, я бы хотел иметь 10 рабочих групп в каждой строке (поэтому каждая рабочая группа будет вычислять 100 элементов) и 10000 рабочих групп (10 * 1000).
Это часть моего кода:
size_t global_pattern[] = {n,n,0}; //My matrix pattern
size_t group_pattern[] = {workgroups_per_row, n, 0}; //My workgroups pattern
И некоторые строки ниже:
err = clEnqueueNDRangeKernel(queue, kernel, 2, NULL, global_pattern,
group_pattern, 0, NULL, NULL);
Что выходит из строя. Код ошибки равен -54, который ссылается на #define CL_INVALID_WORK_GROUP_SIZE -54.
Является ли моя инициализация массива group_pattern правильной? Я имею в виду, что первый элемент массива относится к координате x, а второй - к координате y, как я предполагаю? Что такое математика?
В целях отладки я также попытался запустить его с пустым ядром (просто чтобы убедиться, что это не мой код). Я также попытался поменять первый и второй элементы в массиве group_pattern.
«Что не получается». Итак, что «не удается»? Сбой, SEG_FAULTS, дает ошибку, в таком случае какой? – DarkZeros
err! = CL_SUCCESS, ожидаемое значение. Если я попытаюсь запустить его как одномерную проблему, это сработает. Я не уверен, что с моим кодом я реализовал намеченную семантику, которую я описал с моим вопросом. Есть ли способ иметь более конкретные сообщения об ошибках? Значение err равно -54, если это может помочь. – Kami
Если ошибка не увенчалась успехом, то есть ошибка да, но есть 64 типа кодов ошибок ... – DarkZeros