您的位置:首页 > 移动开发 > Android开发

Android平台上的高性能编程

2016-09-03 13:07 204 查看
由于计算机视觉方面的大部分算法不仅需要很多计算资源,也需要频繁地访问内存,因此很多在PC上可以实时跑起来且效果良好的方案在移植到Android这样的移动平台上往往表现很差。本文总结下自己这些天对Android平台上的高性能编程的调研结果,供学习交流。

首先,说一下我了解到的硬件趋势。CPU方面,移动平台多为ARM架构,属于RISC指令集,主流已经过了单核、双核、四核、八核甚至十二核、十六核这几个阶段。这是因为摩尔定律预测每18个月,CPU性能就会翻一番。但是到前几年,靠提高主频去翻倍性能变得越来越得不偿失,便开始向多核发展。但是当前很多程序员对多线程编程的意识还并没有那么强烈,对多核的高效应用还有很大的探索空间。GPU方面,并行能力越来越强大,成百上千个核同时运算。举个例子,处理一个几千次的for循环,CPU可能需要几千个时钟周期,但GPU可能仅需要几十个时钟周期就能完成。由于GPU主频较低,同样的计算量相比CPU可能会更省电。另外,移动平台上一般还配有DSP与ISP这样的芯片,负责特殊处理。

上述移动平台上提到的处理单元是实现高性能编程的硬件基础。对于程序员可能更关心有哪些方法能将上述硬件充分利用起来,从而实现很好的效果,不至于由于卡顿、耗电量太大、手机烫等影响用户体验。那么,都有一些什么方案可用于Android平台上图像处理或计算机视觉的算法实现和优化呢?

(1)OpenGL

(2)OpenVX

(3)多线程 OpenMP or pthread

(4)OpenCL or CUDA

(5)Vulkan

(6)RenderScript

(7)ARM Neon

(8)OpenMAX

(9)。。。

由于种类太多,还是以后根据用到的再慢慢更新这些技术吧。

最后提一下,Android平台自21版本起,提供了一套新的Camera接口,叫做camera2。相比旧接口,提供了更多的控制camera的接口,想再Android上开发视觉应用的同学很有必要了解下这些API。再有就是android-23版本起,很多中高端手机提供了慢镜头功能,也可以理解为高速摄像,一般有120fps,240fps,Android上对应的Framework API为highspeedXXX(一系列的创建session和CaptureRequest的API,大家自己Google吧)。

更多文章,请查看个人博客:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息