Opencv 视频人脸检测:CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST错误

Opencv 视频人脸检测:CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST错误,opencv,memory-management,opencl,video-processing,face-detection,Opencv,Memory Management,Opencl,Video Processing,Face Detection,我试图在5分钟720P的视频上运行人脸检测。我正在使用opencv API和opencl内核来完成我的工作。当我试着运行这个程序时,它在最初几帧的情况下运行良好。但是经过几帧之后,它给了我一个错误 OpenCV错误:openCLMemcpy2D文件/OpenCV-2.4.6.1/modules/ocl/src/initialization.cpp第466行中的Gpu API调用(事件列表中的CL_EXEC_STATUS_Error_) 有时我在处理200帧后得到这个错误,有时我在处理2000帧后

我试图在5分钟720P的视频上运行人脸检测。我正在使用opencv API和opencl内核来完成我的工作。当我试着运行这个程序时,它在最初几帧的情况下运行良好。但是经过几帧之后,它给了我一个错误

OpenCV错误:openCLMemcpy2D文件/OpenCV-2.4.6.1/modules/ocl/src/initialization.cpp第466行中的Gpu API调用(事件列表中的CL_EXEC_STATUS_Error_)

有时我在处理200帧后得到这个错误,有时我在处理2000帧后得到这个错误。 有人能告诉我为什么我要面对这个错误,有什么可能的解决办法吗?我在网上搜索了一下,但什么也没找到


更新:我在装有AMD APU的台式电脑上执行了该程序。整台机器在加工了一些框架后冻结了。我还在每个内核之后应用clFinish以确保同步。尽管如此,系统还是冻结了。所以,这不是一个同步问题。

此错误意味着某个内核的等待列表中的OpenCL事件具有无效状态。内核,被发送到命令队列不能等待它的完成。通常情况下,这是由于缺乏适当的同步,因此处理帧的数量是运气的问题


由于OpenCV是一个相当大的库,不容易调试,在我看来,最简单的方法是收集运行时概要文件&看看命令队列中的任务是否按正确的顺序进行。您可以使用profiler完成此操作,它通常由供应商(如Nvidia Visual profiler或AMD CodeXL)随OpenCL SDK提供。

感谢您的回复。如果同步是个问题,在这种情况下,如果我在每次内核调用之后使用clFinish,那么应该可以解决我的问题。我会做这个测试。但我想这与记忆有关。如果我删除了程序中的最后一个内核调用,那么程序运行正常。当我尝试将图像矩阵传输到OclMatrix时,会出现错误。你能告诉我怎样才能找到分析信息吗?我找到的唯一打印内核执行时间的东西。这取决于您使用的平台。我使用的是带有马里GPU的arndale board。我的opencv是为arm编译的。这有帮助吗?我在装有AMD APU的台式电脑上执行了这个程序。整台机器在加工了一些框架后冻结了。我还在每个内核之后应用clFinish以确保同步。尽管如此,系统还是冻结了。因此,这不是一个同步问题。我已经用调用内核的detect函数更新了post。