Numba对于一个简单的for循环(Python 3.10)来说性能很差



我的代码:


from numba import njit
from functools import wraps
import time
def timeit(my_func):
@wraps(my_func)
def timed(*args, **kw):

tstart = time.time()
output = my_func(*args, **kw)
tend = time.time()

print('"{}" took {:.3f} ms to executen'.format(my_func.__name__, (tend - tstart) * 1000))
return output
return timed
@timeit
@njit
def calculate_smth(a,b):
result = 0
for i_a in range(a):
for i_b in range(b):
result = result + i_a + i_b
return result
if __name__ == "__main__":
value = calculate_smth(1000,1000)

如果没有numba decorator,我的函数将在大约62ms内完成,而使用njit decorates(在事先编译后(,它需要大约370ms。有人能解释一下我缺了什么吗?

JIT代表Just In Time,这意味着代码是在执行时编译的,而不是AOT-Ahead Of Time。正如您在Numba文档中所读到的,默认情况下编译是惰性的,即在程序中第一次执行函数时发生编译。

它还支持AOT编译,如所述

另一个选项是传递给numba.njit装饰器的cache=True参数。

最新更新