【发布时间】:2016-03-04 08:58:26
【问题描述】:
我正在使用 Opencv4Android 在 Android 上编写本机应用程序。我正在使用 Opencv 管理器。在应用程序启动时,我收到以下日志:
但是如何知道 openCv 是否真的在使用 OpenCl 进行加速呢?
【问题讨论】:
标签: android opencv opencl gpu native
我正在使用 Opencv4Android 在 Android 上编写本机应用程序。我正在使用 Opencv 管理器。在应用程序启动时,我收到以下日志:
但是如何知道 openCv 是否真的在使用 OpenCl 进行加速呢?
【问题讨论】:
标签: android opencv opencl gpu native
感谢 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 其他系统的改进。
【讨论】:
不幸的是,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 活动。
【讨论】: