Skip to main content
QUICK REVIEW

[论文解读] Souper: A Synthesizing Superoptimizer

Raimondas Sasnauskas, Yang Chen|arXiv (Cornell University)|Nov 13, 2017
Parallel Computing and Optimization Techniques参考文献 17被引用 42
一句话总结

Souper 是一种合成式超优化器,通过使用 SAT/SMT 求解器在类似 LLVM IR 的函数式、无控制流中间表示(IR)中搜索等价且更高效的代码序列,自动发现并应用新颖的编译器优化。它使 Clang 二进制文件大小减少了 4.4%(3 MB),并在 LLVM 和 Microsoft Visual C++ 中促成了手写实现的优化。

ABSTRACT

If we can automatically derive compiler optimizations, we might be able to sidestep some of the substantial engineering challenges involved in creating and maintaining a high-quality compiler. We developed Souper, a synthesizing superoptimizer, to see how far these ideas might be pushed in the context of LLVM. Along the way, we discovered that Souper's intermediate representation was sufficiently similar to the one in Microsoft Visual C++ that we applied Souper to that compiler as well. Shipping, or about-to-ship, versions of both compilers contain optimizations suggested by Souper but implemented by hand. Alternately, when Souper is used as a fully automated optimization pass it compiles a Clang compiler binary that is about 3 MB (4.4%) smaller than the one compiled by LLVM.

研究动机与目标

  • 解决开发和维护复杂中端编译器优化所面临的高昂工程成本。
  • 探索通过超优化实现的自动化合成是否能够发现新颖、高影响力且难以或耗时较长的手动实现的优化。
  • 评估在多个编译器(包括 LLVM 和 Microsoft Visual C++)中使用单一通用超优化器的可行性。
  • 通过可操作且经过验证的建议,实现自动优化发现与生产编译器的集成。
  • 研究将合成与可生成证明的求解器结合,用于未来形式化验证编译器的潜力。

提出的方法

  • 使用一种接近 LLVM IR 的函数式、无控制流中间表示(IR),支持 51 条宽度多态的整数指令。
  • 使用 SAT/SMT 求解器对原始代码序列与合成代码序列进行等价性检查,确保正确性。
  • 应用基于 Gulwani 等人(2011)方法扩展的合成算法,生成最优指令序列,包括常量折叠和传播。
  • 作为 LLVM 中的一个优化阶段运行,从而从常量传播和无用代码消除中获得级联优化收益。
  • 缓存优化结果以减少后续构建的编译开销,在预热后实现近乎常数时间的性能。
  • 将其他编译器(如 MSVC)的 IR 转换为 Souper 的 IR,以实现在不同编译器间的优化发现。

实验结果

研究问题

  • RQ1合成式超优化器能否自动发现新颖、正确且有益的编译器优化,而这些优化无法用标准编译器阶段表达?
  • RQ2基于 SAT/SMT 求解和程序合成的超优化器在真实世界编译器中,与传统手写优化相比,性能提升程度如何?
  • RQ3同一超优化器框架能否有效应用于不同编译器基础设施(如 LLVM 和 Microsoft Visual C++)?
  • RQ4在大型二进制文件(如 Clang)上应用时,自动化超优化的性能和代码大小影响与传统编译相比如何?
  • RQ5结合合成与可生成证明的求解器,将合成优化集成到形式化验证编译器中的潜力如何?

主要发现

  • 在编译 LLVM 本身时,Souper 发现了约 7,900 种不同的优化,并应用了超过 85,000 次。
  • 使用 Souper 编译的 Clang-3.9 二进制文件比使用标准 LLVM 优化编译的同一二进制文件小了 3 MB(4.4%)。
  • 尽管优化后的二进制文件性能有 2% 的下降,但代码大小的减少表明具有显著的实际效益。
  • 首次使用 Souper 编译时速度慢 5 倍到 25 倍,但经过缓存预热后,编译时间与标准 LLVM 编译几乎相同(9 分钟 vs. 8 分钟)。
  • Souper 提出的若干优化已被手动实现于 LLVM 和 Microsoft Visual C++ 编译器中,证实了其实际价值。
  • Souper 的 IR 已成功映射到 Microsoft Visual C++ 的 IR,使非 LLVM 编译器中也能发现优化,证明了其跨编译器的适用性。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

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