Commit 444b9d98 authored by Björn Fischer's avatar Björn Fischer

change README

parent 05807ce4
......@@ -22,11 +22,11 @@ Jeder Bildpunkt kann parallel berechnet werden.
### Kommunikation
Jeder Bildpunkt muss bei jeder Iteration mit seinen Nachbarn kommunizieren, also müssen die Strukturen bei dem "verteilten Speicher" Modell möglichst gut erhalten bleiben. Bei der threadparallelen Verarbeitung ist besonders darauf zu achten, das der Zugriff auf gemeinse Variable performant funktioniert. Cache Verdrängung ist ein zusätzlicher Bedenkpunkt.
Jeder Bildpunkt muss bei jeder Iteration mit seinen Nachbarn kommunizieren, also müssen die Strukturen bei dem "verteilten Speicher"-Modell möglichst gut erhalten bleiben. Bei der threadparallelen Verarbeitung ist besonders darauf zu achten, dass der Zugriff auf gemeinsame Variablen performant funktioniert. Cacheverdrängung ist ein zusätzlicher Bedenkpunkt.
### Agglomeration
Bildpunkte werden zu Teilfeldern zusammengefasst. Jeder Prozessor übernimmt exakt ein Teilfeld. Es wird solange iteriert bis alle Teilfelder fertig sind. Um möglichst wenig Kommunikation an den Kanten zu erzeugen, wird die Matrix schachbrett-artig in Teilfelder geteilt.
Bildpunkte werden zu Teilfeldern zusammengefasst. Jeder Prozessor übernimmt exakt ein Teilfeld. Es wird solange iteriert, bis alle Teilfelder fertig sind. Um möglichst wenig Kommunikation an den Kanten zu erzeugen, wird die Matrix schachbrett-artig in Teilfelder geteilt.
Durch
......@@ -40,7 +40,7 @@ Innerhalb eines Teilfeldes werden die Bildpunkte auf Threads aufgeteilt. Hier is
### Mapping
Zur Abbildung der Nachbarschaften bietet MPI u.a. kartesische Gitter. Durch Hilfsfunktionen kann leicht mit Nachbarn Daten ausgetauscht werden. Die Funktion `Create_MPI_Cart_Cluster` erlaubt das Neu-Anordnen von Ranks. Dadurch können Nachbarn auch physikalisch nah gekoppelt werden. Da das Programm allerdings nur auf einem Rechner läuft, sind alle Prozesse eng gekoppelt; eine Neu-Anordnung ist dadurch nicht notwending.
Zur Abbildung der Nachbarschaften bietet MPI u.a. kartesische Gitter. Durch Hilfsfunktionen können leicht mit Nachbarn Daten ausgetauscht werden. Die Funktion 'Create_MPI_Cart_Cluster' erlaubt das Neuanordnen von Ranks. Dadurch können Nachbarn auch physikalisch nah gekoppelt werden. Da das Programm allerdings nur auf einem Rechner läuft, sind alle Prozesse eng gekoppelt; eine Neuanordnung ist dadurch nicht notwending.
## Messungen
......@@ -168,12 +168,12 @@ total: 0.0044291019
## Auswertung
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, die sich durch alle Problemgrößen zieht, ist, dass bei nur einem 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.
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)).
Allgemein kann man feststellen, dass es keinen 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.
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 aufwändige 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.
Selbst bei kleinen Größen von 32x32 ist durch die hohe Anzahl von Iterationen ein 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.
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment