OpenArkCompiler方舟编译

news/2024/12/22 19:00:22/

OpenArkCompiler方舟编译
概述
面向多设备、支持多语言的统一编程平台。
OpenArkCompiler是来自华为方舟编译器的开源项目。
OpenArkCompiler 四个技术特点
能够将不同语言代码编译成一套可执行文件,在运行环境中高效执行:
支持多语言联合优化、消除跨语言调用开销;
更轻量的语言运行时;
软硬协同充分发挥硬件能效;
支持多样化的终端设备平台
开源计划
编译器框架代码开源

时间:2019年8月
开源范围:编译器IR+中端语言实现
开放能力:
框架开源供参考学习,了解方舟编译器架构及框架代码
开发者可构建出完整编译器工具链,支持Java Sample程序编译(非应用)
后续开源范围 陆续开源编译器前端、后端、编译优化;完整支持Java程序编译、JavaScript语言应用的编译等。
在这里插入图片描述
在这里插入图片描述

如何使用
• source build/envsetup.sh arm release 或
• source build/envsetup.sh arm debug
• make setup
• make
• make libcore
• make testall
孵化器项目
• FutureWei编译器分支 https://gitee.com/openarkcompiler-incubator/mapleall
• Maple Engine https://gitee.com/openarkcompiler-incubator/maple_engine
在这里插入图片描述
在这里插入图片描述

相关文档
• 架构设计原理
o MAPLE IR Design
o RC API
o Naive RC操作插入原理
o 虚函数表和接口函数表设计介绍
o Phase设计介绍
o Maple通用模块应用手册
• 环境配置
• 开发者指南
• 编程规范
• C++编程探讨之指针
华为方舟编译器
方舟编译器是华为推出的首个完全自主研发的编译器平台,于2019年8月31日正式上线。方舟编译器已成为码云最快达成5000 Star的开源项目。
华为方舟编译器是华为公司专门为软件厂商研发的统一编程平台,包含编译器、工具链、运行时等关键部件。该编译器支持多种编程语言、多种芯片平台的联合编译与运行,能够有效解决安卓程序“边解释边执行”的低效率问题。
2019年8月31日,华为方舟编译器开源官网正式上线。
2019年11月,华为方舟编译器获“2019东北亚优秀开源项目”奖。
研发背景
在这里插入图片描述
在这里插入图片描述

编译器是连接人类世界与机器世界之间的一座桥梁,任何在手机上的程序,都需要经历软件开发的过程,软件开发使用的语言,易于程序员理解的高级语言,程序在手机上运行需要转换成可以高效执行的机器码,这样的转换过程就是由编译器完成的。可以说编译器是用来生成软件的软件,连接软件与芯片的桥梁,其性能,效率直接影响到最基础的消费者体验。
技术特点
安卓系统使用Java作为编程语言,易于开发,但是不会将代码直接编译成机器语言,程序运行时有相当一部分代码,还需要通过手机上的虚拟机临时同步编译,影响程序执行的效率。华为方舟编译器采取了静态编译的方式,首个取代了安卓虚拟机模式的静态编译器。
性能效果
方舟编译器采用全程执行机器码高效运行程序,架构进一步得到优化,可供开发者在开发环境一次性的将高级语言编译为机器码,手机安装应用程序后可全速运行程序,带来效率上的极大提升。根据华为实验室的测试数据,EMUI 9.1在仅仅对系统组件System Server,应用了华为方舟编译器后,就带来了系统操作流畅度提升24%,系统响应性能提升44%。
开源计划
在方舟编译器面世之时,华为就宣布未来将这一技术开源,希望更多的APP厂商,高校,安卓手机厂商,开源社区的开发者能一同加入进来。
华为计划在2020年将方舟编译器完整开源,帮助开发者构建完整的工具链。华为还将提供代码调优工具,开发者可以选择根据工具的优化,建议来调整自己的代码,与方舟编译器配合获得更优的执行效果。
截至2019年,已经有40多个顶级应用通过方舟的编译,上架到华为应用商城,未来将有更多的第三方使用方舟编译器。同时,方舟编译器所有代码也将开源给业界。

参考链接:
https://gitee.com/openarkcompiler/OpenArkCompiler?utm_source=alading&utm_campaign=repo


http://www.ppmy.cn/news/607233.html

相关文章

叉乘、向量积的计算以及推导

叉乘 几何图示: 设有 a(ax,ay,az),b(bx,by,bz)\mathbf{a}\left(a_{x}, a_{y}, a_{z}\right), \mathbf{b}\left(b_{x}, b_{y}, b_{z}\right) a(ax​,ay​,az​),b(bx​,by​,bz​) i,j,k分别是X,Y,Z轴方向的单位向量…

反射来命令执行存在的一些问题

一.利用Runtime进行反射 java.lang.Runtime.getRuntime().exec("")若使用该paylaod,比如若依利用点如下: Object bean Class.forName(beanName).newInstance(); invokeMethod(bean, methodName, methodParams)想要通过Class.forName(beanNa…

大数据ClickHouse(十五):ClickHouse SQL语法之DDL 操作讲解

文章目录 ClickHouse SQL语法之DDL 操作讲解 一、创建库 二、查看数据库

Mathpix:非常好用的公式生成器,可以图片转公式

官方网站:Mathpix 截图快捷键: 截图后自动识别生成公式,第三个为Markdown格式公式。

AI与传统编译器

AI与传统编译器 至于TVM,现在有很多框架(TF,Pytorch),然后会部署到不同平台(CPU、GPU、TPU),神经网络编译器呢就是把不同框架里写的东西编译成一样的格式再生成到某一平台的代码 再来…

【图论】有向无环图的拓扑排序

1. 引言 有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,字面意思的理解就是图中没有环。常常被用来表示事件之间的驱动依赖关系,管理任务之间的调度。拓扑排序是对DAG的顶点进行排序,使得对每一条有向边(u, …

大数据必学Java基础(五十三):Colletion接口

文章目录 Colletion接口 一、Colletion接口常用方法 二、Collection集合的遍历 Colletion接口 一、Colletion接口常用方法

余子式、代数余子式、伴随矩阵

余子式 定义 设矩阵 A(aij)nnA\left(a_{i j}\right)_{n \times n}A(aij​)nn​, 将矩阵 AAA 的元素 aija_{i j}aij​ 所在的第行第 j\mathrm{j}j 列元素划去后, 到余的各元素按原来的排列顾序组成的 n−1n-1n−1 阶 矩脌所确定的行列式称为元古 aija_{i j}aij​ 的余子式&…