我对GPU编程一无所知,我想对此进行概述。我必须开发一个图像处理项目,在智能手机的GPU上工作(在Android设备上),但我不知道从哪里开始。
1)编程智能手机的GPU和编程其他GPU(例如Nvidia GeForce 9)是否相同?
2)我听说过GPU的计算或图形编程:有什么区别?他们是平等的吗?
3)我已经将Eclipse配置为开发Android应用程序:我需要哪些其他工具?
4)智能手机的GPU编程(适用于Android)与设备无关?三星S4,LG G3和其他Android设备是否相同?5)我需要什么样的图书馆?我听说过Nvidia的OpenCV和Tegra包。
你能帮我解决这个问题吗?另外,你能帮我解决任何有针对性的链接吗?
答案 0 :(得分:17)
1)编程智能手机的GPU并编程其他GPU(Nvidia 例如GeForce 9)是否相同?
并非总是如此。例如,根据您使用的API和硬件平台,某些移动设备允许您开发与桌面GPU完全相同的程序。
例如,如果您在Tegra K1 / X1设备上进行CUDA程序,那将与您在GeForce 9上的程序几乎相同。
但是,如果你使用OpenCL,你需要小心。有些移动设备仅支持OpenCL Embedded Profile,这意味着与桌面GPU相比功能有限。即使某些移动设备支持OpenCL完整配置文件,您仍然需要处理的资源较少,因此,仍需要修改该程序以适应移动平台。
2)我关于GPU的计算或图形编程:它是什么? 区别?他们是平等的吗?
图形编程更侧重于图形渲染。目标是在屏幕上绘制一些东西。手机所需的主要API包括适用于Android的OpenGL ES,适用于iOS的Metal或适用于Windows的DX。
GPU的计算意味着您要完成一些与图形渲染无关的任务,而是需要计算某些方程或从输入数字计算某些值。例如,您可能希望过滤图像或处理某些视频等。计算的主要API是OpenCL,CUDA和Metal。
3)我已经配置Eclipse来开发Android应用程序:还有什么 我需要的工具?
您当然需要Android NDK。您需要OpenCL库或SDK用于您拥有的移动设备。
4)智能手机的GPU编程(适用于Android)与设备无关?它' 三星S4,LG G3和其他Android设备是一样的吗?
当然,设备功能与您可以做的事情有很大不同。主要区别在于手机中使用的芯片组。这将决定您应该使用什么SDK,硬件功能将完全不同。
另一件需要注意的事情是,由于巨大的硬件差异,GPU编程通常不具备性能可移植性。因此,在一部手机上优化的源代码可能不是另一款手机上最好的。
5)我需要什么样的图书馆?我对Nvidia的OpenCV和Tegra包进行了大量宣传。
OpenCV是计算机视觉库。是否需要取决于您使用的算法类型。如果您的应用程序严重依赖某些图像处理和计算机视觉算法,您可能会发现OepnCV很有用。但绝对可以从您自己的简单库开始。
Tegra NVPack并不特别。它只是一个软件/ SDK包,包含Android开发SDK,NDK,IDE和工具,以及NVidia的SDK。您始终可以通过安装单独的SDK和工具来设置自己的环境。但是,如果您为NVidia平台开发,NVPack可能更容易开始。
答案 1 :(得分:4)
在Android中访问GPU的一种简单方法是使用OpenGL ES。 android SDK将所有OpenGL ES公开为java https://www.khronos.org/opengles/sdk/docs/man/
OpenGL ES允许您在GLSL(Open GL着色语言)中编写着色器,并在运行时在GPU上编译它。 https://www.opengl.org/documentation/glsl/
此GLSL代码直接在GPU上运行。
有关Android中OpenGL ES的更多信息,请参阅Android文档http://developer.android.com/guide/topics/graphics/opengl.html
这是一种非常原生的方法。使用库完全取决于您希望使用GPU实现的目标
答案 2 :(得分:2)
Android使用OpenGL ES(嵌入式系统的开放图形库)
有不同版本的OpenGL ES。 我建议使用2.0,但您也可以使用1.0或更高版本。
大多数手机都支持2.0,你有更多选择,而且速度超过1.0
学习OpenGL很困难,可能需要一段时间。这是一个很好的教程,可以获得概述:http://blog.db-in.com/all-about-opengl-es-2-x-part-1/
Apple智能手机也使用OpenGL ES,所以如果你学习它用于Android,你也可以用它来制作iphone。
是的,所有Android设备都使用OpenGL。