1

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

——问候凯斯

4

2 回答 2

4

Numba 已经将对 math.sqrt 的调用替换为对 sqrt 的机器代码库的调用。因此,如果您的性能变慢,则可能是其他原因。

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

于 2014-05-29T21:58:04.893 回答
1

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

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

于 2014-05-29T22:43:46.723 回答