[問題] OpenCL Out of resources

作者: hardman1110 (笨小孩)   2017-09-14 15:28:20
開發平台(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
作者: hardman1110 (笨小孩)   2017-09-14 17:49:00
抱歉自己耍蠢 主要是memory超過 global mem size但說也奇怪 我create時沒有回傳錯誤

Links booklink

Contact Us: admin [ a t ] ucptt.com