我想问一个简单的问题。创建OpenCL上下文和执行OpenCL内核之间的时间差可以在OpenCL代码中称为内核时间吗?
time_t start1,end1;
clock_t start2,end2;
start1=time(NULL);
start2=clock();
能够计算这个时间吗?
答案 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
是内核启动和启动之间的时间,以纳秒为单位。结束。别忘了查看退货代码。