2012-09-26 56 views
1

我最近比較了兩種做內核運行時測量的問題,並且看到了一些令人困惑的結果。OpenCL AMD AMD GPU時間測量問題

我使用集成了GPU和Ubuntu Linux的AMD Bobcat CPU(E-350)(CL_PLATFORM_VERSIONOpenCL 1.2 AMD-APP (923.1))。

基本理念的gettimeofday看起來像這樣:

clFinish(...) // that all tasks are finished on the command queue 
gettimeofday(&starttime,0x0) 
clEnqueueNDRangeKernel(...) 
clFlush(...) 
clWaitForEvents(...) 
gettimeofday(&endtime,0x0) 

這是說的內核需要大約5466毫秒。

第二次測量我做了clGetEventProfilingInfoQUEUED/SUBMIT/START/END

隨着4個時間值我可以計算出在不同狀態下的時間花費:

  • 時間花在排隊:0.06毫秒,
  • 花費的時間提交:2733毫秒,在執行
  • 時間花:2731毫秒(實際執行時間)。

我發現它總計達5466毫秒,但爲什麼它一直停留在提交狀態一半?

而且有趣的事情是:

  • 提交的狀態始終的實際執行時間的一半,甚至是不同的內核或不同的工作負載(所以它不可能是一個常數設置時間),

  • 的CPU在提交狀態的時間花費爲0,執行時間等於gettimeofday的結果,

  • 我測試我在英特爾的Ivy Bridge內核使用CPU和GPU的窗戶和我不」你看那裏的影響。

有沒有人有線索?

我懷疑是GPU運行內核兩次(導致gettimeofday實際執行時間的兩倍),或者函數clGetEventProfilingInfo對於AMD GPU不能正常工作。

+0

您是否向設備發送任何數據?您也可能測量了一些I/O時間。嘗試減少傳輸的數據量,或者只是禁用clEnqueueWriteBuffer以查看它如何改變您的測量。 –

+0

我發送了一些數據到設備,但是我在運行內核之前執行了它,並且在測量之前clFinish(...)應該完成隊列中的所有任務。我也用CL_TRUE進行數據複製,直到數據被傳輸爲止。 – Tomas

+0

編輯說明:您需要閱讀,我們如何在這裏格式化帖子。你的格式非常糟糕!您將HTML與Markdown混合使用。我們在這裏使用** Markdown **。我剛剛清除了你的問題,但這肯定是一項艱鉅的任務。很多爛攤子... – trejder

回答