OpenCL内核执行时间在OpenCL代码中包含了什么?

时间:2014-08-22 09:58:47

标签: opencl

我想问一个简单的问题。创建OpenCL上下文和执行OpenCL内核之间的时间差可以在OpenCL代码中称为内核时间吗?

  

time_t start1,end1;

clock_t start2,end2; 

start1=time(NULL);  

start2=clock();

能够计算这个时间吗?

1 个答案:

答案 0 :(得分:2)

简要说明 - 没有。测量内核时间的正确方法是获取OpenCL事件,与内核关联并收集分析信息。它是这样做的:

cl_int ret;
cl_command_queue queue = clCreateCommandQueue(context, device, CL_QUEUE_PROFILING_ENABLE, &ret);
...  
cl_event my_event;
ret = clEnqueueNDRangeKernel(queue, kernel, 1, global_offset, global_size, local_size, num_events, wait_list, &my_event);
clWaitForEvents(1, &my_event);

cl_ulong start, finish;
ret =  clGetEventProfilingInfo(my_event, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &start, NULL);
ret =  clGetEventProfilingInfo(my_event, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &finish, NULL);

cl_ulong time_ns = finish - start;

time_ns是内核启动和启动之间的时间,以纳秒为单位。结束。别忘了查看退货代码。