回顧2012年,ARM 業界發生2件處理器大事,其一推出了不少新款應用處理器,其次則是發表 ARMv8 架構。這兩件事意味著 ARM 的新時代到來,那對於我們又有甚麼影響?我要如何了解它呢?讓我們來一探究竟吧。
回顧2012年,ARM業界發生2件處理器大事,其一推出了不少新款應用處理器,其次則是發表ARMv8架構。新款處理器方面代表是Cortex-A15,首款搭載Cortex-A15的是Samsung Exynos 5250,具備有1.7GHz雙核心,並內建在Samsung後來推出的Chromebook當中。
另外Exynos 5250還應用在Google Nexus 10上,面板解析度高達2560 x 1600。當然,大家最關心的就是效能到底如何,從目前網路上釋出的測試成績來看,的確具有雙核(Cortex-A15)打四核(Cortex-A9)的實力。就連Exynos 5250內建的Mali-T604 GPU也比目前Mali-400和Adreno 320效能再高出一截,但尚不及Apple A6X內建的PowerVR SGX554MP4。四核版Exynos 5450傳出將使用在新一代的 Galaxy S4 上,製程也將由Exynos 5250的32nm更換成28nm。
ARMv8是ARM業界第二件大事,這件事情也延宕1年多。ARM終於推出2款處理器設計,分別為Cortex-A53和Cortex-A57,由數字就可觀察到是2款效能不同的產品。在此同時,與ARMv8架構一並推出的big.LITTLE處理器設計概念再次被提及。而ARMv8和Cortex-A50系列處理器又會如何改變我們手中的行動裝置,皆在之後的文章中細細說明。
目前的市售產品中,無論是Apple設計的A6X應用處理器,還是NVIDIA紅透半邊天的Tegra 3,亦或是最近常被提及的Qualcomm APQ8064,皆相容ARMv7的指令集架構,只是在硬體線路實做方面有所差異。這其中的差別,讀者可以理解成Intel、AMD、VIA三者製造的處理器皆可以安裝Windows,但是三者的效能卻大異其趣。
ARMv8目標接替ARMv7成為下一代ARM處理器的架構,目前只單一釋出ARMv8-A,沒有像ARMv7再細分為針對應用處理器的ARMv7-A,微控制器的ARMv7-M,和適合即時處理的ARMv7-R。
ARMv8最大的改變就是開始支援64位元,記憶體容量限制一舉突破4GB。這在目前手持式行動裝置上的迫切性並不大,直到今年才有2GB RAM的手機出現,在未來的1、2年內,受到半導體製程的影響,手機內建記憶體或許可以微幅調升至3GB或是4GB。
但別忘了除了消費性市場以外,許多伺服器製造商也一直在覬覦ARM的省電性,這或許才是ARM支援64位元的主因,準備大舉進攻伺服器市場。Intel則是為了防堵ARM的步步進逼,於是去年底推出最低TDP只要6.3W的Atom S1200系列。
新架構一定有些過去沒有的優勢,跨入64位元領域後,較明顯差異可分成6個層面,包括LPAE記憶體定址、最佳化的暫存器、A32與A64模式、2大資料模型、強化浮點數運算,最後則是簡化的處理器狀態。
跨入64位元之後,最大優點就是記憶體定址範圍擴大,而在ARMv8之中支援LPAE(Large Physical Address Extension),可定址超過4GB的實體記憶體。目前ARMv7架構的Cortex-A15已支援LPAE,雖說虛擬記憶體空間最多還是32bit,但已可支援到40bit的實體記憶體定址,最大支援128GB記憶體。
ARMv8的記憶體定址則成長到了48bit,無論是虛擬或是實體定址皆然,代表著ARMv8最多支援32TB的實體記憶體空間,這對想要進攻伺服器市場的ARM來說是個不錯的加分優點。
ARMv8支援2個48bit虛擬記憶體空間,一般程式記憶體空間從2^0往上延伸,核心記憶體空間則是由2^64往下減少,其中32位元程式碼只能運作在前4GB空間。記憶體可以採用常見的4KB做為分頁,也可以使用新的64KB分頁;64KB分頁的好處是效能高,但若是填入的資料少於64KB則容易造成記憶體空間的浪費。
x86-64處理器允許4KB或是2MB記憶體分頁,ARMv8採用4KB和64KB分頁,浪費的記憶體空間會比x64來的更少。
記憶體空間浪費有2種
在記憶體管理中,2種狀況下會導致記憶體空間的浪費,沒有辦法使用這些空間。第一種稱為外部碎片(external fragmentation),主要是記憶體分配給不同行程時,在2個分配空間中存在著一小段未被分配的記憶體區塊,但這記憶體區塊卻又不夠大到能夠分配給其它行程,造成有空閒的記憶體區域卻無法使用。
第二種浪費就是採用分頁式記憶體管理所造成,稱為內部碎片(internal fragmentation)。由於將記憶體區域切割成固定大小的「頁」,所以會造成某些「頁」中無法完全被資料填滿,而這沒有被填滿的區域又無法分配給其他行程,造成內部碎片。
讀者可以利用雜誌來理解,每一頁都是由某個專題部分獨佔(真測隊、技研堂……),如果我們寫的專題在尾端字數不足1頁,我們還是要分配1頁給它,並不會發生上半部頁是真測隊,下半頁為另一篇專題開頭的狀況。
在AArch64部分,CPU內部暫存器的部分也有所增加。ARM在Cortex-A9中已導入硬體直接實作的虛擬暫存器重命名功能,但對於軟體來說,可用的暫存器還是只有那幾個而已。AArch64直接內建31個64位元的通用暫存器(第31個暫存器多數時間拿來當作Procedure Link Register),比起之前16個32位元的暫存器來說,在將來更複雜的運算中(如演算法),避免重複讀取載入資料的時間,運作效率更高、效能更好。
暫存器是什麼?
暫存器的英文為register,是整台電腦裡運作速度最快的記憶體元件,在CPU的運算階段,處理單元能夠直接存取、修改這部分的數值,但由於造價昂貴,僅在CPU內部安排數bit~byte不等的暫存器。若是以一般電腦記憶體元件的存取速度來排列,由快至慢為暫存器>L1快取>L2快取>L3快取>系統記憶體>硬碟快取>硬碟。
▲ARMv5進化到ARMv8的歷程,ARMv8藉由AArch32支援ARMv7的功能,同時再加入有關加密的指令(點圖可看大圖)。
完全看懂 ARM 處理器:RISC 與 CISC 是什麼?歷史、架構一次看透
4大名牌 ARM 處理器特色說分明,買授權自己開發,各家硬體差在哪?
HTC UltraPixel 、Nokia Pureview 相機技術大戰開打,技術詳解、誰更創新?
(後面還有:ARMv8運作分2種等更多詳細介紹唷!)
架構更新為64位元之後,ARMv8的運作狀態包含2個部分,64位元稱為AArch64(ARM Architecture 64),指令集稱為A64,之前的32位元的指令集則包含在AArch32(ARM Architecture 32)之下,包含32位元的ARM指令(A32)和16/32位元均有的Thumb-2指令(T32)。
而且AArch64和Arch32是互斥的指令集,這點也與x86的世界不同;但ARMv8的處理器允許在這2種執行狀態下切換,也就是說,ARMv8允許執行ARMv7的程式,只要把執行狀態切換成Arch32模式即可。
讀者可別認為轉換到64位元之後,指令也增肥到64位元這麼長。A64的指令還是延32位元的長度。日益重要的加密演算法,在ARMv8中也新增專門對應的指令,在AArch32或AArch64中皆可執行,像是AES或SHA-1和SHA-256都有支援。藉由128bit的SIMD暫存器實作,代表每一個指令可以同時對128bit的資料進行運算操作。
ARMv8在64位元執行環境下,定義了2種資料模型,分別為LP64和LLP64(跟LP33沒關係喔)。LP64的integer長度為32bit,long integer的長度為64bit,這種定義方式常使用於UNIX、Linux、OS X;而LLP64的integer或是long integer都定義為32bit長度,long long integer的長度才是64bit,常見於Windows作業系統之中。
原始的ARM核心並不具備硬體浮點處理功能(但有專門的VFP協同處理器),如果想要計算浮點數只能呼叫fplib函式庫來用,想當然耳以軟體來模擬,效率較差。
ARMv8大幅強化浮點數處理能力,現在浮點數暫存器有32組,每一組有128bit寬,代表著每個暫存器可裝入2個雙精度浮點數,同時支援IEEE 754的浮點數處理,也能夠處理一些奇怪的例外狀況,比如說除以0或是非數字數值無窮大。
在Cortex-A15的時候,處理器狀態分為8種,分別為User、System、Supervisor、Abort、Undefined、Interrupt、Fast Interrupt、Hyp。其中Hyp模式在Cortex-A15導入,為的是支援硬體虛擬化功能。
AArch64則是將CPU狀態簡化了,分別為EL0~3。EL0為User模式、EL1為Kernal模式、EL2為Hypervisor虛擬化之用、EL3為TrustZone安全監控之用。比起過往較為複雜的處理器模式,AArch64不但將模式簡化為4種,模式也更向x86 CPU靠攏。在這複習一下x86處理器的3種模式,分別是Real、Protected、System Management,若是x86-64處理器還會再多出1種Long模式。
2012年10月30號,在美國加州舉辦的ARM TechCon 2012上宣布,基於最新一代ARMv8架構設計的處理器核心Cortex-A53和Cortex-A57正式推出。Cortex-A53和Cortex-A57就是目前的Cortex-A7和Cortex-A15的64位元升級版,不管是內部架構、目標市場都極為類似。
▲藉由big.LITTLE架構和製程的演進,在持續衝高效能的同時,還能夠保持低耗電量(點圖可看大圖)。
(後面還有Cortex-A57:32位元效能3倍強的介紹唷)
Cortex-A57為下一代ARMv8 64位元處理器中的高效能代表,開發代號為Atlas,在ARM TechCon 2012中,表示效能為現今Superphone的整整3倍,而且還不是64位元打32位元的灌水數值,全都是在32位元模式下的執行結果。
有關於加密的執行效率方面,大會上也宣稱加密速度可比現有產品高達10倍以上的能力。在企業端支援方面,浮點數運算新增IEEE754-2008的處理能力,單晶片核心數至少可以衝到16核心以上。
雖說ARMv8可以支援到48bit的虛擬記憶體位址,但ARM沒有把全部的能力下放在Cortex-A57身上,僅支援44bit的虛擬記憶體位址,同時也支援44bit定址/16Tb容量的實體記憶體空間,目前預計支援LPDDR3以及DDR4這2種記憶體規格。
在L1快取的部分,指令與資料快取容量不對稱。L1指令快取內建48KB,L1資料快取則為32KB,皆有除錯功能;L2快取則不再區分為資料或指令,皆在同一區域內,同時L2快取容量是可以客制化的,可在512KB、1MB、2MB範圍中選擇,L2快取的延遲也較Cortex-A15短。
issue是什麼?
在指令解碼器解出指令後,會把解出來的指令先存放在1個叫做issue queue的佇列(緩衝)中,等到某個指令所需的資源準備好,或是等到後端執行部分空閒時,再把指令丟入後端執行單元。而1個指令正式進入執行管線,就叫做建立1個issue。
Cortex-A15多核架構中,各個核心的快取資料一致性,以及與其它周邊裝置的連結部分,採用CCI-400 Cache Coherent Interconnect相互連接起來,存取系統記憶體之前也需要經過它。
在Cortex-A50系列中,則是採取了更為先進的CCN-504 Cache Coherent Network(注意英文用字的不同),原先CCI-400最多支援四核,CCN-504在同一矽晶圓上最多支援十六核心。CCN-504還可內建L3快取,最高達16MB,讓存取系統記憶體的時間變少,效率更高。
以上零零總總的改進加起來,在同時脈下Cortex-A57的效能可比Cortex-A15快上25%(32bit模式下)。如果與Atom N570比較,在SPECINT2000中可達2倍以上的效能(根據ARM TechCon釋出的簡報內容)。
▲這是Cortex-A15的功能方塊圖,Cortex-A57的詳細圖片尚未放出,預估應該是以Cortex-A15為藍圖,加上64位元的支援能力(點圖可看大圖)。
ARM宣稱,Cortex-A53是世界上具有64位元處理能力的CPU中,最為嬌小的一款。Cortex-A53能夠自行組合成多核處理器,或是和大哥Cortex-A57組合成稍後即將說明的big.LITTLE架構。
x86處理器進入亂序(Out-of-order)執行已經多年,ARM的處理器一直到Cortex-A9才具備有亂序執行的功能。其原由為亂序執行需要處理器內,新增指令等待的佇列(當指令所需運算資料,或資源準備完成就可跳出佇列執行),執行完的結果也需要排列回原始指令進入的順序;雖說CPU的執行效率會提高,但也需付出功耗與晶片面積的代價。一直到半導體製程進步,足以消彌額外的功耗損失,Cortex-A9才出現這項功能(世界對於手持式裝置效能的渴望也是推手之一)。
Cortex-A53(開發代號Apollo)相較於大哥Cortex-A57的亂序執行架構,Cortex-A53保持著順序執行的作法,減少電晶體的數量就是減少額外的耗電量。ARM表示,在同樣的製程下(32nm),Cortex-A53能夠提供與Cortex-A9相同的效能,但多了64bit的支援能力,晶圓面積卻小了40%以上,若是未來使用20nm製程製造,將會是現今CPU的25%面積而已。特別的是在ARM TechCon的簡報上,並未詳細註明單一晶片可以裝入幾顆Cortex-A53核心,反而是以sea(海洋)來形容,似乎可以裝入數量龐大的核心群,對於低功耗伺服器或是基地台應用方面是個利多。
Cortex-A53的記憶體定址能力又比Cortex-A57弱了一些,只有40bit的定址能力,虛擬與實體皆是,實體記憶體最大支援128GB,但是64K記憶體分頁管理能力保留下來,沒有刪減。
而Cortex-A53的L1指令與資料快取也是分開的,但容量部分則是選配,從8~64KB任君選擇,因此有可能比Cortex-A57還要大。L2的指令和資料快取在同一區域,容量部分也是能夠客製化,從128KB~2MB之中做選擇。
▲(點圖可看大圖)
(後面還有:了解big.LITTLE架構跟ARM 64位元之路唷!)
在2011年底,除了ARMv8之外,尚推出了Cortex-A15、Cortex-A7、Mali-T658,其中更發表了big.LITTLE架構,讓ARM處理器在效能競賽中,依然保持其省電的優勢。
Cortex-A7本身具有多核心的設計,另外透過更短的流水線、更高的頻率、較為先進的製程、以及改進後的分支預測能力,希望盡量保持在Cortex-A8相同效能的狀況下,並加強省電性。
Cortex-A7除了獨立打造單核或多核處理器之外,ARM更希望它能夠與Cortex-A15放在同1顆應用處理器之中。由於Cortex-A15不只導入了亂序執行,執行管線也加深,NEON也增加到128bit,相較於之前的Cortex系列,怎麼看都是個高效能核心,省電性自然就打了點折扣。Cortex-A7雖然在命名上比Cortex-A8還要落後,但是在技術支援方面與Cortex-A15看齊,皆支援VFPv4、硬體虛擬化、LPAE。
這點應該就有讀者明白big.LITTLE架構是怎麼一回事,ARM期待能將Cortex-A15和Cortex-A7處理核心包在一起,當執行較為繁重的工作時,像是遊戲或上網時,使用高效能的Cortex-A15核心。當執行較為輕鬆的工作時,像是聽音樂或看影片時,就使用低耗電的Cortex-A7核心。由於Cortex-A15和Cortex-A7的指令集架構大致相同,在不同的核心轉換時也不會發生問題。
此次ARM同時發表Cortex-A57和Cortex-A53也是同樣的情形,Cortex-A57的效能較好,Cortex-A53的省電性較佳,根據負載的不同自動將工作分配到兩者之一。
big.LITTLE聽起來很像NVIDIA為Tegra 3加入的4 PLUS 1協同核心,但是做法略有差異。Tegra 3的協同核心應該與其它4顆核心架構相同,差別在於這顆協同核心使用低功耗製程,運作時脈也比較低;big.LITTLE則是使用多顆架構不同,但指令集架構卻類似的核心包裝而成。
近期傳出Samsung將在2013年2月份的國際固態電子電路大會上展示1款8核的ARM處理器,分別由四核Cortex-A15和四核Cortex-A7組合而成,預計Cortex-A15和Cortex-A7分別為2組處理器叢集,且在同一時間下只會開啟1組,並不會有八核全上的狀況。
採用ARM Cortex-A50的處理器目前預計在2014年初有望問世,比起以往從發表到產品問世需要2年的速度來說,已經快了許多,代表未來大眾對於手持式行動運算裝置效能需求日益增加,至於未來能否打敗Intel還很難說,但日益崛起的ARM已儼然成為Intel在市場上不可輕視的對手。
▲Big.LITTLE的架構圖,工作負擔可以在Cortex-A15(big)和Cortex-A7(LITTLE)切換,兼顧效能與省電性(點圖可看大圖)。
若是我們把64位元Windows作業系統裡的C槽打開來看,我們會發現有2個名稱非常相似的Program Files和Program Files(x86)資料夾,前者就是擺放「真‧64位元軟體」的安裝預設資料夾,後者則是擺放32位元程式的預設資料夾。讀者不妨數一數裡面的程式個數,筆者敢保證,絕大多數使用者的Program Files(x86)資料夾的程式比Program Files還多。
在x86轉換到x86-64的時期,廠商總是打著64位元處理較快的口號,藉此吸引使用者購買。但事實上,若只是將程式單純編譯成64位元版本,其實運作速度反而會比較慢,其中最主要的差異是記憶體位址從32bit換成64bit,增加了記憶體位址轉譯和查找的時間。
回頭看看ARM的生態鏈,其實與x86大不同,大部分ARM裝置都是一整組的成套銷售,你沒有辦法在消費市場上買到主機板、ARM處理器,回家自己裝一裝就變成1台手機或電腦。
再加上現在手機機王每年數度更換,幾乎每季都有新的機王推出,在此種狀況下淘汰率相當高,如果想將市面上的高階手機全面更換為ARMv8架構,1年的時間綽綽有餘,中低階手機的狀況可能因為廠商的策略因素,ARMv7和ARMv8可能有幾年的時間和平共存。
筆者大膽的推測,ARM轉換至64位元應該能夠比x86世界順利,畢竟對現代人而言,換手機比換電腦頻繁多了。就像我們現在所使用的智慧型手機,絕大部分都是使用ARMv7架構,但是誰又知道Android先驅HTC Hero、Acer Liquid mini、Asus Garmin nuvifone A50、Motorola Backflip、Samsung Galaxy、Sony Ericsson Xperia X10 Mini這些大家耳熟能詳的手機,都是使用ARMv6架構呢。
本文同步刊載於電腦王雜誌
歡迎加入電腦王雜誌粉絲團