基于Android的CPU+GPU的异构编程开发,目前主要有以下几种平台

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:蓝山sd
链接:http://www.zhihu.com/question/20958771/answer/44916992
来源:知乎

1. OpenCL
在桌面系统和大规模并行计算领域被普遍使用的一种底层API。最近一段时间,主流的芯片厂商的旗舰或准旗舰芯片都开始支持OpenCL1.1或者1.2标准,包括高通,三星, 联发科,Rockchip等厂商的芯片,都可以找到OpenCL的支持。

2. CUDA
目前只有NVIDIA自己出的基于Tegra K1芯片的设备(NVIDIA Shield)支持CUDA,所以支持的面比较窄。

3. RenderScript (RS)
Google力推的异构编程,宗旨是由平台帮你选择运行的处理器,也就是说你是不知道你的程序跑在CPU还是GPU上的,这是由系统的驱动来决定的。想法是美好的,可现实是开发者并不买RS的帐, 大家觉得RS的性能不可控,灵活性太差,其文档之缺乏也被人诟病;此外,芯片厂商对于RS的优化都还普遍处于比较低阶的水平,这些都导致了RS在实际应用中很少被用到。

由于OpenCL的普及程度,以下部分只针对OpenCL展开。

目前支持OpenCL的设备和芯片
1. 支持OpenCL的GPU
  • 高通几乎全系的GPU, 包括但不限于以下GPU (Adreno 305, 320, 330, 405, 420, 430, 530 ...)
  • ARM Mali的6系和7系GPU, 比如T628, T760
  • 2014年以来较新的Imagination PowerVR GPU,比如G6430
2. 支持OpenCL的芯片。以下是一个很粗略地列举了主要的支持OpenCL的芯片。
  • 高通8064, 8974(骁龙800,801), 8084(骁龙805), 8994(骁龙810)等
  • 三星 Exynos猎户座 5420, 5433 (内置ARM Mali GPU)
  • 联发科 MT6752 (内置ARM Mali T760 GPU)
  • 瑞芯微 RK3288 (内置ARM Mali GPU)
3. 支持OpenCL的手机和平板。 这个就数不胜数了,下面只随手给出几个例子以供参考。(注意:Google Nexus系列的手机或平板,虽然硬件上支持OpenCL,但因为删掉了OpenCL的驱动程序,所以基本都不支持OpenCL;值得注意的是,据国外blog上报道,可以将相应的OpenCL驱动推送回设备以重新开启OpenCL的支持, 详见maxlv.net 的页面
  • 三星 Galaxy S4, S5, S6, Note 3, Note 4
  • LG G2, G3, G4
  • HTC One M7, M8, M9
  • 小米使用高通芯片的手机和平板
  • 魅族M1 Note
  • 台积电P90HD
  • 等等等等。。。。
如果不确定手头的设备是否支持OpenCL, 可以使用OpenCL-Z Android进行检测,这款软件可以显示详细的OpenCL的设备信息,同时运行micro-benchmark检测设备的计算能力。下载链接:

需要掌握的知识:
1. 简单的GPU基本知识
2. OpenCL并行程序设计
3. Android NDK知识
4. Android JNI接口的编写
5. 简单的Android程序开发知识

开发的步骤(篇幅所限,这里只是步骤的精简版本,只阐述操作,不进行解释):
1. 编写OpenCL的C/C++程序实现GPU的核心计算代码
2. 用Android NDK编译之前写的C/C++代码。这一阶段可以在纯C/C++环境下工作,可以编写main函数测试实现的功能,用NDK将代码编译为可执行的代码(BUILD_EXECUTABLE), 然后用ADB将可执行程序推送到设备上运行。运行可执行程序要求设备具有root权限,如果没有root权限,可以通过Native Program Launcher (AndroidNativeLauncher · GitHub,可能需要翻墙) 这一工具在设备上执行二进制代码。
3. 上一阶段测试结束,功能基本正常。开始编写JNI接口。
4. 开始编写Android应用程序,使用JNI封装native函数。编译C/C++代码成动态链接库。
5. 在Android程序里,以静态方式加载上一步编译的动态链接库。
6. 在需要的地方(比如点击按钮事件),调用相应的native函数,即可实现相应的功能。

以上步骤可能看着有些抽象,不用担心,跟着下面几个教程走一边,你就会明白每一步在做什么。

推荐几个教程:
1. Sony Mobile的OpenCL教程(英文): Boost the performance of your Android app with OpenCL
2. Intel的Android上的OpenCL教程(中英文版都有):安卓* - 教程:基于 Android* 操作系统的 OpenCL™ 入门
3. CSDN的一篇博文:Android平台利用OpenCL框架实现并行开发初试

这几个教程都是有非常详细的说明,并且附有源代码,非常适合入门。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章