C ++,OpenCV和跨平台GPU编程的“什么”

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

PS这可能会显示为要求推荐的话题。 但是,在这里,我并没有问很多可用的选项。 我只是问这个问题通常是怎么做的,或者这个领域的艺术状况如何。

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

  • OpenCL适用于配备nVidia GPU或任何其他供应商的各种桌面工作站以及Android上的GPU编程。
  • iOS上用于GPU编程的Metal ,因为它很less移植你的OpenCL实现:

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

http://streamcomputing.eu/blog/2015-05-09/apples-dragging-opencl-compiler-problem/ ,上次访问时间为07.12.2015)

关于OpenCV

OpenCV部分支持OpenCLhttp://docs.opencv.org/2.4/modules/ocl/doc/introduction.html ,上次访问时间为07.12.2015),但是afaik OpenCV没有办法在iOS下使用GPU( OpenCV在iOS上 – GPU的使用? )。

因此,如果您希望GPU加速,那么iOS将成为将基于OpenCV的algorithm移植到该平台的一个棘手部分。

对于多平台,我将要争论保持在C / C ++中,并使用通常的线程库。

在iOS中,只有一个供应商,而OpenCV团队可以根据需要进行调整,在Android上有一些CPU / GPU供应商,所以Google / Android团队使用RenderScript( 为什么GoogleselectRenderScript的OpenCL ),并不正式支持OpenCL。 包括非RenderScript GPU计算选项必须来自Intel,Qualcomm等个别供应商,以及nVidia的CUDA的完整性。

意识到移动平台已经以比PC更快的速度发展,也就是说,你可以用英特尔获得的手机types首先发布了Core i系列(2008),而现在已经有了。

更进一步,在OpenGL ES 3.1和Vulkan中有计算着色器。 所以,如果你正在寻找基线 – 你会在C / C ++的线程土地更好。

现在,如果你真的有一个移动应用程序,你需要推动性能,那么你可以找出什么样的优化是需要在您select的移动平台。