Praca równoległa wielu procesorów Joblib jest wolniejsza niż pojedyncza
Właśnie zacząłem używać modułu Joblib i próbuję zrozumieć, jak działa funkcja równoległa. Poniżej znajduje się przykład, gdzie równoległość prowadzi do dłuższych czasów działania, ale nie rozumiem dlaczego. Mój czas pracy na 1 procesorze wynosił 51 sekund vs. 217 sekund na 2 procesorach.
Przypuszczałem, że równoległe uruchamianie pętli spowoduje skopiowanie list a i b do każdego procesora. Następnie wyślij item_n do jednego procesora i item_n + 1 do drugiego procesora, wykonaj funkcję, a następnie zapisz wyniki z powrotem do listy (w kolejności). Następnie chwyć kolejne 2 przedmioty i tak dalej. Oczywiście czegoś mi brakuje.
Czy to zły przykład lub zastosowanie joblib? Czy po prostu skonstruowałem kod źle?
Oto przykład:
import numpy as np
from matplotlib.path import Path
from joblib import Parallel, delayed
## Create pairs of points for line segments
a = zip(np.random.rand(5000,2),np.random.rand(5000,2))
b = zip(np.random.rand(300,2),np.random.rand(300,2))
## Check if one line segment contains another.
def check_paths(path, paths):
for other_path in paths:
res='no cross'
chck = Path(other_path)
if chck.contains_path(path)==1:
res= 'cross'
break
return res
res = Parallel(n_jobs=2) (delayed(check_paths) (Path(points), a) for points in b)