ARM平台处理器简介

 

http://news.eeworld.com.cn/mcu/article_2016061727084.html

arm架构

ArchitectureFamily
ARMv1ARM1
ARMv2ARM2,ARM3
ARMv3ARM6,ARM7
ARMv4StrongARM,ARM7TDMI,ARM9TDMI
ARMv5ARM7EJ,ARM9E,ARM10E,XScale
ARMv6ARM11, Cortex-M
ARMv7Cortex-A,Cortex-M,Cortex-R
ARMv8ARMv8架构ARMCortex-A50处理器系列产品

 

Cortex-A系列核心

内核Cortex-A5Cortex-A7Cortex-A8Cortex-A9Cortex-A15Cortex-A17
发布时间2009年12月2011年10月2006年7月2008年3月2011年4月2014年2月
时钟频率~1GHz~1.5GHz on 28nm~1GHz on 65nm~2GHz on 40nm~2.5GHz on 28nm 2GHz+ on 28nm
执行顺序顺序顺序顺序乱序乱序 乱序
多核支持1 ~ 41 ~ 41 (只单核)1 ~ 41 ~ 4 1 ~ 4
运算性能1.57 DMIPS/MHz1.9 DMIPS/MHz2 DMIPS/MHz2.5 DMIPS/MHz3.5 DMIPS/MHz 4.5 DMIPS/MHz
VFP/NEON支持VFPv4/NEONVFPv4/NEONVFPv3/NEONVFPv3/NEONVFPv4/NEON VFPv4/NEON
GPUMali-400Mali-400Mali-400Mali-T624Mali-T600Mali-T720
Mali-V500
Mali-DP500
16位半精度 是
FP/NEON 寄存器重命名 是
GP寄存器重命名 是
硬件除法器 是
40位物理地址LPAENoYesNoNoyes yes
硬件虚拟化NoYesNoNoYes yes
big.LITTLENoLITTLENoNoBig Big
融合的MAC乘累加 是
流水线级数88139 ~ 1215+ 11+
指令译码1Partial dual issue2 (dual-issue)2 (dual-issue)3 3
返回堆栈stack条目488848 48
浮点运算单元FPU可选可选Yes可选可选 可选
AMBA总线宽度64-bit I/FAMBA 3128-bit I/FAMBA 464 or 128-bit I/FAMBA 32× 64-bit I/FAMBA 3128-bit 128-bit


*A15的流水线前12级是in-order的,后面则是out-of-order的多种流水线,级数从3到12不等。A7类似,NEON部件的流水线是10级,整点则是8级。

现在来分析一下各个核心的参数。首先是Cortex-A后面的编号,大体上,这个编号代表该核心的性能,或者说在ARM产品线中的位置。比如A5面向低端应用,编号最小;A15是目前ARMv7性能中性能最高的核心;A7虽然发布晚于A8,而且规格接近,但由于限制了双发带宽,其性能预期是低于A8的。总的来看,A5的定位最低端,取代ARMv7之前的产品;A15最高端,A7性能低于A8,但更加节能,成本也更低;A8/A9则可能被取代,不过目前仍然是主流;A15则是目前为止ARM处理器中规格最高的了。

 

再看一下较新的核心中几个重要的特性。A7和A15支持硬件虚拟化,以A7的定位来说硬件虚拟化的支持似乎没有太多用武之地,不过对于A15来说则表明A15可能用于传说中的ARM服务器(不过算算时间似乎也没有太多A15发挥的余地,毕竟64位的ARMv8更适合用于服务器)。大物理地址扩展(LPAE)和x86上的PAE相似,允许32位的ARM处理器最大寻址2^40bit的内存(1TB)。这又是一个表明A15可用于服务器的迹象,毕竟4G的寻址空间对现在的服务器来说完全不够用啊。

 

浮点和高级SIMD部件

ARMv7开始使用VFPv3版本的浮点部件,而ARMv7中更新的核心则使用了VFPv4( 见前面表格)。VFPv2则用于ARMv7之前的核心,现在还有一部分低端手机使用这种处理器;而使用VFPv1浮点部件的核心已经基本淘汰掉了。ARM的高级SIMD部件称为NEON,从ARMv7开始出现

ARM浮点部件的一个问题是对很多核心来说是可选的,一些处理器并没有浮点部件。不仅如此,尽管ARMv7的处理器基本都实现了浮点部件,但浮点部件也有多个可选实现,再加上NEON部件也是可选的,最后导致市面上的ARM处理器对浮点/SIMD的支持并不一致。下表列出了主要的VFPv3实现的版本(VPFv4的资料需要补充):

版本寄存器其他特性
VFPv3(-D32)32个64位寄存器,32个32位寄存器 
VFPv3-FP16同上半精度扩展(FP16的含义)
VFPv4(-D32)同上VFPv4总是实现半精度扩展和Fused Multiply-Add 扩展
VFPv3-D1616个64位寄存器,32个32位寄存器 
VFPv3-D16-FP16同上半精度扩展
VFPv4-D16同上同VFPv4

上表中所说的32位寄存器和64位寄存器并不是独立的,前16个64位寄存器每个可以视为2个32位寄存器,同时,两个64位寄存器可以视为一个128位寄存器。下图来自ARM官方文档,展示了32位寄存器和64位寄存器的关系:

ARM平台处理器简介

对于VFPv3-D16、VFPv3-D16-FP16和VFPv4-D16来说,上图中的D16~D31是不存在的。除了上表中的版本,VFPv3还有单精度版本,只实现了单精度浮点数的运算指令,gcc中称这种版本的VFPv为“vfpv3xd”,相应的,还有vfpv3xd-fp16。不过这种实现的ARM处理比较少见。

NEON部件和浮点部件关系密切,在两者同时存在时,使用的是同一套寄存器。不过,NEON的寄存器数目是固定的,和VFPv3/VFPv-FP16/VFPv4相同。这意味着,NEON不能和VFPv3-D16/VFPv3-D16-FP16这种寄存器阉割版共存。当没有浮点部件时,NEON部件只能进行整点运算。下表是NEON和VFP部件可能的组合:

NEON部件VFP部件说明
仅整型未实现 
整型和单精度浮点单精度浮点 
整型和单精度浮点单精度和双精度浮点 
未实现单精度浮点 
未实现单精度和双精度浮点 

从上面这个表可以看出,即使VFP部件实现了双精度运算的功能,NEON部件也只能进行单精度运算。不止如此,gcc的手册之处,NEON的浮点运算不完全符合IEEE 754标准,在某些情况下会损失精度,因此即使使用了自动向量化的选项,浮点运算的向量化默认也是关闭的。

依据半精度和Fused Multiply-Ad扩展的实现情况,NEON部件可以分为3种版本:

高级SIMDv1:两者均未实现

高级SIMDv1带半精度扩展:实现了半精度扩展

高级SIMDv2:同时实现了半精度和Fused Multiply-Ad扩展

而NEON半精度和Fused Multiply-Ad扩展的实现情况与VFP部件是相关的。

总结一下VFP和NEON的特点:

1.VFPv3/VFPv4分为根据寄存器情况分为D16和D32两个版本,D16的双精度(64位)寄存器只有16个。

2.D16版本的VFP不能和NEON部件共存。

3.NEON部件单独存在时只能进行整点运算

4.实现了半精度扩展的VFPv3称为FP16版本,如果连Fused Multiply-Ad扩展也实现了,就是VFPv4了。

 

除了上面所说的,ARMv7处理器还有很多特性。由于我了解的不多,就不多说了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值