Mak*_*e42 1 python performance numpy numba
与使用纯 python 相比,使用 numba 会产生更快的程序:
现在看来,纯 python 上的 numba 甚至(大部分时间)都比 numpy-python 快,例如https://jakevdp.github.io/blog/2015/02/24/optimizing-python-with- numpy 和 numba/。
根据https://murillogroupmsu.com/julia-set-speed-comparison/,在纯 python 代码上使用的 numba 比在使用 numpy 的 python 代码上使用的速度快。这通常是真的吗?为什么?
在/sf/answers/1816668031/中解释了为什么纯 python 上的 numba 比 numpy-python 更快:numba 看到更多的代码并且有更多的方法来优化代码,而 numpy 只看到一小部分。
这是否回答了我的问题?在使用 numpy 时,我是否会妨碍 numba 完全优化我的代码,因为 numba 被迫使用 numpy 例程而不是找到更优化的方法?我曾希望 numba 会意识到这一点,如果它没有好处,就不要使用 numpy 例程。然后它会使用 numpy 例程,只是它是一个改进(毕竟 numpy 已经过很好的测试)。毕竟“对 NumPy 数组的支持是 Numba 开发的重点,目前正在进行广泛的重构和改进。”
在回答具体问题之前,让我们先弄清楚几件事:
现在看来,纯 python 上的 numba 甚至(大部分时间)都比 numpy-python 快
不。Numba 通常比 NumPy 慢。这取决于你想做什么操作以及你如何做。如果您处理非常小的数组,或者如果唯一的替代方法是手动迭代数组,那么 Numba 会更快。
在纯 python 代码上使用的 numba 比在使用 numpy 的 python 代码上使用的速度快。这通常是真的吗?为什么?
这取决于代码 - NumPy 击败 numba 的情况可能更多。然而,诀窍是在没有相应的 NumPy 函数或需要链接大量 NumPy 函数或使用不理想的 NumPy 函数的地方应用 numba。诀窍是知道什么时候 numba 实现可能更快,然后最好不要在 numba 中使用 NumPy 函数,因为你会得到 NumPy 函数的所有缺点。然而,了解何时以及如何应用 numba的情况需要经验- 很容易意外地编写一个非常慢的 numba 函数。
在使用 numpy 时,我是否会妨碍 numba 完全优化我的代码,因为 numba 被迫使用 numpy 例程而不是找到更优化的方法?
是的。
我曾希望 numba 会意识到这一点,如果它没有好处,就不要使用 numpy 例程。
不,这不是目前 numba 的工作方式。Numba 只是为 LLVM 创建代码进行编译。也许这是 numba 将来会拥有的功能(谁知道)。目前,如果您自己编写循环和操作并避免在 numba 函数中调用 NumPy 函数,则 numba 的性能最佳。
有一些库使用表达式树并可能优化无益的 NumPy 函数调用 - 但这些通常不允许快速手动迭代。例如numexpr可以优化多个链接的 NumPy 函数调用。目前,它要么是快速手动迭代(cython/numba),要么是使用表达式树(numexpr)优化链式 NumPy 调用。也许甚至不可能在一个图书馆内同时进行这两项工作——我不知道。
Numba 和 Cython 在处理小数组和快速手动迭代数组时非常棒。NumPy/SciPy 很棒,因为它们带有大量复杂的功能,可以开箱即用地执行各种任务。Numexpr 非常适合链接多个 NumPy 函数调用。在某些情况下,Python 比任何这些工具都快。
根据我的经验,如果您组合它们,您可以充分利用不同的工具。不要将自己限制在一种工具上。
| 归档时间: |
|
| 查看次数: |
573 次 |
| 最近记录: |