輕松讀懂移動處理器 CPU微架構全解析
在介紹一些稍微復雜的技術概念之后,我們不妨想看看 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 寄存器。
關注我們


