使用 Z3 为即时编译(JIT)寻找简单的重写规则

主要观点:作者 6 月在哥本哈根的PLDI 会议上展示了与Max Bernstein合著的论文,还见到了在社交媒体上交流已久的John Regehr。文中主要介绍使用 Z3 来为 PyPy 追踪 JIT 的中间表示中的操作寻找局部窥孔重写规则,包括整数操作的编码、各种重写规则的寻找方法(如op(x, x) -> x等)、合成常量、合成两个常量以及强度削减等,最后总结了所生成的大量简化规则及未来需要解决的问题。
关键信息

  • 介绍了 Z3 Python-API 的基本使用,如构造变量、进行公式推理、检查公式的可满足性等。
  • 详细说明了将 PyPy JIT 的整数操作编码为 Z3 公式的函数z3_expression,以及用于证明条件的函数prove
  • 阐述了寻找不同重写规则的方法和过程,包括op(x, x) -> x等简单模式,以及op(x, x) == c1等较复杂模式。
  • 提到了强度削减的相关内容,即生成单参数操作。
    重要细节
  • PyPy JIT 产生机器级指令的追踪,优化后转为机器码,优化器使用多种方法使追踪更高效,整数操作应用了一些算术简化规则。
  • 在寻找重写规则过程中,遇到了如确定常量、处理复杂情况等问题,通过使用量词z3.ForAll等方法来解决。
  • 最后讨论了当前方法的局限性,如组合爆炸、寻找非最小模式、无用模式等,并预告下一篇博客将讨论解决这些问题的替代方法。
  • 提到了参考的 John Regehr 的博客文章和相关论文,以及 Philipp Zucker 的博客。
阅读 10
0 条评论