Table of Contents

Numba

Numba is an open source JIT compiler that translates a subset of Python and NumPy code into fast machine code.

有点类似 taichi ?


示例代码

# 本代码由 AI 生成
 
from numba import njit, prange
import numpy as np
 
# 示例:计算数组的平方和
@njit(parallel=True)
def parallel_sum_squares(arr):
    n = 0.0
    for i in prange(len(arr)):  # 使用 prange 而不是 range
        n += arr[i] ** 2
    return n
 
# 测试
arr = np.random.rand(10_000_000)
result = parallel_sum_squares(arr)
print("结果:", result)

jit 和 njit (AI生成)

在 Numba 中,@jit@njit 都是用于加速 Python 函数的装饰器,它们的功能有许多相似之处,但也存在一些关键区别。


主要区别

特性 @jit @njit
解释模式支持 如果无法编译,会回退到 Python 解释模式运行 不支持回退,必须成功编译
简化 可以指定 nopython=True 显式启用高性能模式 等价于 @jit(nopython=True)
性能 如果未指定 nopython=True,可能性能较低 始终以高性能模式运行
调用灵活性 支持更多的参数配置 参数较少,专注高性能编译
调试方便性 可用于调试(在失败时会运行 Python 解释器) 不适合调试(直接报错)

详细对比

1.

2.

3.

4.


什么时候使用哪种?

  1. 开发和调试阶段

    • 使用 @jit,因为它支持回退模式,可以帮助快速找到不支持 Numba 的代码部分。
  2. 追求性能的生产环境

    • 使用 @njit,因为它专注于高性能执行,且不允许回退,确保代码已优化。
  3. 高性能并行计算

    • 配合 parallel=True 使用,可以通过 prange 进行多线程加速。

总结