aaashun's site

home

做移动开发应该了解的arm及编译优化

31 Jul 2013

这两天在做SDK兼容性测试时遇到了不少问题, sdk要兼容高中低端的android手机, 这个问题之前遇到过, 也查过一些资料, 今天整理一下.

1. ARM处理器系列

arm7系列

1994年推出, 世界上使用范围最广的32位嵌入式处理器, 年代太久远

arm9系列

http://www.arm.com/zh/products/processors/classic/arm9/index.php

1997年推出, 大学时用过, 现在的电信送的免费android手机很多是用这个处理器, 代表机型: 诺基亚N73, 华为C8500

arm11系列

http://www.arm.com/zh/products/processors/classic/arm11/index.php

2003年问世, 现在500元以内手机基本都是这个系列, 代表机型: HTC G8, 三星s5830

cortex-a系列

这个系列是目前的主流, 所以这里讲细点

cortex-a5

定位于低端千元机, 代表机型: HTC Desire V, 华为U8825

cortex-a8

单核解决方案, 代表机型: iphone4, 三星I9000, 摩托罗拉里程碑2

cortex-a9

多核解决方案, 目前市场上2核/4核的多数是这个, 代表机型: iphone5, 三星I9000

cortex-a7

低功耗, 市场上较少, 定位于低端千元机市场, 代表机型: 联发科MT6589

cortex-a12

将于2014年上市, 定位于中端市场, 比cortex-a9性能提升40%, 尺寸小30%, 将取代cortex-a9

cortex-a15

目前性能最高, 1-8核, 主要应用在一些平板电脑上和高端机皇上, 代表机型: 三星GALAXY S4

2. ARM处理器架构(arch)

http://www.arm.com/zh/products/processors/instruction-set-architectures/index.php

armv5te

arm9系列使用该架构

armv6

arm11系列使用该架构

armv7-a

cortex-a系列使用该架构

armv8

最新架构, 应该还没应用

3. ARM指令集(isa)

thumb

16位的指令集, 每个thumb指令都对应一个32位的arm指令, 它仅是将32位arm指令的压缩成16位的指令编码方式, 目标是低功耗, 代码小.

如下是和arm指令集的对比:

由此可见若对性能要求高应使用32位的存储系统和arm指令集, 若对要求低功耗应使用16位的存储器和thumb指令集

thumb-2

16位/32位的指令集, 是对thumb指令集的扩充, 增加了一些32位指令, 改善thumb指令集的性能

arm

32位的指令集, 可以实现arm架构下所有功能

4. ARM浮点运算单元(fpu)

vfpv1

已废弃

vfpv2

armv5te, armv6架构中的浮点计算指令集

vfpv3

部分armv7a架构中的浮点计算指令集

vfpv4

部分armv7a架构中的浮点计算指令集

neon

多媒体处理单元, 提供128位的SIMD指令集, 类似x86上的sse, 应用于cortex-a系列处理器上, 性能最好

5. GCC相关编译参数

-march

armv5te, armv6, armv7-a

-mfloat-abi

soft, softfp, hard. soft是软浮点, 效率最低, 适合于没有fpu的ARM处理器; softfp是默认设置, 由fpu完成浮点计算, 但函数参数的传递使用通用的整型寄存器而不是FPU寄存器; hard效率最高, 由fpu完成浮点计算, 且使用fpu浮点寄存器将函数参数传递给fpu处理.

-fpu

vfp, vfpv3, vfpv4, neon. 需要配合float-abi及其它参数一起使用, 例如: -ftree-vectorize -mfpu=neon -mfloat-abi=softfp

-marm

使用arm指令集

-mthumb

使用thumb指令集, 编译器会根据-march自动使用thumb-2的指令集


看吧, 想要提供一个兼容各android手机的底层库不是那么简单的, 如果再想针对性优化一下, 至少可以有如下几种组合:

PS: Android NDK/Xcode提供的那几个参数是不方便做如上针对性优化的, 建议使用aimake, 调整aimake/android/init.mk里的CFLAGS就可以了, https://github.com/ashun/aimake


参考:

comments powered by Disqus