款式 | CPU型号 | GPU型号 | OpenCL支持 |
三星GalaxyS5 | 高通骁龙801(4核) | Adreno330 | 是 |
Iphone5S | 苹果A7(2核) | Imagination PowerVR G6430 | 是 |
小米3 | 高通骁龙800(4核) | Adreno330 | 是 |
魅族M3 | 三星5410(8核) | Imagination SGX544 | 是 |
而在国外的一些研究机构和学者也对智能手机、平板电脑这样的移动平台进行了并行化的研究,比如三星手机研究院和诺基亚研究院近几年就发表了很多关于这方面的资料;美国莱斯大学的学者Guohui Wang等人就对物品移除算法和SIFT算法进行了智能手机上的并行化实现。
并行计算已经在移动平台具备硬件条件和变成标准的支持,而并行化又可以带来提升设备硬件利用效率,同时GPU的低主频特性又可以在一定程度上降低功耗,因此在智能手机等移动平台实现并行计算具有巨大的潜在价值,特别在当前手机续航时间不能满足用户要求的背景下,并行化的特性显得尤为重要。
下面就具体介绍一些实现流程和结果。
这次仅仅通过Sobel滤波这样的小程序来完成基于OpenCL实现的Android平台并行化。
首先,我们需要完成开发环境的搭建。由于目标是安卓平台,我们需要安装JAVA SDK、Android SDK、Eclipse以及ADT插件,这些工具的安装教程很多,这里就不再赘述了,主要介绍Cygwin与NDK的环境搭建。
第一步,从http://developer.android.com/tools/sdk/ndk/index.html查看和下载NDK工具的相关资料和安装包,我们在开发时使用的是NDK r8版本,后续版本使用基本类似;可以参照NDK的文档进行深入的学习和测试。
第二步,从http://www.cygwin.com 下载Cygwin工具。由于NDK完成的工作是允许开发人员使用本地代码(如C/C++)进行Android APP功能开发,而在开发的过程中大多涉及到GCC环境下的编译、运行,我们采用了Cygwin模拟Linux编译环境。我安装的时候为了方便就把所有的文件都安装了,体积不大,1G左右。
安装完成后,运行"Cygwin.bat",可以通过以下几个方法检验安装是否成功。(这里参照了以前的