看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
hardman1110: 抱歉自己耍蠢 主要是memory超過 global mem size 09/14 17:49
hardman1110: 但說也奇怪 我create時沒有回傳錯誤 09/14 17:49