Die Python-Mehrfachverarbeitung dauert viel länger als die Einzelverarbeitung
Ich führe nacheinander einige große Berechnungen an 3 verschiedenen numpy 2D-Arrays durch. Die Arrays sind riesig, jeweils 25000 x 25000. Da jede Berechnung viel Zeit in Anspruch nimmt, habe ich beschlossen, drei davon auf drei CPU-Kernen auf dem Server parallel auszuführen. Ich befolge die Standardrichtlinie für die Mehrfachverarbeitung und erstelle zwei Prozesse und eine Arbeiterfunktion. Zwei Berechnungen durchlaufen die beiden Prozesse und die dritte wird lokal ohne separaten Prozess ausgeführt. Ich übergebe die riesigen Arrays als Argumente der Prozesse wie:
p1 = Process(target = Worker, args = (queue1, array1, ...)) # Some other params also going
p2 = Process(target = Worker, args = (queue2, array2, ...)) # Some other params also going
Die Worker-Funktion sendet zwei Numpy-Vektoren (1D-Array) in einer Liste zurück, die an die Warteschlange angehängt ist:
queue.put([v1, v2])
Ich benutze nichtmultiprocessing.pool
aber überraschenderweise bekomme ich keine Beschleunigung, es läuft tatsächlich dreimal langsamer. Dauert das Übergeben großer Arrays Zeit? Ich kann nicht herausfinden, was los ist. Soll ich Shared Memory-Objekte verwenden, anstatt Arrays zu übergeben?
Ich werde dankbar sein, wenn jemand helfen kann.
Vielen Dank.