0

我试图在5分钟的720P视频上运行人脸检测。我正在使用opencv API和opencl内核来完成我的工作。当我尝试运行该程序时,它运行良好,只有少量的帧数。但一些帧后,它给了我一个错误Facedetection的视频:CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST错误

OpenCV的错误:GPU API调用(CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST)在openCLMemcpy2D,文件/opencv-2.4.6.1/modules/ocl/src/initialization.cpp,管线466

有时我处理200帧后出现此错误,有时我得到2000帧后出现此错误。 任何人都可以建议我为什么我面临这个错误,什么可能是一个可能的解决方案?我搜索了互联网,但没有找到任何答案。

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

回答

0

此错误意味着处于某个内核的等待列表中的OpenCL事件具有无效状态。发给Command Queue的内核无法等待它完成。通常这是由于缺乏适当的同步而发生的,所以处理帧的数量是运气的问题。

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

+0

感谢您的回复。如果同步是问题,在这种情况下,如果我在每次内核调用后使用clFinish,那么这应该解决我的问题。我会做这个测试。但我想这与记忆有关。如果我删除程序中的最后一个内核调用,那么程序运行良好。当我尝试将图像矩阵传送到OclMatrix时发生错误。你能告诉我如何找到分析信息吗?我发现唯一打印内核执行时间的东西。 – Luniam

+0

这取决于你使用的平台。 –

+0

我正在使用带有Mali GPU的arndale主板。我的opencv是为arm编译的。这有帮助吗? – Luniam