谷歌螺旋桨挤压额外的性能从大规模的LLVM二进制

互联网2020-04-15 17:19:09
导读 谷歌螺旋桨能够通过重新链接和优化LLVM二进制文件的性能,基于它们在运行时的行为简介。 谷歌工程师说,螺旋桨可以为以前由LLVM高度优化的二进制文件带来2-9%的关键性能基准改进。
音频解说

谷歌螺旋桨能够通过重新链接和优化LLVM二进制文件的性能,基于它们在运行时的行为简介。 谷歌工程师说,螺旋桨可以为以前由LLVM高度优化的二进制文件带来2-9%的关键性能基准改进。

螺旋桨的目的是创建一个新的二进制,从您所描述的一个后,应用多个转换到它的布局。 简单地说,您利用Propeller所做的是运行您的程序,并使用特定的标志编译,以收集有关其运行时行为和性能的度量。 然后,将这些数据输入螺旋桨,让它转换二进制布局,以从中提取最大性能。 这就是所谓的配置文件引导优化,它不应该与动态优化混淆,比如Dynamo和其他类似工具提供的优化,它们在运行时对系统进行优化。

最初于2019年9月在LLVM-dev邮件列表上宣布,Propeller受到Face bookBOLT的启发,Face bookBOLT是最近另一个基于LLVM的配置文件的Relinker,但使用了一种不同的方法,可以与分布式构建系统一起使用,并在二进制大小下更好地缩放。

特别是,谷歌工程师发现,虽然BOLT提供了显著的运行时性能增益,但它的单片单步架构导致~300MB段大小的二进制文件所需的内存和时间爆炸。 现在,虽然300MB的二进制文件是公认的大,而不是许多开发人员可能需要优化这样大的系统,螺旋桨似乎提供了一些额外的好处比BOLT。 具体来说,螺旋桨是围绕两步优化过程设计的,其中第一步可以分布在并行工作人员之间。 与此相反,BOLT被实现为一个进程,它直接工作在一个GO中的输入二进制上。

此外,螺旋桨应该比BOLT更好的增量构建。 这是可能的,因为当小的源更改没有显着地修改配置文件信息时,螺旋桨可能会更好地识别需要重新处理的二进制文件的那些部分。 根据谷歌工程师的说法,对于BOLT,即使是对配置文件的微小更改也会使其完全失效,因此需要对优化过程进行全面的重新运行。

为了透视全局,LLVM已经能够与其他主要编译器一起进行链路时间优化(L TO)和配置文件引导优化(PGO)。 像BOLT或螺旋桨这样的工具可以进一步改进LLVM优化,这是对轮廓数据的更积极的使用,有利于使用精确的轮廓数据而不是近似。

如果您对螺旋桨如何工作的细节感兴趣,谷歌已经提供了一个RFC彻底记录螺旋桨如何工作(PD F),以及如何使用它,从从从GitHub提取其源代码并编译它开始。

免责声明:本文由用户上传,如有侵权请联系删除!