Commit f7db8b76 authored by Björn Fischer's avatar Björn Fischer

update readme

parent 5f411d30
......@@ -2,15 +2,30 @@
Das Programm verwendet zum Parallelisieren SPMD und Threads.
## Datendekomposition
Jeder Bildpunkt braucht seine Nachbarn zur iterativen Berechnung, 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.
## 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.
Jede Instanz kann sich selbst eindeutig identifizieren. Dies kann genutzt werden um Datenmengen (gleichmäßig) zuzuordnen. Die Matrix wird schachbrett-artig auf die Prozesse aufgeteilt.
Es kommt MPI als Cluster-Library zum Einsatz.
## Threads
## Datenparallelisierung
nach PPkonzepte.pdf 3-21
### Datendekomposition
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.
### 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.
Durch
......@@ -19,50 +34,46 @@ Anzahl der Prozesse in 1. Dimension = (Anzahl der Prozesse)/(Anzahl der Prozesse
können die Kantenlängen minimiert werden. Dadurch wird der Payload der Nachrichten und folglich die Latenz verringert.
Es kommt MPI als Cluster-Library zum Einsatz.
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.
## Threads
Innerhalb eines Teilfeldes werden die Bildpunkte auf Threads aufgeteilt. Hier ist der Zugriff auf alle Bildpunkte gleich teuer. Zur Synchronisation von maxdiff wird das reduction-Feature von OpenMP genutzt. Dabei hält jeder Thread eine Kopie und nur zum Abschluss muss synchronisiert werden.
### 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.
## Messungen
Innere Schleife
### Problemgröße 4096 x 4096
4096x4096
#### Prozesse: 1
P: 8 T: 2 B: 128
Threads: 48
init: 0.0655639172
iterate 26.5077140331
total: 26.5732779503
init: 0.2023320198
iterate 135.5007259846
total: 135.7030580044
P: 16 T: 2 B: 128
Thread: 24
init: 0.0172390938
iterate 11.4972770214
total: 11.5145161152
init: 0.2041509151
iterate 135.3141219616
total: 135.5182728767
P: 32 T: 2 B: 128
Threads: 4
init: 0.0220100880
iterate 13.2383890152
total: 13.2603991032
init: 0.1982460022
iterate 134.8806080818
total: 135.0788540840
P: 32 disablled OpenMP
Threads: 1
init: 0.0144450665
iterate 11.0444979668
total: 11.0589430332
init: 0.2125899792
iterate 145.0294249058
total: 145.2420148849
P: 1 48 512
init: 0.2176799774
iterate 127.5701329708
total: 127.7878129482
## Auswertung
OpenMP bringt erstaunlich wenig
\ No newline at end of file
Die Parallelisierung bringt einen
Eine ungewöhnliche Beobachtung ist, dass bei nur 1. Prozess kein Performanz-Gewinn durch mehrere Threads erzielt wird.
\ 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