Я создал несколько очередей OpenCL с clCreateCommandQueue().clFinish зависает с пустой очередью
cl_int ret_code = CL_SUCCESS;
cl_command_queue queue1 = clCreateCommandQueue(GPU_context, GPU_device_ID, CL_QUEUE_PROFILING_ENABLE, &ret_code);
...
cl_command_queue queueN = clCreateCommandQueue(GPU_context, GPU_device_ID, CL_QUEUE_PROFILING_ENABLE, &ret_code);
Все очереди создаются без ошибок. На одной из этих очередей на несколько минут нет команд. Все исполнения ядер прекрасны и т. Д. Наконец, мне нужно освободить очереди, которые я создал. Все clFinish() идут нормально, кроме одного - который ждет очереди, у которой нет команд внутри (скажем, queueN не имеет команд внутри). Так что
clFinish(queue1);
...
clFinish(queueK);
возвращается правильно, но
clFinish(queueN);
вешает навсегда. Каким может быть решение?
Операционная система: Ubuntu 12.04 x64. GPU - GeForce GTS450. OpenCL SDK 1.1
2 очереди могут быть недостаточными - e. г. в случае одновременного выполнения ядра, HtoD или DtoH IO & DtoD IO. –