与Numba的热切编译比自动类型推断更慢?

时间:2016-02-01 00:01:22

标签: python numba

我正在尝试使用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版本与无类型版本一样快?或者那是不可能的?

0 个答案:

没有答案