我用clCreateCommandQueue()创建了多个OpenCL队列。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个队列可能不够 - 例如, G。在同时执行内核的情况下,HtoD或DtoH IO和DtoD IO。 – 2013-05-13 14:46:40