У меня была та же проблема, что и у вас (у меня ушёл целый день, чтобы исправить).
Я уверен, что люди с такой же проблемой наткнуться на это, поэтому я отвечаю на этот старый вопрос.
Возможно, вы не проверяли максимальный размер рабочей группы для ядра .
Вот как вы это делаете:
size_t kernel_work_group_size;
clGetKernelWorkGroupInfo(kernel, device, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &kernel_work_group_size, NULL);
Мои устройства (2x NVIDIA GTX 460 и процессор Intel i7) поддерживают максимальный размер рабочей группы 1024, но приведенный выше код возвращает примерно 500, когда я передаю ядро Path Tracing.
Когда я использовал рабочую группу размером 1024, она явно потерпела неудачу и выдала мне ошибку CL_OUT_OF_RESOURCES.
Чем сложнее становится ваше ядро, тем меньше будет максимальный размер рабочей группы для него (или это, по крайней мере, то, что я испытал).
Редактировать:
Я только что понял, что вы сказали "clEnqueueReadBuffer" вместо "clEnqueueNDRangeKernel" ...
Мой ответ был связан с clEnqueueNDRangeKernel.
Извините за ошибку.
Я надеюсь, что это все еще полезно для других людей.