LLVM之父Chris Lattner:编译器的黄金时代

a439696fb40149ed99c5c44120acfc67.png

作者|Chris Lattner

翻译|胡燕君、周亚坤

摩尔定律失效论的讨论与日俱增,2018年,图灵奖获得者 John Hennessey 和 David Patterson 在一次演讲上更是直言,几十年来的 RISC(精简指令集)和 CISC(复杂指令集)孰优孰劣之争可以终结了,新一轮计算机架构的黄金时代已经到来,为此,他们在2019年的 ACM 期刊上发表了一篇文章里作专门论述

为了打破当前架构发展的桎梏,他们给出的答案是,需要软硬件协同设计和创新,构建领域专用架构、领域专用语言,从而构建更专业化的硬件,并提升运行速度。

2dd359aa539edbc37bebb3ba9dca4039.png

作为驱动计算机架构革新的重要组成部分,编译器也在迎来它的黄金时代。就在去年4月19日的ASPLOS会议上,编译器大牛Chris Lattner在主题演讲中分享了关于编译器的发展现状和未来、编程语言、加速器和摩尔定律失效论,并且讨论业内人士如何去协同创新,推动行业发展,实现处理器运行速度的大幅提升。OneFlow社区对其演讲内容做了不改变原意的编译,希望能对AI/编译器社区有所启发。

Chris Lattner 毕业于波特兰大学的计算机科学系,具有创建和领导多个知名大型项目的经验,其中包括 LLVM、Clang、MLIR和CIRCT等编译器基础设施项目,他还带头创建了Swift编程语言。

从2005年7月到2017年1月间,他曾领导苹果的开发者工具部门,随后,曾短暂领导过特斯拉的自动驾驶团队。2017年8月,Chris Lattner 在Google Brain团队领导了TensorFlow基础设施工作,包括一系列硬件支持(CPU、GPU、TPU),底层运行时和编程语言工作。

2020 年 1 月到 2022 年 1 月,Chris Lattner 在 SiFive 公司领导工程和产品团队(包括硬件、软件和平台工程),SiFive 基于开源指令集 RISC-V,向芯片设计公司提供 IP。去年 6 月,SiFive 收到了英特尔的收购意向,后者提出以超过 20 亿美元的价格收购这家公司。2022 年 1 月,Chris Lattner 和 Tim Davis 共同成立了 Modular AI,他本人担任CEO,目标是重建全球 ML 基础设施。

以下是Chris Lattner的演讲内容。

1

为什么需要下一代编译器和编程语言

尽管硬件正在蓬勃发展,新加速器和新技术不断涌现,但软件业却很难真正利用它们。

为什么会这样?在加速器的世界里,比如AI和结构化计算技术发展领域,出现了标量加速和向量加速等多种层面的加速,就像CPU领域也分为标量处理器和向量处理器一样,当然现在还有多核CPU。这样一来就会出现多种硬件组合,不同的硬件安装在同一个数据中心,那这些硬件就必须相互通信。

但是,很多时候却没有一致性的内存,导致写一个C语言程序来运行所有东西是不可行的,这样的组合运行有点像超级计算机使用多个CPU一样。

同时,世界正在越来越异质化,出现了各种各样的应用。机器学习快速发展,但机器学习涉及很多技术,如果你不止研究训练和推理,还想研究强化学习,那就要了解不同的加速器。如果你想研究强化学习,就要整合主机计算和加速器计算,让它们协同工作。现在制造的很多新设备里的IP和硬件块都是可配置的,即便是随存储器层次深度改变缓存大小这么简单的事,都会影响这些设备运行所依赖的内核。

所以,尽管现在硬件越来越多样,硬件生态迅速壮大,但软件还是很难充分利用它们来提高性能。而且如果软硬件协同不到位,性能就会受到巨大影响,那不止是10%左右的浮动,比如,如果弄错了内存层次结构,性能很可能会发生断崖式下跌,变成正常水平的十分之一。

当今,加速器领域发生爆炸式增长,几乎每天都会有新公司制造新的加速器。但问题是,怎么用这个加速器?更关键的是,有人想做新应用,但他们想在软件代码库上下工夫,于是不停地推进和完善软件代码库。

你无法直接在这个新设备上使用旧的软件堆栈,它们的某个部件可能换了供应商,做了流程精简,导致所需的技术堆栈不一样。因此,你不得不给每个新的小型设备都写一个全新的软件堆栈。而这样做又导致了软件的碎片化,这种碎片化的发展带来了巨大成本,也会反噬硬件行业,因为硬件用不了了。

我的观点是,我们需要下一代编译器和编程语言来帮助解决这种碎片化。首先,计算机行业需要更好的硬件抽象,硬件抽象是允许软件创新的方式,不需要让每种不同设备变得过于专用化。

其次,我们需要支持异构计算,因为要在一个混合计算矩阵里做矩阵乘法、解码JPEG、非结构化计算等等。然后,还需要适用专门领域的语言,以及普通人也可以用的编程模型。

最后,我们也需要具备高质量、高可靠性和高延展性的架构。我很喜欢编译器,很多人根据编译器在做应用,我也很尊重这一点。可以说,他们在开发下一代神经网络,而不仅仅只想做编译器。大家可以合作,这样一来就意味着他们需要可用的环境和可用的工具。

令人兴奋的是,编译器或者编程语言工程师会迎来一个崭新的时代:过去和现在都有无数的技术诞生,这些技术正在改变世界,有幸参与这场变革浪潮非常令人激动。

接下来,我会谈谈编译器行业的早期发展,以及它带给我们的经验和对未来的启发。

2

传统编译器的设计和挑战

当我还是学生时,编译器是单独装盒的,安装在一个软盘上,每次使用都要把软盘插进电脑里。

7550770be038a884652293e841122c35.png

当时的行业状况是,不同的供应商做出不同的处理器、操作系统,都想要通过创新脱颖而出,抓住编译器的价值。这些编译器都是专用的,互不兼容,不会共享代码。所以你会看到Borland C编译器和Microsoft C编译器互相竞争,最终造成碎片化生态。这就阻碍了行业发展,但人们还没有意识到这一点。

42cd09815fc40bcdc4bc7b399cb16ae8.png

编译器由前端、优化器和后端组成,这种固定结构已经沿用很多年了。如果一家公司自主研发了一个编译器,通常的做法是只研发一套前端和后端,而不会投入太多资金研发多种前端和后端。其他公司也会这么做,这导致不同公司的优化器和前后端不能通用。

3fb69d4326e6693d250dd9c4a1c57eb3.png

GCC编译器团队最早打破了这种模式。GCC通过自由软件和开放许可证,允许互相合作,这使得人们可以将前端、优化器、后端分开设计,实现“关注点分离”。也因为这个原因,GCC有了多种前端和后端。

这样的“关注点分离”不但有利于编译器的研究改进,还改变了编译器的行业格局。因为GCC有最好的C++前端,所以一大批编译器工程师都在这个前端的代码库基础上改进,推动了创新和C++的发展。同时,一大批CPU公司可以直接运用GCC的前端,只需加上自己的后端就能参与市场竞争。因此20世纪90年代到21世纪初这段时间,整个行业的碎片化程度降低。从那时起,GCC为C语言编译器的发展铺平了道路,涌现出更多新编译器。这是行业的巨大成功,因为它点燃了创新的火把。

9740aec6d692537386f5df8ba9d4ab7b.png

继GCC的革新之后又出现了一些新技术,其中包括我自己特别喜欢的LLVM,我想讲

  • 24
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值