This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM5728:OpenCV 优化

Guru**** 2535150 points
Other Parts Discussed in Thread: AM5728

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/691928/linux-am5728-opencv-optimization

器件型号:AM5728

工具/软件:Linux

您好!

我们将使用 OpenCL 加快基于 am5728平台的 OpenCV、 因此  我设计了一个简单的测试应用程序、该过程如下:

1) 1)从输入 文件中读取左右两幅图像

2) 2)调用并执行 StereoBM 算法并获取视差图像

3) 3)调用 minMaxLoc 函数以将视差图像形式 CV_16S 类型转换为 CV_8u 类型或调用 getMat ()函 数以获取 MATT 格式数据结构以供下一个进程使用。

我 发现、如果我启用 OpenCL、并且迟滞 BM 算法  的运行速度快于禁用 OpenCL、 但 minMaxLoc()或 getMat ()需要近2秒的时间,这很奇怪,因为如果我不启用只需0.1ms 的 OpenCL,我认为因为 umat 是一个 TAPI,所以主机和设备都具有访问权限,不会 进行数据移动或传输, 但结果显示我的想法是错误的。

测试应用程序和日志文件请查看附件!

有没有 OpenCV/OpenCL 专家会给我详细解释、我在这个问题上堆栈很长时间。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我没有看到任何附件。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很抱歉 Margarita、

      感谢您的快速响应、可能是浏览器问题、我再次上传测试应用、 请帮我解决。/cfs-file/__key/communityserver-discussions-components-files/791/StereoBM_5F00_UMat2Mat_5F00_2018_2D00_05_2D00_22_5F00_ForTI.rar

    BR

    霍华德

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    器件型号:AM5728

    工具/软件:Linux

    您好!

      最近、我在使用 OpenCV 调度 OpenCL 时遇到了一些问题、 因此我基于 TI Wiki 链接 http://processors.wiki.ti.com/index.php/OpenCV 设计了两个简单的测试应用、 基于迟滞 BM 算法、发现 OpenCV 应用程序派单 OpenCL 使用 OpenCV-OpenCL 类(选项 A 表示简单)和使用标准 OpenCL 派单(选项 B 表示简单)显然存在性能差异。

    使用选项 A 时、执行迟滞 BM 算法只需30ms、但 minMaxLoc 函数几乎需要2s。

    StereoBM_OPTIONA tDIFF = 30.513989 ms

    minMaxLoc tdiff=1968.670074 ms;最小值:-16.000000最大值:830.000000

    使用选项 B、 执行迟滞 BM 算法需要近2秒、但 minMaxLoc 函数需要近1ms。

    StereoBM_OptionB tDIFF=1965.977616ms

    minMaxLoc tdiff = 0.984459ms;

    无论是选项 A 还是选项 B,总时间几乎相同(大约2秒),详细信息请参见附件(测试应用程序和日志文件/CFS-file/__key/communityserver-discussions-components/791/OpenCVTestBasedOnStereoBM_5F00_2018_2D00_05_2D00_23.rar)。 我无法理解为什么、 所以我发布了问题、希望专家为我回答、提前感谢。

    BR

    霍华德

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    在 TI 当地 FAE Thomas Yang 的支持下、这一系列问题已经成功解决、他给出了如下正确答案:

    OpenCV/OpenCL 通过向 DSP 发送异步(“延迟”)来实现。
    这意味着当调用 DSP 上的内核时、控制通常会立即返回到 ARM 代码。 这允许在 DSP 和 ARM 之间并行执行。
    但是、当检测到数据依赖条件(即下一个操作的参数是先前调用的 DSP 内核的输出)时、会等待 DSP 操作结束(造成缓慢变量访问的印象)。

    根据上述提示、我将 OpenCL 派单从异步模式更改为同步模式、也就是说、在将"k.run(2、globalThreads、NULL、false "更改为"k.run(2、 globalThreads、NULL、true);"、所有测试应用程序的输出结果都是合理的、事实上、soreoBM alogthm 在电流时已经耗尽了大约2秒、接下来我需要优化 sireoBM 算法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    感谢您分享该解决方案。

    BR
    玛格丽塔