第9页:ARM 指令集架构的由来
在介绍一些稍微复杂的技术概念之后,我们不妨想看看 ARM 的由来。
ARM ISA 属于 RISC(精简指令集计算机,最关键特征是指令编码格式统一),ARM 本身就是 Advanced RISC Machines 的缩写,不过在早期它的全称是 Acorn RISC Machine(1983 年 10 月开始设计,1985 年实现第一枚硅片),因为公司当时的名字叫 Acorn。
Acorn 是一家 1978 年在英国剑桥成立的公司,这家公司生产过若干款在英国颇为流行的电脑,例如在当地教学市场占主导的 BBC Micro。
BBC Micro 取得了很大的成功,但是处理器是 8 位 的 6502,Acorn 希望切换到 16 位系统上来,但是英特尔拒绝了 Acorn 的 80286 样片申请。不过经过 Acorn 的多番实地考察和研究后,觉得在(当时)设计一个处理器的研发成本并不是很高,于是决定开始做 Acorn RISC Machine 这个项目。
基于 Acorn RISC Machine 的 ARM2aS 处理器获得了苹果公司名为 Mobius 的类 Apple 2 风格原型验证机接洽,这个项目后来因为苹果担心和大卖的麦金塔电脑产生冲突而腰斩,但是这次接触对 ARM 处理器的发展产生了一定的推动作用,因为 Mobios 团队对 ARM 寄存器做了一些小修改使得原型机的基准性能有不同幅度的显著改善。
后来苹果开始着手开发名为 Newton 的个人掌上电脑,他们发现似乎只有 Acorn RISC Machine 能满足要求耗电要求,但是当时 Acorn RISC Machine 处理器的内存管理单元并非 Acorn 自家,而是由 MEMC 公司提供芯片实现的,Acorn 没钱开发这个功能。于是双方就有了合作的想法,到了 1996 年 Acorn 和苹果合资组建了 ARM 公司,不过 Acorn 公司依然独立存在着直到 2000 年才基本烟消云散。
和一般的 RISC 不同的是,ARM ISA 除了指令长度固定为 32-bit(ARMv8 的 AArch 提供了 64-bit)的“经典 ARM” ISA 外,还有长度为 32-bit 或 16-bit 名为 Thumb(拇指)的 ISA 扩展。
Thumb 的目的是在低端或者说入门市场应用中改善 ARM 的指令密度(官方说法是减少大约 25%~35% 代码空间,按照 Linaro Dave Martin 的 Linux Kernel 编译结果,代码空间少了大概 20%),提高指令密度可以让 cache 塞进更多的指令减少命中缺失,更高密度的指令编码也有利于多线程因为可用寄存器资源更多了等。大部分的 Thumb 指令编码都能(经过位于指令解码器前的一个转译器实现简单转换)对应到经典 ARM 指令编码格式上。
Thumb 是 ARM 在嵌入式市场得以攻城拔寨的关键利器,在很长一段时间里都鲜有对手,Cortex 家族中用于单片机为主应用的 Cortex-M 甚至只支持 Thumb-2 指令(ARMv7 M),同样以授权方式运营的 MIPS 直到 2010 年才推出类似的 microMIPS 指令。
VFP(Vector Floating Point,向量浮点)是 ARM 架构的浮点单元协处理器扩展,提供了完全遵循 IEEE 754-1985 的低成本单精度和双精度浮点支持。虽然 VFP 打着向量的名头,不过这些“向量”指令的各个向量是串列方式执行(或者需要单精度搭配双精度才能实现并行执行)的,并不能提供真正的 SIMD 向量并行,因此这个向量模式被拿掉了。
Advanced SIMD(NEON)扩展在微架构实现中被称作 MPE(媒体处理引擎),是一个 64-bit 和 128-bit SIMD 指令集扩展,支持 8/16/32/64 位整数和 32-bit 单精度浮点数,共享使用 VFP 的寄存器。从 ARMv8 开始,NEON 在 AArch 64-bit 模式下提供完全遵循 IEEE 754 和双精度支持并且透过 VFPv4 具备 32 个 128-bit 寄存器。
第10页:ARM Cortex-A9 内核微架构特点
Cortex-A9 的代号为 Falcon,是在 ARM 公司在 2007 年 10 月 3 日发布的 IP core,距今大约有五个年头。
Cortex-Ax 这个名字中后缀 A 表示属于 Application(应用处理器),Cortex 另有 M 系列(即单片机或者微控制器)、R 系列(实时应用),这里显然是 A 系列的规格最高,具备 MMU(内存管理单元)。
基于 Cortex-A9 的芯片实现有前面提到的 NVIDIA Tegra 2/Tegra3、Apple A5/A5X 以及 TI OMAP4430/4440、ST-爱立信 NovaThor U8500/U9500/LT9540、STM SPEAr1310、三星 Orion/Exynos 4210、华为 K3V2、ZiiLabs ZMS-20/ZMS-40、Sony CXD5315GG(PSV)、联发科 MT6577、华为海思 K3V2 等等,是目前 Google Android 操作系统高端手机、智能平板阵营中最主流的 CPU 内核。
Cortex-A8 微架构 | Cortex-A9 微架构 |
Cortex-A9 的前身是 Cortex-A8,它们同属于 ARMv7 ISA 的实现,和 Cortex-A8 相比,Cortex-A9 除了流水线更短、增加了专门的多核方案等大家熟知的变化外,还具备多项改进。
1、Cortex-A9 拥有众多 RISC CPU 的先进特性,例如推测数据存取、动态分支预测、多指令发射、硬件 Cache 一致性、乱序执行、寄存器重命名,号称史上第一枚乱序执行移动处理器。
除了双指令发射和分支预测外,Cortex-A8 都并不具备,因此在 Cortex-A9 上汇编码优化、NEON SIMD 的重要性相对来说要低很多(经过调优的汇编码在 A8 上可以做到 10-30 倍性能,而 A9 一般只会有 2-5 倍,如果是 A9 使用 NEON C Intrinsics 的话性能基本上和汇编一样)。
2、Cortex-A9 的每条 L1 Cache Line 是 32 字节,Corte-A8 是 64 字节。Cache Line 又称作 data block(数据块)或者 Cache Block,Cache 每次更新都以固定大小的 Cache Line 为单位。
Cache Line 的大小主要影响命中率、内存存取效率、发生 Cache 命中缺失时候的性能惩罚时间。
3、Cortex-A9 的 L2 Cache 位于“核外”( ARM 对应的方案是 PL310 或者更新一点的 L2C-310),而 Cortex-A8 则是速度更快的核内 L2 Cache。
从对 Cortex-A8 1GHz(三星 Samsung Hummingbird,即 Exynos 3110)和 CortexA-A9 1.2GHz(三星 Exynos 4210)实测来看,A8/A9 的 L1 cache 延迟分别为 3 周期和 4 周期,L2 Cache 延迟(含 L1 Cache 延迟但是不含 L1/L2 TLB 命中缺失惩罚的情况下)分别为 13 周期和 23 周期。
4、Cortex-A9MPCore 的各内核 L1 Cache 采用了数据、代码分离式设计,L1 数据 Cache 具备硬件 Cache 一致性。各个内核共享外部 L2 Cache。
5、Cortex-A9 具备完整的 VFPv3 FPU,而 Cortex-A8 则只有缩水版的 VFPlite,主要区别是 Cortex-A9 的大多数浮点操作都只需要 1 个周期,而 Cortex-A8 需要 10 个周期,因此 Cortex-A8 的浮点性能相当烂。
6、Cortex-A9 支持半精度(fp16),而 Cortex-A8 只支持 32-bit 单精度(FP32)和双精度(FP64),不过半精度在 CPU 级别的应用并不是很多见。
7、Cortex-A9 不能同时发射两条 NEON 指令,而 Cortex-A8 却能够实现 1 条 NEON L/S 指令搭配一条非 L/S NEON 指令。
8、Cortex-A8 的 NEON 单元位于 ARM 单元下游,所以 NEON 单元访问寄存器和内存更快,而且数据可以很快从 ARM 寄存器搬到 NEON/VFP 单元寄存器,但是将 NEON/VFP 寄存器数据搬到 ARM 寄存器的话就非常慢,会导致 Cortex-A8 的流水线停摆 20 个周期。
9、Cortex-A8 的 NEON 和 ARM 各有一个分离的 L/S 单元,如果一起对同一块 Cache Line 进行 Load 或者 Store 操作的话,会导致额外的 20 个周期延迟。
10、Cortex-A9 对多线程化同步采用 LDREX/STREX,不会杜塞所有的内核,而 Cortex-A8 对互斥使用简单的断禁制。
11、所有的 Cortex-A8 都集成了 NEON SIMD 单元,但是 Cortex-A9 则未必,例如 NVIDIA Tegra 2 就没有集成 NEON,不过 Tegra 3 则具备 NEON。
如果使用 7-zip(不包含任何浮点)实测来看,Cortex-A8 1GHz 的压缩(受内存时延、数据 Cache 大小和速度以及 TLB 影响较大)/解压缩(受 CPU 整数性能影响较大)性能相当于 Core i7 920 2.67GHz 的 3.5% 和 5.5%;而 Cortex-A9 双核则是 Core i7 920 的 8.8% 和 12.7%。
第11页:ARM Cortex-A15 内核微架构特点
代号 Eagle 的 Cortex-A15 是在 2012 年 9 月发布的 ARMv7 架构实现,是 ARM 首次引入三路指令解码的微架构 IP core,目前三星的 Exynos 5 5250(双核,32nm HKMG,1.7GHz)是市场上能看到的第一波 Cortex-A15 产品,Chromebook、Nexus 10(均在 2012 年 10 月发布)都采用了这枚芯片。
和 Cortex-A9 相比,Cortex-A15 有非常明显的变化:
1、整数流水线最短工位数达到 15 级,管芯面积占用比 Cortex-A9 高一倍。
2、采用三路超标量微架构,可以每个周期取指四条指令,解码器每个周期可以为发送单元提供 3 条指令,而指令发射单元可以乱序提供最高 8 个微操作供执行单元运行。
相比之下,A9 的解码器只能每周期跑两条指令,派发单元每周期派发 4 个微操作给执行单元。
3、Cortex-A15 的动态分支预测技术和 Cortex-A8/A9 差不多,但是 A15 引入了一个 64 条目的 microBTB,而此前的 A8/A9 并不具备这样的分层结构。动态分支预测能力是影响现代风格处理器的关键因素之一,像 Pentium 4 的 BTB 是 4K 条目,SandyBridge 据说达到 8K~16K。
虽然 A15 的两级 BTB 条目总数较 A8/A9 少,但是 A15 的 Return Stack 条目数从 8 条增加到了 18 条,取指带宽从之前的 64-bit 提升到 128-bit,而且完全支持边界非对齐地址的拾取。
4、Cortex-A15 支持 VFPv4,具备硬件 FMA 指令执行,可以在同频下提供两倍的峰值浮点性能。此外,A15 还具备硬件除法指令,在 A9 上这需要接近 50 个周期来执行。
5、A15 的周边总线为 AMBA4,128-bit master 界面,A9 的 AMBA3 的 master 界面是 64-bit。
6、虽然 ARMv7 是 32-bit ISA,但是现在 Cortex-A15 支持 40-bit 物理定址(类似于当年的 Pentium Pro 和 Atlhon),而且 L1/L2 Cache 具备 ECC,因此理论上适用于服务器级应用。
7、A15 和 A9 都有一个类似的 small loop 缓存,用于存放小循环,让执行单元无需访问指令 cache 就能抓到指令。在 A9 上它可以存放大小为 64 字节的指令。
而在 A15 上则是 32 条目,可以存放两条前转分支和一条后转分支,而且 A15 的 small loop 缓存存放的是已经解码的微操作,这意味着连解码步骤也能节省掉。
这类似于 Intel 的做法:先在 Conroe 上引入 loop buffer,然后在 Nehalem 引入 uop loop buffer(28 条目),到了 SandyBridge 则彻底改成了 uop cache(1500 个 uop),逐步改进。
Cortex A15 的整数性能为 3.5~4.01 DMIPS/MHz,相比起 A9 的 2.5 DMIPS/MHz 和 A8 的 2.0 DMIPS/MHz 有明显的改进,不过因为三路超标量而带来的各种资源增加,A15 需要更先进的制程(32 纳米或更先进)才能在手机、平板上变得比较适用。
第13页:苹果 Swift 内核微架构特点
正如我们前面提过的,苹果公司在上世纪九零年代就已经和 ARM 合作并且提供了一些微架构设计上的修改方案,因此苹果对 ARM 一点都不陌生甚至有非常丰富的经验。
从 iPad、iPhone 4/iTouch 4、Apple TV 2 开始,苹果开始真正介入 ARM 芯片设计,推出了名为 A4 的自行设计 ARM 处理器。A4 采用了 ARM 授权的 Cortex-A8 IP Core,但是苹果找来了 Intrinsity 公司(已经被苹果收购)和三星公司合作进行了一些调优,可以让 A4 的频率跑得比基于上一代制程的 Cortex-A8 更快。曾经有说法认为 A4 的 L2 cache 大小是 640KiB,但是后来确认修正为 512KiB(这是 ARM Cortex-A8 内核的可选配置方式之一)。
A5 系列依然是采用 ARM IP core,从 Cortex-A8 升级为 Cortex-A9 双核,不过整个 A5 系列出现了三个版本,即 APL0498、APL2498、APL5498(A5X),三个版本的芯片面积各不一样,其中 A5X 的 GPU 是四核 PowerVR 5 并且拥有 4 通道内存总线,定制化设计在这里体现得非常明显。
真正的定制化设计是从 A6 开始,苹果公司给 A6 搭配的 CPU 内核是完全有自己团队开发的 Swift,不仅这样,苹果还提出了一个新的名字:ARMv7s。传统上,ARMv7 是属于 ISA 版本名称,不过 ARMv7s 至今都并未出现在 ARM 官网的公开资料里,因此 ARMv7s 可能并非 ARM 的产物,而是苹果自己在 ARMv7 基础上做的一个架构优化定义,让编译器可以为 Swift 微架构匹配对应的调优,本质上 ISA 还是 ARMv7A。
CPU | iPhone | iPad | iPod Touch | Apple TV | ||
ISA | 内核 | 芯片名称 | ||||
"ARMv7s" | Apple Swift | Apple A6X | 4 | |||
Apple A6 | 5 | |||||
ARMv7A | ARM Cortex-A9 | Apple A5X | 3 | |||
Apple A5 | mini | |||||
4S | 2 | 5 | 3 | |||
ARM Cortex-A8 | Apple A4 | 4 | 1 | 4 | 2 | |
三星 S5PC100 | 3GS | 3(32/64GB) | ||||
ARMv6 | ARM 1176JZ(F)-S | 3(8GB) | ||||
3 | 2 | |||||
1 | 1 |
那么 Swift 和以往的 Cortex-A9 相比有哪些改进呢?苹果公司并未详细说明,传统上这家公司就是这样,千方百计捂着,不过 Anandtech 利用一些自己编写的微型基准测试程序进行了一些探测,以程序员的角度大致估量出了 Swift 的微架构是长得如何了。
在前端部分,Swift 具备三个指令解码器,可以每个周期完成三条指令的解码,而在指令分发器上,具备五个发射端口,浮点单元、整数单元各占两个,还有一个专供 Load/Store 单元使用,具备乱序执行能力、整数流水线深度为 12 级,cache 子系统的时延比 Cortex-A9 低了差不多一半。
“ARMv7s”的设立估计就是让编译器获知编译执行对象是 Swift,这样就能对各种指令顺序进行一些预调度,确保尽可能低的 CPI。
简而言之,A6 系列就是采用了比 A5 系列更先进制程和微架构的产物,其中的 CPU 内核则是苹果首次真正完全执行开发的设计,未来是否会在 GPU 上也有类似的动静将会是值得关注的。
第15页:ARM Cortex-A5/Cortex-A7 微架构的特点
中低价位的智能手机势必成为 2013 年亮点,海量的千元以下甚至 600 元以下的智能手机、平板电脑将会在这一年推出,不过因为成本限制,它们在各方面的规格必然比更高价位的产品有所削弱,其中之一当然是必定搭载的应用处理器。
中低价位市场是 ARM 所最擅长的领域,目前它的产品线中除了像当年 Apple iPhone 1 所使用的 ARM11 内核外,还有接替 ARM11 的 Cortex-A5 以及接替 Cortex-A8 的 Cortex-A7。
ARM 微架构对比 | ||||||
ARM11 | Cortex A5 | Cortex A7 | Cortex A8 | Cortex A9 | Cortex A15 | |
解码能力 | 单路 | 单路 | 双路 | 双路 | 双路 | 三路 |
整数流水线 | 8 级 | 8 级 | 8 级 | 13 级 | 8 级 | 15 级 |
乱序执行 | 否 | 否 | 否 | 否 | 是 | 是 |
浮点单元 | VFP11 (流水线式) | VFPv4 (流水线式) | 可选 VFPv4 (流水线式) | VFPv3 (非流水线式) | 可选 VFPv3 (流水线式) | VFPv4 (流水线式) |
SIMD(NEON) | 不具备 | 可选 MPE (128-bit) | 可选 MPE (64-bit) | 具备 (64-bit) | 可选 MPE (64-bit) | 具备 (128-bit) |
半导体制程 | 90nm | 40nm | 40nm | 65nm/45nm | 40nm | 32nm |
典型频率 | 412MHz | 0.3~0.8GHz | 0.8~1.2GHz | 0.6~1GHz | 1.2GHz | 2GHz |
1、Cortex-A5 是目前 Cortex-A 系列中最低阶的内核,和 ARM11 的 1.2 DMIPS/MHz 性能相比,Cortex-A5 达到了 1.57DMIPS/MHz;
2、Cortex-A5 具备 ARM 最新的 VFPv4 浮点单元和 128-bit NEON 向量处理单元。,相比之下 ARM11 只有老式的 VFP11;
3、Cortex-A5 的制程为 40nm,面积是 90nm 制程 ARM11 的一半。
4、Cortex-A5 可以提供单核、双核、四核等配置,像联发科就做了一个价格非常低的 Cortex-A5 四核方案,在低价位手机市场里竞争力非常强大。
5、Cortex-A7 的 DMIPS 性能是 1.9 DMIPS/MHz,Cortex-A8 是 2.0 DMIPS/MHz。
6、Cortex-A7 具备硬件整数除法、虚拟指令、40-bit 内存定址能力,所有 Cortex-A15 的程序都能在 Cortex-A7 上执行。
7、Cortex-A7 和 Cortex-A8 类似集成了一个低时延(10 周期)的 L2 Cache。
8、Cortex-A7 的整数流水线是 8 级顺序双发射,分支预测单元比 Cortex-A8 更先进,因此在分支预测能力和分支预测失败惩罚方面都会比 Cortex-A8 更好;
9、虽然不能像 Cortex-A8 那样双发射浮点或者 NEON 指令,但是 Cortex-A7 的浮点单元是流水线化设计。
10、在同样的制造工艺节点下,Cortex-A7 的面积是 Cortex-A8 的 1/3~1/2。
11、Cortex-A7 能实现单核、双核、四核等配置,而 Cortex-A8 只有单核配置。
12、Cortex-A7 在 ARM 的 big.LITTLE 策略中属于伴核角色,就是给 Cortex-A15 作为低负荷工作的杂役。
从定位上看,我们相信 Cortex-A5 在低价智能手机市场上会有相当夺目的表现,而 Cortex-A7 作为非伴核的单独产品时则更多的会在中低价平板电脑市场上攻城拔寨。
没有评论:
发表评论