Skip to main content
QUICK REVIEW

[论文解读] Profile Guided Optimization without Profiles: A Machine Learning Approach

Nadav Rotem, Chris Cummins|arXiv (Cornell University)|Dec 24, 2021
Parallel Computing and Optimization Techniques被引用 6
一句话总结

本文提出一种机器学习方法,无需依赖性能剖析数据,即可在未插桩程序中预测分支概率,通过在大规模插桩二进制文件语料库上训练的梯度提升决策树,基于静态程序特征进行预测。该方法可无缝集成到LLVM中,用学习到的模型替代原有的手工编写启发式规则,显著提升性能,且编译开销可忽略不计。

ABSTRACT

Profile guided optimization is an effective technique for improving the optimization ability of compilers based on dynamic behavior, but collecting profile data is expensive, cumbersome, and requires regular updating to remain fresh. We present a novel statistical approach to inferring branch probabilities that improves the performance of programs that are compiled without profile guided optimizations. We perform offline training using information that is collected from a large corpus of binaries that have branch probabilities information. The learned model is used by the compiler to predict the branch probabilities of regular uninstrumented programs, which the compiler can then use to inform optimization decisions. We integrate our technique directly in LLVM, supplementing the existing human-engineered compiler heuristics. We evaluate our technique on a suite of benchmarks, demonstrating some gains over compiling without profile information. In deployment, our technique requires no profiling runs and has negligible effect on compilation time.

研究动机与目标

  • 解决在生产级编译器中收集性能引导优化(PGO)数据所面临的高昂成本和维护负担。
  • 用数据驱动、可学习的模型替代LLVM中复杂的手工编写分支概率启发式规则。
  • 仅使用静态程序特征,在未插桩程序中实现准确的分支概率预测。
  • 开发一种可扩展、低开销的解决方案,可直接集成到LLVM编译流水线中。
  • 在真实工作负载中实现可度量的性能提升,且无需性能剖析或运行时插桩。

提出的方法

  • 离线训练阶段使用大规模插桩二进制文件语料库,收集静态特征(如基本块数量、循环深度、分支条件等)及其对应的分支概率真实值(来自PGO元数据)。
  • 使用XGBoost训练梯度提升决策树模型,基于这些静态特征预测分支概率,替代LLVM中BranchProbabilityInfo模块内的手工编码启发式规则。
  • 将模型作为LLVM中的新编译器阶段嵌入,仅使用静态分析信息在编译时标注分支权重。
  • 特征工程为每个分支提取超过30个静态程序特征,包括控制流关系、指令计数和谓词类型等。
  • 为保证可解释性和效率,避免使用深度神经网络,优先选择轻量级、可解释的决策树,更易于调试和维护。
  • 最终模型在生产环境中部署,实现零性能剖析开销,且对编译时间影响极小。

实验结果

研究问题

  • RQ1仅使用静态特征,学习到的模型能否在未插桩程序中准确预测分支概率?
  • RQ2在无需性能剖析数据的前提下,机器学习模型能否在LLVM的BranchProbabilityInfo模块中超越手工编写的启发式规则?
  • RQ3将学习到的模型集成到LLVM编译流水线中,其性能影响如何?
  • RQ4与ESP或VESPA等同样预测分支概率的现有方法相比,该模型的准确性如何?
  • RQ5一个统一的、单一模型能否通过提供准确的分支权重元数据,同时提升多个优化阶段的性能?

主要发现

  • 在无性能剖析数据的情况下,该学习模型在多个开源基准测试中实现了显著的性能提升,证明了静态预测的有效性。
  • 该模型在LLVM中集成顺畅,编译时间开销可忽略不计,且除模型本身外无额外内存占用。
  • 该方法用紧凑、可解释的决策树模型,替代了BPI中数千行手工编写的C++启发式代码。
  • 通过利用来自PGO工作流的确定性真实标签,该系统在大规模训练数据语料库上实现了高精度的分支概率预测。
  • 该模型在未见过的程序上泛化能力良好,可在多种工作负载中实现一致的优化改进。
  • 与依赖代理指标或强化学习的先前方法相比,该技术通过使用直接、无噪声的真实标签,实现了更优的性能表现。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。