Android平台上的高性能编程

由于计算机视觉方面的大部分算法不仅需要很多计算资源,也需要频繁地访问内存,因此很多在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吧)。


更多文章,请查看个人博客:点击打开链接

你可能感兴趣的:(android,图像处理,优化,算法)