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() правильный результат?

0 ответов

Другие вопросы по тегам