我有一个复杂的函数来执行无法矢量化的数学运算。我发现使用NUMBA jit编译器实际上会降低性能。它可能是因为我在这个函数中使用调用python math.sqrt。 如何强制NUMBA将对python math.sqrt的调用替换为对sqrt的更快C调用?
- 问候 KES
答案 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
,则会启用积极优化,从而消除一些开销,但会增加代码生成时间。