0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是方舟編譯器?

電子工程師 ? 來源:YXQ ? 2019-05-09 16:45 ? 次閱讀

“它就是能讓安卓上的應(yīng)用,跑得跟蘋果iOS上一樣快?!泵鎸ε_下的記者,華為消費者BG軟件部總裁王成錄這么描述方舟編譯器的作用。

此時,距離這個吊起了安卓應(yīng)用開發(fā)者們興趣的編譯器在發(fā)布會上被公開,正好過去了兩周。

什么是方舟編譯器?

在4月11日的華為P30中國發(fā)布會上,華為消費者業(yè)務(wù)CEO余承東正式發(fā)布了華為方舟編譯器,并表示這個編譯器能改善安卓應(yīng)用編譯效率,從原先的邊解釋邊執(zhí)行轉(zhuǎn)變?yōu)槿虣C器碼高效運行程序。

編譯器,就是將“一種計算機語言(通常為高級語言)”翻譯為“另一種計算機語言(通常為低級語言)”的程序。高級計算機語言便于開發(fā)者們編寫、閱讀交流以及維護,如Pascal、C、C++、Java等,而低級機器語言是計算機能直接解讀、運行的機器代碼(Machine code)。

華為的方舟編譯器,就是將安卓應(yīng)用開發(fā)者們所使用的JAVA、C/C++們轉(zhuǎn)換成機器代碼。據(jù)王成錄透露,華為從2009年就開始考慮做編譯器,“因為咱們海思做了芯片以后,需要有自己的編譯器才能真正發(fā)揮芯片的能力,從2013年開始,有華為自己的自研編譯器了,叫HCC。”

根據(jù)時間表顯示,在2012年,華為成立了編譯器與編程語言實驗室,在2014年,技術(shù)大牛Fred Chow加入華為負責(zé)編譯器的主架構(gòu),經(jīng)過十年的摸索,華為終于推出了方舟編譯器。

根據(jù)華為官方公布的數(shù)據(jù)顯示,與此前的安卓應(yīng)用開發(fā)相比,方舟編譯器能夠提升24%的系統(tǒng)操作流暢度,提升44%的系統(tǒng)響應(yīng)能力,還能提升60%的第三方應(yīng)用(微博極速版)操作流暢度。

它是怎么做到的?

01

消除了跨語言調(diào)用開銷

王成錄向記者們詳細闡述了方舟編譯器能提升流暢度、響應(yīng)能力的工作原理

首先,方舟編譯器是多語言聯(lián)合優(yōu)化編譯器,“消除了跨語言調(diào)用開銷,這是影響Android性能開銷比較大的核心原因之一?!?/p>

據(jù)王成錄介紹,目前Android應(yīng)用市場里95%的APP都是多種開發(fā)語言:“邏輯部分,都是Java代碼,但是為了增強它的能力,可能所有的APP的開發(fā)者,都會用C寫個庫供Java來調(diào)用。”

Java是一門面向?qū)ο缶幊陶Z言,具有簡單性、面向?qū)ο蟆⒎植际降忍攸c,雖然運行效率不及C++,但開發(fā)效率高、跨平臺性更強的優(yōu)勢,讓JAVA成為了安卓開發(fā)的首選,而通過JNI調(diào)用本地C/C++庫也是目前開發(fā)者們都在做的。

但,Java和C語言之間使用接口調(diào)用,必然會形成額外的性能開銷;王成錄表示,華為方舟編譯器將不同語言代碼在開發(fā)環(huán)境中編譯成一套可執(zhí)行文件,這樣執(zhí)行效率更高。

02

消除了影響性能的虛擬機機制并實時回收內(nèi)存

王成錄認為華為方舟編譯器的第二大特點是消除了影響性能的虛擬機機制。

在安卓系統(tǒng)發(fā)展過程中,虛擬機不可被忽視:Android系統(tǒng)是以Linux為內(nèi)核構(gòu)建的,為了降低應(yīng)用的開發(fā)難度,并將其適配到不同硬件配置的設(shè)備上,Google在Linux內(nèi)核之上構(gòu)建了一個虛擬機,Android應(yīng)用使用java開發(fā),運行在虛擬機之上。

在安卓4.4之前,Dalvik就是安卓系統(tǒng)上使用的虛擬機,基于寄存器。從Android 2.2開始,Dalvik開始使用JIT(Just In Time)技術(shù)來進行代碼轉(zhuǎn)譯,將頻繁調(diào)用的代碼轉(zhuǎn)換為二進制碼,不用每次解釋,而在此前Dalvik虛擬機將所有的Java語句逐句解釋執(zhí)行,效率很低。

但Dalvik越來越不能滿足需求,從Android 5.0開始,虛擬機從Dalvik換成了ART。

ART(Android RunTime)虛擬機,采用AOT(Ahead Of Time)技術(shù),會在應(yīng)用程序安裝時就預(yù)編譯字節(jié)碼到機器語言,不再在執(zhí)行時解釋,從而優(yōu)化了應(yīng)用運行的速度。

所以,到目前為止,安卓系統(tǒng)的任何機器只要裝上應(yīng)用裝上就會分配好虛擬機,占用額外的系統(tǒng)資源,消費者從應(yīng)用市場下載APP以后,真正解釋成機器指令和執(zhí)行文件是在手機上的虛擬機里做的,因此對系統(tǒng)資源要求高。

王成錄表示,ART的執(zhí)行效率雖然提高了,但是對于那些Java動態(tài)特性的部分,仍然做不到直接編譯,還是要解釋執(zhí)行。

這源于Java不是Python那樣的動態(tài)語言,但開發(fā)者經(jīng)常會用到它一個非常突出的動態(tài)相關(guān)機制:反射機制。Java反射機制主要提供了以下功能:在運行時判斷任意一個對象所屬的類、在運行時構(gòu)造任意一個類的對象、在運行時判斷任意一個類所具有的成員變量和方法、在運行時調(diào)用任意一個對象的方法、生成動態(tài)代理。

王成錄表示,Java動態(tài)特性使得開發(fā)者“不需要把所有的程序都寫好,只要能夠運行時實現(xiàn)調(diào)用就可以了?!钡@部分往往只能在運行時進行處理。而方舟編譯器最大的突破就在于此:把動態(tài)的部分全部靜態(tài)編譯掉。

這確實很難。

王成錄認為,這就像一個優(yōu)秀的翻譯官,一定要對漢語言文學(xué)理解的非常到位,然后再對英語理解非常到位;所以,核心是一定要對Java語言動態(tài)特性非常深入的了解和理解,“Java有非常多的庫和業(yè)務(wù)邏輯,這些業(yè)務(wù)邏輯它生成各種各樣的應(yīng)用和代碼和業(yè)務(wù)邏輯,這些業(yè)務(wù)邏輯就需要團隊不斷地去理解它,這個理解有點類似于做代碼測試的遍歷一樣,我讓這個代碼全跑到,才知道可不可以,它需要非常多的時間去積累,我對于庫的理解,當然需要技術(shù),我理解這個庫本身的具體含義,有點像AI里面,我要收集東西,訓(xùn)練一個模型。如果這個東西沒有的話,我訓(xùn)練出來的模型不好,我這個機器沒法執(zhí)行,這個道理特別像。”

然后還需要對這些安卓現(xiàn)有的應(yīng)用可能會用到哪些庫、這些庫之間需要怎么用,需要大量的分析運行狀態(tài),才能夠?qū)⑦@些動態(tài)特性完成提前的編譯?!皩嶋H上華為對于Android整個系統(tǒng)各種應(yīng)用的運行,做了非常仔細去確認,相當于一個應(yīng)用從底層起來,一直跑完以后,到底經(jīng)過哪些過程,這些過程可能會帶來什么問題?去哪些庫取東西,這些東西積累越多,放到動態(tài)庫里面,把它編譯完了。有了這2個積累,才能做成這件事情。”

對于效果,有開發(fā)者向網(wǎng)易科技表示,“做成了靜態(tài)編譯,速度肯定會更快?!?/p>

方舟編譯器還能提供更高效的內(nèi)存回收機制。

王成錄表示,Android的原生內(nèi)存回收,在全局回收時需要暫停應(yīng)用,等待回收完成,這是產(chǎn)生隨機卡頓的重要原因,“而在方舟編譯器里,會在編譯時為程序配備及時回收的內(nèi)存處理機制,在程序執(zhí)行過程當中實時處理?!?/p>

03

可以靈活實現(xiàn)不同應(yīng)用的性能優(yōu)化

王成錄表示,方舟編譯器的第三個亮點是可以靈活實現(xiàn)不同應(yīng)用的性能優(yōu)化。

他表示,現(xiàn)有的安卓編譯大部分代碼在虛擬機環(huán)境運行,而虛擬機的創(chuàng)建由于來自于同一套“模板”,難以作深度的優(yōu)化:不同應(yīng)用的優(yōu)化訴求不一樣;相比之下,方舟編譯器不一樣,每個應(yīng)用編譯優(yōu)化方案自己來定,分別形成不同應(yīng)用優(yōu)化后的機器碼,“相當于說,我們給每一個有追求的應(yīng)用開發(fā)者,都有了一個把自己的應(yīng)用做的更好的機會,不再受限于Android虛擬機的限制?!?/p>

王成錄稱,方舟編譯器最理想的目標就是“上層業(yè)務(wù)代碼不需要改,大家只需要通過華為的方舟編譯器做重新編譯就足夠了。”

他希望,Android陣營所有合作伙伴大家一起努力,從各自場景、各自平臺不斷去打磨它。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 華為
    +關(guān)注

    關(guān)注

    215

    文章

    34165

    瀏覽量

    249692
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1602

    瀏覽量

    48916
  • 方舟編譯器
    +關(guān)注

    關(guān)注

    0

    文章

    60

    瀏覽量

    175

原文標題:讓華為P30運行如飛的,是這個叫方舟的……

文章出處:【微信號:smartman163,微信公眾號:網(wǎng)易智能】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    AI編譯器技術(shù)剖析

    隨著人工智能技術(shù)的飛速發(fā)展,AI編譯器作為一種新興的編譯技術(shù)逐漸進入人們的視野。AI編譯器不僅具備傳統(tǒng)編譯器的功能,如將高級語言編寫的源代碼轉(zhuǎn)換為機器可執(zhí)行的代碼,還融入了人工智能技術(shù)
    的頭像 發(fā)表于 07-17 18:28 ?1244次閱讀

    人工智能編譯器與傳統(tǒng)編譯器的區(qū)別

    人工智能編譯器(AI編譯器)與傳統(tǒng)編譯器在多個方面存在顯著的差異。這些差異主要體現(xiàn)在設(shè)計目標、功能特性、優(yōu)化策略、適用范圍以及技術(shù)復(fù)雜性等方面。以下是對兩者區(qū)別的詳細探討,旨在全面解析其內(nèi)在差異。
    的頭像 發(fā)表于 07-17 18:19 ?1345次閱讀

    Meta發(fā)布基于Code Llama的LLM編譯器

    近日,科技巨頭Meta在其X平臺上正式宣布推出了一款革命性的LLM編譯器,這一模型家族基于Meta Code Llama構(gòu)建,并融合了先進的代碼優(yōu)化和編譯器功能。LLM編譯器的推出,標志著Meta在人工智能領(lǐng)域的又一重大突破,將
    的頭像 發(fā)表于 06-29 17:54 ?1325次閱讀

    鴻蒙開發(fā):【OpenHarmony 4.0 Release指導(dǎo)】

    OpenHarmony 4.0版本如期而至,開發(fā)套件同步升級到API 10。相比3.2 Release版本,新增4000多個API,應(yīng)用開發(fā)能力更加豐富;HDF新增200多個HDI接口,硬件適配更加便捷;我們持續(xù)優(yōu)化圖形框架和方舟編譯器(ArkCompiler)
    的頭像 發(fā)表于 05-14 09:59 ?1077次閱讀
    鴻蒙開發(fā):【OpenHarmony 4.0 Release指導(dǎo)】

    QT開發(fā)學(xué)習(xí)筆記1(安裝交叉編譯器

    QT安裝交叉編譯器
    的頭像 發(fā)表于 02-18 10:02 ?715次閱讀
    QT開發(fā)學(xué)習(xí)筆記1(安裝交叉<b class='flag-5'>編譯器</b>)

    華為舉辦鴻蒙生態(tài)千帆啟航儀式,余承東公布HarmonyOS NEXT開放申請

    據(jù)余承東介紹,為實現(xiàn)核心競爭力的突破,華為通過多年的努力構(gòu)建出一套包含鴻蒙內(nèi)核、ArkTS/倉頡編程語言、方舟編譯器/畢昇編譯器、ArkUI以及盤古AI大模型等在內(nèi)的完整生態(tài)體系。
    的頭像 發(fā)表于 01-19 09:34 ?689次閱讀

    OpenHarmony社區(qū)運營報告(2023年11月)

    API 10。相比3.2 Release版本,新增40 00多個ArkTS API,應(yīng)用開發(fā)能力更加豐富;HDF新增200多個HDI接口,硬件適配更加便捷;我們持續(xù)優(yōu)化圖形框架和方舟編譯器(ArkCompiler),用戶交互體驗得到進一步提升;
    的頭像 發(fā)表于 12-08 21:15 ?622次閱讀
    OpenHarmony社區(qū)運營報告(2023年11月)

    編譯器的優(yōu)化選項

    一個程序首先要保證正確性,在保證正確性的基礎(chǔ)上,性能也是一個重要的考量。要編寫高性能的程序,第一,必須選擇合適的算法和數(shù)據(jù)結(jié)構(gòu);第二,應(yīng)該編寫編譯器能夠有效優(yōu)化以轉(zhuǎn)換成高效可執(zhí)行代碼的源代碼,要做到
    的頭像 發(fā)表于 11-24 15:37 ?767次閱讀
    <b class='flag-5'>編譯器</b>的優(yōu)化選項

    《Android Runtime源碼解析》+深入體會第六章ART的執(zhí)行(4)

    組織開發(fā)多個編譯器項目。長期堅持撰寫技術(shù)博客,其中“LLVM每日談”“方舟編譯器學(xué)習(xí)筆記”等專欄影響較大,曾出版圖書兩部。目前活躍在OSDT/HelloGCC/HelloLLVM、方舟
    發(fā)表于 11-17 01:33

    OpenHarmony 4.0 Release版本發(fā)布,邀您體驗

    適配更加便捷;持續(xù)優(yōu)化圖形框架、方舟編譯器(ArkCompiler)、ArkUI組件定制化能力和組件動效能力,用戶交互體驗得到進一步提升;分布式硬件支持的范圍擴大
    的頭像 發(fā)表于 11-16 08:30 ?377次閱讀
    OpenHarmony 4.0 Release版本發(fā)布,邀您體驗

    OpenHarmony 4.0 Release版本發(fā)布,新增4000+ API

    API,應(yīng)用開發(fā)能力更加豐富;HDF新增200+個HDI接口,硬件適配更加便捷;持續(xù)優(yōu)化圖形框架、方舟編譯器(ArkCompiler)、ArkUI組件定制化能力和組件動效能力,用戶交互體驗得到進一步提升
    的頭像 發(fā)表于 11-13 11:31 ?734次閱讀

    OpenHarmony 4.0 Release版本發(fā)布,邀您體驗

    Release版本,新增4000+個API,應(yīng)用開發(fā)能力更加豐富;HDF新增200+個HDI接口,硬件適配更加便捷;持續(xù)優(yōu)化圖形框架、方舟編譯器(ArkCompiler)、ArkUI組件定制化能力
    的頭像 發(fā)表于 11-10 20:15 ?450次閱讀

    OpenHarmony社區(qū)運營報告(2023年10月)

    多個ArkTS API,應(yīng)用開發(fā)能力更加豐富;HDF新增200多個HDI接口,硬件適配更加便捷;我們持續(xù)優(yōu)化圖形框架和方舟編譯器(ArkCompiler),用戶交互體驗得到進一步提升;ArkUI組件定制化
    的頭像 發(fā)表于 11-07 21:15 ?759次閱讀
    OpenHarmony社區(qū)運營報告(2023年10月)

    新版編譯器的設(shè)計思路和優(yōu)化方法

    小程序編譯器在小程序開發(fā)、預(yù)覽、發(fā)布各個階段都需要使用,因此編譯器性能會直接影響到開發(fā)者開發(fā)效率,也會影響到開發(fā)者工具的使用體驗。 由于舊版的編譯器(基于 webpack4)在構(gòu)建大型項目時會很慢,內(nèi)存占用也高,一直被開發(fā)者吐槽
    發(fā)表于 10-13 11:21 ?264次閱讀
    新版<b class='flag-5'>編譯器</b>的設(shè)計思路和優(yōu)化方法

    OpenHarmony 的js引擎用的是方舟編譯器

    OpenHarmony 的js引擎用的是方舟編譯器嗎?方舟編譯器不是用來編譯嗎?
    發(fā)表于 10-09 09:32