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
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.
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.