2015-12-14 67 views
0

我需要一些關於計時器分辨率的說明。我正試圖在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); 
+0

混淆的來源,因爲如果你劃分那麼所有的設備都有類似的結果。但是,這只是因爲設備越快分辨率計數越快,它就會線性擴展。 – DarkZeros

回答

3

該規範是對這個很清楚:「在 納秒當前設備時間計數器」

時代總是在納秒。分辨率查詢是這樣你可以找出如何準確的數據是。例如,給定的測量數據與您發佈的決議,你可以推斷出測量的誤差容限:

AMD FX 770K:

  • 測量:352855601±69納秒
  • 實際:352855532 - 352855670

的AMD Radeon R7 240:

  • 測量值:172297±1納秒
  • 實際:172296 - 172298

的GeForce GT 610:

  • 測量:1725504±1000納秒
  • 實際:1724504 - 1726504
+0

感謝您的答案! – mfaieghi

+1

哦,嘿謝謝@昂格勒生菜爲你編輯的例子來回答我的答案! – Dithermaster