ClReleaseCommandqueue не может освободить память, используемую commandqueue - PullRequest
0 голосов
/ 07 мая 2020

Я обнаружил, что мой проект каждый раз использует больше памяти, так как ресурс OpenCL не может быть освобожден. После того, как часть проекта OpenCL будет полностью запущена, я освобождаю commandQueue, программу и контекст следующим кодом. Но очередь команд не может быть освобождена.

{  

    checkErr(clReleaseCommandQueue(commandQueue), "clReleaseCommandQueue");

    checkErr(clReleaseProgram(program), "clReleaseProgram");

    checkErr(clReleaseContext(context), "clReleaseContext");

}

Поэтому я использую clFinish и clgetCommandQueueInfo для получения refCount commandQueue.

cl_uint count;
clGetCommandQueueInfo( commandQueue, CL_QUEUE_REFERENCE_COUNT, sizeof(cl_uint), &count, NULL);

errCode =  clFinish(commandQueue);
checkErr(errCode, "clfinish(commandqueue)");

checkErr(clReleaseCommandQueue(commandQueue), "clReleaseCommandQueue");
clGetCommandQueueInfo( commandQueue, CL_QUEUE_REFERENCE_COUNT, sizeof(cl_uint), &count, NULL);

errCode возвращает cl_success который показывает, что очередь команд завершена. Но когда я освобождаю очередь команд и получаю count, он возвращает ноль, что означает, что некоторые очереди команд еще не завершены, так что память очереди команд все еще используется.

Это примечания clReleaseCommandqueueu.

After the command_queue reference count becomes zero and all commands queued to command_queue have finished (e.g., kernel executions, memory object updates, etc.), the command-queue is deleted. 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...