2012-11-06 63 views
3

我最近將OpenCL應用程序從NVIDIA GPU移至運行在Ubuntu 12.04上的Radeon HD 6320 Fusion,並且意外運行速度明顯較慢。OpenCL內核排隊並開始在ATI卡上運行的延遲

我的程序副本上設置一個非常大的數據結構的GPU(這個數據結構永遠不會讀取或CPU再次訪問),然後將其:

  1. 隊列幾個內核和一個讀緩衝區(將非常小的數據結構複製回主存儲器)。
  2. 呼叫clFinish等待內核和讀取緩衝區來完成
  3. 這不斷重複,其中偶爾有些額外的數據抄根據由讀緩衝區中返回什麼樣的信息(這意味着讀緩衝區有前完成下一輪的內核可以添加到隊列中)。

仿形兩個圖形處理器之後,在ATI GPU的延遲似乎從第一核心是被添加到隊列(CL_PROFILING_COMMAND_QUEUED)到所述第一內核開始執行(CL_PROFILING_COMMAND_START)是完全。在NVIDIA GPU上,每次迭代需要幾微秒。在ATI GPU上,每次迭代需要大約20ms,這對我的使用來說太長了。

我有什麼理由可以得到這麼大的延遲?

+0

你試過不同的隊列嗎? – DarkZeros

回答

0

這可能是一些事情,您是否正在運行其他可能需要完成的GPU程序,以便調度程序可以爲您騰出一些時間?

問題在於OpenCL規範沒有定義可能的等待時間。對於將內核排隊到其執行的時間沒有要求,只是在某個時刻它會執行。我可能會在ATI OpenCL開發板上發佈,那裏的開發人員對這個主題很滿意,可能會給你一個答案。