DeepMind 开放代码 S6,带有 CPython 的 JIT 编译器实现的库

以其在人工智能领域的发展而闻名的 DeepMind 开源了 S6 项目,该项目为 Python 语言开发了 JIT 编译器。 该项目之所以有趣,是因为它被设计为一个可以与标准 CPython 集成的扩展库,它提供了与 CPython 的完全兼容性,并且不需要修改解释器代码。 该项目从2019年开始开发,可惜被缩减,不再开发。 由于创建的开发可能对改进 Python 有用,因此决定开放源文本。 JIT 编译器代码是用 C++ 编写的,基于 CPython 3.7。 并在 Apache 2.0 许可下开放。

就其解决的任务而言,Python 的 S6 与 JavaScript 的 V8 引擎进行了比较。 该库用自己的实现替换了现有的 ceval.c 字节码解释器处理程序,该实现使用 JIT 编译来加速执行。 S6 检查当前函数是否已经编译,如果是,则执行编译后的代码,如果没有,则以类似于 CPython 解释器的字节码解释模式运行该函数。 解释计算与正在处理的函数关联的已执行指令和调用的数量。 达到某个里程碑后,将启动编译过程以加速频繁执行的代码。 编译为 strongjit 中间表示,经过优化后,使用 asmjit 库将其转换为目标系统的机器指令。

根据负载的性质,在最佳条件下,与通常的 CPython 相比,S6 的测试执行速度提高了 9.5 倍。 运行Richards测试套件100次迭代时有7倍的加速,运行包含大量数学计算的Raytrace测试时有3-4.5倍的加速。

S6 难以优化的任务是使用 C API 的项目,例如 NumPy,以及需要检查大量值类型的相关操作。 由于使用了 S6 自己未优化的 Python 解释器实现(开发还没有到解释模式优化阶段),因此对于资源密集型函数的单次调用也观察到性能不佳。 例如,在解包大量数组/元组的解包序列测试中,通过一次调用,观察到最多 5 倍的减速,而通过循环调用,CPython 的性能为 0.97。

来源: opennet.ru

添加评论