При вызове jit-оформленной функции с использованием numba первый вызов выполняется медленнее, чем последующие.Это кажется уместным, поскольку numba впервые скомпилирует функцию.Согласно Numba Docs, мы можем использовать cache=True
внутри Jit Decorator, чтобы избежать времени компиляции.Хотя даже после использования кэша время выполнения более или менее одинаково для первого вызова и быстрее для последующих вызовов.Почему это?
from numba import *
from timeit import default_timer as timer
@jit(['float64[:,:],float64[:,:]'],'(n,m),(n,m)->(n,m)',parallel=True, cache=True)
def asd(x,y):
return x+y
u=np.random.random(1000000)
w=np.random.random(1000000)
func_start=timer()
asd(u,w)
timing=timer()-func_start
print("Function Asd 1st time: ", str(timing))
func_start=timer()
asd(u,w)
timing=timer()-func_start
print("Function Asd 2nd time: ", str(timing))```
Output:
Function Asd 1st time: 0.0036184220007271506
Function Asd 2nd time: 0.0025926230009645224
Shouldn't first time calling the function with ```cache=True``` execute it as fast as 2nd time? Why is it still executing slower? is it still compiling the function? what is happening here?