2013-11-28 56 views
0

我看到內核被提交給AMD GPU並實際執行之間出現大規模延遲。我的程序正在阻止寫入/讀取(阻塞= CL_TRUE),以確保I/O不會干擾內核。然後我使用clGetEventProfilingInfo獲取內核隊列,提交,開始和結束的信息。下面的數據(和代碼)顯示內核花費大約5秒提交,然後運行5秒。一般來說,它看起來像提交的時間和運行時間。我查看了一些關於內核執行延遲的論壇帖子(例如,http://devgurus.amd.com/thread/166587),但似乎並沒有解決方案。我已經檢查過GPU沒有處於低功耗模式。有沒有其他人看過這個或有如何診斷它的建議?Large submit->在OpenCL內核中啓動延遲

write 131.000000 ms 
kernel queued->submitted 0.022348 ms 
kernel submitted->started 5553.957663 ms 
kernel started->ended 5529.893060 ms 
read 39.000000 ms 

1306  cl_ulong end, queued, start, submit; 
1307  clGetEventProfilingInfo(jniContext->exec_event, 
1308    CL_PROFILING_COMMAND_QUEUED, sizeof(queued), &queued, NULL); 
1309  clGetEventProfilingInfo(jniContext->exec_event, 
1310    CL_PROFILING_COMMAND_SUBMIT, sizeof(submit), &submit, NULL); 
1311  clGetEventProfilingInfo(jniContext->exec_event, 
1312    CL_PROFILING_COMMAND_START, sizeof(start), &start, NULL); 
1313  clGetEventProfilingInfo(jniContext->exec_event, 
1314    CL_PROFILING_COMMAND_END, sizeof(end), &end, NULL); 
+0

你可以添加你用來測量的代碼嗎?完整的代碼,我的意思是,當你啓動內核等。 – DarkZeros

+0

當然,完整的代碼可在:http://pastebin.com/SCpcRrjP – agrippa

+0

我看你只能運行一個內核一次。在第一次調用內核時,您經常會看到很大的計時結果。許多OpenCL實現將推遲某些操作直到最後一刻,而這項工作可能會導致第一次運行比後續運行花費的時間更長。要對內核進行基準測試,您可能需要多次運行它。有人稱之爲「讓GPU變暖」。 – Dithermaster

回答

0

跟進:從最新版本的驅動程序升級(v13.4在2013年5月29日公佈)最新的測試版驅動(版本2013年11月22日)後,我們不再看到這樣的表現問題。這個問題發生在使用AMD A10-6700的64位Centos上,但如果你看到這個問題並且有不同的芯片組,我建議升級到最新的測試版驅動程序,然後看看是否可以修復它。