看起來像200萬的浮點數應該沒什麼大不了的,只有8MB的1GB GPU內存。我能夠有時分配那麼多,有時甚至比沒有麻煩的分配更多。當我做一個clEnqueueReadBuffer時,我得到了CL_OUT_OF_RESOURCES,這看起來很奇怪。我能嗅出麻煩真正開始的地方嗎? OpenCL不應該像clEnqueueReadBuffer這樣失敗吧?我應該在什麼時候分配數據?有沒有辦法獲得更多的細節,而不僅僅是錯誤代碼?如果我能看到OpenCL聲明CL_OUT_OF_RESOURCES時分配了多少VRAM,那將很酷。CL_OUT_OF_RESOURCES爲200萬浮點與1GB VRAM?
5
A
回答
3
5
- 調用clFinish()讓你的錯誤計算的狀態(而不是在您嘗試讀取數據時獲取)。
- 如果(NVidia)卡也被用作顯示器,則5秒超時也可能導致「資源不足」錯誤
- 當內核中存在指針錯誤時也會出現此錯誤。
後續建議先在CPU上運行內核,以確保不會超出內存訪問範圍。
7
我剛剛遇到了同樣的問題(花了我整整一天的時間修復)。 我相信有同樣問題的人會偶然發現這一點,這就是爲什麼我發佈這個老問題。
您可能沒有檢查內核的最大工作組大小。
這是你如何做到這一點:
size_t kernel_work_group_size;
clGetKernelWorkGroupInfo(kernel, device, CL_KERNEL_WORK_GROUP_SIZE, sizeof(size_t), &kernel_work_group_size, NULL);
我的設備(2×NVIDIA GTX 460 &英特爾i7處理器),支持1024的最大工作組大小,但上面的代碼返回的東西約500當我通過我的路徑跟蹤內核。 當我使用1024的工作組大小時,它明顯失敗,並給我CL_OUT_OF_RESOURCES錯誤。
內核越複雜,其最大工作組大小就越小(或者至少是我所經歷的)。
編輯:
我才意識到,你說 「clEnqueueReadBuffer」 而不是 「clEnqueueNDRangeKernel」 ...
我的回答是有關clEnqueueNDRangeKernel。
對不起。
我希望這對其他人仍然有用。
1
越界內核中的進程通常是無聲的(因爲在內核排隊調用時仍然沒有錯誤)。
但是,如果您稍後嘗試使用clEnqueueReadBuffer()讀取內核結果。此錯誤將顯示。它表明內核執行過程中出現了問題。
檢查您的內核代碼是否出現讀/寫操作。
相關問題
- 1. VRAM SDL_Texture?
- 2. CL_OUT_OF_RESOURCES GPU錯誤
- 3. CL_OUT_OF_RESOURCES錯誤
- 4. openCL CL_OUT_OF_RESOURCES錯誤
- 5. MongoDb約100萬集合中的約200萬條目
- 6. 在200萬行上的〜150ms MySQL MyISAM表
- 7. 從Mysql切換到MongoDB 200百萬行
- 8. SQL插入200萬條記錄
- 9. 總計低於200萬的素數
- 10. aws free tier:EBS 30G和200萬IO?
- 11. 200列表 - 300萬行 - 表現
- 12. 與浮點值
- 13. 如何從VRAM
- 14. c + + opencl返回CL_OUT_OF_RESOURCES
- 15. OpenCL的荒謬CL_OUT_OF_RESOURCES
- 16. 固定點與浮點數
- 17. 與浮點精度
- 18. 與浮點加法
- 19. 爲什麼將內存從VRAM複製到RAM比RAM到VRAM慢? (OpenGL的)
- 20. 行爲與`repeated_permutation`和浮動點
- 21. 與dojo繪製成千上萬的點
- 22. 爲浮點乘法
- 23. CL_OUT_OF_RESOURCES - 外部顯示器
- 24. OpenCL for循環給出CL_OUT_OF_RESOURCES
- 25. 問題與浮點比較
- 26. Div浮點與圖像
- 27. 分裂浮點數與Python
- 28. 浮點與整數性能
- 29. 使用POW與浮點數
- 30. Java浮點文字與C#
這很有道理,謝謝指出。有沒有一種方法可以分析發生故障時堆內存碎片在GPU上的樣子? – smuggledPancakes 2010-10-21 16:28:48
也許gDEBbugger? http://www.gremedy.com/我從來沒有用過它。 – 2010-10-21 16:41:43
不知怎的,我懷疑這真的是問題所在,因爲gpu內存通常不會被分割得足夠多。畢竟8MB在1GB卡上並不算太多(特別是因爲驅動程序應該能夠將當前未使用的內存拉到主內存中),並且gpu內存的分配通常相對較矮。所以,如果你看到這些問題是由於碎片造成的,並且它是一個普通的基於圖形卡的系統(與例如特斯拉相反),那麼看起來你很可能接近內存限制。我懷疑那個驅動程序不會在那一刻干預(通過殺死一些情況)。 – Grizzly 2010-10-21 17:07:01