Я только начал использовать модуль Joblib, и я пытаюсь понять, как работает функция Parallel. Ниже приведен пример того, где распараллеливание приводит к более длительному времени автономной работы, но я не понимаю, почему. Мое время работы на 1 процессорное время составляло 51 сек против 217 секунд на 2 процессора.
Мое предположение заключалось в том, что запуск цикла в параллель будет копировать списки a и b для каждого процессора. Затем отправьте item_n на один процессор и item_n + 1 на другой процессор, выполните функцию, а затем запишите результаты обратно в список (по порядку). Затем возьмите следующие 2 элемента и так далее. Я, очевидно, что-то пропустил.
Это плохой пример или использование joblib? Я просто неправильно структурировал код?
Вот пример:
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)