移动端的硬件及软件优化

移动设备的硬件 和 相关的软件技术分析
马晨辉
1.硬件分类
1.1 主流的Android 机器(Nexus 为例)
1.2 ios 硬件情况(Iphone 4s,Iphone 5)
1.3 部分新系统的硬件情况(Tizen 2.0 Firefox OS ,WP8,BB10)
2.相关软件技术
2.1 openGL ES 2.0/3.0
2.2 openCL 1.1+  android 对应的应该是 RenderScript
2.3 openMPI 并行计算能力,现在都是多核,我们还没用好
2.4 OpenAL 开放的音频激素,WebP,VP8 等技术


3.相关硬件参数对比,只选取了CPU,GPU,RAM 大小作为对比

设备
CPU 主频
GPU 核心主频
RAM 大小
Iphone 5
A6 双核 主频 800-1024
4核心
1G
Nexus 4
ARM 15 四核 主频 1.5G
Adreno 320 GPU核心 应该也是4核
2G
BB10
双核1.5G
Adreno 225
2G
WP 8
双核 1G
未知
512M
Tizen 2.0
未知
未知
未知
Firefox OS
1G
未知
512M





这些硬件基本从底层最根基的地方决定了系统的性能,但是操作系统的体验并不是他们能决定的,那还要看软件层次怎么样。

4.软件机器实现情况

Ios 的操作系统,就能够将硬件发挥的十分合理,虽然它的硬件并不是最好的,但是它的整机效果是最优秀的。这和整体的系统架构思想,还有就是软件技术的进步有很大的关系,opencl ,opengl最先就是Apple 提出的。

Android 的操作系统就没有那么好,都是靠硬件堆积起来的,4.1 以后才有类似的软件层架构,也就是用户相应优先,还有就是opengl 等的应用。Opencl 还没有怎么做,但是ios现在好像就已经可以用了。差距还是不小。

新兴的操作系统都比较注重软硬结合,Firefox OS Tizen 2.0,BB10,WP8 一开始就使用OpenGL ,使得机器表现比Android 大部分机器都好。

OpenCL好像比OpenGL 更好一些,但是不是很多的系统能使用,确认有使用的,就只有Tizen,Android 和IOS 。Android 的RenderScript 好像没有太多的应用。

5.相关软件技术的介绍
opengl 也就是通用的GPU 编程技术,主要应用就是图形计算。如果GPU 性能好的话,表现效果比较好,但是老式的Android 机器性能并不好,所以出现了有些机器,打开GPU 加速之后,比以前还卡的效果。

opencl 应该是协调CPU 和GPU 进行计算。通常情况下,你进行一个计算,你只是使用CPU ,或者GPU ,他们两个不能协同。GPU 只负责渲染,这实际是一种浪费,进行协同运算之后,能够有效的提升性能。GPU 性能不足的时候,可以由CPU 来补充。或者GPU 协同CPU 进行通用计算。
能有效的提升硬件的利用效率。Opencl 是一个单独的语言。类似C,但是它的数据结构等,都有自己特定的结构。有学习成本。

OpenAL,OpenGL 是通用的图像和音频处理技术,对应在Web上就有,WebAL,WebGL 等技术。从网上可以找到一些资料。


6.软件架构设计,适应移动平台
6.1 用户响应优先(快速相应)。
    用户点击的时候,滑动的时候,要中断其他的操作,已获得更多的资源,保证用户的快速相应。
6.2 功耗,流量的设计
       
        功耗的降低,牵扯很多的方面,比如CPU 进行浮点运算的功耗就不如GPU 低,所以GPU 性能强悍,在图形渲染方面就有利与降低功耗。
        功耗 还跟一些硬件元器件有关系,比如 3G /Wifi网络 的消耗,还有比如 Camera的消耗。比如温度的情况对电池性能的消耗(这个一般情况下不怎么影响,之后特别低气温才有影响)。

还有就是功耗还和代码质量,还有编译器的好坏有关系。你一直在跑死循环,当然消耗能。
反复的销毁和分配内存,也很消耗性能。如果代码质量好,编译器优秀,会减少不必要的计算,减小内存分配。比如我们的clouser-compiler 其实就是做这个工作。
       
       流量 和 功耗 其实是有一定关系的。你下载的东西越多,3G/Wifi消耗的电量也就越多。而  且大数据包的下载,会比多次下载更节省资源,一个是流量的减少(省去了多余的协议头)。还有就是3G/Wifi 底层硬件的模式切换(高速模式/普通模式),在不进行太多的网络请求的时候,系统会切入到低速的网络模式。来回的切换很消耗性能。


7.对应到我们的工作,我们应该注意那些

      我之说一些我们能够控制的。
       1.减小不必要的网络请求,采用大数据包一次下载,使用本地存储,让不必要的网络请求不存在。这当然会增加工作量。(webp 格式的图片会比其他格式的省流量,但是现在支持情况不太好,保持关注吧。)
      2.优化代码,不做不必要的计算。节省资源,合理使用缓存,可以减少计算。
3.减少不必要的内存分配操作,比如变量复用的,但是我感觉这个比较困难。
4.在合适的时机,运行合适的代码。将所有的js文件和css 文件 都写在一个文件里面,当业务越来越大的时候,就会浪费时间在做一些没有必要现在做的事,会有消耗,而且有时候还会影响反映速度。
异步处理和延时处理就很有必要。

  还有一些技术当然也可以用,比如webgl 等,但是目前我们自己的业务还用不到。所以就不提了。
      



猜你喜欢

转载自machenhui880501-gmail-com.iteye.com/blog/1815412