[问题] 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