ARM平台处理器简介-ARMv7
初次接触到ARM的时候,我直接被众多的处理器版本、系列搞晕了,查了好多资料才理清。现在在这里总结一下,希望能帮到别人。
1.总体情况
先从ARM的wiki上抄个表过来:
Architecture | Family |
ARMv1 | ARM1 |
ARMv2 | ARM2,ARM3 |
ARMv3 | ARM6,ARM7 |
ARMv4 | StrongARM,ARM7TDMI,ARM9TDMI |
ARMv5 | ARM7EJ,ARM9E,ARM10E,XScale |
ARMv6 | ARM11, Cortex-M |
ARMv7 | Cortex-A,Cortex-M,Cortex-R |
ARMv8 | - |
左侧的一列可以视作是ARM处理器的各个“代”,而右侧则是同一代的各个“家族”(或者说“系列”)。现在基本已是ARMv7的时代,ARMv6及更早的Architecture只在一些低端的设备上能见到了。而ARMv8则是ARM平台的未来时,被设计为64位的架构,显然不是主要面向移动设备的。不过到现在为止ARMv8也只是有一些资料,离真正面世还有一段时间。
现在把重点放在ARMv7,更确切的,是ARMv7中的Cortex-A系列核心上来。Cortex-M系列处理面向嵌入式应用,而Cortex-R系列则面向实时应用,Cortex-A,则面向广大的手机用户。
2.Cortex-A系列的众多核心们
核心 | Cortex-A5 | Cortex-A7 | Cortex-A8 | Cortex-A9 | Cortex-A15 |
发布年份 | 2009年 | 2011年 |
2006年 |
2007年 | 2011年 |
核心 | 1-4核 | 1-4核 |
单核 |
1-4核 | 最多4核每cluster,每物理核最多2个cluster |
流水线 |
8级(in-order) |
8-10级 |
13级(整点 in-order) |
8级(out-of-order) |
12级in-order加3-12级out-of-order |
硬件虚拟化 | 否 | 是 | 否 | 否 |
是 |
L1 Cache | 4-64K/4-64K | 8-64K/8-64K | 16-32K/16-32K | 16-64K/16-64K | 32K/32K |
大物理地址扩展 | 否 | 是 | 否 | 否 | 是 |
浮点部件 | VFPv4 | VFPv4 | VFPv3 | VFPv3 | VFPv4 |
*发布年份是ARM公布核心的时间(可能不太准确)。
*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的寻址空间对现在的服务器来说完全不够用啊。
3.浮点和高级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-D16 | 16个64位寄存器,32个32位寄存器 | |
VFPv3-D16-FP16 | 同上 | 半精度扩展 |
VFPv4-D16 | 同上 | 同VFPv4 |
上表中所说的32位寄存器和64位寄存器并不是独立的,前16个64位寄存器每个可以视为2个32位寄存器,同时,两个64位寄存器可以视为一个128位寄存器。下图来自ARM官方文档,展示了32位寄存器和64位寄存器的关系:
对于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处理器还有很多特性。由于我了解的不多,就不多说了
ARM平台处理器简介-ARMv7相关推荐
- 1_ARM Cortex-M处理器简介
文章目录 ARM Cortex-M处理器简介 什么是Cortex-M处理器 Cortex-M3和M4处理器 Cortex-M处理器家族 处理器和微控制器区别 Cortex-M处理器的优势 低功耗 性能 ...
- 基于 arm 设计开发工具包的 Arm Cortex-M3 处理器的示例系统级设计(第一章:文件目录AHB组件开发平台)
设计工具包中文件目录 目录名 目录内容 logical Verilog组件包括AHB-Lite和APB基础组件.外设.APB子系统以及AHB-Lite和APB协议. systems 示例系统的设计文件 ...
- 【国产化系列】龙芯平台指令集简介及现有处理器的支持特性
DATE: 2021.10.27 文章目录 1.转载参考 2.龙芯平台指令集简介 3.编译参数 4.查找热点函数进行代码优化 1.转载参考 龙芯平台指令集简介及现有处理器的支持特性 2.龙芯平台指令集 ...
- ARM SIMD NEON 简介 (翻译自 Introducing NEON Development Article)
目录 NEON简介 SIMD是什么? ARM SIMD 指令集 NEON是什么? NEON架构概览 支持的数据类型 NEON寄存器 NEON指令 NEON开发 汇编器 Intrinsics 自动向量化 ...
- 移动平台处理器(不断更新中)
就目前市场上主流的手机CPU的综合排名为:德州仪器OMAP4460 (华为Ascend D1)>苹果A5(iPhone 4s)>猎户座4210(I9100)>英伟达 Tegra 2& ...
- 嵌入式ARM多核处理器并行化方法
from:http://ee.ofweek.com/2014-11/ART-11001-2808-28902672.html 目前,嵌入式多核处理器已经在嵌入式设备领域得到广泛运用,但嵌人式系统软件开 ...
- java7 arm_zynq7000系列移植—JDK1.7 移植到嵌入式ARM平台
今天无意间搜索到 armv7的硬件相关信息--ARM 浮点运算 硬浮点Hard-float 编译器将代码直接编译成发射给硬件浮点协处理器(浮点运算单元FPU)去执行.FPU通常有一套额外的寄存器来完成 ...
- 【华为云技术分享】为什么越来越多企业正在往ARM平台迁移?
架构变迁 说到CPU架构,我们可能必然会提到CISC(复杂指令集,比如桌面端采用的X86系列)和RISC(精简指令集,比如移动端广泛采用的ARM系列).理论上,RISC 相比于 CISC(Intel ...
- MT8516处理器简介—MT8516芯片技术资料解析
MT8516处理器简介-MT8516芯片技术资料解析 今天分享一下联发科8516型号芯片处理器的基本数据,这里是大概的,只能从部分资料中去部分内容和图片,如果你想要做开发.移植啥的,建议自行下载资料进 ...
最新文章
- linux salt命令 -e,linux 下 Salt 命令的疑难杂症
- 【转】Android 快捷方式的创建
- 简单js特效代码大全_Django 功法大全
- python 数值的整数次方
- 哪些云计算企业能活下来
- java中filereader读取文件_java – 如何使用FileReader逐行读取
- 直接用自己服务器做图床可以吗_我花 9 块钱搭了一个“私人图床”
- 报错,但不影响运行ERROR: JDWP Unable to get JNI 1.2 environment, jvm-GetEnv() return code = -2...
- OLW (Open Live Writer)安装代码高亮插件方法(简明)
- ubuntu离线安装依赖
- python变量名必须以什么开头_python变量为什么不能以数字开头
- 【英语学习】【Level 07】U04 Rest and Relaxation L2 A rest stop with everything
- rest framework 权限
- 计算机仿真的特点,计算机仿真的基本特点与基本流程.doc
- 《数据挖掘——概念与技术》笔记
- 【科技论文的写作程序及方法】
- pandas数据合并与重塑(pd.concat篇)
- 电脑桌面文件不见了怎么恢复?
- 【d3dx9_42.dll下载】d3dx9_42.dll如何修复
- SYN,ICMP, UDP Flood攻击原理与防护
热门文章
- 高速公路二维码定位报警系统
- ros系统操纵机器人_机器人操纵的关键点表示
- 使用八爪鱼采集器抓取上市公司财报,一次1万条
- 51单片机12864坐标轴显示,并实时刷新数proteus实现
- Uncaught Error: @electron/remote is disabled for this WebContents
- Windows Office 2019 很抱歉,此功能看似已中断,并需要修复
- Episode II 计算机病毒概论
- C语言中sort函数的用处
- rust如何在木板上上传图片_腐蚀rust游戏玩法方式详解
- uniapp和vue课程表实现、会议预约实现[表格table相同内容行的合并]