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.
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.
## Threads
### 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
4096x4096
### Problemgröße 4096 x 4096
P: 8 T: 2 B: 128
#### Prozesse: 1
init: 0.0655639172
iterate 26.5077140331
total: 26.5732779503
Threads: 48
P: 16 T: 2 B: 128
init: 0.2023320198
iterate 135.5007259846
total: 135.7030580044
init: 0.0172390938
iterate 11.4972770214
total: 11.5145161152
Thread: 24
P: 32 T: 2 B: 128
init: 0.2041509151
iterate 135.3141219616
total: 135.5182728767
init: 0.0220100880
iterate 13.2383890152
total: 13.2603991032
Threads: 4
P: 32 disablled OpenMP
init: 0.1982460022
iterate 134.8806080818
total: 135.0788540840
init: 0.0144450665
iterate 11.0444979668
total: 11.0589430332
Threads: 1
P: 1 48 512
init: 0.2125899792
iterate 145.0294249058
total: 145.2420148849
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