從滴水到怒海:方舟編譯器如何影響技術世界?

naojiti發表於2019-09-12

從今年4月份,在HUAWEI P30系列國內釋出會上提出方舟編譯器的概念以來,這項據稱華為投入十年之久的技術浮出水面已經接近半年。隨著相關披露越來越多,我們也可以更清晰和完整地看待這一艘“方舟”。

“方舟”一詞,乍一聽似乎有著濃濃的“救世”意味。或許是因為那些古老的人類文明都發源於江河流域之中,使得很多民族都有著關於洪水滅世的傳說,而不同民族也有應對洪水的不同方式。如果說治水的概念意味著人與自然間堅忍不拔的持久抗衡,那麼方舟的概念則意味著重新建立秩序的渴望——攜帶上生命之種,去塑造一個新的世界。

今天我們想討論的問題,就是方舟編譯器是否也可以像諾亞方舟一樣,在技術世界中建立起新的秩序?

滴水:發現方舟

在故事的開始,我們首先要看看這艘意在重建秩序的方舟究竟是如何建成。

在最近於北京舉辦的首場方舟編譯器開源技術沙龍中,方舟編譯器架構師完整的介紹了方舟編譯器的來時路。

雖然方舟編譯器在近年以來才進入大眾視野,但實際上華為第一個編譯團隊成立於2009年,至今已經有十年之久。當然,編譯團隊剛剛成立時並不是為了解決安卓問題,而是發覺了無線即站領域因對於效能要求高,高效程式碼只能手寫彙編的問題。通過數字訊號處理晶片(DSP)後端編譯器的推出,讓DSP可以更好地發揮訊號接收、轉換功能。

就在這樣不斷髮現並解決問題的過程中,華為的編譯團隊累積了大量人才和解決方案經驗。其中就包括平行計算等行業專業領域的高階編譯工具軟體Open64的創世鼻祖Fred Chow等編譯器專家。

在華為編譯團隊開始習慣通過程式碼編譯對軟體系統進行優化提升時,這種方法論自然會被應用到更廣闊的地方。到了2016年,華為智慧手機業務的增長規模十分可觀,同時也有越來越多人發現了安卓機制的痛點。

我們知道安卓是應用Java語言開發的,但程式設計者所使用的程式語言想要變成安卓執行機器語言,還需要中間一層虛擬機器進行翻譯,而虛擬機器在執行翻譯工作時又會應用多種模式。如同在河流兩岸建立起一座迷宮當做橋樑,想要渡河就必須在其中繞來繞去,在這一整個複雜的過程中就會浪費大量CPU和記憶體資源,成為了安卓系統卡頓緩慢的終極原因。

在華為編譯團隊內部,專家們還一度研究究竟是對虛擬機器模式進行優化,還是另起爐灶做一套能夠執行Java的一套執行環境和編譯器。直到Fred Chow用一篇論文終結了討論。

Fred Chow在論文中討論了究竟什麼樣中間表示(IR)是更優越的,對於IR的關注,讓方舟團隊意識到,是否可以有一種統一的IR,既支援多種語言的表示,又能支援後端多種晶片程式碼指定生成?

最終歷經三年的時間,方舟編譯器降臨世間,其將Java/C/C++等混合程式碼一次編譯成機器碼直接越過編譯器在終端執行的革命性理念,徹底告別了編譯器造成的資源消耗,對安卓系統的執行效率進行了極大的提升。

至此方舟建成,才有了重建秩序的底氣。

路標:方舟開源的技術貢獻與技術使命

如果對華為有所瞭解的讀者一定知道,華為對於安卓系統的深度優化其實由來已久,例如在EMUI 5.0版本中,華為就已經通過更換安卓原生的檔案系統來解決安卓碎片化檔案冗餘的問題。但方舟編譯器之所以被賦予重建技術世界秩序的希望,是因為它的意義遠不止提升安卓系統執行效率。或者說,幫助安卓應用加速,只是方舟編譯器幫助開發者在華為平臺上展現出的第一重價值。

而第二重“方舟價值”,來自於一個自方舟編譯器出現伊始就不斷被提及的詞彙——開源。這意味著方舟編譯器想要承載的不僅僅是一家手機廠商的軟體能力承載,而是一片更廣闊的天地。從這一次開源技術沙龍中,我們也能找到一些方舟編譯器前行的“路標”。

例如多語言聯合優化。目前方舟編譯器能夠支援Java/C/C++等等高階語言的轉換,但當前移動程式設計後端+前端應用語言豐富程度極高,儘可能提高程式語言支援範圍,才能讓方舟編譯器更好的發揮作用並且賦能更廣闊的開發者群體。

還有多硬體平臺支援。在華為開始啟用全場景智慧化策略後,意味著全場景下的高效程式設計問題急需被提上日程。實際上不僅僅是華為,隨著AIoT技術的發展,大量硬體裝置的智慧化、硬體終端之間的密集聯結都已經成為了必然趨勢。這時通過方舟編譯器的開源,可以幫助這些硬體建立起更高效完備的底層軟體體系。方舟編譯器的輕量級執行模式,也正在和多硬體平臺支援形成配合。方舟編譯器的架構師提到,如今的方舟編譯器在執行時僅僅有6萬行程式碼。這種輕量級的執行模式意味著方舟編譯器對於硬體效能的要求更低,適用性更強。尤其面對一些成本有限或形態大小要求苛刻的硬體時,方舟編譯器的輕量模式就可以發揮優勢。

當然最重要的還有方舟編譯器帶來的全新軟硬體協同方式。相比以往一箇中間層面對一切硬體晶片平臺的方式,方舟編譯器提出了一個“軟硬體聯合優化”的概念。既是產生能夠更好的執行在不同型別晶片平臺上的機器程式碼,充分利用向量化指令、GPU資源等等生成指令在新平臺進行更好的優化。一種全新模式確立如同開啟了遊戲的新關卡,讓玩家們可以在一個新的領域中探索寶藏,尤其是晶片行業自此也可以參與其中,從軟硬聯合優化角度去提升晶片在終端上的最終表現。

從上述方向中我們可以看到,方舟編譯器的目標遠不止於安卓軟體的優化,而是對整個基礎軟體世界提供技術理念方面的創新貢獻。而開源則是這艘方舟的風帆,幫助其更好在行駛在技術世界擴散理念。

怒海:未來在開源的彼端

在2010年,考古隊在土耳其東部的阿勒山發現了一艘船隻的殘骸。經檢測這些殘骸的年代可以追溯至4800年前,即《創世紀》中所描述的諾亞方舟的存在時期。雖然沒人能證明這些殘骸就是傳聞中拯救人類命運的“方舟”。但這一切說明在4800年前,確實有一艘船隻穿越洪海、駛向彼岸。

那麼對於方舟編譯器來說,行進了技術之海、揚起了開源之帆後,究竟會駛向一個怎樣的彼岸?

毫無疑問,在開源策略之下,方舟編譯器不斷累積合作伙伴和應用場景,其技術價值將呈現出滾雪球式的指數級增長。但這一增長過程也如同怒海爭鋒,一定是在不斷遇到新問題的過程中,通過攻克難題來實現的。如果將目光放得更長遠一些,總覽中國與全球軟體產業發展,我們可以從翻滾的波濤中看到三個趨勢。

第一, 中國基礎軟體產業的基礎設施重塑。

安卓系統對於中國基礎軟體產業影響之深,相信人人有目共睹。其弊病帶來的影響也不僅存在於手機之中,也包括大量其他硬體,甚至也養成了我們的思維模式,讓我們在程式設計、設計架構時都已經習慣了虛擬機器的存在。通過開源和編譯器底層技術構建,方舟編譯器給中國基礎軟體產業帶來的是一種徹底的翻新,從產品本身到設計邏輯。由此帶來的效率提升,也絕不止一兩款產品或幾家企業,而是關乎到整個產業。

第二, 對全球安卓生態造成底層震盪。

前文中我們已經反覆提及方舟編譯器為安卓系統帶來的歷史性革新,在安卓系統執行效率獲得前所未有的提升後發生的故事,才更加值得我們關注。例如改善系統沉痾後對於安卓體系硬體效能的聚變式釋放,將會讓使用者體驗得以極大的提升。尤其對於那些無力進行底層軟體革新的廠商來說,同樣也能通過方舟編譯器的開源模式享受到紅利。如此以來蘋果與安卓兩大陣營的競爭天平,顯然也會產生進一步的傾斜。這一切與全球安卓生態中的每一份子都息息相關。

第三, 方舟編譯器與鴻蒙的組合牌。

最後不能遺忘的,是華為的作業系統鴻蒙OS。自從方舟編譯器和鴻蒙OS的陸續推出,我們已經見識到了華為渴望整體重構軟體世界的遠大目標。在這一目標實現過程中,編譯器和作業系統的技術路徑打通顯然是一種必然的舉措。方舟編譯器此時指向的種種方向,從軟硬體聯合優化到多硬體平臺支援,顯然會幫鴻蒙OS打造出一個更先進高效的底層體系。雙方打出的組合牌,或許將會對中國軟體產業造成更大的撼動。

在方舟編譯器御浪而行的過程中,技術世界的新秩序似乎就在從開源到未來的航路上逐漸建立起來了。但不同的是,方舟編譯器不是為了逃離一個“舊世界”遠航,而是像大航海時代的每一位海員一樣,憑藉著人類本性中對於創新與探索的源動力,去往每一個未知的地方,點亮技術世界的每一片版圖。

《創世紀》對於方舟到達新世界的形容是:“地存之時、稼穡寒暑、冬夏晝夜、永不間絕。”和這4800年以來的每一個航行故事一樣,我們總能抵達一片更美好的彼岸。

在科技發展的航路上,我們永遠在渴望下一個彼岸,永遠在寫下新的“創世紀”。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31561483/viewspace-2656945/,如需轉載,請註明出處,否則將追究法律責任。

相關文章