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);
你可以添加你用來測量的代碼嗎?完整的代碼,我的意思是,當你啓動內核等。 – DarkZeros
當然,完整的代碼可在:http://pastebin.com/SCpcRrjP – agrippa
我看你只能運行一個內核一次。在第一次調用內核時,您經常會看到很大的計時結果。許多OpenCL實現將推遲某些操作直到最後一刻,而這項工作可能會導致第一次運行比後續運行花費的時間更長。要對內核進行基準測試,您可能需要多次運行它。有人稱之爲「讓GPU變暖」。 – Dithermaster