我一直在努力使用 Numba,因为每当我为它编写一个函数时,我第一次使用它时都会有很长的预热时间。我想问有没有办法预热 JIT 功能?
例如,如果我将此函数编写y=1/(log(x+0.1))^2
为 Numba 函数:
@jit(parallel=True,error_model='numpy')
def f_numba(x_vec):
N=len(x_vec)
res=np.empty(N)
for i in prange(N):
x=x_vec[i]
x=np.log(x+0.1)
res[i]=1/(x*x)
return res
我用这个数组来测试函数的速度:
N=150000
x_vect=np.random.rand(N)
为了测量函数的执行时间,我使用了这个:
for i in range(5):
start=timer()
f_numba(x_vect)
print('#',timer()-start)
第一次运行需要 0.8 秒,所有后续运行需要 0.001 秒。如果我能以某种方式预热 JIT 函数以避免这种延迟,那就太好了。我尝试将第一次运行与一个小尺寸的虚拟阵列一起使用x_warm=np.random.rand(10)
,然后运行f_numba(x_warm)
,但预热时间根本没有改变。有什么建议么?
对于完成主义,以下是称为的库:
import numpy as np
from timeit import default_timer as timer
from numba import jit, prange
我正在使用带有 Python 3.7 的 Jupyter Notebook。