我用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