为什么numba的parallel = True使此计算慢3倍?

时间:2018-11-06 11:03:00

标签: python performance numpy parallel-processing numba

这样做时:

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倍而不是更快?

1 个答案:

答案 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秒:并行化成功了。