从滴水到怒海:方舟编译器如何影响技术世界?
从今年4月份,在HUAWEI P30系列国内发布会上提出方舟编译器的概念以来,这项据称华为投入十年之久的技术浮出水面已经接近半年。随着相关披露越来越多,我们也可以更清晰和完整地看待这一艘“方舟”。
“方舟”一词,乍一听似乎有着浓浓的“救世”意味。或许是因为那些古老的人类文明都发源于江河流域之中,使得很多民族都有着关于洪水灭世的传说,而不同民族也有应对洪水的不同方式。如果说治水的概念意味着人与自然间坚忍不拔的持久抗衡,那么方舟的概念则意味着重新建立秩序的渴望——携带上生命之种,去塑造一个新的世界。
今天我们想讨论的问题,就是方舟编译器是否也可以像诺亚方舟一样,在技术世界中建立起新的秩序?
滴水:发现方舟
在故事的开始,我们首先要看看这艘意在重建秩序的方舟究竟是如何建成。
在最近于北京举办的首场方舟编译器开源技术沙龙中,方舟编译器架构师完整的介绍了方舟编译器的来时路。
虽然方舟编译器在近年以来才进入大众视野,但实际上华为第一个编译团队成立于2009年,至今已经有十年之久。当然,编译团队刚刚成立时并不是为了解决安卓问题,而是发觉了无线基站领域因对于性能要求高,高效代码只能手写汇编的问题。通过数字信号处理芯片(DSP)后端编译器的推出,让DSP可以更好地发挥信号接收、转换功能。
就在这样不断发现并解决问题的过程中,华为的编译团队累积了大量人才和解决方案经验。其中就包括并行计算等行业专业领域的高级编译工具软件Open64的创世鼻祖Fred Chow等编译器专家。
在华为编译团队开始习惯通过代码编译对软件系统进行优化提升时,这种方法论自然会被应用到更广阔的地方。到了2016年,华为智能手机业务的增长规模十分可观,同时也有越来越多人发现了安卓机制的痛点。
我们知道安卓是应用Java语言开发的,但编程者所使用的编程语言想要变成安卓执行机器语言,还需要中间一层虚拟机进行翻译,而虚拟机在执行翻译工作时又会应用多种模式。如同在河流两岸建立起一座迷宫当做桥梁,想要渡河就必须在其中绕来绕去,在这一整个复杂的过程中就会浪费大量CPU和内存资源,成为了安卓系统卡顿缓慢的终极原因。
在华为编译团队内部,专家们还一度研究究竟是对虚拟机模式进行优化,还是另起炉灶做一套能够执行Java的一套运行环境和编译器。直到Fred Chow用一篇论文终结了讨论。
Fred Chow在论文中讨论了究竟什么样中间表示(IR)是更优越的,对于IR的关注,让方舟团队意识到,是否可以有一种统一的IR,既支持多种语言的表示,又能支持后端多种芯片代码指定生成?
最终历经三年的时间,方舟编译器降临世间,其将Java/C/C++等混合代码一次编译成机器码直接越过编译器在终端运行的革命性理念,彻底告别了编译器造成的资源消耗,对安卓系统的运行效率进行了极大的提升。
至此方舟建成,才有了重建秩序的底气。
路标:方舟开源的技术贡献与技术使命
如果对华为有所了解的读者一定知道,华为对于安卓系统的深度优化其实由来已久,例如在EMUI 5.0版本中,华为就已经通过更换安卓原生的文件系统来解决安卓碎片化文件冗余的问题。但方舟编译器之所以被赋予重建技术世界秩序的希望,是因为它的意义远不止提升安卓系统运行效率。或者说,帮助安卓应用加速,只是方舟编译器帮助开发者在华为平台上展现出的第一重价值。
而第二重“方舟价值”,来自于一个自方舟编译器出现伊始就不断被提及的词汇——开源。这意味着方舟编译器想要承载的不仅仅是一家手机厂商的软件能力承载,而是一片更广阔的天地。从这一次开源技术沙龙中,我们也能找到一些方舟编译器前行的“路标”。
例如多语言联合优化。目前方舟编译器能够支持Java/C/C++等等高级语言的转换,但当前移动编程后端+前端应用语言丰富程度极高,尽可能提高编程语言支持范围,才能让方舟编译器更好的发挥作用并且赋能更广阔的开发者群体。
还有多硬件平台支持。在华为开始启用全场景智慧化策略后,意味着全场景下的高效编程问题急需被提上日程。实际上不仅仅是华为,随着AIoT技术的发展,大量硬件设备的智慧化、硬件终端之间的密集联结都已经成为了必然趋势。这时通过方舟编译器的开源,可以帮助这些硬件建立起更高效完备的底层软件体系。方舟编译器的轻量级运行模式,也正在和多硬件平台支持形成配合。方舟编译器的架构师提到,如今的方舟编译器在运行时仅仅有6万行代码。这种轻量级的运行模式意味着方舟编译器对于硬件性能的要求更低,适用性更强。尤其面对一些成本有限或形态大小要求苛刻的硬件时,方舟编译器的轻量模式就可以发挥优势。
当然最重要的还有方舟编译器带来的全新软硬件协同方式。相比以往一个中间层面对一切硬件芯片平台的方式,方舟编译器提出了一个“软硬件联合优化”的概念。既是产生能够更好的运行在不同类型芯片平台上的机器代码,充分利用向量化指令、GPU资源等等生成指令在新平台进行更好的优化。一种全新模式确立如同打开了游戏的新关卡,让玩家们可以在一个新的领域中探索宝藏,尤其是芯片行业自此也可以参与其中,从软硬联合优化角度去提升芯片在终端上的最终表现。
从上述方向中我们可以看到,方舟编译器的目标远不止于安卓软件的优化,而是对整个基础软件世界提供技术理念方面的创新贡献。而开源则是这艘方舟的风帆,帮助其更好在行驶在技术世界扩散理念。
怒海:未来在开源的彼端
在2010年,考古队在土耳其东部的阿勒山发现了一艘船只的残骸。经检测这些残骸的年代可以追溯至4800年前,即《创世纪》中所描述的诺亚方舟的存在时期。虽然没人能证明这些残骸就是传闻中拯救人类命运的“方舟”。但这一切说明在4800年前,确实有一艘船只穿越洪海、驶向彼岸。
那么对于方舟编译器来说,行进了技术之海、扬起了开源之帆后,究竟会驶向一个怎样的彼岸?
毫无疑问,在开源策略之下,方舟编译器不断累积合作伙伴和应用场景,其技术价值将呈现出滚雪球式的指数级增长。但这一增长过程也如同怒海争锋,一定是在不断遇到新问题的过程中,通过攻克难题来实现的。如果将目光放得更长远一些,总览中国与全球软件产业发展,我们可以从翻滚的波涛中看到三个趋势。
第一, 中国基础软件产业的基础设施重塑。
安卓系统对于中国基础软件产业影响之深,相信人人有目共睹。其弊病带来的影响也不仅存在于手机之中,也包括大量其他硬件,甚至也养成了我们的思维模式,让我们在编程、设计架构时都已经习惯了虚拟机的存在。通过开源和编译器底层技术构建,方舟编译器给中国基础软件产业带来的是一种彻底的翻新,从产品本身到设计逻辑。由此带来的效率提升,也绝不止一两款产品或几家企业,而是关乎到整个产业。
第二, 对全球安卓生态造成底层震荡。
前文中我们已经反复提及方舟编译器为安卓系统带来的历史性革新,在安卓系统运行效率获得前所未有的提升后发生的故事,才更加值得我们关注。例如改善系统沉疴后对于安卓体系硬件性能的聚变式释放,将会让用户体验得以极大的提升。尤其对于那些无力进行底层软件革新的厂商来说,同样也能通过方舟编译器的开源模式享受到红利。如此以来苹果与安卓两大阵营的竞争天平,显然也会产生进一步的倾斜。这一切与全球安卓生态中的每一份子都息息相关。
第三, 方舟编译器与鸿蒙的组合牌。
最后不能遗忘的,是华为的操作系统鸿蒙OS。自从方舟编译器和鸿蒙OS的陆续推出,我们已经见识到了华为渴望整体重构软件世界的远大目标。在这一目标实现过程中,编译器和操作系统的技术路径打通显然是一种必然的举措。方舟编译器此时指向的种种方向,从软硬件联合优化到多硬件平台支持,显然会帮鸿蒙OS打造出一个更先进高效的底层体系。双方打出的组合牌,或许将会对中国软件产业造成更大的撼动。
在方舟编译器御浪而行的过程中,技术世界的新秩序似乎就在从开源到未来的航路上逐渐建立起来了。但不同的是,方舟编译器不是为了逃离一个“旧世界”远航,而是像大航海时代的每一位海员一样,凭借着人类本性中对于创新与探索的源动力,去往每一个未知的地方,点亮技术世界的每一片版图。
《创世纪》对于方舟到达新世界的形容是:“地存之时、稼穑寒暑、冬夏昼夜、永不间绝。”和这4800年以来的每一个航行故事一样,我们总能抵达一片更美好的彼岸。
在科技发展的航路上,我们永远在渴望下一个彼岸,永远在写下新的“创世纪”。