如何使用python 2.7中的numba jit编译器提高math.sqrt()的速度

时间:2014-05-28 10:02:31

标签: python performance jit numba

我有一个复杂的函数来执行无法矢量化的数学运算。我发现使用NUMBA jit编译器实际上会降低性能。它可能是因为我在这个函数中使用调用python math.sqrt。 如何强制NUMBA将对python math.sqrt的调用替换为对sqrt的更快C调用?

- 问候 KES

2 个答案:

答案 0 :(得分:4)

Numba已经将对math.sqrt的调用替换为对sqrt的机器代码库的调用。所以,如果你的性能变慢,那么它可能就是其他东西了。

你能发布你想要加速的代码吗?另外,你使用的是Numba的哪个版本。在最新版本的Numba中,您可以调用装饰函数的inspect_types方法来打印被解释为python对象的列表(因此仍然很慢)。

答案 1 :(得分:1)

Numba已将math.sqrt次调用映射到libc中的sqrt / sqrtf。减速可能来自于Numba的开销。这个开销来自(un)装箱PyObjects并检测编译代码中是否发生错误。它影响从Python调用小函数,但从另一个Numba编译函数调用时更少,因为没有(un)装箱

如果设置环境变量NUMBA_OPT=3,则会启用积极优化,从而消除一些开销,但会增加代码生成时间。