0

我一直在努力使用 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。

4

0 回答 0