[問題] OpenCL Out of resources

看板C_and_CPP (C/C++)作者 (笨小孩)時間8年前 (2017/09/14 15:28), 8年前編輯推噓0(002)
留言2則, 1人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) WIN10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) VC2017 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) OpenCL SDK by Nvidia CUDA SDK (因為顯卡是N牌所以得裝CUDA來用opencl lib and .h) 問題(Question): 有三個kernal 用迴圈抓影像來依序跑這三個kernal 但每次回圈跑到第"4"次,讀取kernal3的結果(by clEnqueueReadBuffer)時都會回傳 -5 也就是out of resources 仔細去追會發現第4次迴圈在執行kernal2時間都是0 (我有用clFinish等待) 然後kernal3執行時間也會變0 但是皆不會回傳錯誤(clEnqueueNDRangeKernel回傳值) 試過cl_command_queue 在迴圈結束前都用 clReleaseCommandQueue 和 clCreateCommandQueue 重新建立 但還是沒用 懇請各位大大指點我有甚麼沒注意到的 餵入的資料(Input): 影片用opencv抓入圖片轉一微陣列餵入 kernal1 預期的正確結果(Expected Output): 迴圈可以一直跑下去,前3次都沒什問題 錯誤結果(Wrong Output): 迴圈會死在第4次kernal3的clEnqueueReadBuffer 程式碼(Code):(請善用置底文網頁, 記得排版) 有點複雜,我就不複製貼上了,用sudo code: cl_mem Buffer.... cl_kernel K1, K2, K3; cl_command_queue Q1; for loop clSetKernelArg for K1 clEnqueueNDRangeKernel(Q1, K1) clFinish clSetKernelArg for K2 clEnqueueNDRangeKernel(Q1, K2) clFinish clSetKernelArg for K3 clEnqueueNDRangeKernel(Q1, K3) clFinish clEnqueueReadBuffer for K3 result clFinish end for loop 補充說明(Supplement): 顯卡是NVIDIA GeForce 940MX Device global mem(MB):2048 Device Locale mem(KB) :48 Device Max clock(MHz) :1189 Device Max Group size :1024 Device Max parallel cores:3 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.230.27 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1505374102.A.F4D.html ※ 編輯: hardman1110 (114.34.230.27), 09/14/2017 15:32:26 ※ 編輯: hardman1110 (114.34.230.27), 09/14/2017 17:47:55

09/14 17:49, , 1F
抱歉自己耍蠢 主要是memory超過 global mem size
09/14 17:49, 1F

09/14 17:49, , 2F
但說也奇怪 我create時沒有回傳錯誤
09/14 17:49, 2F
文章代碼(AID): #1PkY-MzD (C_and_CPP)
文章代碼(AID): #1PkY-MzD (C_and_CPP)