PyPy的低开销统计内存分析:巧妙结合VMProf和垃圾收集器

2025-02-25

本文介绍了一种针对PyPy的低开销统计内存分析方法。该方法并非保存每次内存分配,而是仅保存每n个分配字节,巧妙地将采样逻辑整合到PyPy的垃圾收集器(GC)的bump pointer分配器检查中。通过这种方式,即使开启内存采样,快速路径也与未开启采样时完全相同,从而极大地降低了性能开销。实验结果表明,该方法在不同采样率下具有良好的性能表现,为内存分析提供了更精细的控制和更低的开销。

阅读更多
开发 内存分析

PyPy的追踪JIT:利弊权衡

2025-01-10

本文探讨了PyPy中使用的追踪JIT编译器的优缺点。追踪JIT通过追踪程序执行来生成代码,在处理Python等复杂语言时具有优势,因为它能够有效地穿过抽象层并消除大量开销。然而,追踪JIT也存在性能不稳定、存在一些难以处理的边界情况等缺点。作者基于在PyPy项目中近二十年的经验,对追踪JIT的适用场景进行了深入分析,并将其与基于方法的JIT进行了比较,最终认为追踪JIT在PyPy的元JIT环境下是一个相对务实的选择。

阅读更多
开发 追踪JIT

PyPy JIT中用于整数运算窥孔变换规则的DSL

2024-10-23

文章介绍了作者为PyPy JIT编译器开发的一种新的领域特定语言(DSL),用于以声明方式指定整数运算的窥孔优化。作者阐述了引入DSL的动机,即现有的指令式表达方式冗长且容易出错。DSL使用模式匹配来识别和简化整数运算序列,并通过Z3定理证明器在构建过程中自动验证规则的正确性。文章详细介绍了DSL的语法、规则排序、活度分析、规则覆盖率检查、统计信息打印以及正确性和可满足性证明等方面。最后,作者总结了DSL的现状、未来计划和一些待解决的问题。

阅读更多
24
未分类

PyPy 7.3.17 版本发布

2024-09-02

PyPy 团队发布了 PyPy 7.3.17 版本,该版本包括一个新的 RISC-V JIT 后端、一个基于 CPython 团队工作的改进 REPL 以及对整数运算的更好 JIT 优化。新版本包含 PyPy2.7 和 PyPy3.10 两个不同的解释器,分别支持 Python 2.7 和 3.10 的语法和特性。

阅读更多
40
未分类

利用 Z3 挖掘 JIT 轨迹以寻找缺失的优化

2024-07-21

这篇文章介绍了如何利用 Z3 定理证明器,分析 PyPy JIT 轨迹,找出其中可以优化的代码片段。作者首先介绍了如何将 JIT 轨迹转换为 Z3 公式,然后讲解了如何利用 Z3 识别冗余操作和常量布尔值,并以具体的代码示例进行说明。最后,作者分享了一些实验结果,并展望了未来的研究方向。

阅读更多
41
未分类 JIT Z3