我正在尝试使用numba
,我刚刚尝试one of their example notebooks关于jit
编译。我注意到,在给出类型时,急切的编译比没有类型的编译要慢。他们给出的功能是:
import numpy as np
from numba import jit, autojit
def looped_ver(k, a):
x = np.empty_like(a)
x[0] = 0.0
for i in range(1, x.size):
sm = 0.0
for j in range(0, i):
sm += k[i-j,j] * a[i-j] * a[j]
x[i] = sm
return x
typed_ver = jit('f8[:](f8[:,:],f8[:])')(looped_ver)
auto_ver = autojit(looped_ver)
我用
测量了执行时间for n in [200,500,1000]:
k = np.random.rand(n,n)
a = np.random.rand(n)
%timeit typed_ver(k, a)
%timeit auto_ver(k, a)
结果是:
10000 loops, best of 3: 42.8 µs per loop
10000 loops, best of 3: 39.2 µs per loop
10000 loops, best of 3: 168 µs per loop
10000 loops, best of 3: 152 µs per loop
1000 loops, best of 3: 1.82 ms per loop
1000 loops, best of 3: 1.66 ms per loop
typed
版本比无类型版本慢,这似乎很奇怪。在检查编译的代码之后没有区别,除了typed
的推断类型是A
订单,untyped
订单C
。
我在Windows10上使用Numba 0.23.1,Numpy 1.10.1,Python 3.5.1。
如何设置typed
版本与无类型版本一样快?或者那是不可能的?