clGetProfilingEventInfo: Как получить информацию о множественном профилировании?
Я хотел бы получить информацию о профилировании. Моя очередь команд уже включена для профилирования.
Это мой код:
status = clEnqueueNDRangeKernel(
commandQueue,
kernl,
2,
NULL,
globalThreads,
localThreads,
0,
NULL,
&ndrEvt);
CHECK_OPENCL_ERROR(status, "clEnqueueNDRangeKernel failed.");
//Won't proceed ahead if all work-items have not finished processing; Synchronization point
status = clFinish(commandQueue);
CHECK_OPENCL_ERROR(status, "clFlush failed.");
//fetch performance data
clGetEventProfilingInfo(ndrEvt, CL_PROFILING_COMMAND_QUEUED, sizeof(cl_ulong), &time_start2, NULL);
//clRetainEvent(ndrEvt);
clGetEventProfilingInfo(ndrEvt, CL_PROFILING_COMMAND_SUBMIT, sizeof(cl_ulong), &time_end2, NULL);
single_exec_time2 = time_end2 - time_start2;
clGetEventProfilingInfo(ndrEvt, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &time_end, NULL);
single_exec_time = time_end - time_start2;
Signle_exec_time_2 показывает мне правильный результат, но single_exec_time = 0.
Я думаю, что проблема заключается в обработке событий, счетчик ссылок ndrEvt обнуляется.
Я попытался ввести clRetainEvent(ndrEvt) (вы можете увидеть это как комментарий), и это "сработало", поэтому на данный момент мне интересно, даст ли мне введение clRetainEvent() правильный результат?