【问题标题】:Facedetection on video: CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST error视频人脸检测:CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST 错误
【发布时间】:2014-07-07 19:46:05
【问题描述】:

我正在尝试对 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 帧后收到此错误。 谁能建议我为什么会遇到此错误以及可能的解决方案是什么?我搜索了互联网,但没有找到任何东西。

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

【问题讨论】:

    标签: opencv memory-management opencl video-processing face-detection


    【解决方案1】:

    此错误表示处于某个内核等待列表中的 OpenCL 事件处于无效状态。内核,被发布到命令队列不能等待它的完成。这通常是由于缺乏适当的同步而发生的,因此处理的帧数是运气问题。

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

    【讨论】:

    • 感谢您的回复。如果同步是问题,在这种情况下,如果我在每次内核调用后使用 clFinish ,那应该可以解决我的问题。我会做这个测试。但我想这与记忆有关。如果我删除程序中的最后一个内核调用,那么程序运行良好。当我尝试将图像矩阵传输到 OclMatrix 时会发生错误。你能告诉我如何找到分析信息吗?我发现唯一能打印内核执行时间的东西。
    • 这取决于您使用的平台。
    • 我正在使用带有 Mali GPU 的 arndale 板。我的opencv是为arm编译的。这有帮助吗?
    • 我在装有 AMD APU 的台式 PC 上执行了该程序。处理了一些帧后,整台机器都卡住了。我还在每个内核之后应用了 clFinish 以确保同步。尽管如此,系统还是冻结了。所以,这不是同步问题。
    • 我已经用调用内核的检测函数更新了帖子。
    猜你喜欢
    • 2019-04-26
    • 2016-02-25
    • 2014-04-12
    • 1970-01-01
    • 2016-08-09
    • 2016-07-16
    • 2023-03-30
    • 2014-12-01
    • 2014-01-13
    相关资源
    最近更新 更多