为什么 numba 的 parallel=True 会使这个计算慢 3 倍?
Why does numba's parallel=True make this computation 3 times slower?
执行此操作时:
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 倍而不是更快?
我刚找到答案:缺少一个字符:p范围而不是范围:
from numba import jit, prange
@jit(parallel=True)
def doit(A, Q, n):
for i in prange(len(Q)):
...
那么它需要 1.8 秒而不是 5.4 秒:并行化有效。
执行此操作时:
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 倍而不是更快?
我刚找到答案:缺少一个字符:p范围而不是范围:
from numba import jit, prange
@jit(parallel=True)
def doit(A, Q, n):
for i in prange(len(Q)):
...
那么它需要 1.8 秒而不是 5.4 秒:并行化有效。