Почему скомпилированная функция Numba jit выполняется быстрее при последовательных вызовах функции даже после использования cache = True? - PullRequest
0 голосов
/ 07 июня 2019

При вызове 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?
...