0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

华为方舟编译器详解 到底有什么用

454398 来源:工程师吴畏 2019-04-26 11:42 次阅读

4月11日,华为春季发布会上,除了P30系列,另外一个词也在程序员届火了一把——华为方舟编译器。据介绍,华为方舟编译器可以让安卓性能突飞猛进。

近日,华为王成录博士对方舟编译器的原理进行了讲解,表示华为从2009年就创建编译组,期间推出自研编译器HCC、编程语言CM等,一直到如今推出了方舟编译器。 下面是详细讲解内容。

什么是编译器

编译器是连接人类世界与机器世界之间的一座桥梁,同时也扮演着“翻译者”的角色。

它将程序员使用的高级语言翻译成机器能明白的机器码,从而使得手机能够听懂并执行人类的指令。

现有的安卓系统主要是在手机上进行编译,往往有部分程序需要一边转换一边执行,影响程序执行的效率。

编译器优化对程序运行性能及用户体验有显著影响,它的开发,从系统软件到应用软件,需要投入大量的时间和精力进行研发,这一板块在国内尚属“无人区”。

华为已经在研发编译器的路上积累了多年,早至2009年华为就创建了编译组,到2013年推出自研编译器HCC,对于华为在移动通信领域领先起到了关键作用,这背后是华为人前赴后继的努力和无数次尝试,终于,在2019年方舟编译器正式与大家见面。

方舟编译器,安卓性能革命突破

当前大部分安卓应用都涉及不同开发语言,不同语言形成的代码需要在运行态中进行协同从而产生额外消耗。

而方舟编译器是业界首个多语言联合优化的编译器,开发者在开发环境中可以一次性将多语言统一编译为一套机器码,运行时无需产生跨语言带来的额外消耗,并可以进行跨语言的联合优化,提升运行效率。

安卓自身的编译技术在不断的发展,但始终需要在运行中依赖虚拟机来进行动态编译和解释执行,对系统资源消耗较大。

而方舟编译器在开发环境中就可以完成全部代码的编译,手机安装应用程序后无需依赖虚拟机资源,即可全速运行程序,带来效率上的极大提升。

举一个例子:EMUI 9.1仅仅对系统组件System Server应用了华为方舟编译器后,就带来了系统操作流畅度提升24%,系统响应性能提升44%的收益。

方舟编译器,高效的回收机制

内存管理是程序开发与运行时需要重点考虑的部分,也和系统流畅度息息相关。

安卓在内存回收上采用集中回收机制,发声全局回收时更需要暂停应用,这也是随机卡顿的根因之一。

而方舟编译器提供了更高效的内存回收机制,回收时无需暂停应用,随时用随时回收,大大提高运行速度。

方舟编译器,应用级编译优化

代码优化是编译器最为核心的功能,也是评判一个编译器优劣最重要的标准。

当前由于安卓应用使用了虚拟机机制,难以面向不同应用对虚拟机进行针对性的灵活优化。

安卓ART的AoT和JIT动态编译因为是运行在手机上,受资源所限,因而只能使用简单的优化算法

而方舟编译器由于是在应用开发阶段进行编译,所以可以允许不同应用灵活采用不同的编译优化方案,而且因为在开发环境编译不会受到手机性能的限制,可以使用更多先进的优化算法,从而使得每个应用的性能达到最佳。

简单易用,开放开源

华为在持续进行技术创新的同时,也注重将技术成果回馈行业,华为方舟编译器在开发构建的阶段为开发者提供快速的集成编译环境,大大降低了开发者的学习成本和使用成本,令产业与更多用户受益。

华为方舟编译器会从2019年开始全面开源,邀请整个产业和生态来一起共同关注和提升安卓性能体验。

继华为P30系列发布会方舟编译器开源后,将在2019年8月的华为终端开发者大会宣布方舟编译框架代码开源,后续会在2019年11月的绿盟开发者大会实现完整方舟编译器代码开源。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 华为
    +关注

    关注

    215

    文章

    33609

    浏览量

    247122
  • 编译器
    +关注

    关注

    1

    文章

    1575

    浏览量

    48606
  • 方舟编译器
    +关注

    关注

    0

    文章

    60

    浏览量

    156
收藏 人收藏

    评论

    相关推荐

    NUC123的USB外设到底有没有DMA功能?

    下载最新的TRM 1.07: 在最先前的描述以及USB的寄存章节都有DMA相关的内容。但是DMA那一章节里的框图没有USB外设。同时关于USB外设DMA的用法也没具体说明。所以USB外设到底有没DMA功能,若是该怎么
    发表于 01-16 08:26

    AD9781或是AD9783芯片的DCOP/DCON信号什么用

    1,AD9781或是AD9783芯片他的DCOP/DCON信号什么用?能举个例么,我看了下他们的PDF文档,好像没感觉出来他到底有什么用,用在哪些方面? 2,如果AD9781或是A
    发表于 12-18 06:41

    到底有哪些原因会导致电枢绝缘阻值为零?

    对电机多大影响,现在这样能安全使用多长时间,为什么电枢会是零呢,到底有哪些原因会导致电枢绝缘阻值为零?
    发表于 12-14 08:30

    编译器的优化选项

    一个程序首先要保证正确性,在保证正确性的基础上,性能也是一个重要的考量。要编写高性能的程序,第一,必须选择合适的算法和数据结构;第二,应该编写编译器能够有效优化以转换成高效可执行代码的源代码,要做到
    的头像 发表于 11-24 15:37 404次阅读
    <b class='flag-5'>编译器</b>的优化选项

    请问MSP430到底有几个时钟呀?

    请问MSP430到底有几个时钟呀
    发表于 11-03 06:36

    ARM和DSP到底有什么区别?

    现在在学ARM,想知道ARM和DSP到底有什么区别?为什么有些地方DSP有些ARM
    发表于 10-19 07:20

    attiny24可以什么编译器开发?

    attiny24a可以什么编译器开发,如果arduino IDE开发,那么isp固件怎么烧写,手上有一个usbisp下载
    发表于 10-13 08:29

    OpenHarmony 的js引擎的是方舟编译器

    OpenHarmony 的js引擎的是方舟编译器吗?方舟编译器不是用来编译吗?
    发表于 10-09 09:32

    esp32除了arduino编译器还可以哪个编译器

    esp32除了arduino编译器还可以哪个编译器
    发表于 09-25 06:13

    Keil修改ARM编译器及配置方法

    Keil MDK自 V5.36 版本之后,默认就不带 Arm Compiler V5版本编译器。如果需要使用 V5 版本编译器,就需要自己下载并安装。
    发表于 09-19 10:41 2162次阅读
    Keil修改ARM<b class='flag-5'>编译器</b>及配置方法

    npu是什么意思?npu芯片是什么意思?npu到底有什么用

    npu是什么意思?npu芯片是什么意思?npu到底有什么用?  NPU的概念 NPU(Neural Processing Unit,神经网络处理器)是一种专门用于处理人工神经网络计算的计算机微处理器
    的头像 发表于 08-27 17:03 2.5w次阅读

    NUC123的USB外设到底有没有DMA功能?

    下载最新的TRM 1.07: 在最先前的描述以及USB的寄存章节都有DMA相关的内容。但是DMA那一章节里的框图没有USB外设。同时关于USB外设DMA的用法也没具体说明。所以USB外设到底有没DMA功能,若是该怎么
    发表于 08-24 06:18

    board中的Kconfig到底有什么用

    我感觉board中的Kconfig没有什么用,如果是开发板,还有点。 如果是自己的板子,所有硬件接口肯定是需要使用的,本来可以一步搞定,这个Kconfig就变成两步:先给自己做菜单,然后自己打开菜单全部勾上。
    发表于 08-02 18:24

    SDCC-Linux下的51 MCU编译器

    SDCC (小型设备C编译器)是为8位微控制器开发的免费C编译器。尽管兼容多种不同体系结构,但SDCC C编译器更适合8051内核。 SDCC是命令行固件开发工具,含预处理器、编译器
    的头像 发表于 06-16 15:19 3648次阅读

    R32C/100系列C编译器包V.1.01 C编译器用户手册

    R32C/100系列C编译器包V.1.01 C编译器用户手册
    发表于 04-28 19:54 1次下载
    R32C/100系列C<b class='flag-5'>编译器</b>包V.1.01 C<b class='flag-5'>编译器</b>用户手册