【问题标题】:how improve speed of math.sqrt() with numba jit compiler in python 2.7如何在 python 2.7 中使用 numba jit 编译器提高 math.sqrt() 的速度
【发布时间】:2014-07-17 11:53:18
【问题描述】:

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

-- 问候 凯斯

【问题讨论】:

  • 尝试改用numpy.sqrt

标签: python performance jit numba


【解决方案1】:

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

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

【讨论】:

  • 这是评论,不是答案。
  • 他在技术上确实回答了(问:“我怎样才能强制 NUMBA 替换呼叫...”/答:“它已经这样做了”)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 2019-11-18
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多