謹以此文獻給希望瞭解爲何Arm 64位指令集架構(AArch64)是移動設備中不可或缺之構成要件的安卓應用開發者或技術決策人,本文亦將探討與64位安卓應用開發相關的優勢、裨益與思考,並向讀者介紹如何進一步獲取更爲詳盡的(技術)指南。

翻譯校對:Nathan Li(李陳魯),[email protected]

爲何Arm 64位指令集架構(AArch64)是移動設備中不可或缺之構成要件?

一般而言,概念上“64位”通常與一臺設備的中央處理器(CPU)緊密相連。一顆64位的CPU被設計用於操作64位字長的整型數據。相較於32位設備,通常意味着它能更有效地處理更大的數據塊。在計算機體系架構的概念中,“64位”同時也指用於尋址和數據存儲的寄存器寬度。理論上,64位寬的地址寄存器可以訪問極其巨大的數字空間,上至2的64次方個獨特的內存地址單元,而相應的32位寄存器只能涵蓋2的32次方地址範圍。對應於實際數字,通常這意味着高達18艾(180千億兆)字節的海量存儲,遠超32位環境下僅僅4千兆字節的(容量)上限。同等條件下,一顆64位的處理器亦能比32位處理器更有效率地在更廣闊的地址空間內處理(有效範圍)更大的數據類型。儘管實際觀測到的性能提升常常會被各種因素所左右,但整體而言,64位處理器已被證實代表着更快的運行速度,更低延時的數據吞吐,以及更迅捷的用戶響應(依託於出色的軟件實現)。

//

Arm何以64位?

//

64位CPU體系架構在當代計算(學)範疇內,意味着一系列的優越特性。Arm的“Armv8-A”架構於2011年問世,其所配備的寬尋址寄存器允許處理器無障礙訪問遠大於4千兆字節的地址空間。因此,一顆64位處理器相較於32位處理器,能以顯著更快的速度處理更豐富的內存數據集合,進而頗爲有效地管理海量數據結構(對象),大型的數組隊列,與更寬裕的存儲空間。

在移動計算領域內,Arm始終精益求精,開拓創新,持續不斷優化32位與64位的處理器架構以及相關核心設計,通常廣爲人知的有AArch32與AArch64架構。隨着安卓內核成功移植到64位,其餘的操作系統核心組件,程序庫,和應用程序如今都能完美運行於32位或64位兩種體系下。Armv8架構向下兼容過往的32位Arm架構產品,然而對於前沿的算力挑戰,如人工智能(AI),機器學習(ML),3D遊戲,以及4K超高清顯示等等而言, 伴隨32位指令集(ISA)而生的種種限制爲人們詬病久已!

英雄總有遲暮時,AArch32的架構實現歷經多年演化,餘下的改進空間日趨有限。在過去10年中,曾憑藉出色的能效比帶給我們無數歡樂時光的32位架構,已愈發難以被進一步提升,Arm傾力探索並實施的種種優化措施所能帶來的增益也日漸式微。而與之相對應,投入同樣的工程資源到64位指令集的研發與優化上卻意味着巨大的潛在收益。

今天有無數運行於Arm CPU上的高效能移動應用,一個64位的體系架構將能保障它們未來的可持續發展,並孕育顯著的創新機遇。以安卓生態的演進與谷歌推動的變革爲一致願景,業界同仁正在投入巨大的努力來確保安卓原生應用的開發能如期邁入全面支持64位體系的時代。

//

關於安卓生態的思考

//

64位計算的技術基礎以及相關能力建設,多年前就已相繼就緒,而今谷歌對開發者即刻開始64位遷移的建議驅動着整個安卓生態系統不斷向前。許多兼顧iOS和安卓的跨平臺開發者,受益於早先開發64位iOS應用獲取的經驗, “在需要的時候(安卓)64位移植工作將會進行得(相對更爲)簡單平順” 。

對於很多應用來說,創建所必須的64位程序庫並非難事,因爲許多的開源庫已經是類型安全的並經歷了多年的反覆考驗。大部分使用Arm NEON指令的代碼可以無需修改就能通過64位編譯。編譯器領域的長足進步,通常能自動生成更加出色和性能更好的(可執行)編碼。今天,如果一個安卓應用是完全由Java語言寫成的,那麼目前的安卓運行時(ART)就可以保證其無需調整便能完美運行(於64位平臺上)。需要特別注意的是,如果你的Java程序中使用了任何原生程序庫或者原生SDK(以及NDK),都必須正確地包含相應模塊的64位版本(而非32位)以便成功編譯。以64位原生程序的移植爲主題,Arm爲開發者準備了一系列的博客和文檔。

//

其他的安卓生態系統

//

某種意義上,就谷歌究竟能在多大程度上真正影響亞洲地區重量級應用商店生態的發展,存在不同聲音,考慮到其在中國(大陸地區)甚至未能提供Play商店服務。因而谷歌的64位遷移計劃,在這些顯然不容忽視的市場裏,也許從某些觀點看來,並非那麼不可或缺。然而,Arm通過與這些(自成一體的)安卓生態中,那些最具影響力成員們的接觸與交流,確信他們都將擁抱64位指令集生態。與此同時,谷歌也公佈了在Google Play應用商店提交應用,所需的全新安卓應用程序接口(API)等級,並且這一舉措獲得了來自中國的應用商店的積極配合與支持

//

64位(計算)的技術本質與裨益

//

64位安卓系統運行時比起它的32位對應副本的確需要更多的內存空間,這就意味着系統的最低內存要求有所上升,具體幅度也取決於設備的屏幕分辨率和像素密度等因素。一個32位版本的安卓系統通常只需要大約1千兆字節(GB)的內存就能啓動,而與此同時,在64位CPU上運行時的最低內存容量要求可能會相應上升到1.8甚至2千兆字節。

最後一版僅支持32位CPU的安卓系統 “KitKat” 發佈於2013年,以2014年誕生的 “Lollipop” 爲起點,安卓系統開始同時支持32位和64位應用程序,這麼說也許至少隱瞞了安卓系統(在兼容性方面)的部分潛力。受益於此,Arm得以在Armv8系列64位處理器架構上完美向下兼容所有現存的32位安卓應用程序。

對於安卓設備而言,有太多理由轉向64位代碼體系,例如:

增強的安全性

更高的性能

數量更多且字長更寬的寄存器

更高精度表現的64位數據操作

愈加豐富的指令集

其他32位代碼無法利用的先進特性

64位編碼中包含大量位寬更高的指針變量,因而導致了應用程序的可執行二進制文件大小增長,當然用戶同時也獲得了訪問更大範圍內存地址空間的能力,進而能夠操作更大的數據塊以更快的速度載入文件到內存中。配合經過優化的代碼實現,這一特性允許處理器事實上以更低的能耗,更快的速度來完成(全部)操作,從而整體上節約電力。

//

純64位設備

//

伴隨着安卓生態系統中64位應用數量的日漸龐大,在不斷降低設備元器件成本的市場驅動力作用下,終有一天安卓平臺上會誕生一大批的純64位設備。對開發者而言,這意味着更低的研發成本(無需兼顧32位與64位),與此外各類純64位設備所能帶來的種種益處,包括更低的(硬件)複雜度,針對單一架構的深度優化,都無疑有助於一個更加強壯,健康,以及魯棒的系統得以問世。

這裏列出的,是一些力挺純64位指令集安卓設備的觀點:

額外的32位支持導致(處理器)微架構複雜度明顯提升

由複雜性導致的最終分攤至OEM廠商的額外系統測試及驗證成本

Armv8.x的安全特性包括 安全驗證,數據保護,利用緩解,以及安全內容交付等,都只能在AArch64架構上實現

在不斷湧現和演化的移動應用場景(如混合現實,人工智能,機器學習,和網絡應用)中具備更好的性能表現

單一運行時意味着更少的測試和維護工作量

僅支持AArch64架構的CPU整體上更爲高效

如今的安卓智能手機同時支持32位與64位應用,這幫助我們實現了對過往安卓設備(和應用)的向下兼容性,從而確保了最爲廣泛的潛在受衆羣體。然而,與之相伴的成本和劣勢正在不斷累積,下面是一份(負面)特性的清單:

(同時)支持多個指令集導致必須在指令緩存中進行預解碼

保持多個版本安卓應用安裝包(APK)導致的閃存空間浪費

雙份的安卓“接合子”管理器實現所消耗的額外100多兆內存

更復雜的系統安全環境意味着更容易被攻擊

OEM廠商所面臨的更高的驗證成本

兼容T32代碼導致解碼器佔用的(晶圓)面積翻倍

Thumb16(某舊指令集)的解碼通常構成應用代碼解碼階段的關鍵路徑(性能短板)

在AArch32架構體系上進行NEON™寄存器的重命名需要雙倍的標註量

導致NEON重命名錶(NEON / FP執行期間的每個時鐘週期都會訪問)佔用30%的額外面積

導致NEON的(指令)發射隊列需要30%的額外源操作數存儲空間與傳送網絡

NEON(指令)發射隊列中的傳送邏輯與寄存器匹配邏輯(實現)需要消耗額外50%的電力 – 指令發射隊列是單個(處理器)核心中三分之一動態功耗的源頭

//

Arm立足當下開拓進取

//

Arm正與合作伙伴們通力協作,以期儘可能地洞察是否在生態,技術,以及商務層面上存在任何不利於64位移植的(潛在)關鍵議題。當然,我們從來不認爲在這一進程中,有任何必經的問題或意外。迄今爲止,Arm已經從安卓應用開發者,遊戲引擎開發者,芯片製造商,與操作系統供應商等處,獲取了大量的積極建議。我們將持續密切關注安卓生態的發展,權衡64位應用的可用比例(與權重),從而保證這一決定性的變革在正確的方向上不斷前進。

Arm一直以來都在與遊戲引擎開發者們緊密合作,以保證各個遊戲工作室能在2019年8月前,有充裕的時間構建,測試,併發布(64位的)安卓遊戲產品。我們堅信遊戲引擎開發者們始終引領着(技術)創新,並推動着整個安卓生態系統的性能包線延申至新的疆域。目前,正在進行64位移植的引擎合作伙伴,憑藉尚未完全優化的初期產品形態就已觀測到了至少10%的性能提升。

Arm始終專注於構建由一些列性能最優的產品組合而成的高能效套裝。我們目前致力於,爲那些在安卓平臺上被廣泛應用的關鍵程序庫,運行時,瀏覽器,和引擎,引入更多的(軟件)優化。在可以遇見的未來,通過向安卓應用開發者們提供更多支持,必將令整個安卓生態獲益匪淺。

//

安卓應用的未來

//

如果應用原先是(完全)由Java™語言開發的, 那麼開發者無須(爲64位)採取任何行動,所有非原生程序均不受影響。 倘若應用是基於原生安卓程序庫,那麼也許需要一點額外的工作,取決於原先程序的書寫方式。即使只是(爲64位平臺)重編譯一份完美編碼的32位程序,也或多或少需要修改其中的一部分。因此,對於遊戲開發者(特別是有自研引擎項目或代碼涉及底層硬件的),及早驗證以防在整個生態加速躍遷時遭遇困難,顯得尤爲重要。

Arm堅信這場以64位體系架構爲核心的生態升級,完全符合原生應用開發者們的最佳利益。我們已經做好準備向廣大開發者社區提供支持與指導。Arm傾注於64位處理器架構的未來,今後相關的性能提升將只能夠在64位的系統環境中達成。作爲這場變革的一部分,我們鼓勵應用開發者立即檢視產品是否需要爲64位遷移做任何額外的工作!

相關文章