Lösung linearer Gleichungssysteme Seminar “Parallele Programmierung“ Nico Ziborius
Gliederung 1. Einleitung 2. Direkte Verfahren 3. Iterative Verfahren 2.1 Gauß-Elimination 2.2 zyklische Reduktion 3. Iterative Verfahren 3.1 klassische iterative Verfahren 3.1.1 Jacobi-Verfahren 3.1.2 Gauß-Seidel-Verfahren 3.2 Methode der konjugierte Gradienten 4. Zusammenfassung
Gliederung 1. Einleitung 2. Direkte Verfahren 3. Iterative Verfahren 2.1 Gauß-Elimination 2.2 zyklische Reduktion 3. Iterative Verfahren 3.1 klassische iterative Verfahren 3.1.1 Jacobi-Verfahren 3.1.2 Gauß-Seidel-Verfahren 3.2 Methode der konjugierte Gradienten 4. Zusammenfassung
1. Einleitung linearer Gleichungssysteme Kern vieler numerischer Anwendungen (z.B numerische Lösung partieller Differentialgleichungen) Gesucht Lösung für Ax =b nichtsinguläre Matrix ARnn Vektor bRn und Lösungsvektor xRn Direkte-Verfahren exakte Lösung z.B. Gauß-Elimination, zyklische Reduktion Iterative-Verfahren Näherung an die Lösung z.B. Jacobi-Verfahren, Gauß-Seidel-Verfahren, Methode der konjugierten Gradienten
Gliederung 1. Einleitung 2. Direkte Verfahren 3. Iterative Verfahren 2.1 Gauß-Elimination 2.2 zyklische Reduktion 3. Iterative Verfahren 3.1 klassische iterative Verfahren 3.1.1 Jacobi-Verfahren 3.1.2 Gauß-Seidel-Verfahren 3.2 Methode der konjugierte Gradienten 4. Zusammenfassung
2.1 Gauß-Elimination Idee: Transformiere Ax=b in äquivalentes Gleichungssystem A‘x = b‘, so dass A‘ eine obere Dreiecksmatrix bildet.
2.1 Gauß-Elimination Transformation benötigt n-1 Schritte Schritt k , 1 k n-1 A(k+1), b(k+1) aus A(k), b (k) berechnen: Eliminationsfaktoren berechnen: Elemente von A und b für k< j n und k <i n neu berechnen:
2.1 Gauß-Elimination Lösung durch Rückwärtseinsetzen, für k = n,n-1,...,1: sequentielle Implementierung Θ(n3) (drei ineinander verschachtelte Schleifen)
2.1 Gauß-Elimination Elemente auf der Diagonalen gleich Null Fehler, da Division durch Null sehr kleine Elemente auf der Diagonalen Rundungsfehler daher Elemente auf der Diagonalen durch ein andere, sogenannte Pivotelemente, ersetzten: Spaltenpivotsuche: betragsgrößte ark(k) aus akk(k),..,ank(k) suchen vertauschen der Zeilen k und r , falls r k.
2.1 Gauß-Elimination parallelen Implementierung: (Hypercube) zeilenblockweise Aufteilung der Matrix A und des Vektor b mit p = Anzahl Prozessoren, wird Pi für 1 i p, ein n/p großer Zeilenblock zugewiesen Jeder Prozessor Pi hat ein 2-dimensionales Array a[n/p][n] (Koeffizienten Matrix A) Array b[n/p] (Werten des Vektors b) Array marked[n/p] (markieren der Pivotzeile) Array pivot[n/p], (wann war Zeile Pivotzeile)
2.1 Gauß-Elimination zunächst Array marked mit 0 initialisieren dann in n-1 Schritten die obere Dreiecksmatrix berechnen: a 1 2 4 -8 -1 3 -2 -5 -4 10 11 -6 14 7 - P2 P1 b marked pivot 1. lokales Pivotelement bestimmen: Pi ermittelt unter den Elementen a[r][k], mit r= 1...n/p und marked[r]=0 das lokale Maximum
2.1 Gauß-Elimination 2. globales Pivotelement bestimmen: Aus den lokalen Maxima wird das globale Maximum, durch Auruf der Funktion MAX_TOURNAMENT(int i, int value, int winner) ermittelt int MAX_TOURNAMENT(int i, int value, int winner){ int j,k; for(k=0; k<log p-1; k++){ j=i^(1<<k); [j]tmp_value value; [j]tmp_winner winner; if(tmp_value>value){ value = tmp_value; winner = tmp_winner; } return winner;}
2.1 Gauß-Elimination 1 2 4 -8 -1 3 -2 -5 -4 10 11 -6 14 7 - P2 P1 1 2 b marked pivot 3. Pivotzeile Markieren & Verteilen: wenn Pi Gewinner, dann marked[r]=1, pivot[r]=k, Elemente a[r][k]... a[r][n] und b[r] in Hilfsvektor kopieren und an alle andere Prozessoren senden 1 2 4 -8 -1 3 -2 -5 -4 10 11 -6 14 7 - P2 P1 1 2 4 -8 -1 3 -2 -5 -4 10 11 -6 14 7 - P2 P1 4. Berechnung der Eliminationsfaktoren: Pi berechnet für seine lokalen Zeilen i, mit i =1,...n/p, mit marked[i]=0, die Eliminationsfaktoren 1 2 4 -8 -1 3 -2 -5 -4 10 11 -6 14 7 - P2 P1
2.1 Gauß-Elimination 1 2 4 -8 -1 3 -2 -5 -4 10 11 -6 14 7 - P2 P1 5 5. Neu Berechnung Matrixelemente: Pi berechnet seine Elemente a[i][j], und b[i], i=1...n/p, j=k+1...n, mit marked[i]=0, neu. a b marked pivot 1 2 4 -8 -1 3 -2 -5 -4 10 11 -6 14 7 - P2 P1 5 -4,75 9,75 15,5 6,625 jeder Prozessor sucht in seinem Array marked nach marked[j]=0 und setzt pivot[j]=n Lösung des Gleichungssystems durch Rückwärtseinsetzten
2.1 Gauß-Elimination Berechnungsaufwand: Kommunikationsaufwand: Pivotzeile kopieren Berechnungsaufwand: pivot Pivotzeile ermitteln Eliminationsfaktoren & Elemente von A, b neu berechnen Initialisierung marked Kommunikationsaufwand:
2.1 Gauß-Elimination Vorteile: Nacheilt: Vorhersagbarkeit der Laufzeit, des Speicherbedarfs Berechnung einer exakten Lösung Nacheilt: bei dünnbesetzten Matrizen entsteht fill-in
Gliederung 1. Einleitung 2. Direkte Verfahren 3. Iterative Verfahren 2.1 Gauß-Elimination 2.2 zyklische Reduktion 3. Iterative Verfahren 3.1 klassische iterative Verfahren 3.1.1 Jacobi-Verfahren 3.1.2 Gauß-Seidel-Verfahren 3.2 Methode der konjugierte Gradienten 4. Zusammenfassung
2.2 zyklische Reduktion Eine Matrix A mit A= (aji) i,j=1,...,n Rnn heißt Bandmatrix mit halber Bandbreite r, falls aij = 0 für |i-j| >r. Falls r = 1 , so heißt A Tridiagonalmatrix Gauß-Elimination hier nicht Sinnvoll!
2.2 zyklische Reduktion Falls A symmetrisch und positiv definit Lösung mittels rekursiven Verdoppelns oder zyklischer Reduktion Ausgangspunkt beider Verfahren: Idee: xi-1 und xi+1 aus der i-ten Gleichung, durch einsetzen von geeigneten Vielfachen der Gleichungen i+1 und i-1, zu eliminieren
2.2 zyklische Reduktion Nach log n Schritten, nur noch Elemente der Hauptdiagonalen ungleich Null Lösung ist einfach abzulesen Pro Schritt werden O(n) Werte berechnet: O(nlog n) gegenüber O(n) für Gauß-Elimination aber Berechnung der Werte innerhalb eines Schrittes parallel möglich
2.2 zyklische Reduktion rekursives Verdoppeln : zyklische Reduktion : Diagonalmatrix in log n Schritten ermitteln zyklische Reduktion : die Zahl der berechneten Werte in jedem Schritt halbiert erfordert abschließende Substitutionsphase
2.2 zyklische Reduktion parallele Implementierung: Zeilen der Tridiagonalmatrix A blockweise auf p Prozessoren aufgeteilen Zur Vereinfachung: n = pq mit q q = 2Q mit Q N Pi speichert Zeilenblock der Größe q, mit den Zeilen (i-1)q+1,...,i*q, für 1 i p
2.2 zyklische Reduktion parallele Implementierung: log p Stufen x4 x8 Q Stufen x6 x2 x7 x3 x5 x1 Q Stufen parallele Implementierung: 1. zyklische Reduktion: bis nur noch eine Gleichung pro Prozessor vorhanden 2. rekursives Verdoppeln: das nur noch p-dimensionale Gleichungssystem wird nun mittels rekursiven Verdoppeln in gelöst 3. Substitutionsphase: Ermittlung der noch fehlenden Werte des Lösungsvektors x
2.2 zyklische Reduktion Aufwand Phase 1: Aufwand Phase 2:
2.2 zyklische Reduktion Aufwand Insgesamt:
Gliederung 1. Einleitung 2. Direkte Verfahren 3. Iterative Verfahren 2.1 Gauß-Elimination 2.2 zyklische Reduktion 3. Iterative Verfahren 3.1 klassische iterative Verfahren 3.1.1 Jacobi-Verfahren 3.1.2 Gauß-Seidel-Verfahren 3.2 Methode der konjugierte Gradienten 4. Zusammenfassung
3.1 klassische iterative Verfahren Berechnen Folge von Approximationsvektoren {x(k)}k=1,2,...,, die gegen die gesuchte Lösung x*Rn konvergieren Zerlegung der Matrix A in A=M-N mit M,N Rnn M nichtsinguläre Matrix M-1 leicht zu berechnen, z.B. Diagonalmatrix x* erfüllt Gleichung: Mx* = Nx* +b. Iterationsvorschrift: Mx(k+1) = Nx(k) + b
Gliederung 1. Einleitung 2. Direkte Verfahren 3. Iterative Verfahren 2.1 Gauß-Elimination 2.2 zyklische Reduktion 3. Iterative Verfahren 3.1 klassische iterative Verfahren 3.1.1 Jacobi-Verfahren 3.1.2 Gauß-Seidel-Verfahren 3.2 Methode der konjugierte Gradienten 4. Zusammenfassung
3.1.1 Jacobi-Verfahren Zerlegung von A in A=D-L-R mit (D,L,R Rnn), D Diagonalmatrix, L untere Dreiecksmatrix, R obere Dreiecksmatrix (jeweils ohne Diagonale) Iterationsvorschrift: Dx(k+1) =(L+R)x(k) + b In Komponentenschreibweise:
3.1.1 Jacobi-Verfahren Abbruchkriterium: relativer Fehler ||.|| Vektornorm, z.B. ||x|| = max i=1,...,n|xi| oder ||x||2=(n i=1|x|2)½ .
3.1.1 Jacobi-Verfahren parallel Implementierung: Pi mit i=1,...,p speichert die Werte xi(n/p),..., x(i+1)(n/p)-1 inklusive dazugehörige Zeilen von A und der Werte von b jeder Pi führt nun alternierend folgende Aktionen aus, bis Abbruchkriterium erfüllt: 1. Pi sendet seine lokal gehaltenen Elemente des Vektors x(k) an alle anderen Prozessoren (All-to-All Broadcast) 2. Pi berechnet x(k+1) für seine Elemente xj(k+1) mit j=i(n/p),...,(i+1)(n/p)-1 3. Test des Abbruchkriterium
3.1.1 Jacobi-Verfahren Aufwand : Bewertung: In Schritt 1. sendet Pi n/p Werte an p-1 Prozessoren Kommunikationsaufwand Θ((p-1) (n/p)). In Schritt 2. n/p Elemente des Vektors x(k+1) berechnen, mit Rechenaufwand von Θ(n (n/p)) Der Test auf Abbruch in 3. erfordert einen Aufwand von Θ (log p). Bewertung: Konvergenz nicht gesichert , niedrige Konvergenzrate es gezeigt, dass e(n2/2) Iterationen notwendig sind damit der Fehler um 10-e sinkt Für n= 64 wären ca. 3(642/2)= 6144 Iterationen notwendig um den Fehler um 10-3 zu reduzieren kein fill-in, geringer Speicherbedarf bei dünnbesetzten Matrizen
Gliederung 1. Einleitung 2. Direkte Verfahren 3. Iterative Verfahren 2.1 Gauß-Elimination 2.2 zyklische Reduktion 3. Iterative Verfahren 3.1 klassische iterative Verfahren 3.1.1 Jacobi-Verfahren 3.1.2 Gauß-Seidel-Verfahren 3.2 Methode der konjugierte Gradienten 4. Zusammenfassung
3.1.2 Gauß-Seidel-Verfahren Zerlegung der Matrix A anlog zum Jacobi-Verfahren, A=D-L-R (D,L,R Rnn) Iterationsschritt: (D-L)x(k+1)=Rx(k)+b. in Komponentenschreibweise
3.1.2 Gauß-Seidel-Verfahren Einbeziehung der neu Berechneten Approximation deutlich verbesserte Konvergenzrate Konvergenzrate: n(e/3) Iterationen um den Fehler um den Faktor 10-e zu senken aber Datenabhängigkeiten, die eine Parallelisierung des Verfahrens erschweren
3.1.2 Gauß-Seidel-Verfahren In Dünnbesetzte Matrizen weniger Datenabhängigkeiten Eine Möglichkeit Rot-Schwarz-Anordnung, für Gleichungssysteme, die von einer Gitterstruktur herrühren xi,j= (xi-1,j + xi+1,j + xi,j-i + x i,j+1) / 4 Bsp. Temperaturverlauf im Wasserbad
3.1.2 Gauß-Seidel-Verfahren Für n = 16 Punkte ergibt sich folgendes Gitter und Matrix A 1 5 9 2 6 10 13 14 3 7 11 15 4 8 12 16
3.1.2 Gauß-Seidel-Verfahren Rote-Schwarz-Anordnung : 1 11 5 9 3 13 15 7 2 12 6 16 10 4 14 8 1 5 3 7 2 6 4 8 1 5 9 2 6 10 13 14 3 7 11 15 4 8 12 16 rot Punkt nur schwarze Nachbarn und umgekehrt Die Rote von 1,...,nS, numerieren die Schwarze von nS+1,... ,nR+nS numerieren (nR+nS=n) neue Matrix  (Permutation von A) Die Zerlegung von  in  =D-L-R (D,L,R Rnn) mit
3.1.2 Gauß-Seidel-Verfahren Iterationsschritt: in Komponentenschreibweise:
3.1.2 Gauß-Seidel-Verfahren parallel Implementierung: maximal p=nr (bzw. p=ns) Prozessoren Aufteilung anhand des Gitters vorgenommen wird Pj Gitterpunkt i zugeordnet, dann Pj für Berechnung der Approximationen von xi zuständig Aufteilung z.B. zeilenblockweise bei p Prozessoren erhält jeder Prozessor n / p Gitterzeilen (½(n / p) rote und schwarze Punkte)
3.1.2 Gauß-Seidel-Verfahren wähle beliebigen Startvektor Prozessoren iterieren folgende Schritte bis der Test auf Abbruch erfolgreich 1. Pi sendet seine lokal Elemente von xS(k) an alle anderen Prozessoren (All-to-All Broadcast) 2. Pi berechnet die neue Approximation xR(k+1) für seine Elemente von xR(k) 3. Pi sendet seine Elemente von xR(k+1) an alle anderen Prozessoren (All-to-All Broadcast) 4. Pi berechnet die neue Approximation xS(k+1) für seine Elemente von xS(k) 5. Test auf Abbruch
3.1.2 Gauß-Seidel-Verfahren Aufwand: Der Rechenaufwand fast identisch zu dem des Jacodi- Verfahrens In Schritt 2 und 4 jeweils n/2p Elemente der neuen Approximation berechnen, insgesamt die gleiche Anzahl, wie beim Jacobi-Verfahrens eine All-to-All Broadcastoperation mehr erforderlich (Schritt 1 und 3) zusätzlicher Aufwand durch verbessertes Konvergenzverhalten kompensiert
Gliederung 1. Einleitung 2. Direkte Verfahren 3. Iterative Verfahren 2.1 Gauß-Elimination 2.2 zyklische Reduktion 3. Iterative Verfahren 3.1 klassische iterative Verfahren 3.1.1 Jacobi-Verfahren 3.1.2 Gauß-Seidel-Verfahren 3.2 Methode der konjugierte Gradienten 4. Zusammenfassung
3.2 Methode der konjugierten Gradienten Voraussetzung: Matrix ARnn positiv definit und symmetrisch Lösung x* des Gleichungssystems entspricht dem Minimum der Funktion: f(x) ist konvex und besitzt eindeutiges Minimum x*
3.2 Methode der konjugierten Gradienten Iterationsschritt: (k) Schrittweite , p(k) Richtungsänderung Bestimmung von (k) bei bekanntem p(k) : Notwendige Bedingung, mit r = Ax-b : Hinreichende Bedingung: immer erfüllt !
3.2 Methode der konjugierten Gradienten Wahl des Richtungsvektors p(k) : die Richtungsvektoren p(k) sind so zu wählen, dass sie konjugierte Basis des Rn bzgl. A bilden: Zwei Vektoren p,q Rn sind bzgl. einer symmetrischen, nicht singulären Matrix A konjugiert falls gilt qTAp=0. Ist A positiv definit so bilden die linear unabhängigen Vektoren p1,...,pn, mit pi 0, i=1,...,n und (pi)TApj=0 für alle i,j eine konjugierte Basis des Rn bzgl. A. Falls die Richtungsvektoren eine konjugierte Basis des Rn bzgl. A bilden, dann liegt die exakte Lösung nach maximal n Schritten vor.
3.2 Methode der konjugierten Gradienten Der Algorithmus: Initialisierung: wähle Startvektor x(0) und setzte p(0) =-r(0) =b-Ax(0) sowie k=0 Iteration: solange ||r(k)||> berechne 1. q(k) =Ap(k) 2. k = [(r(k))T r(k)] / [ (p(k))T q(k) ] 3. x(k+1) =x(k) + kp(k) 4. r(k+1) =r(k) + kq(k) 5. k= [(r(k+1))T r(k+1)]/ [(r(k))T r(k)] 6. p(k+1) =-r(k+1)+ kp(k) 7. k++ Basisoperationen: Matrix-Vektor-Multiplikation ein inneres Produkt eine Vektor-Addition
3.2 Methode der konjugierten Gradienten parallele Implementierung: zeilenblockweise Aufteilung von A und blockweise Aufteilung der Vektoren durch Parallelisierung der verwendeten Basisoperationen eine Matrix-Vektor-Multiplikation zwei innere Produkte drei Vektor-Additionen
3.2 Methode der konjugierten Gradienten Rechenaufwand:
Gliederung 1. Einleitung 2. Direkte Verfahren 3. Iterative Verfahren 2.1 Gauß-Elimination 2.2 zyklische Reduktion 3. Iterative Verfahren 3.1 klassische iterative Verfahren 3.1.1 Jacobi-Verfahren 3.1.2 Gauß-Seidel-Verfahren 3.2 Methode der konjugierte Gradienten 4. Zusammenfassung
4. Zusammenfassung Das Gauß-Eliminations-Verfahren exakte Lösung Vorhersagbare Rechenzeit auf fast alle linearen Gleichungssystem Anwendbar Nachteil fill-in nur für fast voll besetze Matrizen geeignet zyklische Reduktion für Matrizen mit spezieller Struktur
4. Zusammenfassung Iterative Verfahren kein fill-in Rechenzeit nicht Vorhersagbar für dünnbesetze Matrizen geeignet GS-Verfahren konvergiert schneller als das Jacobi-Verfahren, aber Datenabhängigkeiten bei symmetrischer, positiv definiter Koeffizientenmatrix Methode der konjugierten Gradienten exakte Lösung bei rundungsfehlerfreier Rechnung nach höchstens n Schritten
Vielen Dank für die Aufmerksamkeit!