我需要对计时器分辨率做一些澄清。我正在尝试在openCL中学习分析。我在OpenCL中实现了简化算法,并希望通过获取下面给出的代码中的总耗用时间来测量执行内核时间。我在不同的设备上运行此代码,结果如下:
在CPU上 - AMD FX 770K 总时间= 352,855,601 CL_DEVICE_PROFILING_TIMER_RESOLUTION = 69 ns
在GPU上 - AMD Radeon R7 240 总时间= 172,297 CL_DEVICE_PROFILING_TIMER_RESOLUTION = 1 ns
在另一个GPU上 - GeForce GT 610 总时间= 1,725,504 CL_DEVICE_PROFILING_TIMER_RESOLUTION = 1000 ns
上面给出的“总时间”是实际纳秒?或者我需要将它们除以时间分辨率以获得实际执行时间?定时器分辨率如何帮助我们?
以下是代码的一部分:
/* Enqueue kernel */
err = clEnqueueNDRangeKernel(queue, kernel[i], 1, NULL, &global_size,
&local_size, 0, NULL, &prof_event);
if (err < 0) {
perror("Couldn't enqueue the kernel");
exit(1);
}
/* Finish processing the queue and get profiling information */
clFinish(queue);
clGetEventProfilingInfo(prof_event, CL_PROFILING_COMMAND_START,
sizeof(time_start), &time_start, NULL);
clGetEventProfilingInfo(prof_event, CL_PROFILING_COMMAND_END,
sizeof(time_end), &time_end, NULL);
total_time = time_end - time_start;
printf("Total time = %lu\n\n", total_time);
答案 0 :(得分:4)
规范非常明确:“当前的设备时间计数器 纳秒“
时间总是以纳秒为单位。通过分辨率查询,您可以了解准确数据的方式。例如,根据您发布的度量和分辨率,您可以推断出度量的误差范围:
AMD FX 770K:
GeForce GT 610: