振作起來 Android 開發者,一個新的 Android 編譯器即將到來
已發表: 2022-03-11多年來,碎片化一直是 Android 開發者和消費者感到沮喪的根源。 現在看來事情會在好轉之前變得更糟。 新的 Android 編譯器又來了,硬件方面有一些值得注意的發展,這可能會影響開發人員。
由於 Dalvik 被排除在外,許多人預計 Google 新的 64 位 ART 運行時會持續多年,它可能會繼續存在,但在不久的將來它將進行重大改革。 除了提供對 64 位硬件的支持外,ART 還引入了提前 (AOT) 編譯,而 Dalvik 是即時 (JIT) 編譯器。 新的優化編譯器將解鎖更多可能性。
至於硬件發展,智能手機系統芯片行業有一些新趨勢和一些新老玩家,但我稍後會談到。
首先,讓我們看一下 Google 的運行時計劃。
Dalvik, ART, ART 與新的 Android 編譯器
ART 於去年隨 Android 5.0 一起推出,在 Nexus 9 和 Nexus 6 上推出,儘管後者使用 32 位 ARMv7-A CPU。 然而,ART 並不是從頭開始設計的,它實際上是 Dalvik 的演變,它遠離了 JIT。
Dalvik 會根據需要即時編譯應用程序。 顯然,這會增加更多的 CPU 負載,增加啟動應用程序所需的時間,並影響電池壽命。 由於 ART 會提前編譯所有內容,因此在安裝時,它不必在每次設備啟動應用程序時浪費時鐘週期進行編譯。 它可以帶來更流暢的用戶體驗,同時降低功耗並延長電池壽命。
那麼谷歌接下來會做什麼呢?
由於 ART 是為了利用新的 64 位 ARMv8 CPU 內核而開發的,該內核於去年年底開始上線,最初的編譯器似乎是一種權宜之計。 這意味著上市時間是首要任務,而不是效率和優化。 這並不意味著 ART 只是一項拙劣的緊急工作,因為它不是; 運行時運行良好,得到了開發者和用戶的好評。
然而,還有改進的空間,現在,谷歌似乎一直在努力改進編譯器,而且這項工作可能早於 ART 的正式發布。 英國芯片設計師 ARM 最近透露了一些關於 Google 運行時計劃的有趣事實,並指出了一種用於 ART 的新“優化”編譯器。 新編譯器提供中間表示 (IR),允許在代碼生成之前對程序結構進行操作。 它使用單級中間表示,結構化為信息豐富的圖,為編譯器的架構感知部分提供更好的信息。
“快速”編譯器使用兩級中間表示,帶有指令和變量的簡單鍊錶,但它在 IR 創建過程中丟失了重要信息。
ARM 聲稱新的“優化”編譯器將提供許多顯著優勢,將其描述為編譯器技術方面的“大躍進”。 編譯器將為未來的優化提供更好的基礎設施,並有助於提高代碼質量。
優化和快速編譯器關鍵特性
ARM 在一張幻燈片中概述了兩種編譯器之間的區別,聲稱“優化”編譯器可以更有效地使用寄存器,更少溢出到堆棧,並且需要更少的代碼來執行。
以下是 ARM 的說法:
Quick有一個非常簡單的寄存器分配算法。
- IR 中缺乏信息
- 編譯速度勝過複雜性——起源於 JIT
- 性能差——大量寄存器溢出到堆棧中
優化使用線性掃描寄存器分配。
- 性能和時間之間的完美平衡
- 使用活性分析
- 最小化寄存器溢出到堆棧”
儘管新編譯器仍在開發中,但 ARM 分享了一些性能數據; 在綜合 CPU 測試中,編譯器產生了 15% 到 40% 範圍內的性能提升。 編譯速度提高了大約 8%。 然而,該公司警告說,隨著新編譯器的成熟,這些數字“每天都在變化”。
重點是實現與“快速”編譯器的近乎平價,後者目前在編譯速度和文件大小方面具有明顯優勢。
現在,它看起來像是一種權衡; 新的“優化”編譯器在 CPU 密集型應用程序和綜合基準測試中提供了令人印象深刻的性能改進,但文件增大了 10%,編譯速度降低了約 8%。 雖然最後兩個數字似乎被 CPU 性能提升所抵消,但請記住,它們將適用於每個應用程序,無論 CPU 負載如何,都會佔用更有限的資源,例如 RAM 和存儲空間。 請記住,以 64 位編譯已經比以 32 位編譯佔用更多的 RAM。
編譯速度和啟動時間的任何降低也是一個令人擔憂的問題,因為它會影響設備響應能力和用戶體驗。
多核 ARM 競賽
無論運行時和編譯器如何,另一個令人擔憂的問題是基於 ARMv7-A 和 ARMv8 架構的多核處理器的流行。 八核熱潮始於 2013 年,並很快被認為是廉價的營銷噱頭。 高通公司的一位高管甚至稱八核處理器“愚蠢”和“愚蠢”,稱該公司不會製造任何處理器,因為其工程師“並不愚蠢”。 這位高管還將 Apple A7 的 64 位支持描述為“噱頭”。
快進兩年,我的辦公桌上有一部 64 位高通八核 Cortex-A53 智能手機,而這位高管的名牌上有不同的職位。
好像 8 核芯片還不夠,明年我們將看到第一批基於 10 核應用處理器的設備。 第一款 10 核智能手機芯片來自聯發科 Helio X20,它將配備三個 CPU 核心集群,稱為 huge.Medium.TINY。 聽起來很有趣,而且會變得更好; 我們將很快開始看到基於新一代英特爾處理器的第一款價格實惠的 Android 設備。
讓我們看看 ARM 核心之戰以及它們對開發人員和消費者的意義。 ARM SoC 八核設計有兩個不同版本。 高端解決方案傾向於使用ARM的big.LITTLE佈局,使用四個低功耗核心和四個大核心用於高負載。 第二種在芯片中粘貼 8 個 ARM CPU 內核的方法是使用相同的內核,或者在具有不同時鐘速度的兩個集群中使用相同的內核。
領先的移動芯片製造商傾向於在高端設備中使用 big.LITTLE 芯片和主流產品中的常規八核芯片。 這兩種方法都有其優點和缺點,所以讓我們仔細看看。
ARM big.LITTLE 與常規八核:
使用兩個不同 CPU 內核的集群可以在 big.LITTLE 設計上實現良好的單線程性能和效率。 權衡是單個 Cortex-A57 內核的大小大致相當於四個小型 Cortex-A53 內核的大小,而且效率較低。
在具有不同時鐘的兩個集群中使用八個相同的內核或八個相同的內核,既經濟又節能。 但是,單線程性能較低。
當前一代基於 ARMv8 內核的 big.LITTLE 設計無法使用最便宜的 28nm 製造節點。 即使在 20nm,一些設計也表現出很多節流,這限制了它們的持續性能。 基於 Cortex-A53 CPU 內核的標準八核可以在 28nm 中有效實現,因此芯片製造商不必使用 20nm 或 16/14nm FinFET 等尖端製造節點,從而降低成本。
我不想讓你對芯片設計趨勢感到厭煩,但對於 2015 年和 2016 年的移動處理器,請牢記一些重要的基礎知識:
- 大多數芯片將使用 28nm 製造節點和 Cortex-A53 內核,限制了單線程性能。
- 大 Cortex-A57 內核在三星和高通的兩個主要設計中實現,但其他芯片製造商似乎正在跳過它並等待 Cortex-A72 內核。
- 在接下來的 18 個月中,多線程性能將變得越來越重要。
- 除非 20nm 和 FinFET 節點變得更便宜(2016 年及以後),否則無法預期性能大幅提升。
- 10 核設計也即將推出。
所有這些點對 Android 開發者都有一定的影響。 只要芯片製造商在大多數智能手機和平板電腦芯片上都停留在 28nm 工藝上,開發人員就必須盡最大努力挖掘多線程性能並專注於效率。

ART 和新的編譯器在提高性能和效率方面應該有很長的路要走,但它們無法打破物理定律。 舊的 32 位設計將不會在未來的許多設備中使用,即使是最便宜的設備也開始配備 64 位芯片和 Android 5.0。
儘管 Android 5.x 的用戶群仍然相對較小,但它正在迅速增長,並且隨著 100 至 150 美元的手機配備 64 位芯片和 Android 5.0 的到來,它的增長速度將會更快。 向 64 位 Android 的過渡進展順利。
最大的問題是 Dalvik 什麼時候會得到新的 Optimized 編譯器。 它可能會在今年晚些時候推出,或者明年推出 Android 6.0; 現在說肯定還為時過早。
異構計算進入手機
還有一件事要記住; 移動圖形功能變得越來越強大,尤其是在高端處理器上,因此芯片製造商在幕後做了大量工作,以便將它們用於遊戲和視頻解碼以外的用途。 異構計算已經存在了幾年,它允許 PC 將高度並行化的任務卸載到 GPU。
現在,同樣的技術也出現在移動處理器上,有效地融合了 CPU 和 GPU 內核。 該方法將允許開發人員通過向 GPU 執行某些類型的程序(即 OpenCL 加載)來釋放更多性能。 開發人員將能夠專注於吞吐量,而處理器將自動處理 CPU 和 GPU 上的並行執行。
當然,這並不適用於所有應用程序並在所有情況下都可以減少負載,但在某些細分市場中,它應該會釋放更多性能並有助於降低功耗。 根據負載,SoC 將自動決定如何處理代碼,將 CPU 用於某些任務,同時將其他任務卸載到 GPU。
由於我們正在處理並行化的應用程序,因此該方法有望在圖像處理方面產生最大的改進。 例如,如果您需要使用超分辨率和重新採樣圖像,則該過程可以在 OpenCL 中分為不同的階段。 如果該過程涉及不同的階段,例如find_neighbor
、 col_upsample
、 row_upsample
、 sub
和blur2
,則硬件將以最有效的方式在 CPU 和 GPU 內核之間分配負載,具體取決於哪種內核可以最好地處理給定任務大大地。 這不僅將性能提高一個數量級,而且還有助於降低功耗。
英特爾死而復生,它看起來很適合屍體
英特爾錯過了移動革命,實際上將市場拱手讓給了 ARM 及其硬件合作夥伴。 然而,這家美國芯片製造商有足夠的資金和資源在替補席上呆上幾年,然後捲土重來。
去年,英特爾為其平板電腦 Atom 處理器的銷售提供補貼,在不到一年的時間裡出貨量翻了兩番。 它現在將注意力轉向配備新 SoFIA Atom x3 處理器的智能手機領域。 坦率地說,我不完全確定這些芯片是否應該被稱為英特爾處理器,因為它們實際上並不是由芯片巨頭生產的。 SoFIA 處理器是與中國芯片製造商合作設計的,預算緊張。 它們是在 28nm 節點上製造的,速度慢、體積小且價格便宜。
這可能會讓一些不經意的觀察者感到意外,但英特爾並不在意高端移動解決方案。 低端 SoFIA 部件將為價格在 50 美元到 150 美元之間的商品化 Android 手機提供動力。 首批設計將於 2015 年第二季度末開始出貨,其中大部分將面向亞洲市場以及世界其他地區的新興市場。 雖然我們可能會在北美和歐洲看到其中一些,但英特爾的重點似乎是中國和印度。
英特爾正在對沖其 Atom x5 和 x7 處理器的賭注,這將使用全新的架構以及該公司最先進的 14nm 製造節點。 然而,這些產品的目標是平板電腦而不是智能手機,至少目前是這樣。
一個我沒有答案的大問題是,英特爾可以贏得多少設計勝利。 分析師在這個問題上存在分歧,此時出貨量預測看起來像是猜測。
去年,英特爾證明了它願意承受虧損並燒掉數十億美元來在平板電腦市場站穩腳跟。 現在說它是否會在新的 Atom 芯片,尤其是智能手機 SoFIA 產品上使用相同的方法還為時過早。
到目前為止,我只見過一款基於英特爾 SoFIA 處理器的實際產品——一款售價 69 美元的中國平板電腦,具有 3G 連接性。 它本質上是一款超大手機,因此您可以想像,一款入門級 SoFIA 手機最終的成本可能會低得多。 對於白盒智能手機和平板電腦製造商來說,這一定是一個誘人的提議,因為他們可以輕鬆設計出 50 至 100 美元背面帶有“Intel Inside”標籤的設備,從營銷角度來看,這聽起來不錯。
不幸的是,我們只能猜測未來一年左右將有多少英特爾手機和平板電腦出貨。 我們顯然在處理數百萬、數千萬的單位,但問題是:有多少個? 大多數分析師認為,英特爾今年將出貨 20 到 5000 萬台 Atom x3 處理器,考慮到今年智能手機的總出貨量預計將達到 12 億台,這只是杯水車薪。 然而,英特爾是無情的,有錢可燒,也不必從這些芯片中獲利。 到 2015 年底,它可以佔領 3% 到 4% 的市場份額,但市場份額在 2016 年及以後應該會繼續增長。
這對 Android 開發人員意味著什麼?
由於某些兼容性問題,英特爾在一些 Android 開發人員中名聲不佳。 幾年前這是一個真正的問題,因為硬件與大多數設備中使用的標準 ARM 內核有很大不同。
幸運的是,公司在這兩年裡取得了很大的進步; 它提供廣泛的培訓計劃、全面的文檔等。 事實上,快速瀏覽一下 LinkedIn 的職位列表就會發現,英特爾正在招聘數十名 Android 開發人員,並且每個月都會有幾個新職位空缺。
所以一切都很順利,對吧? 這得看情況…
上週我有機會測試了一款基於英特爾 Atom Z3560 的新華碩手機,我必須說我對結果很滿意。 它是一個很好的硬件平台,能夠在預算設備上處理 4GB 的 RAM。 華碩認為它今年可以銷售 3000 萬部,考慮到英特爾的智能手機市場份額,這確實令人印象深刻。
唯一的問題是一些 Android 應用程序在英特爾硬件上仍然表現不佳。 通常,它不會太大,但您確實會遇到一些奇怪的崩潰、不切實際的基準測試分數和其他兼容性問題。 壞消息是開發人員無法解決與硬件相關的問題,儘管獲得一些基於英特爾的設備進行測試將是一個好的開始。 好消息:英特爾正在盡最大努力解決所有問題,因此您不必這樣做。
至於 ARM 硬件,我們將在更多集群中看到更多 CPU 內核。 許多主流設備的單線程性能仍然有限,即基於四核和八核 Cortex-A53 SoC 的廉價手機。 現在說新的 Google/ARM 編譯器是否能夠提高此類設備的性能還為時過早。 他們可能會,但有多少? 異構計算是明年值得關注的另一個趨勢。
總結一下,以下是 Android 開發人員在 2015 年末和 2016 年在軟件和硬件方面的預期:
- 更多入門級和主流細分市場的英特爾 x86 處理器。
- 英特爾的市場份額在 2015 年將微不足道,但在 2016 年及以後可能會增長。
- 更多 ARMv8 多核設計即將上線。
- 新的“優化”ART 編譯器。
- 異構計算即將到來,但還需要一段時間。
- 過渡到 FinFET 製造節點和 Cortex-A72 將釋放更多性能和功能。