Почему параллельная numba = True медленнее параллельной = False - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь выполнить параллельные вычисления, используя numba, однако я столкнулся с проблемой: при использовании следующего кода значительно медленнее, если я переключаю параллель = True при сравнении с выключением.

import numpy as np
from numba import njit, prange
from numba.typed import List
import time


n = 1000

@njit(parallel = True)
def lamb(now):
    timez = List()
    k1 = List()
    k = 0
    for i in range(n):
        timez.append(np.arange(i+1))
        k1.append( len(timez[i][timez[i]<=now]) )

    for i in prange(n):
       k += k1[i]

    return k


lamb(21)

start = time.time()
lamb(21)
end = time.time()
print("Elapsed (after compilation) = %s" % (end - start))

Если parallel = True, истекшее время составляет Elapsed (after compilation) = 0.012674093246459961. Для сравнения, если parallel = False, прошедшее время составляет Elapsed (after compilation) = 0.007932901382446289.

Есть идеи, почему это так?

1 Ответ

0 голосов
/ 28 октября 2019

Координация между различными процессами увеличивает производительность. Это снижение производительности, которое вы видите, если работа действительно стоила усилий по распараллеливанию, вы бы получили чистую выгоду, если бы работа была достаточно большой.

...