Lösung linearer Gleichungssysteme Seminar “Parallele Programmierung“ Nico Ziborius Gliederung 1. Einleitung 2. Direkte 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 Gliederung 1. Einleitung 2. Direkte 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. 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 4 Gliederung 1. Einleitung 2. Direkte 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 5 2.1 Gauß-Elimination Idee: • Transformiere Ax=b in äquivalentes Gleichungssystem A‘x = b‘, so dass A‘ eine obere Dreiecksmatrix bildet. 6 2.1 Gauß-Elimination • Transformation benötigt n-1 Schritte a a a • Schritt k , 1 k n-1 • A(k+1), b(k+1) aus A(k), 0 (k ) 0 A b (k) 11 a a 22 a a 1, k 1 ( 2) 12 ( 2) 1k ( 2) 2, k 1 a ( k 1) a a k 1, k 1 0 2k ( k 1) k 1, k (k ) kk a 0 (k ) nk 2n ( k 1) k 1, n (k ) kn (k ) nn a a 1n ( 2) a a a berechnen: – Eliminationsfaktoren berechnen: l ik a a (k ) für k i n ik (k ) kk – Elemente von A und b für k< j n und k <i n neu berechnen: a ( k 1) ij (k ) a ij l ik * (k ) a kj ( k 1) b i (k ) b i (k ) l b ik * k 7 2.1 Gauß-Elimination • Lösung durch Rückwärtseinsetzen, für k = n,n-1,...,1: x k 1 (n) kk a ( n) b k n a x j k 1 (n) kj j • sequentielle Implementierung Θ(n3) (drei ineinander verschachtelte Schleifen) 8 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. 9 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] – Array b[n/p] – Array marked[n/p] – Array pivot[n/p], (Koeffizienten Matrix A) (Werten des Vektors b) (markieren der Pivotzeile) (wann war Zeile Pivotzeile) 10 2.1 Gauß-Elimination • zunächst Array marked mit 0 initialisieren • dann in n-1 Schritten die obere Dreiecksmatrix berechnen: 1. lokales Pivotelement bestimmen: Pi ermittelt unter den Elementen a[r][k], mit r= 1...n/p und marked[r]=0 das lokale Maximum b marked pivot a P1 P2 1 2 3 -4 -6 1 1 0 4 4 -1 14 0 - 0 -8 -2 10 3 0 - 0 -1 -5 11 7 0 11 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;} 12 2.1 Gauß-Elimination a 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 4. Berechnung der Eliminationsfaktoren: Pi berechnet für seine lokalen Zeilen i, mit i =1,...n/p, mit marked[i]=0, die Eliminationsfaktoren P1 P2 P1 P2 b marked pivot 1 2 3 -4 -6 1 1 0 4 4 -1 14 0 - 0 -8 -2 10 3 10 2- 0 -1 -5 11 7 0 - 1 2 3 -4 -6 1 1 0 4 4 -1 14 0 - 0 -8 -2 10 3 10 2- 0 -1 -5 11 7 0 13 2.1 Gauß-Elimination 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 P1 P2 1 2 3 -4 0 04 54 -1 4 15,5 14 0 -8 -2 10 0 9,75 -1 0 -4,75 -5 11 6,625 -6 1 1 0 - 3 10 2- 7 0 - • jeder Prozessor sucht in seinem Array marked nach marked[j]=0 und setzt pivot[j]=n • Lösung des Gleichungssystems durch Rückwärtseinsetzten 14 2.1 Gauß-Elimination Pivotzeile kopieren Berechnungsaufwand: n n 1 n n n (n i ) (n i ) . t1 (n, p ) p p p p i 1 n3 t1 (n, p) n2 p pivot Initialisierung marked Pivotzeile ermitteln Eliminationsfaktoren & Elemente von A, b neu berechnen Kommunikationsaufwand: t 2 ( n, p ) n 1 log i 1 p ( n i ) log p log p , n 1 n( n 1) t 2 ( n, p ) log p 1 ( n i ) log p log p n 2 log p 2 i 1 15 2.1 Gauß-Elimination • Vorteile: – Vorhersagbarkeit der Laufzeit, des Speicherbedarfs – Berechnung einer exakten Lösung • Nacheilt: – bei dünnbesetzten Matrizen entsteht fill-in 16 Gliederung 1. Einleitung 2. Direkte 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 17 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 b1 a 2 A 0 c1 b2 a3 c n 1 bn 0 c2 b3 an • Gauß-Elimination hier nicht Sinnvoll! 18 2.2 zyklische Reduktion • Falls A symmetrisch und positiv definit Lösung mittels – rekursiven Verdoppelns oder zyklischer Reduktion • Ausgangspunkt beider Verfahren: b1x1 c1x 2 y1 ai x i -1 bi x i ci x i 1 yi a n x n -1 bn x n für i 2, , n - 1 yn 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 19 2.2 zyklische Reduktion (1) A b1(1) 0 a (1) 3 0 0 b2(1) 0 c1(1) 0 b3 cn(1) 2 0 bn 0 c 2(1) a n(1) 0 • 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 20 2.2 zyklische Reduktion rekursives Verdoppeln : • Diagonalmatrix in log n Schritten ermitteln zyklische Reduktion : • die Zahl der berechneten Werte in jedem Schritt halbiert • erfordert abschließende Substitutionsphase 21 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 22 2.2 zyklische Reduktion Q Stufen log p Stufen Q Stufen parallele Implementierung: x1 1. zyklische Reduktion: x2 bis nur noch eine Gleichung pro Prozessor vorhanden 2. rekursives Verdoppeln: x3 x4 das nur noch p-dimensionale Gleichungssystem wird nun mittels rekursiven Verdoppeln in gelöst 3. Substitutionsphase: x5 x6 x7 x8 Ermittlung der noch fehlenden Werte des Lösungsvektors x 23 2.2 zyklische Reduktion • Aufwand Phase 1: Q T1 (n, p) 4top 2 k 1 4q k 16 n top p C1 (n, p) 2Q t s 2 s (4) 2 log n t s 2 s (4) p • Aufwand Phase 2: T2 (n, p) 4t op 4log p t op 16 log p t op t op C2 (n, p) 2log p t s 2s (4) • Aufwand Phase 3: T3 (n, p) 5top Q 1 n 2 k 5top (2Q 1) 5top (q 1) 5top 1 p k 0 C3 (n, p) 2 t s 2 s (1) 24 2.2 zyklische Reduktion • Aufwand Insgesamt: n n T (n, p) 16 16 log p 5 4 top p p n 21 16 log p t op p n C (n, p) 2 log log p 2t s 2s (1) p 2 log n t s 2s (4) 2 t s 2s (1) 25 Gliederung 1. Einleitung 2. Direkte 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 26 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 27 Gliederung 1. Einleitung 2. Direkte 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 28 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: xi( k 1) 1 aii b i n aij x (jk ) j 1, j i , i 1,... , n 29 3.1.1 Jacobi-Verfahren • Abbruchkriterium: relativer Fehler x ( k 1) x ( k ) x ( k 1) ||.|| Vektornorm, z.B. ||x|| = max i=1,...,n|xi| oder ||x||2=(n i=1|x|2)½ . 30 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 31 3.1.1 Jacobi-Verfahren • Aufwand : – 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 32 Gliederung 1. Einleitung 2. Direkte 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 33 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 i 1 n 1 xi(k 1) bi aij x (jk 1) aij x (jk ) , i 1, , n aii j 1 j i 1 34 3.1.2 Gauß-Seidel-Verfahren xi( k 1) 1 bi aii i 1 j 1 aij x (jk 1) n aij x (jk ) j i 1 , i 1, , n • 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 35 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 • Bsp. Temperaturverlauf im Wasserbad xi,j= (xi-1,j + xi+1,j + xi,j-i + x i,j+1) / 4 36 3.1.2 Gauß-Seidel-Verfahren • Für n = 16 Punkte ergibt sich folgendes Gitter und Matrix A 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 37 3.1.2 Gauß-Seidel-Verfahren • Rote-Schwarz-Anordnung : 1 92 23 – rot Punkt nur schwarze Nachbarn und umgekehrt – Die Rote von 1,...,nS, numerieren 10 4 11 5 36 12 7 48 59 13 10 6 11 14 12 – die Schwarze von nS+1,... ,nR+nS numerieren (nR+nS=n) 15 13 7 14 16 15 8 16 • neue Matrix  (Permutation von A) • Die Zerlegung von  in  =D-L-R (D,L,R Rnn) mit D D R 0 0 DS 0 L - E 0 0 0 - F R 0 0 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 38 3.1.2 Gauß-Seidel-Verfahren D  xˆ R E F xˆ R bˆ1 . DS x̂ S bˆ2 • Iterationsschritt: D R xR(k 1) bˆ1 F xS(k) D x (k 1) bˆ E x (k 1) S 2 S R • in Komponentenschreibweise: x x ( k 1) R i ( k 1) S i 1 aˆ ii b i 1 aˆ i ns ,i ns j , i 1,... , n S , aˆ j aˆ ij x S( k ) jN ( i ) bi ns n jN ( i ) i ns , j x ( k 1) R , i 1,... , n R 39 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) 40 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 41 3.1.2 Gauß-Seidel-Verfahren Aufwand: • Der Rechenaufwand fast identisch zu dem des JacodiVerfahrens – 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 42 Gliederung 1. Einleitung 2. Direkte 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 43 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) 1 T x Ax bT x 2 • f(x) ist konvex und besitzt eindeutiges Minimum x* 44 3.2 Methode der konjugierten Gradienten • Iterationsschritt: x (k 1) x (k ) (k ) p (k ) – (k) Schrittweite , p(k) Richtungsänderung • Bestimmung von (k) bei bekanntem p(k) : f ( x (k ) p ( k ) ) min R ( f ( x ( k ) p ( k ) ) – Notwendige Bedingung, mit r = Ax-b : df ( x p) pT ( Ax b) pT r T T p Ap p ( Ax b) 0 min T T da p Ap p Ap – Hinreichende Bedingung: df 2 ( x p) da 2 p T Ap 0 immer erfüllt ! 45 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. 46 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 eine Vektor-Addition ein inneres Produkt eine Vektor-Addition 47 3.2 Methode der konjugierten Gradienten parallele Implementierung: zeilenblockweise Aufteilung von A und blockweise Aufteilung der Vektoren durch Parallelisierung der verwendeten Basisoperationen n n n2 ( p n) (n ) p p p • eine Matrix-Vektor-Multiplikation TMVM • zwei innere Produkte n Tip log p p • drei Vektor-Additionen n Tsaxpy p 48 3.2 Methode der konjugierten Gradienten Rechenaufwand: TCG TMVM 2 Tip 3 Tsaxpy 2 n n n n 2 log p 3 p p p n2 n 5 n log p p p 49 Gliederung 1. Einleitung 2. Direkte 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 50 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 – exakte Lösung – Vorhersagbare Rechenzeit 51 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 52 Vielen Dank für die Aufmerksamkeit! 53