编译分叉:一种快速灵活的生成用于编译器内部机器学习任务的数据的方法
摘要:基于机器学习模型的数据驱动编译优化需要大量的高质量数据来进行训练,以达到甚至超过已有的手工设计启发式算法的效果。 静态编译环境已有相关工作通过迭代编译来解决这个问题。然而,动态编译器可能会根据动态选择的编译策略产生不同的数据,这会加重可比较数据的生成问题。 我们提出了编译分支技术,一种从任意动态编译程序中生成一致的特性和性能数据的技术。在单个程序运行中执行具有相同分析和编译历史的程序部分的不同版本,以最小化由动态编译和运行环境引起的噪声。我们的方法有助于对编译优化决策进行大规模的性能评估。 此外,编译分支支持基于机器学习创建领域特定的编译策略,通过提供模型训练的数据。我们在GraalVM编译器中以一种与编程语言无关的方式实现了编译分支。 为了评估生成数据的质量,我们训练了几个机器学习模型来替代循环相关优化的编译器启发式算法。当比较基准套件性能的几何平均值时,训练的模型的表现与高度调优的编译器启发式算法相当。 对于少数单个基准测试的较大影响范围从20%的加速到17%的减速。所提出的方法可以在任何动态编译器中实现。我们相信它可以帮助分析编译决策,并将机器学习的应用进一步引入动态编译。
作者:Raphael Mosaner (JKU Linz, Austria), David Leopoldseder (Oracle Labs Vienna, Austria), Wolfgang Kisling (JKU Linz, Austria), Lukas Stadler (Oracle Labs Linz, Austria), Hanspeter M"ossenb"ock (JKU Linz, Austria)
论文ID:2206.14091
分类:Programming Languages
分类简称:cs.PL
提交时间:2022-06-29