这样做时:
import numpy as np
from numba import jit
@jit
def doit(A, Q, n):
for i in range(len(Q)):
Q[i] = np.sum(A[i:i+n] <= A[i+n])
A = np.random.random(1000*1000)
n = 5000
Q = np.zeros(len(A)-n)
doit(A, Q, n)
运行时间在我的计算机上大约需要5.4秒。
我尝试使用numba的并行化功能:
@jit(parallel=True)
def doit(A, Q, n):
for i in range(len(Q)):
Q[i] = np.sum(A[i:i+n] <= A[i+n])
相反,它需要17秒。
为什么numba的parallel=True
会使计算速度降低3倍而不是更快?
答案 0 :(得分:1)
我刚刚找到答案:缺少一个字符: p 范围而不是范围:
from numba import jit, prange
@jit(parallel=True)
def doit(A, Q, n):
for i in prange(len(Q)):
...
然后,它需要1.8秒而不是5.4秒:并行化成功了。