我需要一些關於計時器分辨率的說明。我正試圖在openCL中學習分析。我在OpenCL中實現了簡化算法,並希望通過在下面給出的代碼中獲取總體運行時間來測量執行內核時間。我跑在不同設備上的代碼和這裏的結果:OpenCL性能分析中的計時器分辨率
在CPU - AMD FX 770K 總時間= 352855601 CL_DEVICE_PROFILING_TIMER_RESOLUTION = 69納秒
在GPU - AMD的Radeon R7 240 總時間= 172297 CL_DEVICE_PROFILING_TIMER_RESOLUTION = 1納秒
在另一個GPU - 的GeForce GT 610 總時間= 1725504 CL_DEVICE_PROFILING_TIMER_RESOLUTION = 1000毫微秒
上面給出的「總時間」實際上是納秒?或者我需要通過時間分辨來劃分它們以獲得實際執行時間?定時器分辨率如何幫助我們?
下面是代碼的一部分:
/* 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);
混淆的來源,因爲如果你劃分那麼所有的設備都有類似的結果。但是,這只是因爲設備越快分辨率計數越快,它就會線性擴展。 – DarkZeros