比较ARMv7指令集与ARMv6指令集具都有哪些变化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较ARMv7指令集与ARMv6指令集具都有哪些变化相关的知识,希望对你有一定的参考价值。

ARM的内核:
正如x86架构可以通过内核来判断CPU性能和新旧程度一样,ARM CPU也有不同的内核,只是内核更新没有x86如此频繁(x86基本两年更新一次)。从1983年开始,到目前为止,ARM内核共有ARM1、ARM2、ARM6、ARM7、ARM9、ARM10、ARM11和Cortex以及对应的修改版或增强版组成,越靠后的内核,初始频率越高、架构越先进,功能也越强。目前移动智能终端中常见的为ARM11和Cortex内核,如诺基亚N8使用的即为主频680MHz的ARM11核心,Cortex主要用于高端和多核处理器上,如NVIDIA的Tegra 2就是由两颗1GHz Cortex-A9核心组成。
ARM11架构发布于2002年,基于ARMv6指令集,包括ARM1136J、ARM1156T2和ARM1176JZ三个内核型号,其中后缀带J的表示支持Java代码硬件加速,T则表示支持Thumb-2指令。ARM11采用8级流水线,能够支持多核架构。在使用130nm制程下即可获得低至0.2mW/MHz的功耗比和500MHz的主频,而当前工艺条件下,已有1GHz主频产品出现。ARM11处理器系列面向多种手持电子消费品市场,推出了许多新的技术,包括针对媒体处理的SIMD,与ARM9相比,ARM11对于MPEG4的编解码算法速度提高了一倍;用以提高安全性能的TrustZone技术;智能能源管理(IEM)等,同时,ARM11还改变了缓存的结构,使用物理地址对缓存进行索引,并加入了动态分支预测功能。
Cortex内核发布于2004年,最早的型号是Cortex-M3;Cortex-A8内核于2005年10月4日发布,随后ARM在2006年5月15日发布了Cortex-R4内核。这三款内核分别面向不同的领域,移动智能终端上使用的绝大多数为Cortex-A8内核。Cortex-A8内核的DMIPS指标达到了2.0DMIPS/MHz,相比ARM11取得了巨大的进步(ARM11为1.17DMIPS/MHz)。Cortex-A8处理器在大幅提高性能的同时,依然保持了低功耗优势,譬如说,一颗含有32KB一级缓存,256KB二级缓存的Cortex-A8处理器,在使用600MHz的主频时,总功耗仅为300mW。Cortex-A8还引入了NEON部件,NEON的功能与英特尔的SSE指令集类似,用于支持SIMD类指令。Cortex-A8还可以在每个时钟周期内并行发射两条指令,是首个ARM超标量体系内核。为了进一步提高时钟频率,Cortex A8内核使用了13级的整型指令流水线和10级NEON指令流水线,并改善了了指令分支预测的命中率,从ARM11的88%提高到Cortex A8的95%。此外,Cortex-A8在缓存的设计中,首次引入了Way-Prediction(关联路径预测),可根据预测关闭暂时不使用的缓存,降低处理器功耗。英特尔从Pentium M处理器时代起使用了这种缓存访问方式,并一直应用到x86处理器的后续产品中。Cortex-A8还可以使用64位或者128位总线连接外部设备。Cortex-A8不支持多核架构,多核超标量内核为Cortex-A9,而最新的多核内核则为Cortex-A15。
2011年初,ARM Cortex-A15内核发布,主要是针对多核进行了优化。Cortex-A15处理器可运行在2.5GHz,能够在不断压缩的能耗、散热和成本预算范围内提供高度集成的可扩展性解决方案。Cortex-A15计划以32nm、28nm工艺生产,目前尚无成品产出。
与x86处理器仅对微架构的关注不同的是,影响ARM处理器性能的还有指令集版本。为提高处理器性能,ARM先后发布了7个版本的指令集,分别为ARM V1至ARM V7,不过指令集版本并不与内核对应,如ARM9内核使用的为ARM V5版指令集,而ARM11使用为ARM V6,最新的Cortex内核使用的才是ARM V7版指令集,表1列出了不同内核对应的指令集版本。新版指令集是对旧版的修定和增强,不一定兼容之前的版本,但在多媒体和复杂应用方面性能会大增。事实上,在ARM处理器当中,指令集版本的高低更能辨别出处理器性能的优劣。
参考技术A 最基本的V6不支持Flash v7支持,当前的arm框架都是v7指令集的A8 A9 A15以及高通自家改良的环蛇,蝎子框架都是用ARM V7指令集的

Apple移动设备处理器指令集 armv6armv7armv7s及arm64

http://blog.sina.com.cn/s/blog_5c91824f0102vdkj.html

 

Arm处理器,因为其低功耗和小尺寸而闻名,几乎所有的手机处理器都基于arm,其在嵌入式系统中的应用非常广泛,它的性能在同等功耗产品中也很出色。

Armv6、armv7、armv7s、arm64都是arm处理器的指令集,所有指令集原则上都是向下兼容的,如iPhone4S的CPU默认指令集为armv7指令集,但它同时也兼容armv6指令集,只是使用armv6指令集时无法充分发挥其性能,即无法使用armv7指令集中的新特性,同理,iPhone5的处理器标配armv7s指令集,同时也支持armv7指令集,只是无法进行相关的性能优化,从而导致程序的执行效率没那么高。

需要注意的是iOS模拟器没有运行arm指令集,编译运行的是x86指令集,所以,只有在iOS设备上,才会执行设备对应的arm指令集。

 目前为止Apple移动设备默认指令集(2014.8.22)

-------------------------------------------------------------------------------------

armv6 设备: iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch

armv7 设备: iPhone3GS, iPhone4, iPhone4S

                      iPad, iPad2, iPad3(The New iPad), iPad mini

                      iPod Touch 3G, iPod Touch4

armv7s设备: iPhone5, iPhone5C, iPad4(iPad with Retina Display)

arm64 设备: iPhone5S, iPad Air, iPad mini2(iPad mini with Retina Display)

-------------------------------------------------------------------------------------

XCode中与指令集相关的选项(Build Settings 面板下 Architectures):

 Architectures:      

指明选定Target要求被编译生成的二进制包所支持的指令集支持指令集是通过编译生成对应的二进制数据包实现的,如果支持的指令集数目有多个,就会编译出包含多个指令集代码的数据包,从而会造成最终编译生成的包很大。

 Valid Architectures:

指明可能支持的指令集并非Architectures列表中指明的指令集都会被支持,Valid Architectures限制可能被支持的指令集的范围,即Valid Architectures和Architectures列表的交集,才是XCode最终生成二进制包所支持的指令集。

 比如,将Architectures支持arm指令集设置为:armv7,armv7s,对应的Valid Architectures的支持的指令集设置为:armv7s,arm64,那么此时,XCode生成二进制包所支持的指令集只有armv7s 。 

 Build Active Architecture Only:

指明是否只编译当前连接设备所支持的指令集

该选项起作用的条件有两个,必须同时满足才会起作用:

1. 其值设置为YES

2. XCode成功连接调试设备

假定我们将Build Active Architecture Only值设置为YES,同时XCode连接上手机iPhone5S(匹配指令集arm64)

 1. 第一种情况

Architectures:  armv7, armv7s, arm64

ValidArchitectures:  armv6, armv7s, arm64

生成二进制包支持的指令集: arm64 

2. 第二种情况

Architectures: armv6, armv7, armv7s

Valid Architectures:  armv6, armv7s, arm64

生成二进制包支持的指令集: armv7s 

3. 第三种情况

Architectures:  armv6, armv7

Valid Architectures: armv6, armv7s, arm64

生成二进制包支持的指令集: armv7

 4. 第四种情况

Architectures: armv6

Valid Architectures: armv6, armv7s, arm64

生成二进制包支持的指令集: 虽然编译成功了,但是并没有任何目标生成, 因为从XCode4.5开始,就不再支持armv6指令集,所以列表中写了也是白写。

 5. 第五种情况

Architectures: armv7, armv7s, arm64

Valid Architectures: armv7,armv7s

生成二进制包支持的指令集: 编译出错信息


  1. No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7 armv7s) 

可以看出:当Build Active Architecture Only起作用时:

连接的手机指令集匹配是由高到低(arm64 > armv7s > armv7)依次匹配的。

如连接手机为iPhone5S,其默认指令集为arm64,若Architectures列表为armv7, armv7s,则会选取armv7s指令集为目标指令集,如果此时Valid Architectures列表中包含该指令集,则成功生成的二进制包只支持armv7s指令集,若alid Architectures列表不包含此指令集,则编译将会出错:


  1. No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7s, VALID_ARCHS=armv7 arm64) 

同样的,若Architectures列表为armv7,则会选取armv7作为目标指令集,若Valid Architectures列表中包含了armv7指令集,则能够成功生成二进制包,其支持的指令集只有armv7,若Valid Architectures列表中不包含armv7,则编译失败。

建议:通常Debug模式设置值为Yes,Release模式设置为No

以上是关于比较ARMv7指令集与ARMv6指令集具都有哪些变化的主要内容,如果未能解决你的问题,请参考以下文章

arm64、armv7、armv7s是指啥?

Xcode 中armv6 armv7 armv7s arm64 i386 x86_64 归纳 (Architectures, Valid Architectures, Build Active Arc

无法为 armv7s 编译这里有效的架构是 armv6、armv7 和 i386

VS 指令都有哪些啊

ARM知识

ARM处理器架构的Thumb指令集中关于IT指令的使用