如何预热Numba的JIT?

问题描述

从某种意义上说,我一直在为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

我正在将Jupyter Notebook与Python 3.7配合使用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...