Numba(AOT)对Nuitka

Numba(AOT)对Nuitka,numba,nuitka,Numba,Nuitka,Numba(AOT)和Nuitka都提供了将Python代码编译成C代码的功能。至少Nuitka生成的C代码与Python标准库绑定,因此C代码严重依赖PyObjects。换句话说,如果从头开始编写,代码看起来不像人类编写的C代码。因此,如果愿意的话,生成的机器代码会有点冗长。不过,我不确定Numba的提前编译(AOT)是如何工作的。这是我所知道的。我的问题是: Numba(AOT)是如何做到这一点的 在速度方面,它与Nuitka相比如何 注意,我没有谈论Numba的即时(JIT)编译,这是Nu

Numba(AOT)和Nuitka都提供了将Python代码编译成C代码的功能。至少Nuitka生成的C代码与Python标准库绑定,因此C代码严重依赖PyObjects。换句话说,如果从头开始编写,代码看起来不像人类编写的C代码。因此,如果愿意的话,生成的机器代码会有点冗长。不过,我不确定Numba的提前编译(AOT)是如何工作的。这是我所知道的。我的问题是:

  • Numba(AOT)是如何做到这一点的
  • 在速度方面,它与Nuitka相比如何

  • 注意,我没有谈论Numba的即时(JIT)编译,这是Numba的默认编译模式。JIT可以考虑特定的CPU,AOT不能这样做,因此JIT在运行期间比AOT更快,但是需要热身阶段,其中较慢的阶段(编译和加载)。因此,比较有点不公平。

    Numba不编译为C代码,而是直接转换为LLVM-IR。(与Clang或Flang类似),LLVM后端编译为机器代码。在AOT模式下,这基本上是相同的(默认情况下不是march=native,但可以设置,缺少功能:并行化,SVML),通常最好只使用缓存,但如果您想重新发现编译的包,AOT-编译是一种方法。Numba不编译为C代码,它直接转换为LLVM-IR。(与Clang或Flang类似),LLVM后端编译为机器代码。在AOT模式下,这基本上是相同的(默认情况下不是march=native,但可以设置,缺少功能:并行化,SVML),通常最好只使用缓存,但是如果您想重新发现编译的包,AOT-编译是一种方法。