分享

安卓革命!华为方舟编译器揭秘:已有45款应用 流畅度提升60%

 为云白头 2019-08-31

据华为官方消息,华为方舟编译器开源官网已经在今天正式上线(https://www.),目前源代码已经提供下载,相关文档、演示等资料也一应俱全。

官网介绍,方舟编译器是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编程平台,包含编译器、工具链、运行时等关键部件

目前,方舟编译器还在持续演进中,陆续将上述能力实现和开源。

据悉,本次方舟编译器开源的是编译器框架部分源码,包括编译器中间表示(IR)和语言编译实现,同时搭配编译器其他二进制组件,实现Java程序到aarch64汇编指令的编译过程。

开发者可以获得相关代码和文档,供参考学习、了解方舟编译器的架构和代码。

华为表示,在开源的世界里,我们与开发者们分享技术进步,共同成长,期待能够与广大开发者们同“舟”共济,为科技创新蓄力,不断推进产业开放式创新、构建开放生态。

据了解,华为方舟编译器提供了全新的系统及应用的编译和运行机制,从动态编译变为静态编译,就是直接将高级语言直接编译成机器码,彻底消除了虚拟机动态编译的额外开销,实现了开发和运行效率的兼容并举。

根据华为实验室的测试数据,EMUI 9.1在仅仅对系统组件System Server应用了华为方舟编译器后,就带来了系统操作流畅度提升24%,系统响应性能提升44%的收益。

此外,方舟编译器编译的应用在开发阶段就已完成。只要是经过编译器编译的应用,在应用市场上上架了以后,用户下载的就是编译过的了。以新浪微博极速版为例,在应用方舟编译器之后,根据华为实验室测试数据显示,操作流畅度提升高达60%。

【方舟编译器的优势】

按照华为的介绍,方舟编译器是为支持多种编程语言、多种芯片平台的联合编译、运行而设计的统一编程平台,包含编译器、工具链、运行时等关键部件,目前还在持续演进中,上述能力将陆续实现和开源。

通过多语言统一IR表示,方舟编译器可实现应用中多种编程语言联合编译优化提升性能,而且在支持多平台的同时,根据设备特征提供便捷的开发与部署策略提升效率。

华为方舟编译器提供了全新的系统及应用的编译和运行机制,从动态编译变为静态编译,就是直接将高级语言直接编译成机器码,彻底消除了虚拟机动态编译的额外开销,实现了开发和运行效率的兼容并举。

1、多语言联合

将同一应用中的不同语言代码联合编译、联合优化,消除语言间的性能“鸿沟”,降低开发者的优化成本

2、轻量运行时

通过编译器的语言实现能力和优化能力增强,应用运行时的开销更小

3、软硬件协同

编译器与芯片实现软硬件协同优化,充分发挥硬件能效,应用体验更佳

4、多平台支持

支持面向多样化的终端设备平台进行编译和运行,根据设备特征提供便捷的开发与部署策略,提高开发效率 

【方舟编译器的架构设计】

当前方舟编译器支持Java/Kotlin程序字节码的前端输入,C/C++/JS等其它编程语言的支持还在规划中。

方舟编译器的中间表示(IR)转换器将前端输入转换成方舟IR,并输送给后端的优化器,最终生成二进制文件,二进制文件与编译器运行时库文件链接生成可执行文件,在方舟的运行环境中就可执行该文件。

方舟编译器IR是支持程序编译和运行的中间程序表示。程序源代码中的任何信息对于程序分析和优化都是有帮助的,所以方舟IR的目标是尽可能完整详细地提供源程序的信息。

【方舟编译器的环境配置】

- 硬件配置推荐

方舟编译器的硬件配置需求不高,最低只需2GHz双核心处理器、2GB内存、200GB硬盘空间,当然要获得最高效率,更高配置是强烈推荐的。

- 开发环境推荐

需要64位版本的Linux,尤其推荐Ubuntu 16.04

sudo apt-get -y install openjdk-8-jdk git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip lib32z1-dev qemu g++-multilib gcc-multilib python3-paramiko python-paramiko python-jenkins python-requests python-xlwt libglib2.0-dev libpixman-1-dev linux-libc-dev:i386

sudo apt-get -y install gcc-5-aarch64-linux-gnu g++-5-aarch64-linux-gnu

- Clang编译器

主要用于编译方舟编译器代码。

下载clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04,地址:

http://releases./download.html#8.0.0

放置到openarkcompiler/tools目录,打开openarkcompiler/build/config/BUILDCONFIG.gn文件,将GN_C_COMPILER、GN_CXX_COMPILER和GN_AR三个变量配置为Clang编译器所在路径。例如:

GN_C_COMPILER = '${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang'

GN_CXX_COMPILER = '${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang++'

GN_AR = '${MAPLE_ROOT}/tools/clang_llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/llvm-ar'

其中${MAPLE_ROOT}为openarkcompiler源码根目录。

安装Ninja、GN并完成配置

- Ninja、GN

下载Ninja(v1.9.0)及GN(Linux Version) Ninja,地址:

https://github.com/ninja-build/ninja/releases

GN下载地址:

https://archive./browse/content/sha1_git:2dc0d5b26caef44f467de8120b26f8aad8b878be/raw/?filename=gn

将GN和Ninja可执行程序放置到openarkcompiler/tools目录,打开openarkcompiler/Makefile文件,将GN和NINJA两个变量配置为GN和Ninja可执行程序所在路径。例如:

GN := ${MAPLE_ROOT}/tools/gn/gn

NINJA := ${MAPLE_ROOT}/tools/ninja_1.9.0/ninja

【方舟编译器FAQ】

Q1:方舟编译器开源有官方网站吗?

A1:

孵化期间,官方网站为https://www.正式毕业后的官网待定。

Q2:方舟编译器是一次性全部代码吗?

A2:

首次开源范围是编译器IR(Intermediate Representation)、RC(Reference Counting)和多语言设计思想等,用于与业界、学术界沟通交流。后续将陆续开源编译器前端、后端,支持其它语言(比如JavaScript)的编译等。

当前部分Java语言特性和JVM虚拟机特性的支持未包括在本次开源代码中,包括annotation、lambda表达式、泛型等。

目前仍有很多地方不完善,会在社区陆续迭代,遇到问题请在社区提交issue。 

Q3:通过哪些渠道可以获取方舟编译器的框架源码?

A3:

孵化期间,开发者可以通过如下代码托管网址获得相关代码和文档,供参考学习、了解方舟编译器的架构和代码。

华为云托管地址:

https://code.opensource./HarmonyOS/OpenArkCompiler

开源中国码云托管地址:

https:///harmonyos/OpenArkCompiler

Q4:方舟编译器开源路标是怎样的?

A4:

方舟编译器从2019年8月开始开源,欢迎广大的应用开发者、手机厂商、软件从业人员一起共建开源社区和生态。

开源计划大体上这样安排:2019年8月重点开源框架部分;后续将陆续开源编译器前端、后端;支持Jav 程序编译、JavaScript语言应用的编译等。

Q5:还有哪些方式可以获取方舟编译器的相关信息?

A5:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多