我正在一個大陣列上運行一個內核。當我剖析clEnqueueNDRange命令時,執行時間(結束開始)爲.001毫秒,但提交和開始(啓動 - 提交)之間的時間大約爲120毫秒,這隨輸入數據的大小而變化。提交命令直到開始執行時會發生什麼情況。得到這麼長時間是否合理?在OpenCL中提交和開始時間之間的很長時間
0
A
回答
0
OpenCL以異步方式運行。也就是說,當你要求完成一項工作時,可能不會在那個時候發生。它將在未來某個時候發生。這有點奇怪,特別是當你開始分析事物時,但是它的工作原理是這樣的,CPU可以爲OpenGL設備排隊工作,然後在工作完成時去做其他事情。
例如:
clEnqueueWriteBuffer(blah);
clEnqueueNDRange(blah);
clEnqueueReadBuffer(blah, but blocking_read = CL_TRUE);
這裏,writeBuffer和NDRange可能會出現需要非常少量的時間。他們所要做的就是記錄需要做的事情。阻塞的readBuffer將需要很長時間,因爲它必須等待讀取結果。爲了完成這個讀操作,寫操作和內核執行必須在讀操作開始之前完成。
現在讀取的數據可能非常小,但是因爲在完成顯示所需的時間之前它正在等待所有數據取決於之前的命令中的工作量。
我不太明白你在測量你的問題,但我期望你看到的是這個效果。由於他們必須等待以前的工作才能完成,因此其他職能正在被收取。
知道哪些函數會導致CPU在GPU上等待是編寫高性能代碼的一大竅門。任何時候當你引入這樣的等待時,CPU都會停止做任何有用的工作,並且在CPU準備下一個工作時GPU可能會閒置。有時候,別無選擇,你只能等待。
相關問題
- 1. 我的時間在開始時間和結束時間之間
- 2. 開始時間和結束時間之間的倒數時間
- 3. 選擇開始時間和結束時間之間的開始時間
- 4. 長時間提交
- 5. java.util.concurrent.ExecutorService#提交需要很長時間
- 6. hood.ie開始需要很長時間
- 7. SQL查詢在很長時間內查找現在和時間之間的行
- 8. SQL Server在開始時間和結束時間之間查找時間片
- 9. PHP的時間開始和時間結束之間的累積時間
- 10. OpenCL的開始 - 結束時間譜的時間比實際持續時間
- 11. 在mysql中以1小時爲間隔的開始時間和結束時間之間的分隔時間
- 12. 如何管理開始時間和結束時間之間的當前時間
- 13. 如何顯示開始時間和結束時間之間的時間
- 14. PHP開始時間和結束時間之間的時間循環
- 15. 計算git提交之間的時間
- 16. Application_PostMapRequestHandler和Application_AcquireRequestState之間的時間過長
- 17. SSRS:在一天的開始時間和執行時間之間創建差異
- 18. 計算開始時間和結束時間之間的每小時數
- 19. iOS 7和ZBarReaderView開始需要很長時間
- 20. GLFWInit花費很長時間初始化
- 21. 很長的部署時間
- 22. 如何在Java中的開始時間和時間之間找出時間範圍數組?
- 23. Rx調用PublishSubject.onNext()和接收它之間的時間間隔很長
- 24. 從開始時間和持續時間獲取結束時間
- 25. 用開始時間和經過時間計算時間差
- 26. Mobiscroll時間更改驗證開始時間和結束時間
- 27. 開始時間和開始時間查詢
- 28. 檢查重疊的時間間隔開始和結束時間
- 29. 在特定時間之後提交表格(時間完成後)
- 30. Solr的提交時間太長
你的clEnqueueNDRange調用之後有什麼需要內核的結果嗎?例如,內核之後是否存在阻塞clEnqueueMapBuffer?如果沒有,實現可能會決定延遲內核的執行。 – boiler96
是的,我有兩個clEnqueueReadBuffer後讀取結果,但我不能讀取非阻塞調用的結果。另外clEnqueueMapBuffer似乎有一些問題,給我錯誤的結果。無論如何,是否有可能通過非阻塞呼叫讀取數據? – Damoon