返回介绍

7.2 JIT 和 AOT 编译器的对比

发布于 2024-01-25 21:44:08 字数 587 浏览 0 评论 0 收藏 0

我们将要查看的工具大体分为两类:提前编译工具(Cython、Shed Skin、Pythran)和“即时”编译工具(Numba、PyPy)。

通过提前编译(AOT),你会创建一个为你的机器定制的静态库。如果你下载了numpy、scipy或scikit-learn,它就会在你的机器上用Cython编译部分的库(或者如果你正在使用像Continuum’s Anaconda之类的分发包,你就会使用一个事先构建的预编译库)。通过在使用之前编译的方式,你就会获得一个能够在工作中立即拿来使用来解决你的问题的库。

通过即时编译,你不必提前做很多(如果有的话),你让编译器在使用时只逐步编译恰到好处的那部分代码。这就意味着你会有“冷启动”问题——如果你的大部分代码能够被编译并且当前都还没有被编译过,当你开始运行代码而且正在被编译时,就会跑得很慢。如果这事在你每次运行脚本时都发生,并且你运行这脚本很多次,开销就会变得很显著。PyPy会遭受这个问题,所以你可能不想要用它来处理短小且频繁运行的脚本。

当前情形向我们展示了提前编译可以给我们带来最快的速度提升,但这经常会需要大量的人力。即时编译提供了印象深刻的速度提升而且几乎不需要人工干预,但是它也会遇到刚才描述到的问题。当为你的问题选择正确的技术时,你不得不思考这些权衡问题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文