【发布时间】:2016-03-20 11:38:20
【问题描述】:
我需要澄清一下计时器分辨率。我正在尝试在 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);
【问题讨论】:
-
混淆是因为如果你划分然后所有设备都有相似的结果。但这只是因为设备越快,分辨率计数器越快,它会线性扩展。
标签: parallel-processing profiling opencl