轻松读懂移动处理器 CPU微架构全解析
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%。