我正在尝试在5分钟720P视频上运行人脸检测。我正在使用opencv API和opencl内核来完成我的工作。当我尝试运行程序时,它可以在初始数量很少的帧中运行。但是在一些帧之后,它给了我一个错误
OpenCV错误:openCLMemcpy2D中的Gpu API调用(CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST),文件/opencv-2.4.6.1/modules/ocl/src/initialization.cpp,第466行
有时我处理200帧后会出现此错误,有时我会在2000帧后出现此错误。 任何人都可以建议我为什么我面临这个错误,什么可能是一个可能的解决方案?我搜索了互联网,但没有发现任何问题。
更新:我在有AP APU的台式电脑上执行了该程序。处理完一些框架后整机冻结。我还在每个内核之后应用clFinish以确保同步。即使,系统冻结了。所以,这不是同步问题。
答案 0 :(得分:0)
此错误表示某个内核的等待列表中的OpenCL事件具有无效状态。发给Command Queue的内核无法等待它完成。通常这是由于缺乏正确的同步而发生的,因此处理帧的数量是运气的问题。
由于OpenCV是一个相当大的库,不太容易调试,在我看来,最简单的方法是收集运行时配置文件&查看命令队列中的任务是否按正确顺序排列。你可以使用profiler来实现,它通常由供应商提供OpenCL SDK(如Nvidia Visual Profiler或AMD CodeXL)。