我想知道在for循环中使用Numba加速纯numpy
代码的好处是什么。是否有任何分析工具允许您查看jitted
函数?在
演示代码(如下所示)只是使用非常基本的矩阵乘法来为计算机提供工作。观察到的收益来自:
loop
jit
截获的numpy
函数的重新计算,或jit
可以减少开销,因为numpy通过包装器函数将执行外包给低级库,如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()
生成以下图表。在
TL:DR随机循环得到了加速,但矩阵乘法除了矩阵尺寸很小外没有其他作用。在较小的矩阵/循环大小下,似乎有显著的加速,这可能与python开销有关。在大N下,矩阵乘法开始占主导地位,jit的帮助较小
函数定义,为简单起见使用方阵。在
时间安排:
^{pr2}$结果:
看起来numba正在优化循环,所以我不想在比较中包含它
情节:
因此,对于5次重复的循环来说,jit相当稳定地加快了速度,直到矩阵乘法变得足够昂贵,使得其他开销相比之下微不足道。在
相关问题 更多 >
编程相关推荐