PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > 编程杂谈 > 正文

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

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:这两天在做SDK兼容性测试时遇到了不少问题, sdk要兼容高中低端的android手机, 这个问题之前遇到过, 也查过一些资料, 今天整理一下.1. ...
    这两天在做SDK兼容性测试时遇到了不少问题, sdk要兼容高中低端的android手机, 这个问题之前遇到过, 也查过一些资料, 今天整理一下.

    1. ARM处理器系列

    arm7系列

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

    arm9系列

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

    • Hz: 200MHz - 400MHz
    • arch: armv5te
    • isa: arm, thumb
    • fpu: vfpv2(optional)

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

    arm11系列

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

    • Hz: 800MHz - 1GHz
    • arch: armv6
    • isa: arm, thumb
    • fpu: vfpv2(optional)

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

    cortex-a系列

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

    cortex-a5

    • Hz: 400MHz - 800MHz
    • arch: armv7a
    • isa: arm, thumb, thumb-2
    • fpu: vfpv4(optional), neon(optional)

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

    cortex-a8

    • Hz: 600MHz - 1GHz
    • arch: armv7a
    • isa: arm, thumb, thumb-2
    • fpu: vfpv3, neon

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

    cortex-a9

    • Hz: 800MHz - 2GHz
    • arch: armv7a
    • isa: arm, thumb, thumb-2
    • fpu: vfpv3(optional), neon(optional)

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

    cortex-a7

    • Hz: 800MHz - 1.2GHz
    • arch: armv7a
    • isa: arm, thumb, thumb-2
    • fpu: vfpv4, neon

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

    cortex-a12

    • Hz: ?
    • arch: armv7a
    • isa: arm, thumb, thumb-2
    • fpu: vfpv4(?), neon(?)

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

    cortex-a15

    • Hz: 1GHz - 2.5GHz
    • arch: armv7a
    • isa: arm, thumb, thumb-2
    • fpu: vfpv4, neon

    目前性能最高, 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指令集的对比:

    • Thumb代码所需的存储空间约为ARM代码的60%~70%。
    • Thumb代码使用的指令数比ARM代码多约30%~40%。
    • 若使用32位的存储器,ARM代码比Thumb代码快约40%。
    • 若使用16位的存储器,Thumb代码比ARM代码快约40%~50%。
    • 与ARM代码相比较,使用Thumb代码,存储器的功耗会降低约30%

    由此可见若对性能要求高应使用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手机的底层库不是那么简单的, 如果再想针对性优化一下, 至少可以有如下几种组合:

    • armv5te
    • armv5te-vfpv2
    • armv6
    • armv6-vfpv2
    • armv7a
    • armv7a-vfpv3
    • armv7a-vfpv4
    • armv7a-neon

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


    参考:

    • ARM处理器 -- http://www.arm.com/zh/products/processors/index.php
    • ARM浮点运算单元 -- http://www.arm.com/zh/products/processors/technologies/vector-floating-point.php
    • ARM架构 -- http://baike.baidu.com/view/4078025.htm
    • thumb指令集 -- http://blog.csdn.net/liuchao1986105/article/details/6544530
    • GCC使用VFP -- http://doc.ironwoodlabs.com/arm-arm-none-eabi/html/getting-started/sec-armfloat.html
    • vfp--arm浮点体系结构机介绍 -- http://www.cnblogs.com/Akagi201/archive/2012/03/31/2427063.html
    • ARM内核全解析,从ARM7到Cortex-A9 -- http://www.myir-tech.com/resource/448.asp
    • 从ARM9到A15 手机处理器架构进化历程 -- http://tech.163.com/mobile/12/0413/06/7UV0ESSO00112K8D_all.html
    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-74-454-1.html
    相关热词搜索: 移动开发 arm 编译优化