64位移動處理器在2013年首次亮相,而蘋果iOS系統則是首個支持64位計算的移動操作系統。有意思的是,從最近的消息了解,蘋果將有可能在iOS 11正式放棄對32位應用程序的支持,正式完成對64位生態系統的完全過渡。其實這是iOS 10.3測試版一個錯誤信息無意間爆的料,當用戶嘗試運行32位應用程序,系統竟然告訴用戶無法在未來版本中運行,開發者需改進適配,正是這點讓人浮想聯翩。
在iOS平臺上,蘋果已經不止一次提供類似的暗示了,并非常希望開發者僅提供64位應用程序。例如說,去年年底的時候,蘋果從App Store移除了一定數量應用程序,理由是不兼容,并向開發者發送電子郵件,提醒他們應用程序開發必須以64位為基礎。
通常來說,我們不太會在意系統或手機是32位還是64位,畢竟新設備總是能夠同時兼容32位和64位應用程序。但是,考慮到蘋果總是能對谷歌移動生態系統產生一定的影響,就有必要來討論一下,為何蘋果要做出這樣的舉動,而Android是否應該效仿。
32位和64位
首先要簡單的了解一下32位和64位的背景。32位和64位一般是指CPU的通用寄存器位寬,相對于32位而言,64位的CPU位寬增加一倍,使其能夠處理更多更精確的數據,因此有一定加快數據處理的作用,特別是負載的情況下。再通俗來講,32位和 64 位就是四車道和八車道的區別,在擁堵的晚高峰,八車道速度顯然更快。
當然了,64位可尋址范圍大大擴展,32位系統最大支持內存為4G。另外,32位系統和64位系統需要安裝支持相應軟件模式下的操作系統和驅動軟件,也就是32位只能安裝 32 位,64位安裝64位的軟件,但可兼容32位運算。
回到ARM處理器的話題上。ARM從32位ARMv7-A到32位/64位ARMv8-A的轉變過程中,引入了大量的新指令以便增強功能,也就是AArch64指令集。但為了保證ARMv8能夠向后兼容,ARM在架構設計上仍保留了現有的AArch32和Thumb-32指令集。雖然這就意味著CPU核心管線部分需要進行更多設計,占用更多極其有限的芯片空間,但確保了這些傳統指令也能夠與新硬件一起工作。
需要注意的是,單個應用程序使用過長中,完全不可能同時使用ARMv7和ARMv8兩種執行狀態,因為AArch64與AArch32和Thumb-32指令集之間沒有任何交互操作。因此,直接以AArch64指令集和ARMv8處理器為基礎編寫的應用程序,無法在ARMv7 Cortex-A系列處理器上運行。
不過,以 ARMv7 Cortex-A 處理器為基礎編寫的應用程序,仍可以在ARMv8處理器上運行,畢竟可通過保留的AArch32和Thumb-32執行狀態運行。
其實說白了,如果蘋果真那么做的話,像iPhone 5這款以ARMv7處理器為基礎的機子,將無法升級到iOS 11操作系統。
蘋果為何執意轉向64位
蘋果放棄對32位應用程序的支持表明,未來將完全擁抱 AArch64執行狀態,其硬件處理器和軟件iOS系統,還有應用程序的設計,所有都將只適用于 AArch64 指令集功能。好處自然不少,包括更大的尋址范圍支持更大的內存,簡化匯編程序,雙精度浮點及更先進的SIMD運算,以及高達3至10倍的加速硬件加密性能等。
不過,開發者和開發商將無法再使用AArch32和Thumb-32指令集,因為必須更新應用程序。當然了,除了迫使開發人員利用全新64位架構的最新特性之外,這也十分有利于蘋果更出色的完成下一代CPU的設計工作。蘋果有出色的芯片設計團隊,而且一直在規劃放棄對舊架構的支持,完全可以借此盡可能多地釋放芯片空間,降低制造成本,或者將釋放的空間加以利用,加強CPU、GPU及其余部分,或引入更加先進的一些功能。
我們不清楚蘋果如何設計下一代芯片,或許會是為64位進一步優化 CPU,而不一定是全部轉為64位,保留部分傳統硬件所需的32位指令,不會強行破壞與ARM簽署的許可協議。因為ARM通常要求基于其授權架構的CPU設計,務必支持全部指令集,若遵守這一規定的話,蘋果的芯片同樣需要保留對AArch32和Thumb-32的支持,如此一來才能通過ARM的一致性測試。不過,ARM自己提倡靈活性設計,例如Cortex-A32就是基于32位版本的ARMv8架構設計,沒有十分明確哪些指令集是強制性要求,這就相當于留給蘋果更多的發揮空間。
那么,Android陣營應該跟風?
有利有弊,而且也并非完全不可行,若是基于上述相同的原因,只要谷歌和智能手機芯片開發商(如高通和聯發科)聯手,軟件和硬件上共同合作也能實現。但不可否認的是,Android 生態圈比蘋果大很多,分布有大量不同的硬件配置,若立即執行同樣的轉變相信很難迅速組織起來,甚至在此過程中可能被迫中斷。
盡管如此,理論上谷歌也可以從軟件方面做類似的事情,強制要求所有Google Play商店的應用程序轉移到64位版本。不過,這同樣需要一個長期的過渡時間,雖然今天入門級的智能手機和平板電腦都已經裝備了64位處理器,但是依然依賴于大量的 32 位應用程序,而且真正完美兼容 64 位指令集的并不是很多,一旦放棄向后兼容后果不堪設想。
講真的,Android 生態圈完全遷移到64位不太靠譜。例如說,許多Android車載娛樂系統仍基于ARMv7處理器打造。再看智能手表,包括華為、索尼和LG的手表,均搭載了32位的ARM Cortex-A7處理器設計。
另外,谷歌最近公布的Android Things物聯網平臺,其開發板的芯片也并沒有兼容64位的應用程序。那Android陣營沒辦法全面過渡到單一的64位計算了?并非如此,只是可以預見,未來Android依然提供32位的支持,這是最兩全其美的解決方案。