查看原文
其他

华为方舟编译器 PK 微软苹果谷歌编译器,到底谁胜出?

CSDN App CSDN 2019-10-30

记者 | 胡巍巍
受访者 | 刘新铭
出品 | CSDN(ID:CSDNnews)

近日,华为方舟编译器终于正式开源,兑现了在2019年8月开源的承诺。

与此同时,其代码不在GitHub,而是在自家开源平台上。这也意味着,华为开源平台同时问世。

可以说,这是华为兑现开源承诺的第一步,因此备受开发者们期待。

基于此,CSDN采访在计算机语言设计和高级编译器优化技术方面,具有深入实践经验的刘新铭。

刘新铭,鉴释的联合创始人兼首席架构师

以下为根据采访实录整理而成的文章:


在惠普Java编译器技术实验室,担任主任的岁月


刘新铭在担任惠普Java 编译器技术实验室主任时,曾参与团队建设与新技术。在惠普服务器部门任职期间,刘新铭主要负责管理Java性能、C / C ++编译器和性能分析工具等工作。

期间,刘新铭构建了一套全新的编译器中端,包括新的编译器中间表示、用于创建编译器中间表示的组件集、代码生成器和全套优化。

刘新铭认为,一个好的设计绝不会是出自一人之手,它肯定是融合了团队里每个成员的智慧。为此,刘新铭曾带领团队,和惠普的HP-UX团队、英特尔微处理器团队进行了深度合作。

惠普的合作伙伴们,也给刘新铭的团队,提供了数千个应用程序,以帮助他们提高惠普服务器性能,从而在服务器市场中保持竞争力。

在那段时间里,刘新铭目睹了一个完整的生态系统,如何从零开始。他每天都能看到,职业经理人在协调大量复杂的工作,也经常观察他的领导层,如何以合作共赢的态度,与合作伙伴打交道。

刘新铭从这段经历中,深刻体会到,成就一个生态,来自所有参与方的团队合作精神以及其中每个人的个人领导力。

而打造中国本土的IT生态,应从跨公司合作方面和开发者角度切入。对此,刘新铭强烈建议新一代开发者,应用科学和量化的方法,来完成开发工作。


编译器的历史


在刘新铭看来,编译器技术的发展,有两个主要驱动因素。

第一个驱动因素,是编程语言的演变,即编写代码以使计算机能执行人们希望它所执行的任务的能力。

它的主要目的,是为了提高编程效率,主要影响的是编译器的语言处理部分。

在计算机历史中,第一种编程语言是汇编语言。但很快,人们发现汇编语言的表达能力太弱,因为你不能要求人类来编写机器代码。

如果真有人愿意这样做,那不仅单调乏味、而且容易出错。

在上世纪50、60年代,相继诞生了高性能的Fortran和面向金融领域的COBOL,后来又陆续推出C、C ++、Java Script和Java。

第二个驱动因素,是计算机系统架构的演变。系统架构的每一次变化,都会导致编译器优化发生重大改变。

如果编译器优化处理得当,程序员将无需关注架构的复杂性,并能从硬件中获取最佳性能。以下是一些系统架构的演进:

  • 从大型机到RISC;

  • 从单CPU到多CPU;

  • 从单核到多核;

  • 从纵向扩展到横向扩充。

未来几年内,更高级别的领域特定语言(DSL)将会不断涌现,以支持领域专用架构(DSA)的可编程性。

领域特定编译器将发挥关键作用,连接两端并从DSA中获得最佳性能。其中一个很流行的趋势是,将有用于人工智能的DSL。

用它编写应用程序,将会使能许多人工智能DSA。因此,我们需要有一个非常好的人工智能领域特定语言编译器(AI-DSC),来从这些人工智能DSA中获得最佳性能。

当然,编译器技术的演变,也体现在其他诸多方面。上面介绍的两个驱动因素,主要是为了帮助大家一窥编译器的发展。


如何看待华为方舟编译器开源?


方舟编译器的首席架构师周志德,是刘新铭职场上和生活中的好朋友,因此从该项目启动之时,刘新铭对方舟编译器就有所了解。

刘新铭和周志德,都曾在MIPS(知名的精简指令集计算的推行者)和SGI(一个生产高性能计算机系统的跨国公司)公司供职。

十多年来,刘新铭和周志德共同参与了,包括开发Open64编译器在内的诸多项目。他们都坚持简单通用的设计原则,践行在正确的抽象层上,做正确的事情,也正因如此,他们开发的Open64编译器,可以提供多个中间表征层。

方舟编译器秉持了相同的设计原理,并在其中间表示中,设计了一些特定的Java抽象来实现Java特定的优化目标。

从华为已公布的内容来看,刘新铭认为,它还有很多的性能提升空间。与此同时,刘新铭认为,它在不久的将来,还会有更多发展机遇。

刘新铭看来,方舟编译器的发布,对中国IT行业来说,是个好消息。并有以下值得关注的点:

1. 这不仅是首个由中国人投资、设计和开发的编译器基础设施。更多人也将了解编译器的各种细节,以及如何在每个设计细节中,以特定方式实现某些特定功能。

2. 方舟编译器还使得创建中国自己的计算机软件生态系统成为可能,甚至有可能产生新的兼具高安全性和高性能的计算机平台。

3. 方舟编译器开源的最大价值,在于它让开源社区里那些渴望改变的开发者,可以充分发挥自己创造力。华为有机会展现其开放的思想、并充分利用这一极富创造力且高度自律的社区。

对于华为的开源平台,刘新铭认为,华为创建自己的开源存储库、而非使用Github的原因很明显,就是为了避免美国的潜在干扰。如果华为真的有向IT社区,展示其对中国开源运动的无私态度,那么,这一开源代码托管平台,很有可能将成为“中国的GitHub”。


有了方舟Java编译器,用户可以有哪些新体验?


Java语言在运行时,引入了托管内存,减轻程序员在内存管理上的负担。在运行时,它使用垃圾收集(GC)来释放不再使用的内存。

经过20多年的改进,GC变得越来越好。但是,如果GC子系统进入频繁的GC模式,它通常会完全占用CPU来执行垃圾收集。

这是Android应用程序速度,慢于iPhone应用程序的一个重要原因。方舟Java编译器采用了引用计数(RC),以显著减少对GC的需求。

这种特定的优化,构成了性能提升的主要部分。你可以想象一下,当Android应用程序,在被方舟编译器编译后加速了20-30%时,用户将会有怎样的体验。当然,这一假设是建立在编译器实现并按照起初设计的方式执行的条件上。


方舟编译器和微软、Google、苹果编译器的对比


在刘新铭看来,技术水平的高低,取决于开发团队的素质,而非源代码本身。

所有这些公司,都为其编译器投资,建立了非常明确的商业目标。刘新铭举了个例子,微软始终把重点,放在开发人员对其开发平台的粘性上,并为Windows平台锚定应用程序可用性。

正因为这种思维模式,微软发明了C#和TypeScript。为了进一步增加用户粘性,他们构建了具有丰富集成开发环境(Integrated Development Environment)的专有编译器。

从某种意义上说,它们在Wintel桌面平台上非常成功。但是,微软编译器的专有性,使得它在云环境中并不那么成功,更不用说移动计算了。由于专注于开发人员的工作效率,Microsoft编译器并不注重性能优化。

与微软相反,Google的编译器投资,也有一个非常明确的商业目标,即降低其云平台的成本。通过改进编译器优化,并在少数关键的应用程序上获得性能提升,Google减少了为满足业务需求而构建的服务器数量。

基于这样的发展重心,Google建立了一个相对强大的编译器优化团队。就Google编译器优化功能的质量而言,它们在低级优化或指令级优化方面更强大。在某种程度上,他们的优化团队,受到英特尔微处理器设计变化的影响非常大。

苹果编译器团队与微软非常相似,它的商业目标是为了增加开发人员对苹果平台的粘性,包括MacBook 和iPhone。

无论出于何种原因,苹果推行使用Objective C而不是Java作为编程语言。由于使用Objective C编写的应用程序是静态编译的,因此它们的运行速度比Java快得多,占用空间也小得多。

与运行Android手机的Java应用程序相比,苹果具有优越的性能优势,与包括华为在内的所有Android手机制造商相比,苹果的利润率更高。

此外,由于 Objective C的性能优势,苹果长久以来并不专注于性能优化,而是采用与Microsoft类似的方式,将预算用于提高开发人员的生产力上。

华为的方舟Java编译器采用Google的思维模式,增强了编译器的性能,旨在缩小华为手机与苹果手机上的Java应用程序之间的性能差距。

因此,华为建立了一支比苹果更具优化能力的团队,但远远弱于Google。然而,由于手机的利润率不是Google的核心问题,Google并没有在Android平台上,为优化Java上花费太多精力。

因此,可以说,华为在移动端Java优化方面,拥有比Google更强大的团队。而微软在移动计算领域已经出局,因此在此方面,将华为与微软进行比较毫无意义。


编译器和操作系统之间,有着怎样的关系?


自Unix于1974年诞生以来,编译器与操作系统,就一直保持着紧密联系。随着Unix的推出,贝尔实验室也设计了C语言,并用它来搭建Unix内核。

与早期的计算机语言不同,例如Fortran和Pascal,它们将I / O函数作为语言的一部分,C语言从语言定义中提取I / O函数,并将它们作为标准运行时libc库的一部分。

将功能库与语言解耦,是具有里程碑意义的决定,其促进了Unix操作系统的快速发展,并使之成为现代主流操作系统。

例如,线程库的创建,使并行编程成为可能。此类线程库定义了OS环境中如何支持该线程。

在语言方面,编译器将感知到线程语义的存在、并相应地执行优化。毕竟,操作系统和编译器,都和与系统架构紧密配合,才能获得最佳性能。凭借最佳性能,我们可以节省更多能源,而这对环境也非常有益。

除了性能之外,编译器和操作系统,通常都会为CPU架构错误提供补丁,例如2018年1月3日爆出的Meltdown问题。这种架构错误在所有CPU架构中,都是真实存在的,包括Intel、Arm和Powers。


鉴释在编译器方面的研究和进展


在采访的最后,CSDN请刘新铭聊了聊自己所在的公司鉴释科技, 据悉,鉴释正在寻求A+轮融资。

在编译器方面,鉴释已经有所成就,其扩展了Open64优化框架,并构建出产品线中的静态分析引擎。

Open64,是由SGI于2000年开源的高性能计算编译器。它包含以高级形式呈现应用程序的中间表示和被称为HSSA的稀疏数据模型。

鉴释所做的框架,扩展并增强了指针分析,使得用户能够追踪指针的内容、和指针指向的数据结构的字段。

现有的Open64优化框架,只能追踪在复杂控制流程中的数据值。鉴释将其扩展到跨程序/模块边界。通过增强后的优化框架,用户可以有效地追踪复杂的内存问题。

由于编译器优化框架在设计之初,就考虑了多语言支持,因此鉴释对稀疏数据建模框架的扩展,自然也支持以多种计算机语言编写的应用程序组件。据悉,鉴释正在寻求A+轮融资,想对鉴释了解更多,可点击阅读原文。

受访者简介:刘新铭,鉴释的联合创始人兼首席架构师,主导鉴释面向DevOps的静态代码分析工具的核心研发工作。他在开发和交付高性能计算系统(HPC)编译器和性能分析工具方面拥有数十年的丰富经验,是业界公认的静态代码分析技术专家。

【END】

 热 文 推 荐 

余承东硬刚 iPhone11;苹果推送正式版 iOS 13;php-nsq 3.4.3 线上稳定版发布 | 极客头条
TDD 就是个坑!
程序员面向软件开发时,如何成功?
走出腾讯和阿里,大厂员工转型记
阿里云智能运维的自动化三剑客
免费开源!新学期必收藏的AI学习资源,从课件、工具到源码都齐了
华为 | 泰山之巅 鲲鹏展翅 扶摇直上九万里
鸿蒙 OS 的到来,能为我们改变什么?| 程序员大本营9月刊
厉害!接班马云的为何是张勇?

点击阅读原文,精彩继续。

你点的每个“在看”,我都认真当成了喜欢
Modified on

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存