C++、OpenCV 和"what",用于跨平台 GPU 编程
C++, OpenCV and "what" for cross-platform GPU programing
我想为计算机视觉问题编写一个跨平台代码。此代码应该在带有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的话。
- 将 VS Code 用于跨平台可缩放C++项目
- 将XOJO用于跨平台开发的妥协是什么?
- 用于跨平台(C /Android)无损/低噪声视频压缩/减压的库
- C 跨平台移动框架仅适用于UI
- 是否有用于窗口操作的跨平台库
- 用于跨平台应用程序的JavaFX2.0和Qt
- 用于跨平台的C++控制台显示
- 用于C++的Win32 CRITICAL_SECTION的轻量级跨平台替代方案
- 开源或低成本的跨平台视频编解码器库,可用于商业目的,并支持RGBA格式
- 用于C++跨平台音乐制作软件的图形
- 适用于 C++ 的任何跨平台视频播放库
- 免费用于商业、跨平台的C++GUI库
- C++、OpenCV 和"what",用于跨平台 GPU 编程
- 适用于MP3、AAC、WAV的跨平台(C/C++)音频库
- 用于Linux的SDL跨平台消息框
- 用于调试消息的跨平台GUI应用程序控制台
- 用于移动应用开发的c++跨平台框架
- 用于WebServices的跨平台开源第三方库
- 用户界面-是否存在用于C++的跨平台GUI库(具有依赖于平台的UI和基于脚本的布局)
- 用于多跨平台使用的音频库C++(iphone、android..)