prev up inhalt next


7.2 Gauß-Elimination im Gitter

Idee:
In Phase k wird ein geeignetes Vielfaches der Zeile k von allen Zeilen unterhalb von k subtrahiert, so daß die Spalte k unterhalb von k zu Null wird. Ergebnis ist eine obere Dreiecksmatrix D und Vektor c , deren Lösung Dx = c auch Ax = b löst.


  Matrixelemente ungleich 0 zu Beginn der k -ten Phase im
  Gauß-Algorithmus. Markiert ist der aktive Teil.

Die sequentielle Version lautet:

FOR k = 0 TO n-1 DO (* Phase k *)
   FOR j := k+1 TO n DO (* Division *)
      a[k,j] := a[k,j]/a[k,k]
   END
   a[k,k] := 1;
   FOR i := k+1 TO n-1 DO
      FOR j := k+1 TO n DO (* Elimination *)
         a[i,j] := a[i,j] - a[i,k] * a[k,j]
      END
      a[i,k] := 0;
   END
END

Gelöst wird Dx = c durch das sukzessive Auflösen der jeweils letzten Zeile und Rückwärtseinsetzen der Lösung. Dieses Verfahren wird Backsubstitution genannt.

Es wird ein MC 2 verwendet, bei dem die lokale Variable des Prozessors Pij mit dem Matrixelement aij initialisiert wird. Der Eliminationsschritt kann umformuliert werden als

a[i,j] := a[i,j] - a[i,k] * a[k,j]/a[k,k]


An der Modifikation von aij beteiligte Matrixelemente

Die k -te Phase wird gestartet durch Prozessor Pkk , der seinen momentanen Wert akk nach rechts schickt zu Pk,k + 1,Pk,k + 2,...,Pk,n und seinen Wert akk dann auf 1 setzt. Jeder Prozessor Pkj,j > k , dividiert nach Erhalt von akk sein akj durch akk und kann dann sein modifiziertes akj nach unten schicken. Prozessor Pij , der von oben einen Wert b und von links einen Wert c erhalten hat, reicht diese nach unten resp. nach rechts weiter und subtrahiert das Produkt von seinem lokalen Matrixelement, d.h., er bildet



Alle Phasen laufen in Pipeline-Manier überlappend, d.h., Phase k + 1 wird von Pk + 1, k + 1 eingeleitet, sobald alle für Pk + 1,k + 1 bestimmten Nachrichten eingetroffen sind.


Pipeline Gauß-Elimination

Da jede Phase O(n) Schritte dauert und zwischen zwei Phasenstarts konstante Zeit liegt, beträgt die Gesamtlaufzeit O(n) . Bei n 2 Prozessoren entstehen Kosten von O(n 3) . Der Algorithmus ist daher kostenoptimal.
In Anschluß daran findet eine Backsubstitution statt.


prev up inhalt next