Я хотел бы понять, откуда приходят выгоды от использования Numba для ускорения чистого кода numpy
в цикле for. Существуют ли какие-либо инструменты для профилирования, которые позволяют вам смотреть на jitted
функции?
Демо-код (как показано ниже) просто использует очень простое матричное умножение для обеспечения работы компьютера. Являются ли наблюдаемые выгоды от:
- более быстрый
loop
, - переустановка функций
numpy
перехваченныхjit
во время процесса компиляции, или - меньше накладных расходов с помощью
jit
поскольку выполнение с помощью numpy outsources через функции обертки для библиотек низкого уровня, таких какLINPACK
%matplotlib inline
import numpy as np
from numba import jit
import pandas as pd
#Dimensions of Matrices
i = 100
j = 100
def pure_python(N,i,j):
for n in range(N):
a = np.random.rand(i,j)
b = np.random.rand(i,j)
c = np.dot(a,b)
@jit(nopython=True)
def jit_python(N,i,j):
for n in range(N):
a = np.random.rand(i,j)
b = np.random.rand(i,j)
c = np.dot(a,b)
time_python = []
time_jit = []
N = [1,10,100,500,1000,2000]
for n in N:
time = %timeit -oq pure_python(n,i,j)
time_python.append(time.average)
time = %timeit -oq jit_python(n,i,j)
time_jit.append(time.average)
df = pd.DataFrame({'pure_python' : time_python, 'jit_python' : time_jit}, index=N)
df.index.name = 'Iterations'
df[["pure_python", "jit_python"]].plot()
выдает следующую диаграмму.