C++、OpenCV 和"what",用于跨平台 GPU 编程

C++, OpenCV and "what" for cross-platform GPU programing

本文关键字:用于 跨平台 GPU 编程 what OpenCV C++      更新时间:2023-10-16

我想为计算机视觉问题编写一个跨平台代码。此代码应该在带有GPU的PC(nVidia)、带有GPU的iPhone和一些基于Android的设备上运行,这些设备可能包含GPU,也可能不包含。我想最大限度地利用现有的硬件。我的编程语言是C++11,我的计算机视觉库是OpenCV。什么是最好的框架、层、技术。。。以便编写可从GPU使用的隔离高级代码(如果可用的话)。

附言:这可能被视为是在寻求推荐。但实际上,在这里,我并不是在众多可用选项之间进行询问。我只是想问一下这通常是如何做到的,或者这个领域的技术现状如何。

对于多平台,我将主张将其保留在C/C++中并使用常用的线程库。

虽然在iOS中只有一家供应商,OpenCV团队可以根据需要进行调整,但在Android上,CPU/GPU供应商多种多样,因此Google/Android团队选择了RenderScript(为什么谷歌选择RenderScripts而不是OpenCL),并且不正式支持OpenCL。包括非RenderScript GPU计算选项必须来自英特尔、高通和nVidia的CUDA等个别供应商。

要意识到,移动平台的发展速度比PC快得多,也就是说,与现在的手机相比,英特尔首次发布酷睿i系列(2008年)时你本可以得到的手机类型。

此外,还有OpenGL ES 3.1和Vulkan中的计算着色器。因此,如果你正在寻找基线,你最好在C/C++线程领域。

现在,如果你真的有一个需要提高性能的移动应用程序,那么你就可以弄清楚在你选择的移动平台上需要什么优化。

我认为以下技术堆栈对您的需求非常有意义:

  • OpenCL适用于配备nVidiaGPU或任何其他供应商的各种桌面工作站,并适用于Android上的GPU编程
  • Metal用于iOS上的GPU编程,因为它几乎不需要移植OpenCL实现:

如果你认为Metal可能是一个原因,那么这种语言看起来很像OpenCL,就像苹果希望的那样,它只是OpenCL。因此,在这两种语言之间移植非常简单。这也意味着,通过一些小的修复,Metel内核可以由现有的OpenCL编译器编译。

(http://streamcomputing.eu/blog/2015-05-09/apples-dragging-opencl-compiler-problem/,最后访问时间:2015年12月7日)

关于OpenCV

OpenCV部分支持OpenCL(http://docs.opencv.org/2.4/modules/ocl/doc/introduction.html,上次访问时间为2015年12月7日),但是,如果OpenCV不可能在iOS下使用GPU(iOS上的OpenCV-GPU使用情况?)。

因此,iOS将是将基于OpenCV的算法移植到该平台的棘手部分,如果你想让它加速GPU的话。