在安卓系统中,是否有可能对GPU进行编程?

16

我现在正在进行Android编程,我想知道现在是否可以在Android上使用GPGPU?我曾经听说Renderscript未来有可能在GPGPU上执行。但我想知道现在是否可以在GPGPU上编程?如果我可以在Android GPGPU上编程,那么我在哪里可以找到一些教程或示例程序?谢谢您的帮助和建议。

目前我知道OpenGL ES库已经可以使用GPU加速,但我想使用GPU进行计算。我的目的是为了加速计算,所以我希望能够使用一些API库,例如OpenCL。


但我从网站http://developer.android.com上看到,它并没有告诉我Renderscript现在可以在GPU上使用。你是说OpenGL ES现在可以用于计算吗?我会尝试一下的。谢谢。@StephanBranczyk - Timothy
是的,我在询问关于GPGPU的事情。所以我应该尝试使用OpenCL而不是OpenGL。但是是否有适用于Android的OpenCL库,例如OpenCL ES?谢谢。@StephanBranczyk - Timothy
你应该接受Morrison Chang的答案,而不是之前的那个(假设StackOverflow的用户界面允许你这样做)。StackOverflow的目标是使自己对于搜索答案的人有用,并标记一个真正没有回答你想问的问题的答案并不会达到这个目的。 - Stephan Branczyk
谢谢您的建议,@StephanBranczyk。我有几天没上线了,因为我忙于做其他工作。现在我正在尝试在我的工作中使用OpenGL ES 2.0,并希望先完成一个原型。我也听说GL ES也可以在编程中使用GPU。我现在正在尝试它。 - Timothy
请查看我的答案:https://dev59.com/hnLYa4cB1Zd3GeqPaapm - Chintan Rathod
4个回答

9

2021年4月更新

谷歌宣布在Android 12中使用Vulkan API取代RenderScript API,停用RenderScript API

制造商包含Vulkan API的选项在Android 7.0兼容性定义文档-3.3.1.1.图形库中提供。

原回答

实际上,RenderScript Compute目前不使用GPU,但是为其设计而来。

来自在Android平台工作的Romain Guy的说法:

  • RenderScript Compute目前受CPU限制,但使用for_each结构将立即利用多个核心
  • RenderScript Compute被设计为在GPU和/或CPU上运行
  • RenderScript Compute避免编写JNI代码并提供体系结构无关的高性能结果
  • RenderScript Compute可以从Android 4.1开始受益于SIMD优化(ARM上的NEON)

https://groups.google.com/d/msg/android-developers/m194NFf_ZqA/Whq4qWisv5MJ


谢谢您,我现在正在尝试使用它。我还不知道Renderscript是否能够满足我的需求,但我会试一试。我真的很困惑,因为有很多人告诉我它可行,而另一些人则说它不行。 - Timothy
它只支持3.0及以上版本的设备。你还没有解释你想要做什么(图像处理、图形计算、其他)。 - Morrison Chang
Renderscript缺乏文档。但我听说在Nexus 4和Nexus 10中,RenderScript使用GPU来加速计算。我的问题是,如果你想使用GPGPU,为什么要投资于RenderScript?它只适用于Android。OpenCL是方向,但在Android和IOS6上并不真正准备好。OpenGLES 2.0是您使用的好选择。 - swcai
如果您熟悉OpenGL ES 2.0,可以在那里完成,但是如果您不想考虑顶点数组、纹理和着色器管道,Renderscript简化了“普通”程序员使用CPU/GPU的入口点。与OpenCL相比,Renderscript更简单。设置OpenCL计算内核需要多少行代码?尽管我同意缺乏文档和仅限于Android的特性正在阻碍它的发展。 - Morrison Chang

3
从Android 4.2版本开始,Renderscript可以在某些情况下将GPU用于计算。更多信息请参见:http://android-developers.blogspot.com/2013/01/evolution-of-renderscript-performance.html 据我所知,ScriptIntrinsic子类已经被优化,可以在兼容的硬件上(例如Mali T604的Nexus10)运行在GPU上。文档地址:http://developer.android.com/reference/android/renderscript/ScriptIntrinsic.html 当然,您可以选择使用OpenCL,但是Renderscript由于是Android本身的一部分,被Google保证可以运行在不支持GPGPU计算的硬件上,并且会使用任何其他可用的硬件加速手段支持它运行的硬件。

3

是的,这是可能的。

你可以使用Renderscript或OpenGL ES 2.0。

Renderscript可在Android 3.0及以上版本上使用,而OpenGL ES 2.0可在约95%的设备上使用。


现在我可以使用renderscript在GPU上编程,就像PC上的CUDA一样吗?谢谢,我会尝试学习renderscript。 - Timothy
祝好运。关于这个问题,还有一些视频和教程,但我认为它们不够充足。希望有更多的信息让开发者创造出惊人的东西。 - android developer

1
有几个选项:您可以使用OpenGL ES 2.0,几乎所有设备都支持它,但在GPGPU方面功能有限。您可以使用OpenGL ES 3.0,在GPU处理方面可以做更多。或者您可以使用RenderScript,但这是特定于平台的,并且无法影响算法在GPU还是CPU上运行。关于此主题的摘要可在此硕士论文中找到:移动设备GPU上数字信号处理的并行计算
您还应该查看ogles_gpgpu,它允许通过Android和iOS上的OpenGL ES 2.0进行GPGPU。

为什么要点踩?我看不出任何可能的理由(http://stackoverflow.com/help/privileges/vote-down)。 - IsaacKleiner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接