【问题标题】:How to know if GPU computing is used in OpenCv4Android native如何知道 OpenCv Android 原生中是否使用了 GPU 计算
【发布时间】:2016-03-04 08:58:26
【问题描述】:

我正在使用 Opencv4Android 在 Android 上编写本机应用程序。我正在使用 Opencv 管理器。在应用程序启动时,我收到以下日志:

但是如何知道 openCv 是否真的在使用 OpenCl 进行加速呢?

【问题讨论】:

    标签: android opencv opencl gpu native


    【解决方案1】:

    感谢 VAndrei,我现在确定我没有使用 OpenCL。我没有使用 ocl 包。此外,我随后尝试了 ocl 包,但在第一个 ocl 代码行运行时出现错误。然后我检查了OpenCl-z,似乎设备上没有OpenCL(Rk3188)。

    我对系统 (ARM Cortex-A9) 的性能感到非常惊讶。对于这些线条,灰度分辨率为 160x120:

        cv::absdiff(_inputMat, _previousMat, _outputMat);
        _inputMat.copyTo(_previousMat);
        cv::GaussianBlur(_outputMat, _outputMat, cv::Size(3,3), 2.0, 2.0);
        cv::threshold(_outputMat, _outputMat, 100, 255, 0);
    

    系统需要约 1.5 毫秒。这就是为什么我想知道是否使用了 OpenCl。似乎 Rk3288 支持 OpenCl。我将不得不检查 htis 其他系统的改进。

    【讨论】:

      【解决方案2】:

      不幸的是,Google 在很长一段时间内都放弃了对 Android 的 OpenCL 支持。这样做是为了支持 RenderScript。

      因此,首先要做的是检查您的平台上的 OpenCL 可用性。您可以使用 OpenCL-Z。该工具可能会告诉您是否存在 OpenCL 运行时以及它是否可以同时使用 GPU 和 CPU。

      OpenCV4Android 编译时支持 OpenCL,这意味着您可以使用 OpenCL 特定的命名空间。因此,如果您的平台具有 OpenCL,并且在您的代码中使用 OpenCL 特定对象(例如 oclMat),您的本机代码将使用 OpenCL。

      最后,您无法确定 OpenCV 实现将使用哪种 OpenCL 设备(GPU/CPU)。您可以浏览 OpenCV 的源代码并查看您的内核的具体实现,或者您可以使用适用于您的 Android 设备的系统分析器,并观察 GPU 和 CPU 活动。

      【讨论】:

      • 一种判断方法是尝试更改 OpenCL 动态库名称的名称(例如高通芯片设备上的 libOpenCL.so)。如果 APP 运行良好,但现在崩溃了,说明 APP 正在使用 OpenCL。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 2017-02-11
      相关资源
      最近更新 更多