Das Programm verwendet zum Parallelisieren SPMD und Threads.
Das Programm verwendet zur Parallelisierung SPMD und Threads.
## SPMD
Das Programm läuft mehrfach. Die Prozesse kommunizieren dabei über Nachrichten. Das Test-Programm läuft lediglich auf einem Rechner. Eine rein thread-basierte Parallelisierung mit gemeinsamen Speicher wäre hier performanter.
Das Programm läuft mehrfach. Die Prozesse kommunizieren dabei über Nachrichten. Das Test-Programm läuft lediglich auf einem Rechner. Eine rein thread-basierte Parallelisierung mit gemeinsamen Speicher wäre hier performanter, allerdings kann man das Programm einfach auf mehreren Rechnern paralellisieren.
Es kommt MPI als Cluster-Library zum Einsatz.
## Threads
Es kommt OpenMP zum Einsatz. Die Anzahl der Threads wird dabei zur Laufzeit festgelegt.
## Datenparallelisierung
...
...
@@ -166,6 +167,12 @@ total: 0.0044291019
## Auswertung
Die Parallelisierung bringt einen
Eine ungewöhnliche Beobachtung, die sich durch alle Problemgrößen zieht, ist, dass bei nur 1. Prozess kein Performanz-Gewinn durch mehrere Threads erzielt wird. Gerade die Thread-Parallelisierung sollte durch den gemeinsamen Speicher performanter sein, besonders auch bei einem Prozess.
Eine ungewöhnliche Beobachtung ist, dass bei nur 1. Prozess kein Performanz-Gewinn durch mehrere Threads erzielt wird.
\ No newline at end of file
Allgemein kann man feststellen, dass es kein Gewinn bringt, das Produkt von Prozessen und Threads (also die Summe aller Threads) größer als die Anzahl der Kerne (inkl. HT) zu wählen (vgl. 4096x4096 T(4x12) < T(4x24)).
Die Effizienz unter der Ausnutzung aller 48 Kerne ist mit ca. 40% (4096x4096 T(1x1)/(T(4x12)*48)) weit unter den optimalen 100%. Möglicher Grund ist hier, die aufwendige Synchronisation der Kanten nach jeder Iteration und Cache Coherenz.
Selbst der bei kleinen Größen von 32x32 ist durch die hohe Anzahl an Iteration eine Gewinn durch Parallelisierung zu erzielen.
Die Zeit, die zur Initialisierung und Aufteilung der Tasks benötigt wird, ist bei allen Problemgrößen vernachlässigbar. Der iterative Teil wird mehrere hundert Mal durchlaufen.