2022年3月14日 星期一

只待Android 32位元成追憶。

當前市面最新一代高階Android手機所使用的處理器晶片不外乎高通驍龍8GEN1三星Exynose 2200或聯發科Dimensity 9000,無論是哪一顆處理器晶片,其共同一大看點在於全面引入最新的ARMv9架構CPU部份整體維持大中小核三叢集:X2A710A510,大核和小核部分則有一革命性的修改。
 
愈來愈多終端產品上市後,隨即有人測試發現,這代Android手機在日常輕度使用時,CPU似乎更加耗電,明明新一代ARMv9 CPU是新架構、新設計、新產品,卻沒有帶來較佳的效能,某些情況下反而更為耗電,究竟是怎麼一回事?

容我先稍微岔開話題,如果有人告訴你說有一項評測指標,幾乎所有Android生態系的處理器晶片都能贏過蘋果M1處理器,千萬別以為在開玩笑,不用懷疑,還真的存在這麼一項指標,即32位元性能評測,因為蘋果M1處理器的32位元性能為「零」。
 
蘋果自A11開始便不再支援32位元,直接在硬體層面徹底捨棄,與之相對的,幾乎所有Android生態系的處理器晶片仍保留32位元的相容性。


這次欲探討的便是這個32位元相容性議題,得從ARMv9架構以及Android生態系64位元應用程式普及緩慢簡單談起。
 
眾所皆知,最新基於ARMv9架構的有X2A710A510X2作為超大核,相較X1性能進步有限,不確定是技術瓶頸還是依然像X1一樣未拋開成本包袱。征戰多年的A55終於出現接班人了,小幅升級到A510
 
新增指令集的改善集中在矩陣運算和資安相關,行動消費相關應用的提升不太明顯,坦白說擠牙膏的味道頗重,不過聊勝於無,理論上還是可以帶來更好的效能。
 
其中最具革命性的一點是,X2A510皆不再支援32位元,僅剩A710作為唯一兼容64位元與32位元的CPU
 
在理想情況下,如手機處於待機或輕度負載時,應用程式主要運行在效能較佳的小核上即可,藉此達到省電效果;但如今ARMv9架構,如果應用程式是32位元版本,無論負載程度輕重,皆只能由中核運行,小核的效能優勢可謂長劍空利。
 
又由於工作交由中核運行,可能連帶啟動處理器晶片內的其他系統,導致明明只運行極度輕載的32位元應用程式,處理器竟處在性能模式下工作,無法進入效能模式。
 
如此一來,在某些輕度負載場景時,且那些應用程式只能跑在A710上,便會導致額外的功耗。
 
換言之,在使用新一代ARMv9架構CPUAndroid手機時,一旦遇到32位元應用程式,可能無法以理想的能效平衡角度調度運行,只有64位元應用程式才能以理想的能效平衡角度調度運行,讓ARMv9架構CPU發揮應有的效能。
 
這件事和處理器晶片內部的整合、製程、系統調度等技術皆無關,根因確確實實出在Android生態系和新處理器的硬體架構,因此問題轉變成了64位元應用程式的普及程度,會影響新一代ARM架構CPU能否更加省電。
 
事實上從ARMv8架構開始,Android生態系的CPU就已經支援64位元了,Android系統也在Android 5.0後,從作業系統層面支援64位元。
 
回過頭來,第一個基於ARMv8架構的處理器晶片是高通驍龍810Android 5.0出現於2014年,轉眼已經七八年過去了,為何Android生態系無法擺脫32位元?
 
反觀蘋果,從2013iPhone 5S以及iOS 7正式推廣64位元,2016年後iOS生態系上便幾乎找不到32位元應用程式了。和蘋果相比之下,Android生態系推廣64位元簡直慢得異常。
 
和蘋果iOS生態系相比,Android生態系的64位元普及率毫無疑問遠遠落後,尤其在中國市場,仍存在大量32位元應用程式,其中不乏知名、常見的幾項應用程式,如bilibili、百度、愛奇藝等。

單從技術面角度來探討,我認為這現象絕對不正常。在Android生態系推廣64位元已經七八年,應用程式日漸復雜、摩爾定律逐漸失效的現在,早該全面擁抱64位元了。
 
但現實情況往往不是區區一個技術因素所能決定,Android生態系想推廣64位元之所以如此艱難,與Android生態系的實際應用市場有很大關係。
 
雖然我們已經看到諸多軟體公司有在努力普及64位元,意識到事情嚴重性,如Goog20198月起,要求在Google Play發布的應用程式必須支援64位元版本。
 
Android為基底的其他生態系,也逐漸要求應用程式轉向64位元。OPPO商店規定在202112月後,新發布的應用程式必須支援64位元;而小米商店則提供了應用程式從32位元版本更新為64位元版本的提醒和更新功能。
 
與此同時,中國不少應用程式開發商也開始正式更新到64位元,像微信、騰訊QQ等。
 
然而現實面上,縱使在ARMv8架構後Android手機的CPU就支援64位元了,硬體卻繼續保留了32位元的相容性。甚至到ARMv8.2架構,也依然耗費額外的硬體電路去處理32位元。
 
這一切考量,很大程度是考慮到舊型終端設備的使用需求。
 
因為在Android生態系推廣64位元的時間點,甚至時至今日,市場上仍然充斥大量運行ARM舊架構CPU及舊版Android系統的終端設備,既然系統還能兼容32位元,不少應用程式開發商便認為自己完全沒有切換到64位元的必要,也不可能輕易捨棄那些舊終端設備的32位元用戶。

故這次Android手機CPU架構更迭換代的耗電議題,中國與第三世界國家的情況要比其他國家更嚴重,畢竟歐美等國在Android生態系對於64位元應用程式的普及度要比中國高不少。

那如果在從32位元演進到64位元的當下,雷厲風行地一刀劃分呢?我非常肯定Android生態系會出現難以復原的分裂,要知道Android生態系能成功在市場攻城掠地,其一特色在於開放性和兼容性,
 
說到底Android生態系並未設置iOS生態系那樣的應用程式絕對審查權,這是Android生態系以開放式系統自居所必須承擔的原罪。
 
實際上偏向開放式系統都存在此問題,例如Windows生態系為了保持向下兼容,始終維持對32位元應用程式提供不錯的支援,這和Android生態系情況類似。
 
當然了,與Windows生態系不同的是,Android生態系主力市場在於消費娛樂,並不廣泛應用於工業、資安等領域,真要說的話想捨棄32位元時的包袱稍微輕一點。
 
延伸討論是Android生態系放棄32位元,可以帶來哪些好處呢?
 
首先,光就處理器晶片本身而言,CPU要能同時兼容64位元和32位元,就得準備額外的硬體電路,既增加晶片面積,也增加設計、測試成本,這些額外硬體電路帶來的功耗也間接影響了64位元的運作效能。
 
其次,系統只須處理64位元應用程式的話,整體可以擁有更好的資源調度和分配策略,對於日漸複雜的應用程式來說這點影響甚大。
 
其實對於ARMv9X2A510不再支援32位元這點,乍看之下會讓人以為ARM終於狠下心來了,可是隨後又看到A710保留了32位元相容性,無疑暴露了ARMAndroid生態系的演進仍處於觀望狀態。
 
退一步來說,要做為退場機制,也應該是讓小核支援32位元更為適當,以較低性能的缺點逼迫應用程式開發商加速更新至64位元版本,只是A510架構若再堆疊兼容32位元的硬體上去,效能恐怕會比上一代A55還糟,這部分有機會再多做詳談。
 
至於下一代ARM架構CPU會完全捨棄支援32位元嗎?要我猜測的話,個人推估還要一至兩代的時間,就拭目以待吧。



沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。