我最近將OpenCL應用程序從NVIDIA GPU移至運行在Ubuntu 12.04上的Radeon HD 6320 Fusion,並且意外運行速度明顯較慢。OpenCL內核排隊並開始在ATI卡上運行的延遲
我的程序副本上設置一個非常大的數據結構的GPU(這個數據結構永遠不會讀取或CPU再次訪問),然後將其:
- 隊列幾個內核和一個讀緩衝區(將非常小的數據結構複製回主存儲器)。
- 呼叫clFinish等待內核和讀取緩衝區來完成
- 這不斷重複,其中偶爾有些額外的數據抄根據由讀緩衝區中返回什麼樣的信息(這意味着讀緩衝區有前完成下一輪的內核可以添加到隊列中)。
仿形兩個圖形處理器之後,在ATI GPU的延遲似乎從第一核心是被添加到隊列(CL_PROFILING_COMMAND_QUEUED)到所述第一內核開始執行(CL_PROFILING_COMMAND_START)是完全。在NVIDIA GPU上,每次迭代需要幾微秒。在ATI GPU上,每次迭代需要大約20ms,這對我的使用來說太長了。
我有什麼理由可以得到這麼大的延遲?
你試過不同的隊列嗎? – DarkZeros