簡體   English   中英

為什么numba在這個簡單的總和上要快得多?

[英]why is numba so much faster on this simple summation?

我有一個公共筆記本,其中python,numpy,numba,cython和fortran在簡單求和上進行比較:

https://gist.github.com/denfromufa/7727874c4fe1e7e174ed953930e93bbc

為什么numba這么快?

正如@DavidW指出的那樣,你並沒有真正對相同算法進行比較。 下面我為每個cython和numba編寫了兩個單獨的函數來執行相同的操作。 第一個是在一個數組上運行,第二個是給定一個整數:

用Cython:

cpdef long cy_sum(long[:] A):
    cdef long i, n = A.shape[0], s = 0
    for i in range(n):
        s += A[i]
    return s

cpdef long cy_sum2(long i):
    cdef long s, x
    s = 0
    for x in range(i):
        s += x
    return s

Numba:

@nb.jit(nopython=True)
def nb_sum(A):
    s=0
    n = A.shape[0]
    for i in range(n):
        s += A[i]
    return s

@nb.jit(nopython=True)
def nb_sum2(i):
    s=0
    for x in range(i):
        s+=x
    return s

測試以確保它們給出相同的結果:

N = int(1e6)
d = np.arange(N, dtype=np.int64)

print np.allclose(nb_sum(d), cy_sum(d))   # True
print np.allclose(nb_sum2(N), cy_sum2(N))  # True

和我的硬件上的時間:

%timeit cy_sum(d)
%timeit nb_sum(d)

1000 loops, best of 3: 416 µs per loop
1000 loops, best of 3: 237 µs per loop

%timeit cy_sum2(N)
%timeit nb_sum2(N)

10000000 loops, best of 3: 63.5 ns per loop
10000000 loops, best of 3: 187 ns per loop

我不會從這樣的微基准中得出太多結論,但至少現在正在比較等效的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM