Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
Parallele Algorithmen I Basistechniken
Prof. Dr. Walter F. Tichy Dr. Victor Pankratius David Meder Ali Jannesari Todo: Animationen überprüfen Replizierte Objekte
2
Parallel Random Access Machine (PRAM)
Abstraktes Maschinenmodell, in dem sich parallele Algorithmen sehr gut spezifizieren lassen. Entspricht einer synchronen MIMD-Maschine mit gemeinsamem Adressraum. Speicherzugriffsvarianten EREW: Exclusive Read, Exclusive Write ERCW: Exclusive Read, Concurrent Write CREW: Concurrent Read, Exclusive Write CRCW: Concurrent Read, Concurrent Write Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 2
3
Probleme des PRAM-Modells
Es gibt keine echte, synchrone MIMD-Maschine mit gemeinsamem Adressraum. Alle Speicherzugriffsvarianten außer EREW sind unrealistisch. Die implizite Annahme, dass Kommunikations-operationen eine Zeiteinheit dauern, ist ebenfalls unrealistisch. ABER: Ist man sich der Unzulänglichkeiten bewusst, dann ist die PRAM ein sehr elegantes Modell zur Spezifikation paralleler Algorithmen. Diese können einfach für Cluster konvertiert werden. Beliebig viele Prozessoren, Speicher Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 3
4
PRAM Sprachkonstrukte (1)
Imperative Programmiersprache mit Erweiterungen, um Parallelität zu spezifizieren. Asynchrones FORALL: FORALL i : P IN PARALLEL Anweisung1(i) … Anweisungn(i) END P ist eine Menge; für jedes Element in P wird ein Prozessor eingesetzt, wobei jeder Prozessor ein unterschiedliches Element i der Menge P bekommt. Jeder Prozessor führt die Anweisungsfolge 1 .. n asynchron aus. Die FORALL-Anweisung endet, wenn jeder Prozessor die Anweisungs-reihenfolge abgearbeitet hat. Zwischendurch erfolgt keine Synchronisation. Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 4
5
PRAM Sprachkonstrukte (2)
synchrone Form des FORALL: FORALL i : P IN SYNC Anweisung1(i) … Anweisungn(i) END Wie vorher, nur dass jetzt alle Prozessoren die Anweisungsfolge synchron („im Gleichschritt“) ausführen. Die synchrone Ausführung gleicher Anweisungen vermeidet viele Laufzeitprobleme, da unterschiedliche Ausführungs-geschwindigkeiten der Prozessoren nicht beachtet werden müssen. Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 5
6
Synchrone Zuweisung Synchrone Abarbeitung der Zuweisung: L := R
Alle n Prozessoren werten L synchron aus und erhalten eine Adresse. Alle n Prozessoren werten R synchron aus und erhalten einen Wert. Alle n Prozessoren speichern ihren Wert an ihrer Adresse (EW oder CW). (1) & (2) können im Prinzip auch gleichzeitig ausgeführt werden. Seiteneffekte sind möglich, aber die Reihenfolge der Auswertungen ist undefiniert. Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 6
7
Synchrones IF-THEN-ELSE (1)
Synchrone Abarbeitung der bedingten Anweisung: IF B THEN S1 ELSE S2 Alle n Prozessoren werten B synchron aus. Die Menge der Prozessoren partitioniert sich in die Mengen MT (für B=T) und MF (für B=F) in Abhängigkeit des Ergebnisses von B. Die Menge MT führt S1 synchron aus. Die Menge MF führt S2 synchron aus. Die Untermengen MT und MF können (müssen aber nicht) parallel abgearbeitet werden. Keine Aussage über die „relativen Geschwindigkeiten“ zueinander. Ausführung endet, wenn die Mengen MT und MF beide fertig sind. Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 7
8
Synchrones IF-THEN-ELSE (2)
Answer = 21 * (processorId % 3); IF (Answer == 42) THEN print(„Woohoo!“); ELSE print(„Doh!“); ENDIF Alle Prozessoren Answer = 21 * (processorId % 3); IF (Answer == 42) Alle Prozessoren werten die Bedingung synchron aus. Prozessoren MT mit Answer == 42 Prozessoren MF mit Answer != 42 THEN print(„Woohoo!“); ELSE print(„Doh!“); Alle Prozessoren ENDIF Ende, sobald beide Prozessorgruppen MT und MF fertig sind. Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 8
9
Synchrones IF-THEN-ELSE (3)
Answer = 21 * (processorId % 3); IF (Answer == 42) THEN print(„Woohoo!“); ELSE print(„Doh!“); ENDIF Alle Prozessoren Answer = 21 * (processorId % 3); IF (Answer == 42) Alle Prozessoren werten die Bedingung synchron aus. Prozessoren MT mit Answer == 42 Prozessoren MF mit Answer != 42 THEN print(„Woohoo!“); ELSE print(„Doh!“); Alle Prozessoren ENDIF Ende, sobald beide Prozessorgruppen MT und MF fertig sind. Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 9
10
FORALL (1) Addition eines n-elementigen Vektors FORALL i : [0 .. n-1] IN SYNC C[i] := A[i] + B[i]; END Bsp.: für n = 8 FORALL i : [0 .. n-1] IN PARALLEL wäre ebenfalls möglich, da die Anweisungen voneinander unabhängig sind. 1 2 3 4 5 6 7 8 10 12 14 A B C + = Prozessor Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 10
11
FORALL (2) FORALL i : [0 .. n-1] IN SYNC ; END C[i] := A[i] + B[i]
Alle n Prozessoren Werten C[i] synchron aus und erhalten eine Adresse. Alle n Prozessoren Werten A[i] + B[i] synchron aus und erhalten einen Wert. Alle n Prozessoren speichern ihren Wert an der in (1) ermittelten Adresse. Haben alle n Prozessoren die FORALL-Schleife abgearbeitet, wird gemeinsam mit der Bearbeitung der danach folgenden Codezeilen fortgefahren. Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 11
12
FORALL (3) Rotieren eines n-elementigen Vektors FORALL i : [0 .. n-1] IN SYNC A[i] := A[(i+1)mod n]; END Bsp.: für n = 8 FORALL i : [0 .. n-1] IN PARALLEL wäre nicht möglich, da dann unter Umständen falsche Werte weitergegeben werden. 1 2 3 4 5 6 7 A Prozessor Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 12
13
FORALL (4) Beispiel für fehlerhafte Ausführung mit IN PARALLEL
Prozessor 1 2 3 4 5 6 7 A 1 2 3 4 5 6 7 A 1 2 3 4 6 6 7 Prozessoren 0 bis 3, sowie 5 bis 7 führen Anweisung gleichzeitig aus. Prozessor 4 liest Wert aus A[5] erst, nachdem dieser von Prozessor 5 geschrieben wurde ( asynchrone Ausführung!). Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 13
14
Reduktion (1) Eine Reduktion, d.h. das Zusammenfassen mehrerer Datenelemente zu einem Ergebnis, gehört zu den Basistechniken der parallelen Algorithmen. (MPI_Reduce, MPI_Allreduce) Bsp: Die parallele Summenbildung Summenberechnung sequentiell: O(N) Frage: Wie geht's parallel schneller? 1 2 3 4 5 6 7 A Prozessor Sum 28 Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 14
15
Reduktion (2) Baumartiges Reduktionsverfahren: Fasse jeweils zwei (im Abstand 2k, 0 ≤ k < log2(N)) benachbarte Elemente zusammen: 1 2 3 4 5 6 7 Sum(0,1) Sum(2,3) Sum(4,5) Sum(6,7) Sum(0,3) Sum(4,7) Sum(0,7) Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 15
16
Reduktion (3) PRAM Programm einer parallelen Summe CONST N = ...
V : ARRAY [0 .. N-1] OF INTEGER Spanne : INTEGER Spanne := 1; WHILE (Spanne < N) DO FORALL i : [0 .. N-1] IN SYNC IF (i MOD (2*Spanne)) = 0 AND Spanne+i < N V[i] := V[i] + V[i + Spanne]; END Spanne := Spanne * 2; parallele Laufzeit: O(log2(N)), Modell: CREW Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 16
17
Reduktion (4) N = 4 Schritt 1 Spanne = 1 < 4, 2 * Spanne = 2 N = 4
CONST N = 4 V : ARRAY [0 .. N-1] OF INTEGER Spanne : INTEGER Spanne := 1; WHILE (Spanne < N) DO FORALL i : [0 .. N-1] IN SYNC IF (i MOD (2*Spanne)) = 0 AND Spanne+i < N V[i] := V[i] + V[i + Spanne]; END Spanne := Spanne * 2; Reduktion (4) N = 4 Schritt 1 Spanne = 1 < 4, 2 * Spanne = 2 N = 4 Schritt 2 Spanne = 2 < 4, 2 * Spanne = 4 1 2 3 Valt i mod 4 Spanne + i 4 5 Vneu 1 2 3 Valt i mod 2 Spanne + i 4 Vneu Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 17
18
CONST N = 4 V : ARRAY [0 .. N-1] OF INTEGER Spanne : INTEGER Spanne := 1; WHILE (Spanne < N) DO FORALL i : [0 .. N-1] IN SYNC IF (i MOD (2*Spanne)) = 0 AND Spanne+i < N V[i] := V[i] + V[i + Spanne]; END Spanne := Spanne * 2; Reduktion (5) Frage: Funktioniert das Verfahren auch, wenn N keine Potenz von 2 ist? Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 18
19
Reduktion (6) N = 6 Schritt 1 Spanne = 1 < 6, 2 * Spanne = 2 N = 6
CONST N = 4 V : ARRAY [0 .. N-1] OF INTEGER Spanne : INTEGER Spanne := 1; WHILE (Spanne < N) DO FORALL i : [0 .. N-1] IN SYNC IF (i MOD (2*Spanne)) = 0 AND Spanne+i < N V[i] := V[i] + V[i + Spanne]; END Spanne := Spanne * 2; Reduktion (6) N = 6 Schritt 1 Spanne = 1 < 6, 2 * Spanne = 2 N = 6 Schritt 2 Spanne = 2 < 6, 2 * Spanne = 4 1 2 3 Valt i mod 4 Spanne + i Vneu 4 5 6 7 1 2 3 Valt i mod 2 Spanne + i Vneu 4 5 6 Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 19
20
Reduktion (7) Funktioniert auch, wenn N keine Potenz von 2 ist.
CONST N = 4 V : ARRAY [0 .. N-1] OF INTEGER Spanne : INTEGER Spanne := 1; WHILE (Spanne < N) DO FORALL i : [0 .. N-1] IN SYNC IF (i MOD (2*Spanne)) = 0 AND Spanne+i < N V[i] := V[i] + V[i + Spanne]; END Spanne := Spanne * 2; Reduktion (7) N = 6 Schritt 3 Spanne = 4 < 6, 2 * Spanne = 8 Funktioniert auch, wenn N keine Potenz von 2 ist. Übriges Element (im Beispiel Element 4) wird dann in einem separaten Schritt verrechnet. 1 2 3 Valt i mod 8 Spanne + i Vneu 4 5 6 7 8 9 Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 20
21
Präfix & Postfix (1) Berechnung aller Partialsummen (MPI_Scan): 3 4 2
3 4 2 5 6 7 1 Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 21
22
Präfix & Postfix (2) Präfixoperation(j) berücksichtigt alle Elemente i mit 0 ≤ i ≤ j. Postfixoperation(j) berücksichtigt alle Elemente i mit N-1 ≥ i ≥ j. Beispiel: Prä- und Postfixsummen. 1 A 2 3 4 5 6 7 Präfix 8 Postfix Prozessor Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 22
23
Präfix & Postfix (3) Berechnung der Präfixsumme:
A 1 2 4 8 16 32 48 96 B 1 2 4 8 16 32 48 96 log2(8) = 3 Schritte zur Berechnung der Präfixsummen. +B[i-1] 1 3 6 12 24 48 80 144 +B[i-2] 1 3 7 15 30 60 104 192 +B[i-4] 1 3 7 15 31 63 111 207 Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 23
24
Broadcast (1) Verteilen von Elementen (nützlich z.B. für MPI_Bcast): ?
Prozessor 1 2 3 4 5 6 7 a ? ? ? ? ? ? ? ? a a a a a a a a Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 24
25
Broadcast (2) Verteilen von Elementen (nützlich z.B. für MPI_Bcast):
Sei Verknüpfungsoperator mit Eigenschaft a x = a Speichere a in T[0] Wende dann Präfixoperation an Prozessor 1 2 3 4 5 6 7 a ? ? ? ? ? ? ? a a ? ? ? ? ? ? a a a a ? ? ? ? a a a a a a a a Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 25
26
Broadcast (3) PRAM Programm zur Datenverteilung CONST N = ...
V : ARRAY [0 .. N-1] OF INTEGER Spanne : ARRAY [0 .. N-1] INTEGER V[0] := a; FORALL i : [0 .. N-1] IN SYNC Spanne[i] := 1; WHILE (Spanne[i] < N) DO IF i >= Spanne[i] V[i] := V[i - Spanne[i]]; END Spanne[i] := Spanne[i] * 2; parallele Laufzeit: O(log2(N)), Modell: EREW. Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 26
27
Broadcast (4) N = 4 Schritt 1 N = 4 Schritt 2 1 2 3 1 2 3 a a a a a a
CONST N = ... V : ARRAY [0 .. N-1] OF INTEGER Spanne : ARRAY [0 .. N-1] INTEGER V[0] := a; FORALL i : [0 .. N-1] IN SYNC Spanne[i] := 1; WHILE (Spanne[i] < N) DO IF i >= Spanne[i] V[i] := V[i - Spanne[i]]; END Spanne[i] := Spanne[i] * 2; Broadcast (4) N = 4 Schritt 1 N = 4 Schritt 2 1 2 3 1 2 3 Valt a Valt a a Spanne[i] 1 1 1 1 Spanne[i] 2 2 2 2 i>=Spanne[i] 1 1 1 i>=Spanne[i] 1 1 Vneu Vneu a a a a a a Spanne[i]neu 2 2 2 2 Spanne[i]neu 4 4 4 4 Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 27
28
Anwendungen (1) Abzählen von Elementen mit einer bestimmten Eigenschaft: FORALL i:[0 .. N-1] IN PARALLEL T[i] := test_condition(i); END Präfix(T,+); Ergebnis in T Präfix T 1 2 3 4 5 6 7 Prozessor Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 28
29
Anwendungen (2) Kompaktifizierung einer Liste Laufzeit: O(log(N)) a b
Kompaktifizierung einer Liste Laufzeit: O(log(N)) a b c d a b c d 1 2 3 L if isChar(L[i]) then T[i] := 1; else T[i] := 0; T: Präfix(T,+) if (T[i] == 1) then L'[T' [i]-1] := L[i] L' 4 T‘: Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 29
30
Anwendungen (3) Rekurrenzen – Zur Erinnerung
Beispiel: Finde geschlossene Form für lineare Rekurrenz g(n) = g(n-1) + 2n -1 g(0) = 0 Lösung: f(n)=n² Möglicher Lösungsansatz: „Ausrollen“ g(n) = g(n-1) + 2n - 1 = [g(n-2) + 2(n-1) - 1] + 2n - 1 weil g(n-1) = g(n-2) + 2(n-1) -1 = g(n-2) + 2(n-1) + 2n - 2 = [g(n-3) + 2(n-2) -1] + 2(n-1) + 2n - 2 weil g(n-2) = g(n-3) + 2(n-2) -1 = g(n-3) + 2(n-2) + 2(n-1) + 2n - 3 ... = g(n-i) + 2(n-i+1) n - i = g(n-n) + 2(n-n+1) n - n = n – n weil g(0) = 0 = n - n = 2*n*(n+1)/2 - n weil n = n(n+1)/2 = n^2
31
Anwendungen (3) Rekurrenzen
Lösen von Rekurrenzen (1. Ordnung): Xi = Xi-1 ○ ai, mit ○ binärer Operator. Beispiel: Präfixsumme als Rekurrenz: Sumi = Sumi-1 + ai mit Sum0 = a0 Lösen von Rekurrenzen höherer Ordnung auch möglich: Xi = ai-1 ○ Xi-1 ○ … ○ ai-m ○ Xi-m ○ bi Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 31
32
Anwendungen (4) Parallele Polynomauswertung: f(x) = a0 + a1x + a2x2+ a3x3+ a4x4+ a5x5+ a6x6+ a7x7 Laufzeit: O(3*log(N)) = O(log(N)) X 1 2 3 4 5 6 7 Prozessor x Broadcast X Präfix(X,*) x2 x3 x4 x5 x6 x7 A T = A * X L_Reduce(T,+) f(x) Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 32
33
Aufgabe (1) Gegeben sei ein N-elementiger Zahlenvektor v[0…n-1].
Schreiben Sie ein paralleles Programm, welches D = max{ v[i] − v[j] }, 0 ≤ i , j < n berechnet. Was ist die asymptotische Laufzeit? Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 33
34
Aufgabe (2) Schreiben Sie ein paralleles Programm, welches zwei Zeichenreihen der Länge N lexikographisch vergleicht. Was ist die asymptotische Laufzeit? Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 34 34
35
Aufgabe (3) Gegeben sei ein N-elementiger Zahlenvektor v[0… n-1].
Schreiben Sie ein paralleles Programm, welches den Wert des maximalen Untervektors bestimmt: U=max{ ∑ v[i] ; 0 ≤ p < q < n} Was ist die asymptotische Laufzeit? q i=p Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 35 35
36
Aufgabe (4) Schreiben Sie ein paralleles Programm, welches die ersten N Fibonacci-Zahlen berechnet. fi = fi-1 + fi-2, f0 = f1 = 1 Prof. W. F. Tichy, Dr. V. Pankratius, D. Meder, A. Jannesari 36 36
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.