Почему параллельная = True Numba делает это вычисление в 3 раза медленнее? - PullRequest
0 голосов
/ 06 ноября 2018

При этом:

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 голосов
/ 06 ноября 2018

Я только что нашел ответ: один символ отсутствовал: p диапазон вместо диапазона:

from numba import jit, prange

@jit(parallel=True)
def doit(A, Q, n):
    for i in prange(len(Q)):
       ...

Тогда это займет 1,8 секунды вместо 5,4 секунды: распараллеливание сработало.

...