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

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

3天内不再提示

技术探讨之请教方舟编译器的十个问题

Linux阅码场 来源:Linuxer 2019-11-29 14:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

缘起

华为的方舟编译器终于走出开源的第一步,官方地址为https://www.openarkcompiler.cn/home 。我个人于今年4月在机械工业出版社出版了“深入理解Android”系列书籍的最后一本书——《深入理解Android Java虚拟机ART》一书。

这本书围绕Android系统中Java虚拟机ART做了详尽的源码分析。其中,第六章更是以全书最多的篇幅从字节码到机器码的编译过程进行了详细介绍。

写书时,我一直耿耿于怀国内在计算机基础核心技术上缺乏领军公司的投入之时,没想到今年华为先送出方舟编译器,紧接其后是鸿蒙OS。未来不敢说结局怎样,但现时真切让我和我周围的小伙伴看到了希望。就算激起无论是正面还是负面的全民大讨论,我觉得相比无人问津也算是大大的进步。

言归正传,结合方舟的官网,我其实有几个技术问题想请教。当然,随着方舟进一步扩大和深度开源,这些问题可能也就不言自明。到时候感兴趣的读者不妨以这里提到的问题来看看方舟是如何巧妙解决它们的。

问题一:

https://www.openarkcompiler.cn/document/FAQ Q2说“当前部分Java语言特性和JVM虚拟机特性的支持未包括在本次开源代码中,包括:annotation、lambda表达式、泛型等”。想了解下,这部分功能是否已经在方舟编译器上实现但目前还未开源出来?还是什么别的情况?出于什么考虑,lambda表达式和泛型未能在此时开源?

问题二:

编译器领域现在业界都使用三段式编译器。架构如下:

编译器框架LLVM和核心就是LLVM IR,而方舟编译器也有一个Maple IR。请问相比LLVM IR,Maple IR的优势在哪里?它的愿景是什么?


问题三:

经过方舟编译器处理后的应用,从公开渠道上的信息上看,在流畅度等几个方面有大幅提升。能否详细介绍下流畅度是怎么衡量的?也就是说,方舟内部是如何评价经过方舟编译器处理后以及没有经过方舟编译器处理后的应用的性能?都选了哪些测试点

问题四:

适配了方舟编译器的有几十个APP,但还有很多APP开发者没有机会第一时间接触方舟(包括我自己)。想了解下使用方舟编译器是否有副作用?比如,如果将字节码全部转成了机器码,这会占据较大的存储空间。请问是否有类似这样的问题,有什么好的解决办法吗?

问题五:

方舟编译器说干掉了JVM虚拟机(原话可能不是如此,但我理解是这个意思),请问经过方舟编译器处理的应用是否能按以前的Java程序那样调试?

备注:为什么会问这个问题?java程序debug时必须靠jvm帮忙,比如处理jdwp,更关键是要靠jvm来解释执行字节码。不过,我在ART那本书里并没有详细介绍这个过程,我不保证这个问题问正确了。也请懂行的朋友们指正。

问题六:

方舟编译器对java语言的特性支持如何?比如,ART虚拟机中,一个java方法即使以机器码方式运行,在某些时候也必须回退到解释执行。比如下面的ArrayIndexOutOfBounds异常的处理。

对于类似这种问题,方舟编译器在技术层面上对于它们大概的解决思路是什么?

问题七:

ART虚拟机在诸如synchronized等的实现上做了大量工作(ART一书的第十二章),包括优化(比如一个线程如果已经得到某个锁的情况下,后续再去获取这个锁的话,实际上只是递增了该锁的引用计数)。虽然PTHREAD相关同步处理也有类似的优化,但我想了解下方舟编译器(如果干掉虚拟机的话),有没有针对这方面的处理或者优化?

问题八:

引用计数是垃圾回收的一种经典技术。方舟编译器说是用引用计数代替了其它几种GC技术,做到随用随收。但其中有一些需要特别注意的地方(ART一书的第十三章、十四章专门讲解内存分配和GC)。垃圾回收是和内存分配息息相关的。ART虚拟机内部对内存分配有着良好的管理。比如rosalloc分配器,BumpPointerSpace、针对大内存对象的LargeObjectSpace等。请问方舟编译器是怎么应对的?是将java层的new直接对应到比如native层的new/malloc(直接依赖os的内存分配机制),还是也依赖一个小的,轻量级的runtime来协助这方面的工作?

另外,ART在内存管理方面做了一些优化,比如当程序退到后台后,会对内存进行碎片整理。如果方舟编译器是随用随收的话,请问长时间运行后,是否会存在内存碎片?如果有,是如何处理的呢?

问题九:

官网上提到了伴随方舟编译器有一个轻量级的运行时,这个运行时主要工作是什么?它和ART JVM有何区别?方舟编译器未来还要支持Javascript,这个运行时是否也能支持JS?还是说需要一个针对js的运行时?最后,这个运行时会开源吗?

问题十:

我想方舟编译器的背后是承载了华为甚至很多国人伟大梦想的,但一时领先并不保证长久领先。比如,媒体做了经过方舟编译器处理后APP和苹果手机上APP打开速度的对比测试。方舟编译器的效果比较明显。但ios13据苹果官方数据上看,APP启动速度提升了两倍。这说明我们在努力,对手也在努力。华为是一个有着很强忧患意识的伟大公司。那么,方舟编译器针对ios13是否有优势?我们这个优势会不会很容易被对手颠覆呢?我们该如何努力,朝哪个方向努力呢?

最后

无论怎样,方舟编译器都会在IT历史上留下浓重的笔墨。衷心期望我个人或其它朋友能为我们自己的IT成果——方舟编译器、鸿蒙OS等编写学习资料,贡献自己的微薄力量。

最后的最后

我期望的结果不是朋友们从我的书、文章、博客后学会了什么知识,干成了什么,而应该是说,神农,我可是踩在你的肩膀上的喔。

关于学习方面的问题,我已经讨论完了。后面这个公众号将对一些基础的技术,新技术做一些学习和分享。也欢迎你的投稿。不过,正如我在公众号“联系方式”里说的那样——郑渊洁在童话大王《智齿》里有一句话令我印象深刻,大意是“我有权保持沉默,但你说的每一句话都可能成为我灵感的源泉”。所以,影响不是单向的,很可能我从你那学到的东西更多。

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

    关注

    3

    文章

    4031

    浏览量

    45566
  • 编译器
    +关注

    关注

    1

    文章

    1669

    浏览量

    51080
  • 方舟编译器
    +关注

    关注

    0

    文章

    63

    浏览量

    660

原文标题:邓凡平:技术探讨之请教方舟编译器的十个问题

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    性能突破 | SpacemiT-X60 在 LLVM 编译器上实现 16% 显著提升

    :ACaseStudyinLLVMOptimizationforRISC-V》。演讲基于在进迭时空SpacemiT-X60RISC-V处理上开展的十个月优化实践,系统阐述如何通过上游LLVM的多项改进,显著提
    的头像 发表于 11-21 18:04 8459次阅读
    性能突破 | SpacemiT-X60 在 LLVM <b class='flag-5'>编译器</b>上实现 16% 显著提升

    开源鸿蒙技术大会2025丨编译器与编程语言分论坛:语言驱动系统创新,编译赋能生态繁荣

    语言设计演进、编译器优化、工具链创新等前沿议题,汇聚产学研多方力量,共同探讨如何通过语言与编译技术推动开源鸿蒙生态向更高效、更智能的方向发展。
    的头像 发表于 11-20 17:24 483次阅读
    开源鸿蒙<b class='flag-5'>技术</b>大会2025丨<b class='flag-5'>编译器</b>与编程语言分论坛:语言驱动系统创新,<b class='flag-5'>编译</b>赋能生态繁荣

    边缘设备AI部署:编译器如何实现轻量化与高性能?

    电子发烧友网综合报道 AI编译器是专门为人工智能(AI)和机器学习(ML)模型设计的编译器,其核心目标是将高级的AI模型描述(如计算图、神经网络结构)转换为特定硬件平台(如CPU、GPU、FPGA
    的头像 发表于 07-06 05:49 6113次阅读

    什么样的代码会被编译器优化

    现在的编译器有多智能,可能你辛辛苦苦写的代码,在编译器看来就是几句废话,直接被删除掉。
    的头像 发表于 01-16 16:38 930次阅读

    Triton编译器与GPU编程的结合应用

    Triton编译器简介 Triton编译器是一种针对并行计算优化的编译器,它能够自动将高级语言代码转换为针对特定硬件优化的低级代码。Triton编译器的核心优势在于其能够识别并行模式,
    的头像 发表于 12-25 09:13 1314次阅读

    Triton编译器如何提升编程效率

    在现代软件开发中,编译器扮演着至关重要的角色。它们不仅将高级语言代码转换为机器可执行的代码,还通过各种优化技术提升程序的性能。Triton 编译器作为一种先进的编译器,通过多种方式提升
    的头像 发表于 12-25 09:12 1194次阅读

    Triton编译器在高性能计算中的应用

    先进的编译技术,为高性能计算提供了强大的支持。 Triton编译器简介 Triton编译器是一种开源的编译器框架,旨在为异构计算环境提供高效
    的头像 发表于 12-25 09:11 1560次阅读

    Triton编译器的优化技巧

    在现代计算环境中,编译器的性能对于软件的运行效率至关重要。Triton 编译器作为一先进的编译器框架,提供了一系列的优化技术,以确保生成的
    的头像 发表于 12-25 09:09 1828次阅读

    Triton编译器的优势与劣势分析

    据流分析技术,能够自动识别并优化深度学习模型中的计算瓶颈,从而提高模型的整体性能。 它支持多种硬件平台的优化,包括CPU、GPU、FPGA等,为深度学习模型的部署提供了更广泛的选择。 灵活可扩展 : Triton编译器采用了模块化的设计思想,开发者可以根据需要自定
    的头像 发表于 12-25 09:07 1863次阅读

    Triton编译器在机器学习中的应用

    1. Triton编译器概述 Triton编译器是NVIDIA Triton推理服务平台的一部分,它负责将深度学习模型转换为优化的格式,以便在NVIDIA GPU上高效运行。Triton编译器支持
    的头像 发表于 12-24 18:13 1627次阅读

    Triton编译器的常见问题解决方案

    Triton编译器作为一款专注于深度学习的高性能GPU编程工具,在使用过程中可能会遇到一些常见问题。以下是一些常见问题的解决方案: 一、安装与依赖问题 检查Python版本 Triton编译器通常
    的头像 发表于 12-24 18:04 6388次阅读

    Triton编译器支持的编程语言

    Triton编译器支持的编程语言主要包括以下几种: 一、主要编程语言 Python :Triton编译器通过Python接口提供了对Triton语言和编译器的访问,使得用户可以在Python环境中
    的头像 发表于 12-24 17:33 1454次阅读

    Triton编译器与其他编译器的比较

    Triton编译器与其他编译器的比较主要体现在以下几个方面: 一、定位与目标 Triton编译器 : 定位:专注于深度学习中最核心、最耗时的张量运算的优化。 目标:提供一高度抽象、灵
    的头像 发表于 12-24 17:25 1586次阅读

    Triton编译器功能介绍 Triton编译器使用教程

    Triton 是一开源的编译器前端,它支持多种编程语言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一可扩展和可定制的编译器框架,允许开发者添加新的编程语言
    的头像 发表于 12-24 17:23 2686次阅读

    分享关于编译器的科普

    源代码分析工具和IDE集成。GCC被构建成一单一的静态编译器,这使得它非常难以被作为API并集成到其他工具中。 GCC比Clang支
    的头像 发表于 12-09 09:49 907次阅读