Kontext: Ich habe ein Array, das ich über meine Motoren verstreut habe (4 Motoren zu diesem Zeitpunkt), möchte eine Funktion auf jeden Punkt im Array für eine beliebige Anzahl von Iterationen anwenden und sammeln Sie das resultierende Array von den Engines und führen Sie eine Analyse durch.Ipyparallel langsame Ausführung mit Scatter/Gather
Zum Beispiel habe ich das Array von Datenpunkten, die gestreut werden, und die Anzahl der Iterationen auf jeder Datenpunkt:
data_points = range(16)
iterations = 10
dview.scatter('points', data_points)
I einen Benutzer bereitgestellte Funktion haben als solche, die zu den Motoren gedrückt wird:
def user_supplied_function(point):
return randint(0, point)
dview.push(dict(function_one = user_supplied_function))
Eine Liste für meine Ergebnisse und die parallele Ausführung:
result_list = []
for i in range(iterations):
%px engine_result = [function_one(j) for j in points]
result_list.append(dview.gather('engine_result'))
Problem: Das funktioniert, und ich bekomme das Ergebnis, das ich von den Engines will, aber wie die Anzahl der Iterationen wächst, dauert die Ausführung der Schleife länger und länger. Bis zu dem Punkt, an dem 1000 Iterationen bei 50 Punkten mehr als 15 Sekunden dauern. Während eine sequentielle Version dieser Aufgabe weniger als eine Sekunde benötigt.
Irgendeine Idee, was könnte das verursachen? Könnte es der Overhead von der Nachricht sein, die von gather()
geht? Wenn ja, kann jemand Lösungen vorschlagen?