首页 > 解决方案 > OpenCL中是否有一些方法可以像cuda的时间函数一样计算内核时间

问题描述

在 cuda 中,内核中有一个名为 time() 的函数来测试某些函数之间的延迟;例如,

__global__ void kmulu_dep512() {
start_time = clock(); 
repeat256(t *= t2 ; t2 *= t ; )
stop_time = clock();
}

我找不到 OpenCL 有类似的功能,是否有一些方法可以在 OpenCL 中解决以获得类似的效果?

标签: gpuopencl

解决方案


AFAIK,OpenCL 中没有这样的内置功能,但您可以通过主机 API 做到这一点:在 OpenCL 中查找有关事件分析信息的信息。

简而言之,您需要创建一个启用分析信息的命令队列,然后从与您感兴趣的内核对应的事件中查询命令开始/结束时间点:

g_cmd_queue = clCreateCommandQueue(... CL_QUEUE_PROFILING_ENABLE, NULL);
clEnqueueNDRangeKernel(g_cmd_queue, ..., &perf_event);
clWaitForEvents(1, &perf_event);
cl_ulong start = 0, end = 0;
clGetEventProfilingInfo(perf_event, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &start, NULL);
clGetEventProfilingInfo(perf_event, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &end, NULL);

推荐阅读