Почему параллельная =True Numba делает это вычисление в 3 раза медленнее?
Делая это:
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 секунд.
Почему Нумба parallel=True
сделать это вычисление в 3 раза медленнее, чем быстрее?
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 секунды: распараллеливание сработало.