aus dem Einführungs-Beispiel von python multiprocessing (https://docs.python.org/2/library/multiprocessing.html)
Beispiel 1:
Code: Alles auswählen
from multiprocessing import Pool
def f(x):
return x*x*x
if __name__ == '__main__':
p = Pool(5)
x=p.map(f,[1,2,3,4])
print(p.map(f, [1, 2, 3]))
print(x)
Code: Alles auswählen
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
pool = Pool(processes=4) # start 4 worker processes
result = pool.apply_async(f, [10]) # evaluate "f(10)" asynchronously
print(result.get(timeout=1)) # prints "100" unless your computer is *very* slow
print(pool.map(f, range(10))) # prints "[0, 1, 4,..., 81]"
Ich habe das multiprocessing Modul so verstanden, dass damit Abläufe parallelisiert werden können. Wofür stehen in den Beispielen die Zahlen in Pool?
Code: Alles auswählen
p = Pool(5)
pool = Pool(processes=4)
Bei meinem Problem habe ich ein großes ndarray, bei dem ich mir immer 12 bits anschaue und daraus in einer Funktion ein Ergebnis berechne, welches ich in einem Output-ndarray speicher. Die Berechnungen funktionieren fehlerfrei, aber sind sehr träge. Deshalb habe ich das Input-ndarray in 4 Teile aufgeteilt um später die 4 Output-ndarray hintereinander zu hängen (Reihenfolge ist wichtig). Die Berechnungsgeschwindigkeit möchte ich nun mit Parallelisierung der Berechnung der 4 Teile via multiprocessing verbessern.
Prinzip:
-Input ist eindimensionales ndarray mit 282.240 Elementen (erledigt)
-Aufteilen von Input in 4 Teile (erledigt)
-Parallelisierung: 4x paralleler Funktionsaufruf um Geschwindigkeit zu reduzieren (Funktionsaufruf erledigt, Parallelisierung offen)
-Ergebnisse der 4 Rückgabewerte (auch ndarrays mit jeweils 188160 Elementen) zu einem ndarray zusammenfügen (ndarray) (erledigt)