我想为计算机视觉问题编写一个跨平台代码。这段代码应该运行在带有GPU (nVidia)的PC上,使用GPU的iPhone和一些可能包含或不包含GPU的安卓设备上。我希望最大限度地利用现有硬件。我的编程语言是C++ 11,我的计算机视觉库是OpenCV。什么是最好的框架,层,技术..。等使用,以便编写一个孤立的高级代码,可以利用从GPU,如果它是可用的。
P.S.这可以显示为非主题要求推荐。但在这里,我并不是在问许多可供选择的方案。我只是在问这通常是如何完成的,或者这一领域的技术现状如何。
发布于 2015-12-07 16:50:54
我认为以下技术栈对您的需求非常有意义:
OpenCL适用于配备nVidia图形处理器或任何其他厂商的各种台式机站,也适用于安卓上的GPU编程。Metal用于iOS上的GPU编程,因为它在移植OpenCL实现方面的工作很少:如果你认为金属可能是一个原因-这种语言看起来非常像OpenCL,因为它只是OpenCL,就像苹果所希望的那样。因此,在这两种语言之间进行移植非常简单。这也意味着,通过一些小的修复,现有的OpenCL编译器可以编译一个Metel内核。
(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年7月12日),但是OpenCV无法利用iOS下的GPU (OpenCV on iOS - GPU usage?)。
因此,在将基于iOS的算法移植到该平台方面,iOS将是一个棘手的部分,如果您希望它被加速。
发布于 2015-12-07 17:47:10
对于多平台,我将主张将其保存在C/C++中,并使用通常的线程库。
虽然在iOS中只有一家供应商,而OpenCV团队可以根据需要进行优化,但在安卓上有多种CPU/GPU供应商,因此谷歌/安卓团队使用了RenderScript (Why did Google choose RenderScript instead of OpenCL),并不正式支持OpenCL。包括一个非RenderScript GPU计算选项,将必须来自个人供应商,如英特尔,高通,以及完整的nVidia的CUDA。
意识到移动平台的发展速度比个人电脑快得多,也就是说,你可以从英特尔获得的手机类型首先发布了Core系列(2008)和现在可用的产品。
再往下看,在OpenGL、ES、3.1和Vulkan中有计算阴影。因此,如果您正在寻找基线-您将更好地在C/C++线程的土地。
现在,如果您确实有一个移动应用程序,您需要它来提高性能,那么您可以在您选择的移动平台上找出所需的优化。
https://stackoverflow.com/questions/34137200
复制相似问题