Alefeld • Lenhardt • Obermaier Parallele numerische Verfahren
Springer Berlin Heidelberg New York Barcelona Hongkong London Mailand Paris Tokio
G. Alefeld • I. Lenhardt • H. Obermaier
Parallele numerische Verfahren
i
Springer
Professor Dr. Glitz Alefeld Dr. IngridLenhardt Dipl.-Math.-techn. Holger Obermaier Universitat Karlsruhe (TH) Institut fur Angewandte Mathematik EnglerstraBe 2 76128 Karlsruhe, Deutschland
DieDeutsche Bibliothek - CIP-Einheitsaufnahme Alefeld,Glitz: ParaIlele numerische Verfahren / GlitzAlefeld; IngridLenhardt; HolgerObermaier. - Berlin; Heidelberg; NewYork; Barcelona; Hongkong; London; Mailand; Paris;Tokio:Springer. 2002 ISBN 3·540-42519·5
Mathematics SubjectClassification (2000): 68WIO, 65Y05
ISBN 3-540-42519-5 Springer-Verlag Berlin Heidelberg New York
DiesesWerkist urheberrechtlieh geschlltzt. Diedadurch begrllndeten Rechte, insbesondere die der Obersetzung, desNachdrucks, desVortrags. der EntnahmevonAbbildungen und Tabellen, der Punksendung,der Mikroverfilmung oder der Vervielfiltigung auf anderenWegen und der Speicherung in Datenverarbeitungsanlagen. bleiben,auchbei nur auszugsweiser Verwertung. vorbehalten. EineVervielfaltigung diesesWerkes odervonTeilen diesesWerkes istauchimEinzelfaII nur in denGrenzen der gesetzlichen Bestimmungen des Urheberrechtsgesetzes der Bundesrepublik Deutschland vom9. September 1965 in der jeweils geltenden Fassung zulissig.Sieistgrundsitzlichvergiltungspflichtig.Zuwiderhandlungen unterliegen denStralbestimmungen desUrheberrechtsgesetzes. Springer-Verlag BerlinHeidelbergNewYork ein Unternehmen der BertelsmannSpringer Science+Business MediaGmbH http://www.springer.de @ Springer-Verlag BerlinHeidelberg 2002
DieWiedergabe vonGebrauchsnamen.Handelsnamen,Warenbezeiehnungen usw.in diesemWerkberechtigt auchohne besondereKennzeiehnung niehtzu derAnnahme. daBsolcheNamenimSinneder Warenzeiehen- und Markenschutz.Gesetzgebung a1s frei zu betrachtenwiren und daher von jedermann benutztwerdendllrften. Einbandgestahung: design6oproduction, Heidelberg Satz:Datenerstellung durchdieAutoren unterVerwendung von Gedrucktauf siurefreiemPapier SPIN10848989
mex 44/3142ck-5 4 3 2 1 0
Vorwort Hochleistungsrechnen ist heutzutage meist paralleles Rechnen . Viele Probleme, die aus der Simulation realer Vorgange resultieren, erreichen durch ihre hohe Komplexitat und durch feine Diskretisierungen Grafl,enordnungen, die auch auf modernen Uniprozessorrechenanlagen nicht oder nicht in befriedigender Zeit zu bewaltigen sind . Man denke dabei beispielsweise an Klimasimulationen, Wettervorhersagen, Crashtests, Strdmungssimulationen im Automobil- oder Luftfahrtbereich, strukturmechanische Analysen, Astrophysik, Quantenchromodynamik oder Bildverarbeitung in der Medizintechnik. Wahrend bei traditionellen sequentiellen Berechnungen ein Befehl nach dem anderen abgearbeitet wird, werden bei der parallelen Bearbeitung des gleichen Problems mehrere Befehle gleichzeitig ausgefiihrt, indem mehrere Prozessoren eingesetzt werden und die Rechenlast auf diese verteilt wird. Ziel des Einsatzes von Parallelrechnern ist nicht nur die Verkiirzung von Simulationszeiten, sondern auch die Berechnung mit sehr grofsen Datenmengen. Damit kann auf manche Experimente verzichtet werden, oder Experimente, die technisch oder aus Kostengriinden nicht durchfiihrbar sind, konnen durch Simulationen ersetzt werden. Zudem ermoglichen solche Simulationen auf dem Rechner kostengiinstige .Messreihen" mit verschiedenen Parametern. Der Erfolg solcher numerischer Simulationen wird bestimmt durch die zugrundeliegende Modellierung, die Qualitat des verwendeten Algorithmus, die Rechengenauigkeit und die Leistungsfahigkeit der verwendeten Hardware, aber auch durch das Zusammenspiel dieser Komponenten. Der vorliegende Text gliedert sich in acht Kapitel und einen Anhang. Kapitel 1 enthalt zunachst eine kurze Einfiihrung in den Aufbau von Parallelrechnern und ihre Leistungsbeurteilung und daran anschliesend eine Diskussion von so genannten Programmiermodellen. Das zweite Kapitel ist als einfiihrendes Kapitel fiir die Demonstration von Problemen gedacht, die bei der Parallelisierung von klassischen Verfahren zur numerischen Losung von durch Diskretisierung aus partiellen Differentialgleichungen entstehenden linearen Gleichungssystemen auftreten. Kapitel 3 beschaftigt sich ausfiihrlich mit dem Problem der Datenverteilung auf eine vorgegebene Anzahl von Prozessoren mit dem Ziel, wahrend der Rechnung notwendigen Datenaustausch moglichst gering zu halten. Dazu werden verschiedene Maglichkeiten der Graphpartitionierung diskutiert. Eines der wichtigsten Verfahren zur
VI
Vorwort
Auflosung von linearen Gleichungssystemen ist heute die Methode der konjugierten Gradienten. Diese wird im vierten Kapitel hergeleitet, die fiir schnelle Konvergenz notwendige Vorkonditionierung diskutiert und schlieklich die Parallelisierung des Verfahrens besprochen. Kapitel 5 erklart die grundlegenden Ideen des Mehrgitterverfahrens sowie Bemerkungen zur parallelen Programmierung. 1m sechsten Kapitel findet man zunachst eine parallelisierte Variante des klassischen Jacobi-Verfahrens zurBerechnung aller Eigenwerte einer symmetrischen Matrix. Es folgen Betrachtungen zur Parallelisierung des Housholder-Verfahrens, bei welchem eine symmetrische Matrix auf Tridiagonalgestalt gebracht wird, sowie zur Berechnung der Eigenwerte von Tridiagonalmatrizen. Schlieslich wird mit dem Divide-and-Conquer-Verfahren ein typischer Vertreter von Verfahren diskutiert, die auf Parallelrechner zugeschnitten sind . 1m siebten Kapitel wird als Motivation fiir die Verwendung des GausAlgorithmus die approximative Li:isung von Integralgleichungen herangezogen. Das Nystrom-Verfahren zur Berechnung einer Naherungslosung einer Integralgleichung erfordert die Auflosung eines vollbesetzten linearen Gleichungssystems. Hierin wird der Gauf&-Algorithmus mit Pivotsuche in einer parallelisierten Version verwendet. 1m achten Kapitel befinden sich eine Reihe von Aufgaben, die zur Ubung und zum tieferen Verstandnis des in den vorangehenden Kapiteln behandelten Materials dienen konnen, Am Anfang findet man eine Reihe von so genannten elementaren Aufgaben, z. B. Diskussion des Speed-up, ein erstes paralleles Programm, Punktzu-Punkt-Kommunikation mit MPI. Es schliest sich eine ausfiihrliche Aufgabe zur Matrix-Vektor-Multiplikation an . Die nachste Aufgabe befasst sich mit verschiedenen Aspekten der parallelen Programmierung des SOR- Verfahrens. Da die Auflosung eines linearen Gleichungssystems mit einer Tridiagonalmatrix ein haufig auftretendes Teilproblem darstellt, wird die Parallelisierung in einer weiteren Aufgabe behandelt. Zur Graphpartitionierung werden zwei Aufgaben gestellt. Die erste dient dem Verstandnis der Grundlagen, die zweite verwendet vorgefertigte Programmpakete. Die weiteren Aufgaben behandeln die parallele Programmierung der Methode der konjugierten Gradienten, des Jacobi-Verfahrens zur Eigenwertberechnung und des Nystri:imverfahrens. Wo es als notwendig erachtet wurde, finden sich Hinweise und unterstiitzende Bemerkungen zur Bearbeitung sowie eine ausfiihrliche Diskussion der Ergebnisse. Die Programmieraufgaben wurden auf einem als Parallelrechner verwendeten LinuxCluster gerechnet, dessen Aufbau im Anhang A detailliert beschrieben ist . Diese Beschreibung beginnt mit der Diskussion mi:iglicher Hardware-Komponenten. Daran schliest sich die Vermittlung von Kenntnissen zum Betriebssystem und zur Rechnerverwaltung an . Schlieslich wird der Einsatz von parallelen Programmbibliotheken und die Verwendung paralleler Sortware angesprochen. Der tatsachliche physikalische Aufbau des Linux-Clusters ist vom dritten Autor durchgefiihrt worden . Von ihm stammt auch die Abfassung des Anhangs. Die erstellten Programme findet man unter
http://iamlasun8.mathematik.uni-karlsruhe.de/parallel_2001
Vorwort
VII
Interessenten, die einen Einblick in die kommerzielle Nutzung von Parallelrechnern, z. B. in der Strukturmechanik, bekommen mochten, wird empfohlen, neben der Bearbeitung der angegebenen Aufgaben mit dem zur Losung von Problemen aus der Strukturmechanik international stark eingesetzten Programmpaket LS-Dyna Erfahrungen zu sammeln. Eine Zusammenstellung von wichtigen Beispielen wurde von I. Guilloteau und K. Schweizerhof erarbeitet (siehe [32J). Beiden sind wir fiir die reibungslose Zusammenarbeit im Rahmen eines gemeinsamen vom Bundesministeriurn fiir Bildung und Forschung (BMBF) finanzierten Forschungsprojektes zu grosem Dank verpflichtet. Bedanken mochten wir uns an dieser Stelle insbesondere auch bei Herrn Professor Dr. A. Frommer, Wuppertal, fiir die Uberlassung von Teilen aus [121, die in Kapitel 6 eingegangen sind. Schlieslich mochten wir uns an dieser Stelle fiir die Unterstiitzung durch das Bundesministerium fiir Bildung und Forschung (BMBF), insbesondere auch fiir die Beratung durch Herrn R. Krahl bedanken, durch welche die Beschaffung des im Anhang A beschriebenen Linux-Clusters erm6glicht wurde. AIle eventuell noch vorhandenen Mangel liegen in der alleinigen Verantwortung der Autoren. Anregungen und Verbesserungsvorschlage werden dankbar entgegengenommen.
Karlsruhe, den 31.12.2001
G. Alefeld I. Lenhardt H. Obermaier
Inhaltsverzeichnis
1 Grundsatzliches iiber Parallelrechner
1
..
1
1.1
1.2
1.3
Rechnertypen und Architekt uren 1.1.1
Verte ilte r und gemeinsamer Speicher
2
1.1.2
Gran ularitat . . . .
3
1.1.3
P rozessortopologie
3
1.1.4
SIMD- und MIMD-Rechner
6
Leistungsb eurt eilung von Par allelrechnern
7
1.2.1
Parallelisierungsgrad
7
1.2.2
Speed-up und Effizienz
8
1.2.3
Das Gesetz von Amda hl
9
Par allele Programmiermod elle .
10
1.3.1
Ebenen der Parall elitat .
11
1.3.2
Implizite und explizite Par allelit at .
13
1.3.3
Erzeugun g von P rozessen .
13
1.3.4
Datenaustausch . . . . . .
14
2 Parallele Verfahren fiir partielle Differentialgleichungen 2.1
17
St an dardverfahren fiir elliptische Differentialgleichun gen . .
18
2.1.1
Poisson-Gl eichung mit Diri chlet-Randb edin gun gen .
18
2.1.2
Das Jacobi-Verfahren zur Losun g von Gleichun gssystemen
21
2.1.3
Das Gaus-Seidel-Verfahren .
22
2.1.4
Das SOR- Verfahr en .. . . .
23
x
INHALTSVERZEICHNIS
2.2
2.3
Parallelisierung . . . . . . . . . . . . . . . . .
24
2.2.1
Parallelisierung des Jacobi-Verfahrens .
24
2.2.2
Parallelisierung von Gauf-Seidel- und SOR-Verfahren
26
2.2.3
Wellenfront (Wavefront)-Nummerierung
. . . . .
26
2.2.4
Red-Black-Nummerierung (Schachbrett-Ordnung)
28
Das ADI- Verfahren . . . . . . . . . .
32
2.3.1
Die Warmeleitungsgleichung .
32
2.3.2
Explizites Differenzenverfahren
33
2.3.3
Sequentielles ADI-Verfahren . .
35
2.3.4
Auflosung von Gleichungssystemen mit Tridiagonalmatrix
39
2.3.5
Parallele Durchfiihrung des ADI-Verfahrens
44
3 Graph-Partitionierung
49
3.1
Hilfsmittel und Definitionen
49
3.2
Spektralbisektion . . . . . .
53
3.3
Weitere Partitionierungsheuristiken
59
4 Die Methode der konjugierten Gradienten
61
4.1
4.2
4.3
Sequentielle Durchfiihrung . . . . . . .
61
4.1.1
Minimierung eines Funktionals .
61
4.1.2
Zusammenhang zum Gaufs-Seidel-Verfahren
63
4.1.3
Die Methode des steilsten Abstiegs . . . . .
64
4.1.4
Die Methode der konjugierten Gradienten (CG-Verfahren)
64
Das vorkonditionierte CG- Verfahren
69
4.2.1
Das symmetrische SOR-Verfahren (SSOR-Verfahren)
75
4.2.2
Konstruktion einer Vorkonditionierungsmatrix
81
4.2.3
Weitere Moglichkeiten zur Vorkonditionierung
85
Parallelisierung des CG-Verfahrens
87
4.3.1
Der parallele Algorithmus .
87
4.3.2
Parallele Vorkonditionierung durch Gebietszerlegung
89
INHALTSVERZEICHNIS
XI
5 Mehrgitterverfahren (Multi-Grid Method)
99
5.1
Motivation.. . ... . .. .
99
5.2 Ubergang zwischen Gittern .
. 103
5.3 Grobgitterkorrektur (Coarse Grid Correction)
. 105
5.4 Interpolation und Prolongation im zweidimensionalen Fall
. 107
5.5 Bemerkungen zur Programmierung des Mehrgitterverfahrens
. 109
Gitterzerlegung und Mehrgitterverfahren
. 113
5.5.1
6 Das symmetrische Eigenwert-Problem
117
6.1 Das Jacobi-Verfahren zur Berechnung von Eigenwerten 6.1.1
Parallele Durchfuhrung
6.1.2
Realisierung auf einem Parallelrechner
.
· 118 · 122 · 124
6.2 Berechnung der Eigenwerte durch Reduktion der Matrix auf Tridiagonalgestalt . . . . . . . . . . . . . . . . . 126 6.2.1
Reduktion auf Tridiagonalgestalt
6.2.2
Berechnung der Eigenwerte einer symmetrischen Tridiagonalmatrix
· 126 129
6.3 Ein Divide-and-Conquer- Verfahren ("Teile-und-Herrsche-Verfahren") . 131 6.3.1
Divide-and-Conquer- Verfahren fiir Tridiagonalmatrizen T E jRnxn mit n = 2m . . . . . . . . . . . . . . . . . . . . . .. . 136
7 Der Gauis-Algortthmus - Anwendung bei Integralgleichungen
139
7.1 Grundlagen . . . . . . .
. 139
7.2 Das Nystrom-Verfahren .
. 141
7.3 Parallele Durchfiihrung des Nystrom-Verfahrens
. 143
7.3.1
Der parallele Gaus-Algorithmus mit Pivotsuche
8 Aufgaben fiir ein Parallelrechnerpraktikum 8.1 Elementare Aufgaben .
· 143
147 · 147
8.1.1
Speed-up . .. .
· 147
8.1.2
Ein erstes paralleles Programm
· 148
8.1.3
Punkt-zu-Punkt-Kommunikation mit MPI
· 148
XII
INHALTSVERZEICHNIS
8.1.4
Kommunikationsbandbreit e und Start-up-Zeit
149
8.1.5
Kollektive Kommunikation mit MPI. . . . . .
· 150
8.2
Parallele Matrix-Vektor-Multiplikation fiir dichtbesetzte Matrizen
. 153
8.3
SOR-Verfahren mit Red-Black-Ordnung
. 158
8.4
Direktes Losen von Gleichungssyst emen mit Tridiagonalmatrix .
. 164
8.5
Graphpartitionierung I .
. 173
8.6
Graphpartitionierung II
. 175
8.7
CG-Verfahren . . . . . .
. 182
8.8
Jacobi-Verfahren zur Berechnung von Eigenwert en .
. 190
8.9
Nystrom-Verfahren . . . . . . . . . .
· 193
A Ein Linux-Cluster als Parallelrechner
197
A.l Hardware . . .
· 197
A.2 Systemsoftware
· 199
A.2.1 Betriebssystem-Installati on .
.200
A.2.2 Nameservices
· 203
.
A.2.3 NIS (Network Information Service)
· 204
A.2.4 NFS (Network File System) . .. .
. 206
A.2.5 Remote Shell (rsh) / Secure Shell (ssh)
.209
A.2.6 Automatisierung durch Skrip te . .. .
. 211
A.3 Programmbiblioth eken zur par allelen Programmierun g A.3.1 Programmerst ellung
.
A.3.2 Die Compil er mpicc , mpiCC und mpif77
· 212 · 213 · 218
A.3.3 Starten und Beenden der Kommunikationsumgebung mit lamboot und lamwipe . 219 A.3.4 Starten von parallelen Programmen mit mpirun
· 219
A.3.5 MPI-Kurzreferenz.
. 220
Literaturverzeichnis
239
Stichwortverzeichnis
243
Kapitel 1
Crundsatzlichcs iiber Parallelrechner In diesem Kapitel besprechen wir einleitend den Aufbau und die Leistungsbeurteilung von Parallelrechnern. Es schliest sich eine Diskussion von Programmiermodellen an .
1.1
Rechnertypen und Architekturen
Ein serieller Rechner besteht aus einer Zentraleinheit oder CPU (central processing unit), der ein Hauptspeicher zugeordnet ist und die mit Terminals, Druckern, Platten und anderen externen Speichermedien verbunden ist (Abbildung 1.1). Terminals
Platten (externe Speicher)
Drucker
Abb. 1.1 : Modell eines seriellen Rechners. Parallelrechner hingegen bestehen aus mehreren Prozessoren, die die gleichen oder unterschiedlichen Befehle meist mit verschiedenen Daten gleichzeitig durchfiihren
G. Alefeld et al., Parallele Numerische Verfahren © Springer-Verlag Berlin Heidelberg 2002
2
Kapitel 1. Grundsatzliches tiber Parallelrechner
konnen. Grundprinzip ist immer das Auft eilen des Rechenp ensums in Teilaufgaben, die dann von mehrer en Proz essoren gleichzeitig, also parallel, abgearbeitet werden. Hier gibt es verschiedene Konzepte , die nachfolgend kurz vorgestellt werden.
1.1.1
Verteilter und gemeinsamer Speicher
Ein Untersch eidungsm erkmal von Parallelrechnern ist die Art und Moglichkeit des Dat enzugriffs seitens der einzelnen Prozessoren. Bei Rechnern mit verte iltem Speicher (distri buted me mory) hat jeder Prozessor Pi, i = 1, . .. ,n, einen eigenen lokalen Speicher M, i = 1, ... , n, auf den nur er zugreifen kann (Abbildung 1.2).
II
Netzwerk
I
®®
~~
I
. . . ... .
I
®
~
Abb, 1.2: Parallelrechner mit vert eiltem Speicher. Datenaustausch zwischen den einzelnen Prozessoren erfolgt dur ch explizites Versenden von Nachricht en (m essage passing) iiber ein Netzwerk. Zu dieser Klasse kann man auch ein Cluster von Einzelrechnern zahlen, wie es z. B. in Anhang A beschrieben ist . 1m Gegensatz dazu ermoglichen Rechner mit gemeinsam em Speicher (shared m emory ) jedem P rozessor den Zugriff auf diesen gemeinsamen Speicher, wodurch auch der Dat enaustausch zwischen den Prozessoren erfolgt (Abbildung 1.3).
®®
®
t! I
t
(Haupt-) Speicher
Abb. 1.3: Parallelrechner mit gemeinsamem Speicher. Gewohnlich ist die Programmierung bei Rechnern mit gemeinsamem Speicher einfacher als bei Rechnern mit vert eiltem Speicher, da alle Prozessoren auf diesen gemeinsame n Speicher zugreifen konnen und das Versenden der Daten nicht vom Benut zer gesteuert werden muss. Solche Rechner besitzen oft nur eine kleine Anzahl (meist 2 bis 32) von Proz essoren, wodurch im praktischen Einsatz Schwierigkeiten beim
1.1. Rechnertypen und Architekturen
3
Datenzugriff vermieden werden. Diese Probleme bestehen bei Rechnern mit verteiltem Speicher nicht, da die meisten Daten nur zwischen Prozessor und lokalem Speicher wie bei einem sequentiellen Rechner transportiert werden. Dies ist aber fiir die praktische Programmierung ein wesentlicher Nachteil: Wenn Daten von anderen Prozessoren ben6tigt werden, sind diese durch spezielle Befehle zum Versenden tiber das Netzwerk zu transportieren. Vorteile beider Rechner werden durch eine Architektur kombiniert, bei der der Benutzer glaubt, einen Rechner mit gemeinsamem Speicher zu verwenden , so dass er sich nicht urn das explizite Versenden der Daten kiimrnern muss. Dabei sind alle lokalen Speicher mit einem Suchprozessor verbunden. Ein solcher Rechner ist z. B. der KSR-1. Er wurde vor mehreren Jahren von der mittlerweile nicht mehr existierenden Firma Kendall Square Research gebaut.
1.1.2
Granularitat
Ein zweites Unterscheidungsmerkmal ist die Granularitat der Architektur des Parallelrechners. Man unterscheidet zwischen grob- und feingranularer Architektur. In einer grobgranularen Architektur (z. B. IBM SP2 , Cray Y-MP oder PC-Cluster) kann jeder Prozessor ein relativ groses Rechenpensum erledigen, wobei er verhaltnisma15ig selten Daten mit anderen austauschen sollte. Bei feingranularer Architektur (z.B. Maspar) ist das Arbeitspensum eines Einzelprozessors eher klein, der Einzelprozessor weniger leistungsfahig und die Kommunikation haufiger . Erstere verwenden typischerweise das Konzept des message passing, bei letzteren ist eine sehr leistungsfahige Kommunikation notig, was beispielsweise durch virtual shared memory realisiert wird.
1.1.3
Prozessortopologie
Ein drittes Unterscheidungsmerkmal ist die Anordnung der Prozessoren untereinander, die Prozessortopologie. Einige Beispiele sind : • Prozessorring, wobei jeder Prozessor genau zwei Nachbarprozessoren hat (Abbildung 1.4). • Hypercube mit 2k Prozessoren, wobei jeder Prozessor mit k weiteren Prozessoren so verbunden ist, dass die Differenz der Prozessornummern benachbarter Prozessoren jeweils eine Potenz von zwei ist. Der 2k-cube entsteht aus zwei 2k - 1-cubes dadurch, dass jeweils ein Knoten des ersten 2k - 1-cubes mit einem Knoten des zweiten 2k - 1-cubes so verbunden wird, dass sich diese Prozessornummern , jeweils urn 2k - 1 unterscheiden. (Abbildung 1.5) • Binarbaum mit 2P - 1 Prozessoren , davon ein Wurzelknoten, 2P - 1 - 2 Prozessoren , die jeweils mit einem Vater und zwei Sohnen verbunden sind, und 2P - 1 Blattern, die nur mit je einem Vater verbunden sind (Abbildung 1.6).
4
Kapitel 1. Grundsiitzliches tiber ParaJlelrechner
Abb, 1.4: Prozessorring fiir n Prozessoren mit verteiltem Speicher.
D o
P,
P2
p.
2-cube
3-eube
4-cube
Abb. 1.5: Hypercub e-Architektur fiir k = 2,3, 4.
Abb. 1.6: Binarb aum (p = 4) • Zweidimensionales Gitter mit meist k 2 Prozessoren, wobei auger den Proz essoren am Rand jeder vier Nachbarn hat (Abbildung 1.7). • Torus, besteh end aus einem zweidimensionalen Gitter, bei dem die Randprozessoren so mit einand er verbunden werden, dass in jeder der beiden Raumdimensionen Prozessorringe entstehen und jeder Prozessor vier Nachbarn hat (Abbildung 1.8). • Dreidimensional es Gitter, bestehend aus mehreren Lagen von zweidimensionalen Gittern; auger den Randprozessoren sind alle Prozessoren mit sechs weiteren verbunden.
1.1. Rechnertypen und Architekturen
5
Abb. 1.7: 2D-Gitter (k = 4)
Abb, 1.8: Torus: J eder Pro zessor ist mit seinen vier unmittelbaren Nachbarn verbunden. • Crossbar-Topologie: Jeder Knoten ist mit jedem anderen des Systems verbunden. Dies ist nur fiir kleine Prozessorzahlen sinnvoll , da die Anzahl der erford erlichen Verbindungen wesentlich schneller als die Prozessorzahl ansteigt (Abbildung 1.9).
CfVfJ
~
Abb. 1.9: Crossba r-Topol ogie fiir vier und acht Prozessoren.
Weit ere, zum Teil komplexere Architekturen sind in der Pr axis zu finden. Zum Beispiel besteht der am Rechenzentrum der Universitat Karlsruhe betrieb ene Parallelrechn er IBM RSj6000 SP2 aus einem mehrstufigen Netzwerk , aufgebaut aus so genannten Frames. Dab ei bilden 4 bis 16 Proz essoren mit Crossbar-Topologie einen Frame. Ein Rechnersystem besteht aus mehreren Frames. Zur Kommunikation werden so genannte high performance switches eingeset zt . Eine Beispielkonfiguration ist in Abbildung 1.10 dargestellt .
6
Kapitel 1. Grundsatzliches iiber Parallelrechner
-
POW( RP . . .., .... .....
~
High Performance Switch Network - 64-way
~
S-..tlol1boetd
'Y'rS-..tlct1boord
N
-==-
0 0
~
t-. ~ ~
E
S
=
-'"
I:R-.
=
:1
~
ia: I-w =E
~
Ft o Ft 0
E
S
N
0 0 E
s S-..tlctlbcenl
S-..tlchboenl
N
~
~
==
E=
~
~
==
FI 13
~
N
0 0 E
s • Uull ple Plthl botwoon IITY two nod .. • N_tsoelelwllh_h 8dd od Nodi
Abb. 1. 10 : Prozessorkonfiguration einer IBM SP2 mit 4 Frames zu je 16 Prozessoren und High Performance Switch.
1.1.4
SIMD- und M IMD-Rechner
Ein weiteres Unterscheidungsmerkmal von Parallelrechnern ist die Eigenstiindigkeit der Einzelprozessoren. SIMD-Rechner (§.ingle instruction, multiple !lata) ermoglichen nur die Durchfiihrung der gleichen Operationen auf mehreren Prozessoren mit unterschiedlichen Daten. Dabei arbeitet ein zentraler Kontrollprozessor ein P rogramm ab und verteilt das Rechenpensum auf die anderen Prozessoren. In Abbildung 1.11 wird die Addition zweier Matrizen A +B aufeinem SIMD-Parallelrechner dargestellt , wobei jedem Proz essor genau ein Matrixelement zugeordnet wird. Falls weniger als n 2 Prozessoren vorhanden sind, konnen die Matrizen A und B in Blockkomponenten zerlegt werden. Auf den einzelnen P rozessoren wird dann eine Blockaddition durchgefiihrt. Bei MIMD-Rechnern (multip le instruction, multiple !lata) kann
~
.
A bb. 1.11: Addition zweier Matrizen auf einem SIMD-Parallelrechner. jeder Prozessor ein eigenes Programm mit eigenen Daten abarbeiten. Es konnen also gleichzeitig verschiedene Operationen mit unterschiedlichen Daten ausgefiihrt werden (Abbildung 1.12).
1.2. Leistungsbeurteilung von Parallelrechnern
7
~ ~ Abb. 1.12: Beispiele fiir Op erationen auf einem MIMD-Parallelrechner
1.2
Leistungsbeurteilung von Parallelrechnern
Urn P arallelrechner fiir ein vorgegebenes Problem effizient einzusetzen, sollten moglichst viele Programmteile zeitgleich abgearbeitet werden konnen. Man erhofft sich durch den Einsatz von Parallelrechnern entweder einen deutlichen Rechenzeitgewinn gegeniiber sequent iellen Berechnungen oder die Moglichkeit der Bearbeitung von wesentlich grol&eren Problemen, die aus feineren Diskretisierungen oder komplexeren Problem en resultieren konnen und wegen des hoh en Spei cherbedarfs nicht sequentiell bearbeitet werd en konn en.
1.2.1
Parallelisierungsgrad
Definition 1.1
Der Parallelisierungsgrad eines Algorithmusist die Anzahl der parallel ausfiihrbaren Operationen. Beispielsweise hat die Addition zweier n-komponentiger Vektoren den Parallelisierungsgrad n, da die n Additionen un abhangig voneinander und somit zeitgleich ausgefiihrt werden konnen, Dagegen hat die Berechnung der Summe n
S = LS;, ;= 1
wobei S; auf Prozessor P; vorliegt, unter Verwendung der Fan-In-Methode nicht den vollen Parallelisierungsgrad. Die Vorgehensweise wird fiir n = 8 in Abbildung 1.13 graphisch dargestellt.
S, +...+ Sa
Abb. 1.13: Fan-In-Methode fiir 8 Prozessoren.
8
Kapitel 1. Grundsatzliches iiber Parallelrechner
Fur n = 8 = 23 erfolgt die Berechnung in 3 Stufen . In der ersten Stufe werden insgesamt vier Additionen, inder zweiten zwei und in der letzten eine durchgefiihrt. Fur n = 2k werden k = log2 n Stufen benotigt und jede Stufe hat einen anderen Parallelisierungsgrad. Der durchschnittliche Parallelisierungsgrad betragt hier =
1.2.2
n-l log2 n '
Speed-up und Effizienz
Zur Charakterisierung der Leistungsfahigkeit eines parallel en Programms wird meist der Speed-up verwendet.
Definition 1.2 Es sei T, die Zeit, die man mit dem schnellsten bekannten seriellen Algorithmus zur Lbsung eines gegebenen Problems auf einem Prozessor benotigt und T p die Zeit, die man zur Losung des gleichen Problems auf dem Parallelrechner mit P solchen Prozessoren beniiiigt: Der Speed-up eines parallelen Algoritbmus ist
S = T.
r;
(1.1)
In der Praxis findet man oft auch die Definition S= T 1
Tp '
(1.2)
wobei T 1 die Recbenzeit auf einem Prozessor ist und der gleiche Algoritbmus verwend et wird .
Bemerkung 1.1 Gewobnlid: gilt T 1
f= T. , meistens ist
T 1 2:: Ts-
Eng verkniipft mit der Definition des Speed-up ist die Effizienz eines parallelen Programms. Sie ist ein Mal? fiir die Auslastung der einzelnen Prozessoren .
Definition 1.3 Die EfIizienz eines parallelen Algoritbmus bei einer Berecbnung mit P Prozessoren ist
S
e=
p'
wobei Iiir S die Definition (1.2) zugrunde liegt.
Die Effizienz lasst sich folgendermasen interpretieren: Ist e grog, d. h. nahe bei 1, so ist der Parallelrechner dur ch den verwendeten Algorithmus gut genutzt. Im Idealfall ist ein Algorithmus vollstandig parallelisierbar. Dann hat man eine ideale Beschleunigung im Vergleich zur seriellen Berechnung, d. h. S = P und das Problem kann
1.2. Leistungsbeurteilung von Parallelrechnern
durch den Algorithmus in der Zeit
9
p1 .T1 gelost werden. In diesem Fall gilt e =
1. Im
Allgemeinen ist aber e < 1, da in Anwendungen nicht 100% eines Algorit hmus para llelisierbar sind und in der Regel Daten zwischen den P rozessoren auszut auschen sind, so dass durch die entsprechende Kommunikation zusatzlich Zeit benotigt wird. Oft ist aufg rund der Problemgrose eine sequentielle Berechnung nicht mehr moglich, so dass T, oder T1 nicht vorliegt. In solchen Fallen macht der inkrem entelle Speed-up Laufzeit auf ~ Prozesso ren Laufzeit auf P Prozessoren
S, () P = - - - - - - " ' - - - -- eine ents prechende Aussage tiber die Qualitat des para llelen Verfahrens, der im optimalen Fall den Wert 2 hat .
1.2.3
Das Gesetz von Amdahl
Wie sich der nicht parallelisierbare Ante il eines Programm s auf die Gesamtrechenzeit auswirkt, besagt das Gesetz von Amdahl (Amdahl's law).
Satz 1.1 (Gesetz von Amdahl) Sei a der prozentuale sequentielle Anteil des Algorithm us. Der rest liche A nteil l - a sei m it dem Parallelisierungsgrad P ausfiihrbar, wobei P die Anzahl der Prozessoren ist . Dann betriigt der Speed-up
s-
1
- a + (1- a)/P'
Beweis Der Ante il 1 - a sei mit Pa rallelisierungsg rad P parallelisierbar. Die Anza hl der Ope rationen zur gesamte n Problemlosung sei N und die Zeit fiir eine Opera tion sei r . Die benot igte Zeit auf einem Para llelrechner mit P Prozessoren setzt sich nun zusa mmen aus dem nicht parallelisierbaren Anteil mit der Laufzeit aNr und der Zeit des parallelisierten Ante ils:
Tp
=
aNr
Nr
+ (1 - a) p '
Fiir den Speed-up erhalt man damit
s=
T1 =
Tp
Nr = 1 aNr + (I - a )'j; a+( I -a)/P ' D
Bemerkung 1.2 W ird ein A lgorithmus zu 99 Prozent mit dem optimalen Parallelisierungsgrad P parallelisiert , so ist a = 0.01. Dann ist m it 10 Prozessoren hochstens ein Spe edup S = 0.J09 ~ 9.17 erreichbar. Mit 100 Prozessoren kann aber hochstens noch
10
Kapitel 1. Grundsatzliches iiber Parallelrechner
S = O.O~99 ~ 50.25 erzielt werden. Dabei ist die Zeit fur event uell erforderliche Kommunikation nicht betiicksichtigt, Fur groEe Prozessorenzahl wird eine Siittigung erreicht (A bbildung 1.14) , denn es gilt lim S = lim
p~oo
p~oo
a
1
1
+ (1 - a) / P
a
Speed-up 200
'50
' 00 Q
50
= O.Ol
/~~- --:" O~:5 20
40
60
80
100
. 20
. 40
' 60
'80
200
Prozessoren
Abb. 1.14: Maximal erreichba rer Speed-up nach dem Geset z von Amdahl.
1.3
Parallele Programmiermodelle
In diesem Abschnitt beschafti gen wir uns im Hinbli ck auf das par allele Programmieren mit so gena nnten Programmiermodellen, das sind Abstra ktionen von real exist ierende n Rechnersystemen. Mit dem Begriff des Rechnersyst ems bezeichnen wir dab ei die Gesamtheit der Har dwar e und der darauf zur Verfiigung ste henden Systemsoftware wie Compilern und Laufzeitbibliotheken. Die Modelle sollen dab ei einfach sein, urn die Rechnersysteme in moglichst groke Klassen unterteilen zu konnen , die realen Rechnersysteme gleichzeit ig aber auch gut beschreiben. Die nac hfolgende Dar stellun g lehn t sich eng an das Vorgehen in [291an. Grii nde fiir die Verwendung von P rogrammierm odellen sind: • Sie bieten eine Abst rakt ion von der speziellen Hardwar e und ermoglichen som it parallele Algorit hmen herstellerunabhan gig aufzuschreibe n. • Sie erlaube n eine Abschatzung der Laufzeit des par allelen P rogramms und somit einen Vergleich der Effizienz verschiedener paralleler Algorithmen.
1.3. Parallele Programmiermodelle
11
• Sie gestatten asymp totische Aussagen tiber Algorithm en, die man auf Rechenanlagen nicht gewinnen kann. Ein Pro grammi ermodell beschreibt unter anderem : • Die vorn Programmierer nut zbar en Ebenen der Parall elitat (z.B. Parallelit at auf Instruktionsebene, Parallelitat in Schleifen, Parallelitat auf Prozesseben e). • Ob die Parallelit at implizit oder explizit programmiert werden kann. • Wie die parallel ablaufenden Prozesse erzeugt werden. • Wie der Datenaustausch zwischen Prozessen erfolgt.
1.3.1
Ebenen der Parallelitat
Bei Pro grammen unt erscheidet man verschiedene Ebenen, auf denen Befehle parallele ausgefiihrt werden konn en, Die Unterteilung in diese Ebenen erfolgt anhand der so genannten Granularitiit. Der Begriff der Granul aritiit beschreibt, wie viele Instruktionen parall el und unabh angig voneinander ausgefiihrt werden konnen. Von grobk6rniger Granul arit iit spricht man , wenn sehr viele Instruktionen parallel ausgefiihrt werden konnen, bevor Datenaust ausch n6tig ist. Ein Beispiel fiir grobkornige Granularit at ist die Parallelit at auf Pro zessebene. Bei feink6rniger Granularitiit konnen nur wenige Instruktionen parallel ausgefiihrt werden, bevor wieder Kommunikation notig ist . Ein Beispiel fiir feink6rnige Granularitiit ist die Parallelitat auf Instruktionsebene. Datenparallelit at und parallel e Schleifen weisen iiblicherweise eine mittlere Granularitat auf.
Parallelitat auf Instruktionsebene Bei der Abarbeitung eines Pr ogramms konnen mehrere Instruktionen, wenn diese voneinander unabhangig sind, parallel in einem Prozessor ausgefiihrt werden. Das folgende Beispiel verdeutlicht diese Moglichkeit bei Prozessoren mit mehr eren Ausfiihrungseinheiten: Es soli der Ausdruck c = a + b berechnet werden. Ein Prozessor mit nur einer Ausfiihrungseinheit fiihrt dazu die Instruktionen
(1) (2) (3) (4)
Lade a in Register1 Lade b in in Register2 Addiere Register1 und Register2 und lege Ergebnis in Register1 ab Schreibe Register1 nach c
aus. Ein P rozessor mit zwei Ausfiihrungseinheiten berechnet hingegen in kiirzerer Zeit :
12
Kapitel 1. Grundsiitzliches iiber Parallelrechner
(1) Lade a in Register1 Lade b in in Register2 (2) Addiere Registerl und Register2 und lege Ergebnis in Registerl ab (3) Schreibe Registerl nach c Die Verteilung der einzelnen Instruktionen auf die Berechnungseinheiten erfolgt zumeist durch einen in Hardware auf der CPU realisierten Instruktionsscheduler. Bei VLIW-Prozessoren (YerY-I:!ong-lnstruction-Word) , wie etwa dem ItaniumProzessor , werden in einem Instruktionswort mehrere einzelne Instruktion en iibertragen, die par allel abgearbeitet werden. Die Zusammenst ellung der einzelnen Inst ru kt ionen zu einem Instruktionswort erfolgt durch den Compil er. Er ist dafiir verantwortlich, dass die einzelnen Instruktionen voneinander unabhangig ausgefiihrt werden konnen und nach Moglichkeit aIle Ausfiihrungseinh eiten beschiiftigt sind.
Parallele Schleifen Schleifen sind ein wichtiger Bestandteil jeder Programmiersprache. Sie erlauben die wiederh olt e Ausfiihrung von Anweisungen. Sind diese Anweisungen unt ereinander unabhangig, so konnen sie auch parallel von mehreren Proz essoren bearbeitet werden. Beispielsweise kann die serielle Schleife
do i=l,n a(i) = b(i) + c(i) enddo bei der die einzelnen Anweisungen voneinander unabhiingig zu bearbeiten sind, in der Programmiersprache High Performance Fortran (HPF) als forall-Schleife lHPF$
forall (i = l:n) a(i) = b(i) + c(i)
realisiert werd en, die dann vom Compil er auf mehrere Prozessoren verteilt werd en kann .
Datenparallelitat Sind auf unterschiedlichen Daten die gleichen Operationen durchzufiihren, so kann man eine Parallelisierun g durch gleichmasiges Verteilen der Datenelement e auf die zur Verfiigung stehenden Prozessoren erreichen. Ein Beispiel aus der Programmi ersprache Fortran90 , bei der Datenparallelit at genutzt wird, ist die Vektora nweisung
a(l :n) = b(l:n) + c(l:n) bei der der Compiler die einzelnen Additionen und Zuweisungen von verschieden en Prozessoren durchfiihren lassen kann . Ebenso kann die Matrixanweisun g
1.3. Parallele Programmiermodclle
13
A(l:n,l:n) = B(l:n,l:n) + C(l :n,l:n) und Matrixmultiplikation mittels
A = matmul(B, C) datenparallel durchgefiihrt werden.
Parallelitat auf Prozessebene Bei entsprechender Unterstiitzung durch das Betriebssystem in Form von so genanntern Multitasking konnen auf einem Rechner mehrere unterschiedliche oder gleiche Prozesse parallel ablaufen . Die Unterteilung der Berechnung in einzelne Teilprozesse ist durch den Benutzer festzulegen.
1.3.2
Implizite und explizite Parallelitat
Programmiermodelle unterscheiden sich auch in der Art wie die Parallelitat dargestellt wird. Bei der impliziten Darstellung von Parallelitat werden nur die notwendigen Berechnungen und ihre Abhiingigkeiten untereinander, nicht aber die Berechnungsreihenfolge oder die Aufteilung der Berechnungen und Daten festgelegt. Die automatisch parallelisierenden Compiler folgen diesem Ansatz. Sie versuchen selbststiindig ein vorgegebenes sequentielles Programm in ein paralleles Programm zu iiberfiihren. Dabei steht der Compiler vor der schwierigen Aufgabe, die Berechnungen und Daten so auf die Prozessoren zu verteilen, dass daraus eine moglichst gute Lastverteilung resultiert und gleichzeitig der notwendige Datenaustausch zwischen den Prozessoren niedrig bleibt. Bei der expliziten Darstellung von Parallelitiit iibernimmt der Programmierer die Aufteilung der Daten und Berechnungen auf die einzelnen Prozessoren . 1st Informationsaustausch zwischen den Prozessoren notwendig, so muss dieser explizit programmiert werden. Vertreter dieses Programmieransatzes sind beispielsweise die Message-Passing-Bibliotheken MPI (siehe auch Abschnitt A.3 auf Seite 212) und PVM.
1.3.3
Erzeugung von Prozessen
Die einzelnen Teilaufgaben von parallelen Programmen werden in parallel zueinander laufenden Prozessen realisiert . Programmiermodelle unterscheiden sich durch die Art wie diese Prozesse erzeugt werden.
Kapitel 1. Crundsatzliches tiber Parallelrechner
14
Fork-Join-Konstrukt Beim Fork-Join-Konstrukt handelt es sich urn eine Moglichkeit Prozesse dynamische, d. h. wahrend der Laufzeit zu erzeugen und auch wieder zu beenden . Ein bereits existierender Prozess erzeugt durch den Aufruf der Funktion fork einen so genannten Kindprozess , der eine Kopie des Erzeugerprozesses ist. Durch den gemeinsam en Aufruf der Funktion join werden die beiden Prozesse wieder zu einem zusarnmengefiihrt, der Kindprozess wird beendet, der Erzeugerprozess arbeitet weiter. Ruft zuerst der Erzeugerprozess die Funktion join auf, so wartet er solange bis auch der Kindprozess diese Funktion aufruft. Ruft zuerst der Kindproz ess die Funk tion join auf, so wird er sofort beendet. Da beide Prozesse, Kind- und Erzeugerprozess , die gleichen Daten und den gleichen Programmcode besitzen , miissen sie, wenn sie unterschiedliche Programmteile ausfiihren sollen, die Programmausfiihrung von der Prozessnummer abhangig machen.
SPMD Beim SPMD-Modell (~ingle frogram Multiple .Qata) werden bei Programmstart eine feste Anzahl von Prozessen erzeugt. Diese Anzahl der Prozesse ist statisch, d. h. sie andert sich iiber die gesamte Laufzeit des Programmes nicht. Aile Prozesse arbeiten das gleiche Programm aboSollen von den Prozessen unterschiedliche Programmteile ausgefiihrt werden, so muss die Ausfiihrung dieser Programmteile von der Prozessnummer abhangig gemacht werden. Eine Realisierung des SPMD-Modells findet man beispielsweise in der Programmbibliothek MPI. Zum Starten von zwei Prozessen, die beide das Programm program ausfiihren, verwendet man dort das Kommando mpirun -np 2 program (siehe auch Abschnitt A.3.4 auf Seite 219).
1.3.4
Datenaustausch
Ein wichtiger Aspekt bei der Parallelisierung ist, wie Daten zwischen den Prozessen ausgetauscht werden. Je nach zu Grunde liegender Hardware ergeben sich die beiden nachfolgenden Programmierkonzepte.
Rechner mit gemeinsamem Speicher Bei Rechnern mit gemeinsamem Speicher (siehe auch Abschnitt 1.1.1 auf Seite 2) konnen Daten zwischen den Prozessen iiber den gerrieinsamen Speicher ausgetauscht werden. Jeder Prozess besitzt einen Speicherbereich fiir private und einen Speicherbereich fiir gemeinsame Variablen. Der Datenaustausch zwischen Prozessen erfolgt
1.3. Parallele Programmiermodelle
15
ausschlieslich tiber die gemeinsamen Variablen. Private Variablen konnen von anderen Prozessen nicht zugegriffen werden. Will ein Prozess Pi einem Prozess Pj Daten iibermitteln, so stellt er diese durch umkopieren in gemeinsame Variablen zur Verfiigung. Prozess Pj kann sie dann zur weiteren Verarbeitung in seine privaten Variablen umkopieren. Mit Hilfe von Synchronisationsoperationen muss dabei verhindert werden, dass Prozess P, aus den gemeinsamen Variablen liest, bevor Prozess Pi die gewiinschten Daten zur Verfiigung gestellt hat. Ebenso muss das gleichzeitige Schreiben mehrerer Prozesse auf den gleichen gemeinsamen Variablen unterbunden werden, da sonst Inkonsistenzen auftreten konnen, Eine solche notwendige Synchronisation zwischen den Prozessen Pi und Pj kann mit Hilfe eines so genannten binaren Semaphors realisiert werden. Ein binares Semaphor besteht aus einer Variable s, die nur die beiden Werte 1 (== ein Prozess schreibt auf die gemeinsamen Variablen) oder 0 (== kein Prozess schreibt auf die gemeinsamen Variablen) annehmen kann und den beiden unteilbaren Funktionen signal(s) und wai t (s) . Die Funktion signal (s) setzt die Variable s auf den Wert O. Die Funktion waites) wartet bis s den Wert 0 hat, setzt dann den Wert von s auf 1 und fahrt mit der Befehlsausfiihrung fort. Die Grundbelegung von s ist 0, also es schreibt kein anderer Prozess auf die gemeinsamen Variablen. Urn das gleichzeitige Schreiben von mehreren Prozessen auf gemeinsame Variablen zu verhindern, muss nun jeder Prozess vor dem eigentlichen Schreiben die Funktion waites) und nach dem Schreiben die Funktion sagnat Cs) ausfiihren.
Rechner mit verteiltem Speicher Bei Rechnern mit verteiltem Speicher (siehe auch Abschnitt 1.1.1 auf Seite 2) kann der Datenaustausch nicht wie bei Rechnern mit gemeinsamem Speicher tiber einen allen Prozessen zuganglichen Speicherbereich erfolgen, sondern es sind explizite Kommunikationsanweisungen notwendig, urn die Daten vom lokalen Speicherbereich eines Prozesses in den lokalen Speicherbereich des anderen Prozesses zu transferieren. Man spricht in diesem Zusammenhang auch von Nachrichtenaustausch (englisch: message passing) . Man unterscheidet etwa die nachfolgenden Kommunikatonsarten.
Punkt-zu-Punkt-Kommunikation Bei dieser Kommunikationsart sind immer genau zwei Prozesse beteiligt. Der eine Prozess versendet eine Nachricht aus seinem lokalen Speicherbereich und der andere Prozess empfangt diese Nachricht und legt sie in seinem lokalen Speicherbereich ab (siehe dazu auch MPI_Send und MPI_Recv auf Seite 222).
Globale Kommunikation Bei der globalen Kommunikation sind immer alle Prozesse beteiligt. Einer dieser Prozesse iibemimmt immer eine Sonderaufgabe, weil von
16
Kapitel 1. Crundsatzliches tiber Parallelrechner
ihm die Datenverteilung ausgeht oder auf ihm die Dateneinsammlung stattfindet. Wir bezeichnen diesen Prozess im Folgenden als root-Prozess. • Rundruf (Broadcast) Bei dieser Kommunikationsart versendet der rootProzess eine Nachricht an aile Prozesse, so dass nach der Kommunikation aile Prozesse diese Nachricht in ihrem lokalen Speicher vorliegen haben (siehe dazu auch MPCBcast auf Seite 227). • Einsammeloperation (gather) Bei dieser Kommunikationsart empfangt der root-Prozess von allen Prozessen eine Nachricht. Nach der Kommunikation liegt also im lokalen Speicher des root-Prozesses die Vereinigung aller von den Prozessen gesendeten Nachrichten vor (siehe dazu auch MPCGather auf Seite 228) • Verteileoperation (scatter) Bei dieser Kommunikationsart werden Nachrichten vom root-Prozess gleichmafig an alle Prozesse verteilt. Nach der Kommunikation hat jeder Prozess einen Teil der Nachrichten in seinem lokalen Speicher vorliegen (siehe dazu auch MPCScatter auf Seite 228). • Reduktionsoperation Bei dieser Kommunikationsart wird von allen Prozessen gemeinsam eine Rechenoperation, etwa eine Addition, durchgefiihrt und das Ergebnis dieser Berechnung im lokalen Speicher des root-Prozesse abgelegt (siehe dazu auch MPCReduce auf Seite 229).
Kapitel2 Parallele Verfahren fur partielle Differentialgleichungen In diesem Kapitel betrachten wir zur Einfiihrung - und aus historischen Grunden die klassischen Iterationsverfahren zur Aufiosung von linearen Gleichungssystemen: Jacobi-Verfahren, Gaus-Seidel-Verfahren, SOR-Verfahren . Diese haben heute als eigenstandige Verfahren kaum mehr Bedeutung, man kann jedoch mit ihnen einige grundlegende Unterschiede und Prinzipien bei der Parallelisierung aufzeigen. Die Darstellungen in Abschnitt 2.1 und Abschnitt 2.2 lehnen sich eng an 126] und 139] an. In Abschnitt 2.3 wird das ADI-Verfahren eingefiihrt, welches insbesondere fiir die Berechnung von Naherungen fiir zeitabhangige Gleichungen (z. B. Warmeleitungsgleichung) geeignet ist . Die Diskussion der Parallelisierung wird in Analogie zu 139] durchgefUhrt . Wir betrachten Differentialgl eichungen der Bauweise
t >O
L(u) = f(x, t) , mit Randbedingung
B(u) = g(x, t),
xE
an,
t > O.
1m Fall von parabolischen oder hyperbolischen Differentialgleichungen liegt zusatzlich eine Anfangsbedingung
u(x, 0) = h(x,0), vor. Lund B sind Differentialoperatoren. Die Funktionen u(x, t) ist gesucht .
t . 9 und
h sind gegeben ,
In den meisten Anwendungen aus Physik und Technik ist das Gebiet menge von ]R2 oder ]R3 . G. Alefeld et al., Parallele Numerische Verfahren © Springer-Verlag Berlin Heidelberg 2002
n eine Teil-
18
2.1
Kapitel 2. Parallele Verfahren fiir partielle Differentialgleichungen
Standardverfahren fiir elliptische Differentialgleichungen
In diesem Abschnitt stellen wir am Beispiel des mit finiten Differenzen diskretisierten Problems der Poisson-Gleichung klassische, auf Fixpunktiteration beruhende Verfahren zur iterativen Losung linearer Gleichungssyst eme VOL
2.1.1
Poisson-Gleichung mit Dirichlet-Randbedingungen
Gegeben ist die elliptische Differentialgleichung (Poisson-Gleichung)
fpu
fP u
L(u) = ax2 + ay2 = f(x , y),
(x,y) E 0,
mit der Randbedingung
B( u)
= u(x , y) = g(x, y),
(x, y) E 00.
Wir bet rachten hier den einfachen Fall, dass 0 ein Rechteck ist (Abbildung 2.1).
Y
/fJD
YA
'----0--- - - - - - - 0 - - _
Abb. 2.1 : Rechteck im lR2 • Gesucht ist die Funktion u(x , y). Cewohnlich ist u(x, y) nicht formelrnakig darstellbar. Man versucht daher, mit einem geeigneten numerischen Verfahren Naherungswerte an bestimmten ausgewiihlten Punkten zu bestimmen. Dazu wird das Rechteck 0= (XA' XE ) X (YA' YE) mit einem in x- und y-Richtung gleichabst iindigen Git t er der Maschenweite h iiberzogen (Abbildun g 2.2), indem (XA, XE) in N I + 1 und (YA' YE) in N J + 1 Teilintervalle unterteil t werden. Wir gehen davon aus, dass dies imm er moglich ist , dass also (XE- XA)/(YE- YA) = (NI+l)/( NJ+l ) mit NI , N J E N gilt. Damit ergibt sich die Maschenweite h = (XE - xA)/ (N I + 1) = (YE - YA )/(N J + 1). Mit dieser Gitteraufteilung des Gebiets 0 wird nun eine Approximation der Ableitungen mit der sogenannten Methode der finiten Differenzen bestimmt. Ausgehend
2.1. Standardverfahren fiir elliptische Differentialgleichungen
l
4
l - - --t--
-t-- - t - - t - --
- t - --I--
19
--I-
--l
Y I =12 f-- -+-- -+---\--+----+---+- --!I---I
i
Yo =
f---+---+---\- - +----+---+---II----1
1
4
2-
1
x
2
4
i fiir n = (0, 2) x (0,1) .
Abb. 2.2: Gitter der Maschenweite h =
von einem P unkt (x, y) gilt aufgrund der Taylor-Formel fiir h
>
°
h2 h3 h4 u(x + h, y) = u(x, y) + hux(x, y) + 2fuxx(x , y) + 3fuxxx(x, y) + 4! uxxxA~, y) und
h2 h3 h4 u(x - h, y) = u(x, y) - hux(x , y) + 2fuxx(x, y) - 3! uxxx(x, y) + 4! uxxxx((, y) wobei ~ und ( jeweils unb ekann te Zwischenstellen zwischen x und x±h sind . Addition der beiden Gleichungen und Division dur ch h 2 ergibt
u(x - h, y) - 2u(x, y) + u(x h2
+ h, y)
_
-
U
( ) O(h2) . xx x, Y +
(2.1)
Ana loges Vorgehen fiir u(x, y + h) und u(x , y - h) liefert
u(x , y - h) - 2u(x, y) + u(x , y + h) _ h2
-
(
U yy x , y
)
+ O(h2 ) .
(2.2)
Nun werden fiir jeden Punkt (Xi , yj) des (N Ix N J )-Gitters in der Differentialgleichung die zweite n partiellen Ableit ungen dur ch die Differenzenquotient en erset zt und die Diskret isierun gsfehler verna chliissigt. Damit ergibt sich
Ui,j- l + Ui-l ,j - 4Uij + Ui+l,j + Ui,j+l = h 2f(X i, yj) fiir i = 0, 1, . . . , N1 - 1, j = 0, 1, . .. , N J - 1. Die Approximation von U xx + U yy mit der oben beschriebenen Diskretisierung wird als ,,5-P unkt-Differenzenstern" (Abbildung 2.3 b)) bezeichnet . Dabei bezeichnen wir mit Uij die so entstehende Niiherung fiir U( Xi,Yj). Das oben beschriebene Vorgehen liefert ein linear es Gleichungssystem ftir die gesuchte n Niiherungen Uij , wobei die Unbekannte n gemii/5 Abbildung 2.3 a)
20
KapiteI 2. Parallele Verfahren fiir partieIIe DifferentiaIgleichungen
y
a)
b)
j
(x,y+h)
7
8
9
4
5
6
1
2
3
(x-h,y)
+ x,y)
(x+h,y)
(x,y- h)
x - i
Abb . 2.3: a) Lexikographi sche Gitternummerierun g bei einem (5 x 5)-Git te r b) 5-Punkt-Differenzenstern
nummeriert werden, d.h . mit l = j · NI +i+ 1, i = 0, .. . , N I -1, j = 0, . . . , NJ - 1, ergibt sich Uij = Ul, l = 1, 2, .. . N ! · N J. Die Koeffizienten matrix des linearen Gleichungssystems ist eine Block-Tridiagonalmatrix
als Diagonalkomponenten. Zur naherungsweisen Berechnung der Losung der Differentialgleichung ist das linear e Gleichungssyst em Au = b zu losen, wobei die rechte Seite b aus der rechten Seit e der Differentialgleichung und den Ra ndbedi ngungen resuItie rt . Zuniichst wollen wir zum Losen des linearen Gleichungssystems das Fixpunktverfahren betrachten. Dazu wird eine iterationsfahige Gestalt u = Tu + c benotigt,
2.1. Standardverfahren fiir elliptische Differentialgleichungen
2.1.2
21
Das Jacobi-Verfahren zur Losung von Gleichungssystemen
Es sei A = D - L - U die Zerlegung der Matrix, wobei D der Diagonalanteil, - L der st renge unt ere Dreiecksant eil und - U der st renge obere Dreiecksanteil von A ist. Dami t ergibt sich die iterationsfiihige Gest alt :
Au = b {::} (D - L - U)u = b {::} Du = (L + U)u + b. Dies liefert fiir nichtsingulares D die Iterationsvorschrift des Jacobi- oder Gesamtschrittverfahrens: Uk =
D - 1(L + U )Uk - 1 + D -1b,
k = 1, 2, ...
mit der It erati onsmatrix T := D-1(L + U) . In Komp onentenschreibweise ergibt sich damit der
Algorithmus 2.1 (Jacobi-Verfahren) Wahle Startvektor u? E IRn . For k = 1, 2, . . . For i = 1, 2, . . . , n u7
=
1 ..
b, -
a
zt
(
L n
1 a;juf- )
.
j =l
N i
Komponentenschreibweise liefert bei Anwendung des Jacobi-Verfahrens auf dieses spezielle lineare Gleichungssystem die nachfolgende Vorschrift :
Algorithmus 2.2 (Jacobi-Verfahren fiir Poisson-Gleichung) Wahle Startvektor u D E jRn . For k = 1, 2, . . . For j = 0,1 , . .. , N J - 1 For i = 0,1 , . . . ,N1- 1 k _ 1( k k k k h2f( Xi, Yj )) . Ui j - 4' Ui ,j _l + Ui _1,j + U i ,j+ l + u i+l ,j -
22
Kapit el 2. Parall ele Verfahren fiir par tielle Differentialgleichungen
Ei nige Werte von U jj sind durch die Randbedingungen fest vorgegeben. Sie liefern dann Beit riige fiir die rechte Seite des linea ren Gleichungssystems. Die neue Naheru ng Ufj an der Ste lle (Xi, Yj) hiingt bei der hier beschriebenen Diskreti sieru ng mit dem 5-P un kt- Differenzenstern nur von den alten Naherungen an den vier benachba rten Punkten ab o
2.1.3
Das Gauls-Seidel-Verfahren
Wir gehen wieder von der Zerlegung A andere it erationsfahige Gestalt:
=D
- L - U aus , betrachten aber eine
Au = b <=> (D - L - U )u = b <=> (D - L)u = Uu + b . Dam it ergibt sich die Iteration
(0 - L)uk = UUk - 1 + b,
k = 1,2 , . . .
fiir das Gaus-Seidel- ode r Einzelschrittverfahren. Auflosen nach Uk
= (D - L) - I U u k- 1 + (D - L t 1b ,
Uk
liefert
k = 1,2 , . . .
mit der Iterationsmatrix T := (D - L)-1 U. In Komponentenschreibweise ergibt sich daraus
Algorithmus 2.3 (Gauf&-Seidel- Verfahren) Wahle Startvektor U O E lR.n • For k = 1,2, . . . For i = 1, 2, .. . , n i- I
u kj --
-
1 (b i
a"
-
"
n
L
L
a ijU jk -
j=1
l) a i jU kj,
j =i+ l
Spezi ell fiir die Poisson-Gleichung mit Dirichlet-Randbedingungen erhalt man
Algorithmus 2.4 (Gauf&-Seidel-Verfahren fur Poisson-Gleichung) Wahle Startvektor u O E lR.n . For k = 1,2, .. . For j = 0,1 , .. . , N J - 1 For i = 0, 1, . .. , NI - 1 k 1( k 1 + u k, 1 ' + U k, -l k-l h2f( X ,' YJ' » u .. = - U " '+ 1 + U '+1 ' 'J
4
wobei einige Werte fiir
,,}-
Uij
,-
.J
, ,}
,
,}
,
wieder durch Randbedingungen bekannt sind .
Bemerkung 2.1 Beim Einzelschrit tverfahren erwartet man ,,schnellere" Konvergenz als beim Gesamtschrittverfahren. Dies ist i.Allg. nicht richtig; es gibt Beispiele, bei denen das
2.1. Standardverfahren fiir elliptischc Differentialgleichungen
23
Einzelschrittverfahren divergiert, das Gesamtschrittverfahren aber konvergiert und umgekehrt. Bei Anwendungauf das Poisson-Problem konvergiert jedoch das Einzelschrittverfahren immer doppelt so schnell wie das Gesamtschrittverfahren. Man kann zeigen (siehe beispielsweise [37]): 1st A eine M-Matrix (MinkowskiMatrix), so konvergieren beide Verfahren und das Einzelschrittverfahren ist schneller als das Gesamtschrittverfahren.
2.1.4
Das SOR-Verfahren
Das SOR-Verfahren (~uccessive Qver-relaxation method) basiert auf der folgenden Idee: Die Naherung U k- 1 sei gegeben. Wir berechnen nun n
i- 1
= -1
uAk ·
(b i -
a--
t
L
aiJ-u k- J
j=l
H
L
aijU k-1) -
j=i+1
J
und setzen fiir w E R U~t = (1 -
k- 1 W)U t
+ wu kt
= (1 -
k- 1 W)U t
+ w-(b a-_ t- -
1 H
i-1 ' " a tJ-_Uk L...J J j=l
n ' " a-tJ _U~-l) L...J J • j=i+1
Dies ergibt die Iterationsvorschrift
(D -
wL)u
k
= [(1 -
w)D
+ wU]U k- 1 + wb,
(2.3)
wER
Fur w = 1 ergibt sich daraus wieder das Einzelschrittverfahren.
Satz 2.1 (Satz von Kahan fiir das SOR-Verfahren) Liegt Konvergenz vor, dann gilt w E (0,2) . Den Beweis findet man in [34] . Weiterhin kann man zeigen: 1st die Matrix A symmetrisch positiv definit , so konvergiert das SOR-Verfahren fiir alle wE (0,2). Bei Anwendung des SOR-Verfahrens auf die diskretisierte Poisson-Gleichung, wobei wieder der 5-Punkt-Stern auf einem gleichabstandigen Gitter verwendet wird, ergibt sich der nachfolgende Algorithmus:
Algorithmus 2.5 (SOR-Verfahren fiir Poisson-Gleichung) Wahle Startvektor UO E Rn. For k = 1,2, .. . For j = 1,2, . . . , N J For i = 1,2, . .. , N I k _ Ui j -
(1 -
k-1 w)U i j
k-1 k-1 +W 4 (U ki,j_1 + Ui-k 1,j + Ui+1 ,j + U i,j+1
-
2
h
f(Xi, Yj)) .
24
Kapitel 2. Parallele Verfahren fiir partielle Differentialgleichungen
2.2
Parallelisierung
Die Implementierung der oben beschriebenen Verfahren auf einem Parallelrechner ist Gegenstand dieses Abschnitts. Die Parallelisierung des Ja cobi-Verfahrens ist offensichtlich und wird nur kurz behand elt. Nachfolgend wird ausfiihrlich auf die Parallelisierung des Oaus-Seidel-Verfahrens eingegangen. Die Parall elisierung des SORVerfahr ens erfolgt analog. In der Praxis haben diese Verfahren fiir die Berechnung von Naherungen der PoissonGleichung kaum noch Bedeutung. Hierfiir gibt es Iterationsverfahren die viel schneller konvergieren. Diese sind Gegenstand von Kapitel 5. Nur zur Erliiuterung der Parallelisierung betrachten wir hier das Jacobi- und SOR-Verfahren.
2.2.1
Parallelisierung des Jacobi-Verfahrens
Beim Jacobi- oder Gesamtschrittverfahren gehen in die Berechnung der i-ten Komponente der k-ten Naherung die Komponenten der (k -I)-ten Iteriert en an den vier Nachbarpunkten im Gitter ein (Abbildung 2.4). Da alle Komponenten der (k-I )-t en j
k -te Niiherung
(k-l)-te Naherung
j
Abb. 2.4: Abhangigkeit der Iteriertenkomponenten beim Jacobi-Verfahren. Naherung berechnet werden, bevor die Komponenten der k-ten Niiherung berechnet werden, konnten aIle Komponenten der k-ten Naherung gleichzeitig berechne t werden, falls geniigend viele Proz essoren vorhand en sind. Tatsachlich ist jedo ch die Anzahl der Unbekannten meist wesentlich grol1,er als die Anzahl der Proz essoren. Jedem Prozessor werden dah er mehrere Git terpunkte und somit mehrere Unbekannte zugeordnet - z. B. wie in Abbildung 2.5. Dies geschieht sinnvollerweise so, dass moglichst wenig Datenaustausch mit anderen Prozessoren benotigt wird. In Abbildung 2.6 gehoren alle e - Punkte zum akt uellen Prozessor Pi. Fiir die Berechnung der neuen It erierten an den Randpunkten werden Niiherungen aus anderen
2.2. Parallelisierung
25
• eigene Kompo nenten
I
I I
-., ~
t ~ !t I-
i-
I
r .. I"
I I
Iv
16
I
I
I
-
r "'\
,
~-l 1
,
t)
I
I
I I
I
I
-
x
Komponenten andere r Teilgebiete, die auch benotigt werden
r-: ~ IL
I
1f
-
I
1
I
~
1-
I F~
~
I
I I
,- -
7
--
I
:
I
.)
.'-
---
P4
I
I
A bb. 2.5: Mogliche Zerlegung eines (24 X 24)-Gitters zur Auft eilung der Unbekannten fiir eine Berechnung mit 16 Prozessoren.
1)( )( )( )( 1
r )( )( )( )(
I
Abb. 2. 6: Ein "Nest" zur Vera nschaulichung der Abhangigk eit en der Komponent en beim 5-Punkt-Differenzenstern (Ausschnitt fiir PlO) '
Prozessoren benotigt , die x - Punkte, sogenannte "Geisterpunkte" . Ebe nso miissen die neu berechneten Naherungen in den Randpunkte n den anderen P rozessoren zur Verfiigung gestellt werden.
26
Kapitel 2. Parallele Verfahren fiir partielle Differentialgleichungen
Schematische Darstellung des Jacobi-Verfahrens filr den Prozessor Pi An den Geist erpunkten werden Startwerte gewiihlt. Setze F ehl er = 1010 .
While F ehl er > e (z.B. e = 10- 5 ) 1. Berechne die eigenen Komponenten der akt uellen It erierten X, d. h. aIle neuen
Naherungen im Nest. 2. Sende aIle Werte der neu berechneten Iteri erten auf dem Rand des Nest es zu den benachbarten Proz essoren. 3. Empfange aIle neuen Naherungen fiir die Geisterpunkte von den benachbarten Prozessoren. 4. Berechne F ehl er =
IIrll mit r =
Ax - b.
EndWhile Bemerkung 2.2 a) Die Schritte 2 und 3 sind abhiingig von der Knotenaufteilung und von der R echnerarchitektur.
b) Der Schritt 4 erfordert Dat enaustausch zwischen den Prozessoren.
2.2.2
Parallelisierung von Gaufs-Seidel- und SOR-Verfahren
Die k-te Naherung an der Stelle (i ,j) , wir bezeichnen sie mit U~j ' kann nicht berechnet werden, bevor ULl,j und U~,j_ l berechnet wurden. Daher ist eine Parall elisierung nicht offensichtlich. Abhilfe bietet eine Umnummerierung der Unbekannten. Dazu gibt es verschiedene Moglichkeiten,
2.2.3
Wellenfront (Wavefront)-Nummerierung
Bei dieser Nummerierung werden die Unbekannten in einem quadr atischen Git t er diag onal weise dur chnummeriert (Abbildung 2.7), woraus sich die Reihenfolge ergibt , in der diese bei der Berechnung der neuen Iteri ert en dur chlaufen werden. Bei 36 Unbekannten und sechs Proz essoren erfolgt nun die Datenverteilung nach folgendem Schema :
2.2. Parallelisierung
27
21 26 30 33 35 36 15 20 25 29 32 34 10 14 19 24 28 31
V
Rand
I
6
9
13 18 23 27 :
3
5
8
12 17 22
2
4
7
II
,,
I I I I
16 :
_ __________ __ _ ____ _ _ _ _ ___ 1
Abb. 2.7 : Wavefront-Nummerierung fiir ein quadratisches Gitter mit 36 inneren Gitterpunkten.
g: P2 : P3 : P4 : Ps : P6 :
1 2 4 3 5 6
7 8 9
11 12 13 10 14 15
16 17 18 19 20 21
22 23 24 25 26
27 31 34 36 28 32 35 29 33 30
Auf den einzelnen Diagonalen kann man die Komponenten der k-te n Iterierten beim Einzelschrit tverfahren simultan aus Komp onenten der (k -I)-t en Iterierten und bereits berechneten Komp onenten der k-te n It erierten (auf der vorhergehenden Diagonalen) berechnen, d. h. die neuen Werte fiir Punkte auf derselben Diagonale konnen ste ts parall el berechnet werden. Jedoch ergibt sich ein Nachteil: Die Parallelisierung erfolgt nicht gleichmas ig, sie nimmt erst zu, dann wieder ab , d. h. jeder Schritt hat einen and eren Parallelisierungsgrad. Deshalb ist die gleichmalsige Verteilung des Rechenaufwands auf die verschiedenen Prozessoren mit diesem Vorgehen schwierig. Beispielsweise sind bei einem (P x P)-Git ter unter Verwendung VOn P Prozessoren 2P - 1 Schritte notig, wobei insgesamt p 2 Unbekannte behandelt werden. Der mittlere Par allelisierungsgrad ist hier P 2/ (2P - 1), so dass der maxim al erreichbare Speed-up des zugehorenden parallelen Programm s nur etwa P / 2 betriigt . Behand elt man hingegen ein (kP x kP )-Gitter, k EN, mit P Proz essoren, so lasst sich dieses Git ter in k Blockstreifen aufteilen, die nacheinander abgearb eit et werden. In jedem Blockstreifen mit kp 2 Unbekannten fallen kP + P - 1 Schritte an, so dass der mittlere Parallelisi erungsgrad nun k p 2 / (kP + P -1) betragt, was einen maximal erreichbaren Speed-up von kP/ (k + 1) liefert .
28
Kapitel 2. Parallele Verfahren fiir parti elle Differentialgleichungen
2.2.4
Red-Black-Nummerierung (Schachbrett-Ordnung)
Ais zweite Moglichkeit betrachten wir ein quadratisches Gitter, bei dem die Gitterpunkte schachbrettartig mit den Farben rot (e: red-Punkte) und schwarz (_: blackPunkte) so durchnummeriert werden , dass jeder red-Punkt nur zu black-Punkten benachbart ist und umgekehrt (Abbildung 2.8).
15
7
16
8
5
13
6
14
11
3
12
4
1
9
2
10
Abb. 2.8: Red-black-Nummerierung eines quadratischen Gitters mit 16 inn eren Gitterpunkten. Aus den 16 Gitterpunkten in Abbildung 2.8 ergeben sich insgesamt 16 Unb ekannte o Die Koeffizientenmatrix des resultierend en linear en Gleichungssystems hat die Bauweise
mit (8 x 8)-Diagonalmatrizen On Db, wobei Dr den red-Punkten und Db den blackPunkten zugeordnet ist . Fur die Poisson-Gleichung mit Dirichlet-Randbedingungen ist -4
-4 -4 -4 ~
A=
1
1 1 1
1
1
1 1 111 1 11 1 111 III -4 1 1 1 1 -4 1 1 1 -4 1 1 -4 ~
1
1
-4
111 1 1 111 1 1
1
-4 -4
1
1 III
-4 -4 -4
2.2. Parallelisierung
29
2ur Auflosung von Au = b, A
= (~f ~J
mit dem Gaug -Seidel-Verfahren an-
hand der Vorschrift
(D - L)uk = UUk - 1 + b,
wobei
erhalt man aufgrund der speziellen Gestalt von A
0) (u~) (0 -E) (U~-l) (b u~ = U~-l +
Dr ( ET Db
0
0
r)
b, .
Daraus ergeben sich die beiden Gleichungen
Dru~ = -EU~-l
Dbu~
+E
T
+ b r,
u~ = bb.
Aus der ersten Gleichung kann der Vektor der red-Punkte,
parallel berechnet werden, da zwischen den einzelnen Komponenten des red-Vektors u, keine Abhangigkeiten bestehen. Nach Einsetzen in die zweite Gleichung erhalt man den Vektor der black-Punkte:
wobei wieder parallele Berechnung moglich ist . Zur Berechnung der Werte an den black-Punkten benotigt man nur die Werte von zuvor berechneten red-Punkten und umgekehrt. In diesem Fall ist eine gleichmasige Verteilung der Rechenlast, also ein optimaler Parallelisierungsgrad, moglich, Jeder Prozessor ist ftir eine gewisse, etwa gleich grose, Anzahl von red- und black-Punkten zustandig, Abbildung 2.9 zeigt ein Beispiel fiir eine mogliche Aufteilung.
EJ8 EJ3 EJ4 1
9
~
6
14
2
10
~ Abb. 2.9 : Aufteilung der Knoten eines 4 x 4-Gitters auf vier Prozessoren.
Kapitel 2. Parallele Verfahren fiir partielle Differentialgleichungen
30
Hier werden jedem Prozessor je zwei red- und black-Punkte zugeordnet. Zunachst werden die Anfangskomponenten u~ den einzelnen Prozessoren gemaf?, der Gitterpunktaufteilung zugeordnet. Der Wert fiir U~+l am red-Punkt 2 wird durch den Prozessor Pz unter Verwendung der Werte u~ , uto und utz an den black-Punkten 9, 10 und 12 berechnet. Zur Berechnung von u~+I ben6tigt Pz also den Wert fiir u~ von Prozessor Pl' Ebenso werden zur Berechnung von U~+l die lokal vorliegenden Werte uto und utz sowie Ut4 von Prozessor P4 benotigt. Nachdem durch analoges Vorgehen aIle Prozessoren fiir die red-Punkte neue Werte der Iterierten Uk+l berechnet haben, miissen diese zu den Prozessoren gesendet werden, die diese Werte zur Berechnung an black-Punkten ben6tigen; in unserem Beispiel aus Abbildung 2.9 muss P4 den Wert fiir u~+I an die Prozessoren Pz und P3 versenden. Die Berechnung aller red-Punkte kann also parallel erfolgen, wenn zuvor die benotigten Daten an black-Punkten durch Kommunikation bereitgestellt wurden . Ebenso sind nach Berechnung der red-Punkte gewisse Daten zu versenden, urn die parallele Berechnung der black-Punkte durchfiihren zu k6nnen. Wir fassen dieses Vorgehen fiir den allgemeinen Fall zusammen :
Ablauf des parallelen Gaufs-Seidel-Verfahrens fur Prozessor Pi Setze die Anfangswerte von Setze Fehler = 1010 While Fehler > e
U O fiir
die eigenen Gitterpunkte
1. Berechne fiir aIle Werte an red-Punkten die neue Naherung.
2. Sende die Werte auf dem Rand des Teilgebietes zu den entsprechenden benachbarten Prozessoren . 3. Empfange die neuen Werte von entsprechenden Prozessoren, die Geisterpunkte enthalten. 4. Berechne fiir aIle Unbekannten an black-Punkten die neuen Iterierten. 5. Sende die Werte auf dem Rand zu den entsprechenden Prozessoren. 6. Empfange die neuen Werte fiir black-Punkte VOn entsprechenden Prozessoren, die Geisterpunkte fiir black-Punkte enthalten. 7. Berechne Fehler (z.B . mit dem Residuum EndWhile
r = Axk -
b, Fehler
= IlriD.
2.2. Parallelisierung
31
SOR-Verfahren Mit (2.3) ergibt sich fiir das SOR-Verfahren mit red-black-Nummerierung die Verfahrensvorschrift uk = r
(1 -
W)U k- 1 r
~(_EUk-l 4 b
+ br )t s k = 1,2, ...
u~ = (1 - w)u:- 1 - ~(bb - E T u~) ,
mit einem Startvektor u" . Die Parallelisierung des SOR-Verfahrens verlauft dann analog zum Gaus-Seidel-Verfahren.
Diskretisierung der Poisson-Gleichung im
]R3
Bei Betrachtung der Differentialgleichung U xx
(x, y, z) En (x, y , z) E an,
+ U yy + U zz = f( x, y, z ), u(x, y , z) = g(x, y , z),
mit dem dreidimensionalen Einhei tswiirfel
n = (0,1)
x (0,1) x (0,1)
ergibt sich die Diskretisierung aus Abbildung 2.10, wobei jeder Gitterpunkt nun sechs Nachbarn hat.
a)
b)
z
(i,j,k+l)
(i+ I,j,k)
y 1
x
(i,j,k-l)
Abb. 2.10: a) Dreidimensionaler Einheitswiirfel, b) Differenzenstern im ]R3 . Bei zwei Raumdimensionen wurde zum Losen des entstehenden linear en Gleichungssystems auf einem Parallelrechner die red-black-Numm erierung verwendet , die eine (2 x 2)-Blockmatrix liefert . Bei dr ei Raumdimensionen ist eine ahnli che Farbung moglich: Zuerst wird die untere Gitterebene wie bei red-black-Nummerierung eingefarbt. Die Farbung der jeweils nachsten Gitterebene erfolgt so, dass die Nachbarn von rot en Punkten in z-Richtung schwarz gefarbt werden und umgekehrt. Mit diesem Vorgehen erhalt man auch im dreidimensionalen Raum eine red-black-Ordnung (Abbildung 2.11).
Kapitel 2. Parallele Verfahren fiir partielle Differentialgleichungen
32
Abb. 2.11: Red-Black-Ordnung eines (3 x 3 x 3)-Gitters im 1R3 .
2.3
Das ADI- Verfahren
Das ADI-Verfahren (S!!lternating !1irection implicit method) oder die Methode der alternierenden Richtungen wurde zur numerischen Losung parabolischer Differentialgleichungen entwickelt .
2.3.1
Die Warmeleitungsgleichung
Wir betrachten die partielle Differentialgleichung
2u 2u 2u) au 2 (a a a at = a ax 2 + a y2 + az 2
+ f(x, y, z, t),
(x,y,z) En,
t ~ 0,
wobei u(x , y, z, t) gesucht wird . Dabei sind die Randbedingung
u(x, y, z, t) = g(x, y, z, t)
fiir
(z, y, z) EOn,
t>O
und die Anfangsbedingung
u(x, y, z, 0) = h(x, y, z)
(x, y,z) En
fiir
mit bekannten Funktionen 9 und h vorgegeben, wobei die Ubergangsbedingung g(x, y, z, 0) = h(x , y, z) fiir (x, y, z) E an erfiillt sei. Wir diskutieren zunachst die eindimensionale Warmeleitungsgleichung mit a = 1:
au at
=
a2u ax2 + f(x, t) ,
u(x, t) = g(x, t), u(x,O) = h(x) , mit
n=
(0,1) und
an
=
x E
n,
x Eon, xEn
t > 0, t
~
0,
{O, I}, wie in Abbildung 2.12 dargestellt. Es gilt also
g(O, t) = CPo(t) und g(l, t) = cpl(t). Das Bild der als Losung der eindimensionalen Warmeleitungsgleichung gesuchten Funktion ist eine Flache im Raum, wie z. B. in Abbildung 2.13 dargestellt.
2.3. Das ADI-Verfahren
33
u(O,t ) = <po(t)
u(l , t) =
~
= h(x)
x
n
Abb. 2.12: Rand- und Anfangsbedingung fiir die eindimensionale Warmeleitungsgleichung. u
h(x)
u(x, t) <po(t)
x
Abb. 2.13: Schaubild einer Funk tion u(x, t ).
2.3.2
Explizites Differenzenverfahren
Nun betracht en wir wieder das ursp riingliche Problem der Wiirm eleitungsgleichung im ]R3. Zur raurnli chen Diskretisierung werden die zweiten partiellen Ableitungen durch zentrale Differenzen ersetzt. Die Gitterweite in x-, y- und z-Richt ung sei jeweils h. Mit Hilfe der TaylorEntwicklung erhalt man gemiiiS dem Vorgehen aus Abschnit t 2.1.1
u(x - h, y, z) - 2u(x, y, z) + u(x + h, y, z) _ ( ) O(h2 ) - uxx x,y,z + h2 , u(x ,Y - h, z) - 2u(x, y, z ) + u(x, y + h, z) _ h2
-
U yy
(
x, y , z
)
+
O(h2 )
,
u(x, y, z - h) - 2u(x, y, z ) + u(x , y, z + h) _ ( ) O(h 2 ) h2 -uzzx ,y,z + . Dadurch ergeben sich bei Vernachliissigung der Term e O(h2 ) insgesamt N = NI x
34
KapiteI 2. ParaIIeIe Verfahren fiir parti eIIe DifferentiaIgIeichungen
t 5M 4M
3M 2M
o
x
h 2h 3h 4h 5h
Abb, 2.14: Diskretisierung in x- und t-Richtung fiir die eindimensionaIe WarmeIeitungsgIeichung.
N J x N K Gleichungen an den inneren (raumlichen) Gitterpunkten: aUijk(t)
at
a
:::::J
atU(Xi, Yj, Zk, t),
i=l , . . . , N I , j = l, . . . , N J, k=l , . .. , N K,
oder in Vektor-Schreibweise (nach fortl au fender Nummerierung der Gitterpunkte)
au
at:::::J Au +f
(2.4)
mit
wobei N gIeich der AnzahI der inneren Gitterpunkte ist. Die Vekt oren u und f sind Funktionen von t. Dabei ist A die Matrix, die aus der Diskretisierung der PoissonGleichung U xx + U yy + U zz = f( x , Y, z ) bekannt ist , d. h.
ist eine (NK x NK)-Blo ckmatrix mit (NI · NJ x NI· NJ)-Diagonalb16cken
A k1 I
0
I
A
-6
1 1 -6
k 2
0 1
A~J =
Ak =
0
I
I A fO /
1
0
1
-6
35
2.3. Das ADI-Verfahren
flir
k = 1, . .. , N K.
Es sei Uijk(t) eine Naherung fiir U(Xi, Yj, Zk, t). Dann ist
aUijk(t) a at ~ 8t U(Xi, Yj, Zk, t) .
Zur Approximation der Zeitableitung
~~, wobei u nun der Vektor mit den Kompo-
nenten Uijk ist , betrachten wir die Taylor-Formel fiir eine reelle Funktion v:
+ ~(L\t?v"(~)
v(t - L\t) = v(t) - L\tv'(t) mit einer Zwischenstelle
~
zwischen t - L\t und t.
Auflosen nach v'(t) und Division durch L\t ergibt die .Riickwartsdifferenzenapproximation"
'( ) _ v(t) - v(t - L\t) v t L\t
"(C) + ~(i\) 2 wt v vt-
Mit u" := u(nL\t), f" := f(nL\t) fiir n = 0,1,2, . . . , NT und
aun
7ft
un _ u n ~ L\t
1
ergibt sich unter Vernachlassigung aller Diskretisierungsfehler n
u-u
L\t
n-l
-An - u
+ f" ,
also
(I -
~tA)un =
un -
1
+ ~tf",
n = 1,2, ... ,NT.
Damit sind NT lineare Gleichungssysteme der Dimension N = NIx N J x N K zu losen. Fur jeden Zeitschritt ergibt sich ein Problem von ahnlichem Aufwand wie das Losen der Laplace-Gleichung. Aus diesem Grund und wegen der numerischen Stabilitiit, die von der Zeitschrittweite ~t abhiingt, wird dieses explizite Differenzenverfahren in der Praxis selten eingesetzt.
2.3.3
Sequentielles ADI-Verfahren
Wir betrachten nun au a2u a2u
8t = 8x 2 + 8y2 ' u(x , Y, t) = 0, u(x, y, 0) = uo(x, v),
(x,y) En, (x, y) E an (x, y) E n
t>0
(t s; r)
(DGL)
(RB) (AB)
Kapitel 2. Parallele Verfahren fiir partielle Differentialgleichungen
36
t
Abb. 2.15 : Auf den Randflachen ist u(x, y, t)
=
°fiir
aIle nichtnegativen t-
Werte vorgegeben. mit dem Einheitsquadrat
n = (0,1)
x (0,1) (Abbildung 2.15).
Fiir die raumliche Diskretisierung wird der 5-Punkt-Stern verwendet (Abbildung 2.16), d.h. fiir festes t an der Stelle (Xi,Yj) werden die zweiten partiellen Ableitungen durch die Differenzenquotienten ersetzt und die Diskretisierungsfehler vernachlassigt, y
i.j+l i=l.2
Nl
j=l.2
NJ
i+l.j
i-Lj i.]
i,j-l x
Abb, 2.16: 5-Punkt-Differenzenstern zur raumlichen Diskretisierung. Das ergibt 8Uij
7ft =
Ui-l ,j - 2Uij h2
+ Ui+l,j
+
Ui,j-l -
2Uij h2
+ Ui ,j+l •
(2.5)
Diskretisierung in t-Richtung mit Schrittweite!:1t und Verwendung der TaylorFormel fiir die Entwicklungsstelle t + ~t ergibt fiir eine Funktion v(t) !:1t
!:1t
1
v(t + 2') = v(t) + 2' v'(t) + 2
(!:1t) 2'
2
Vll(~),
2.3. Das ADI-Verfahren
37
also '( ) =
v t
v(t + ~t) - v(t) _ ~ .6.t "(C) -6t2 2 2 v <,. ,
Vernachlassigung des Approximationsfehlers liefert den ersten Term als Approximation der partiellen Ableitung:
'( )
v t ::::;
vet + ~t) - vet) 6t
.
""2
Einsetzen dieser Zeitdiskretisierung in (2.5) liefert mit und fiir den ersten Teilschritt (2.6) mit i = 1, .. . , N I, j = 1, ... , N J. In diesem Zwischenschritt werden bei der Diskretisierung in x-Richtung die .rieuen" Werte verwendet, bei Diskretisierung in yRichtung hingegen die "alten". Fur den zweiten Teilschritt ergibt sich durch Taylor-Entwicklung an der Stelle t+.6.t
mit ~ zwischen t und t + ~t . Auflosen nach v'et + ~t) ergibt nach Vernachliissigung des Restgliedes
'( .6.t) v(t+.6.t)-v(t+~t) v t+- ::::; 6t . 2 ""2 Einsetzen in (2.5) liefert fiir den zweiten Teilschritt n+! 2 n+! n+! n+l 2 n+l n+l u'- I ,J' - u'J' + u'+ · - ui. + u:t,J+l . I ,J' + u· _.-"-__'.::-__ ',--,,,t,J-l tJ
h2
h2
(2.7)
mit i = 1, ... , N I, j 1, .. . , N J. Nun werden in x-Richtung .alte" und in yRichtung "neue" Werte verwendet. In Matrizenschreibweise lautet (2.6) n+!_E n (1- .6.tA) ".,j ".,j -l 2
n + D ".,j + Fun.,j+1'
j = 1,2 , . .. ,NJ.
(2.8)
38
Kapitel 2. Parallele Verfahren fiir partielle Differentialgleichungen
Dab ei ist
und
(2.9)
1 Hier ist 1 die (NI x N I)-Einheitsmatrix. Fur jedes j = 1, . . . , N J ergibt sich also ein Gleichungssystem der Dimensi on N I . 1m erst en Teilschritt sind somit N J Gleichun gssyst eme mit einer Tridiagonalm atrix zu IBsen. Der zweit e Teil (2.7) lau tet analog
(I - .6.t B )un +l = (I + .6.t A)un+ ~ . 2
(2.10)
2
Hier ist 1 die (NI · N J x N I · N J )-Einheitsmatrix, B ist die (N J x N J)-Blockmatrix
- 21 B
=..!.-
1
1
h2
-21 " . •.
(
1 wobei 1 nun die (NI x N I)-Einheitsmatrix ist . Weiterhin ist
j = 1, 2, . . . , N J.
B besitzt pro Zeile hochst ens drei von null verschiedene Elemente, die Bandbreite ist 2NI - 1. Durch Umnummerieru ng der Unbekannte n in (2.10) gemaf Abbildung 2.17 erha lt man
.6.t n+l _ (I - -A)u, "'. 2
n+~
EU,"_ l • I
~ + Duin+~ + Fuin+ +1 ., • ,
i = 1, 2, ... , N I,
,
wobei A, E, Fund D gleiche Gestalt wie in (2.9), aber and ere Dimension haben. Zusammenfassend erha lt man die nachfolgende Verfahr ensvorschrift:
2.3. Das ADI-Verfahren
39
y
6
12
18
24
30
36
5
11
17
23
29
35
4
10
16
22
28
34
3
9
15
21
27
33
2
8
14
20
26
32
7
13
19
25
31
x
Abb. 2.17: Nummerierung der Gitterpunkte in y-Richtung.
Algorithmus 2.6 (ADI-Algorithmus fur einen Zeitschritt) 1. Lose die N J Gleichungssysteme (2.8) mit Tridiagonalmatrix nach n+ ~ . _ u .,j ,J - 1, 2, ... , N J auf
2. Ordn e die Git terpunkte urn. 3. Lose die N I Gleichungssysteme (2.9) mit Tridiagonalmatrix nach u?~ , l, i = 1, 2, . .. ,NI auf Die Tridi agonalgestalt der auftrete nden Mat rizen ist vorteilhaft, da bei der Auflosung mit dem Gaul&-Algorithmus im sequentiellen Fall - das entspricht einer Faktorisierung A = LV - kein so genannter Fill-in entsteht . Der Aufwand ZUlli Faktorisieren einer Tridiagonalmatrix ist proportional zu n, wiihrend eine vollbesetzte Matrix zur Faktorisierung einen Aufwand von etwa n 3 /3 Op erationen benotigt.
2.3.4
Auflosung von Gleichungssystemen mit Tridiagonalmatrix
Wir betrachten nun das !ineare Gleichungssyst em
Ax=b
mit
A=
o
40
Kapitel 2. Parallele Verfahren fiir partielle Differentialgleichungen
Mit der Faktorisierung A = LV, wobei L eine untere und V eine obere Dreiecksmatrix ist , gilt
Ax = b {::} LVx = b Das Auflosen von Ax = b erfolgt dann in zwei Schritten: 1. Lose Ly = b nach y auf.
2. Lose Vx = y nach x auf.
Sequentielle Dreieckszerlegung einer Tridiagonalmatrix Zur Bestimmung der Matrixeintrage fiir Lund V machen wir den Ansatz
Ausmult iplizieren liefert die Matrix
u,J Durch Gleichsetzen mit A erhalt man dl =
a I,
d2 =
a2 -
l 2UI ,
Allgemein ergeben sich die nachfolgenden Rekursionsformeln.
Algorithmus 2.7 (Faktorisierung einer Tridiagonalmatrix) d, = a I, UI = bl · For i
= 2, . . . , n
Ui
- 1
= bi •
For i = 2, . . . , n l i = e; j di - l ,
di =
a i - li Ui - I '
2.3. Das ADI-Verfahren
41
Bemerkung 2.3
Diese Faktorisierung existiert, falls der GauE'sche Algorithmus ohne Pivotisierung durchfiihrbar ist. Eine notwendige und hinreichende Bedingung dafiir ist , dass die fiihrenden Hauptuntermatrizen nichtsinguliir sind. Bei der nachfolgenden Parallelisierun g trit t im Gegensatz zum sequentiellen Fall Fill-In auf.
Parallelisierung der Auflosung von Tridiagonalsystemen Gegeben sei wieder das lineare Gleichungssystem Tx = b mit einer Tridiagon almatrix T . Das Auflosen soli auf einem Parallelrechner mit k Prozessoren erfolgen. T sei eine (n, n)-Matrix mit n/ k E N, so dass jedem Prozessor genau n/ k aufeinanderfolgende Gleichung en des Syst ems Tx = b zugeordn et werd en d.h. wir fassen A als eine (k x k)-Bl ockmatri x auf und ordnen jedem Pr ozessor eine Blockzeile zu (Abbildung 2.18).
xx x xx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xx Abb, 2.18: Besetzungsstruktur einer Tridi agonalm atri x mit n = 16 und Aufteilung fiir k = 4 Prozessoren.
Der erste Schritt der parallelen Elimination wird in Abbildung 2.19 skizziert : Zuerst werden die Elemente ®, die sich in der unt eren Nebendiagonale inn erhalb der einzelnen Bla cken befinden, wie nachfolgend beschrieben, beseitigt. Dabei werden neue, von Null verschiedene Element e ~ erzeugt . Zunachst wird eine Vielfaches der erste n von der zweiten Zeile des jeweiligen Prozessors (Abbildung 2.19a)) so subt ra hiert , dass jeweils eine Null an den St ellen (2, 1), (6, 5), (10,9) und (14, 13) entsteht . Dadurch entstehen Nicht nulleint riige 0 an den Stellen (6,4) , (10, 8), und (14, 12). Diese Schritte sind unabh iingig voneinander und konnen daher parallel ausgeflihrt werden. Auf die gleiche Weise beseit igt man aile Element e unterhalb der Diagonal en in den Diagonalblocken (Abbildung 2.19b)). Die dabei ents tehenden Nullen sind mit ® gekennzeichnet , wahrend 0 die dab ei enstehenden Nichtnull eintriige, sogenannte "Fill-in-St ellen", sind.
Kapitel 2. Parallele Verfahren fiir partielle Differentialgleichungen
42
1 2 3 4 S 6 7 8 9 10 I I 12 13 14 IS 16
a)
I 2 3 4
S 6 7 8
xx
~
J
~XX
XXX XXX
XX
~ ~XX XXX
: I-.....:<.>'f*+:-:-+---I--~ ~
J
~ ~~XX XXX
10
II 12 13 14 IS 16
JJ J J]
:
XXX
9
10 II 12 13 14 IS 16
b)
]
9 10 II
J
XX X XX
12 I-------''"---=l---''-'':.<.-'I'c:..,....,..----l 13 14 IS 161.-_ --JL-_ ---L_ _=-_.=.~
J ~ ~XX XXX XX
Abb, 2.19: Parallele Elimination in der unteren Nebendiagonale innerhalb der Diagonalb16cke. a) erster Schritt, gleichzeitig auf allen Prozessoren b) aile njk - 1 = 3 parallelen Schritte
a)
I 2 3 4 S 6 7 8 9 10 II 12 13 14 IS 16
I XX 2 X 3 XX 4 XX S XXX 6
X
7 8 9 10 II 12 13 14 IS 16
X X
6 7 8 9 10 II 12 13 14 IS 16
b)
I 2
3 4 1-_~~...---.-J
X
XX XX XXX X
X X
_ _
-+_ _
--1
S 6 7
8 1--~1--~f7r-r--d----1
9 10 II
X
XX XX XXX X
X
X
XX
X
X
1 2 1-_-j1-_~_ _~~..-~ 13 14 IS 16 ' - - _ - - JL-_ --l_ _~_ _~
Abb, 2.20: Parallele Elimination in der oberen Nebendiagonale innerhalb der Diagonalbl6cke . a) erster Schritt, gleichzeitig auf allen Prozessoren b) alle nj k - 2 = 2 parallelen Schritte
Nun werden innerhalb der Diagonalb16cke jeweils die ersten njk - 2 Elemente der oberen Nebendiagonale eliminiert. Dazu wird zunachst zur drittletzten Zeile des jeweiligen Prozessors ein Vielfaches der vorletzten Zeile addiert, so dass jeweils Nullen an den Stellen (2,3), (6,7), (10,11) und (14,15) entstehen (Abbildung 2.20a)). Diese Schritte sind wieder parallel durchfiihrbar, da sie unabhangig voneinander sind . Ebenso beseitigt man die weiteren in Abbildung 2.20b) mit ® markierten Eintrage, Die dabei entstehenden Fill-in-Stellen sind wieder mit 0 markiert.
2.3. Das ADI-Verfahren
43
Bemerkung 2.4 lm vierten Diagonalblo ck (Prozessor Pk ) konn te die Elimination der Elemente in der oberen Nebendiagonale auch ohne Entstehung von Fill-in durchgefilhrt werden, indem bei der Elimination mit der letzt en statt der vorletzten Zeile begonnen wird. Dies wiitde bei der Programmierun g j edoch einen m odifizierten Programmcode filr Prozessor Pk erfordern. Die nach diesen Eliminati onsschrit ten vorliegende Mat rix ha t die Besetzungsstrukt ur aus Ab bildung 2.21. In einem letzten Eliminationsschrit t werden die mit ® ma rkierten Eint rage eliminiert, indem ein geeignetes Vielfaches der ersten Zeile des Prozessors Pj , j = 2, . . . , k zur letzten Zeile des Prozessors Pj - 1 addiert wird. In diesem Schritt ist Datenaust ausch zwischen benachba rten Prozessoren notig und es entste ht in jedem Prozess eine weit ere Fill-in-Stelle. I 2 3 4 5 6 7
I
2 3 4
5 6 7
g 9 10 II
12 13 14 15 16
x
s
9 10 I I 12 13 14 15 16
X X X XX X~ 6< XX X X X X X XX 6< X X~ XX X X X X X XX X X~ 6< XX X X X X X XX X X
n J J
Abb. 2.21: Parallele Elimina ti on im oberen Blockdreieck auserhalb der Diagonalblocke. Wir betracht en nun nur die Gleichungen fiir X 4, Xs, X12 und X16' Dab ei erhalte n wir ein linear es Gleichungssystem mit einer Koeffizient enm atrix wie in Abbildung 2.22 dargeste llt, also ein Trid iagonalsystem mit k = 4 Unbe kannte n. 4 8 12 16
4XX s XXX 12 XXX 16 XX
Abb, 2.22 : Besetzun gsstruktur der Koeffizientenm atri x fiir die Gleichun gen fiir X 4, Xs, X 12 und X 16' Nach Aufl6sen dieses Tridiagonalsyste ms - bei kleiner Pr ozessoran zahl k kann dies sequenti ell auf jedem Prozessor erfolgen - konnen die restli chen Unbekannten auf den einzelnen Prozessoren unabhiingig voneinander berechnet werden.
Kapitel 2. Parallele Verfahren fiir partielle Differentialgleichungen
44
Bemerkung 2.5 Zur Programmierung des Verfahrens werden Formeln zur Berechnung der Matrixeintriige benoiigt. Diese erhiilt man, indem man die oben beschriebenen Eliminationen mit Hilfe von Matrix-Faktorisierungen darstellt. Dieses Vorgehen wird in einer Aufgabe in Abschnitt 8.4 erliiutert.
Des Verfahren liisst sich auch Iiit Matrizen mit Dimension n , wobei n kein Vielfaches der Prozessoranzahl kist, durchfiihren. In diesem Fall sollte die Matrix so partitioniert werden, dass sich die Dimensionen der Blockzeilen hOchstens um 1 unterscheiden.
2.3.5
Parallele Durchfiihrung des ADI-Verfahrens
Wir wollen uns nun mit der Parallelisierung des ADI-Verfahrens
!J,.tA) u.,j n+~ -_ E nD n (1 - 2 U.,j_1 + u. ,j !J,.t n-l-I (I - -A)u i • 2'
_ -
n+ ~
EUi _ 1,•
+ Fun',i+I'
n+~ + Du in+~ ,• + Fu i +1,.,
J. = 1, 2, ... , NJ
(2.11)
i = 1,2, ... ,NI
(2.12)
beschaftigen. In jedem Teilschritt sind N J bzw. N I lineare Gleichungssysteme unabhangig voneinander zu losen. Fiir eine Parallelisierung mit P < min(NI, N J) Prozessoren betrachten wir das nachfolgende naive Vorgehen. Wir verteilen die Tridiagonalsysteme (2.11) auf die
U:,;2, 1
Prozessoren und losen nach j = 1,2, . .. , N J, auf. Anschlielsend verteilen wir die Systeme (2.12) auf die Prozessoren und losen nach Ui;-l, i = 1,2, . .. , N I , auf. Falls ein Parallelrechner mit gemeinsamem Speicher vorliegt , fiihrt dies auf keine prinzipiellen Schwierigkeiten, da keine Datenbewegungen notwendig sind. Die Eintriige uij seien im Vektor Uij gespeichert . In (2.11) werden die Elemente zeilenweise benotigt, in (2.12) jedoch spaltenweise. Je nachdem , wie Felder abgespeichert werden, kann der Zugriff daher schnell oder langsam erfolgen; z. B. ist in Fortran der spaltenweise Zugriff schneller. Bei Rechnern mit verteiltem Speicher wird dem Prozessor Pk das k-te Tridiagonalgleichungssystem von (2.11), d. h.
n+! _ E nD n (1 - -!:1tA) U. 'k U.k-I 2 , + U.k,
+ Fun.k+1 ,
(2.13)
zugeordnet. Die Werte aus dem vorangehenden Zeitschritt fiir j = k - 1, k, k + 1, d.h. u~,k-I' U~,k ' U~,k+l mogen im lokalen Speicher von Pk zur Verfiigung stehen. Dann kann (2.13) nach u:,t~ aufgelost werden. Danach enthiilt Pk den Vektor u:,t~ in seinem Speicher. Im zweiten Halbschritt lose Prozessor Pk das k-te Tridiagonalsyst em von (2.12), d.h.
(I
!:1tA) n+1 - 2 Uk ,.
_
-
E n+~
Uk_I,.
n+~ Fun+~ + D Uk,. + k+I ,.·
(2.14)
45
2.3. Das ADl-Verfahren
j n *,k+l
k+l
U
k
n u *,k
k-l
n u *,k_l
Abb. 2.23 : Benoti gte Daten zur Berechnung von .
DIe Werte von den sein.
n+~
n+~
n+~
U k_ l ,*' u k ,* , u k+l,*
u:;~ .
miissen dazu im lokalen Speicher von Pk vorhann+l. U 2 k+I ,*
k-J
k
k+J
Abb. 2.24: Benotigte Dat en zur Berechnung von u~~ l . 1
1
Aufgrund des ersten Halbschrittes wurden die benotigten Werte von u~~i,*' U~~ , 2 und 1
u~:i,* in verschiedenen Prozessoren gespeichert . Daher ist vor der Durchfiihrung des zweite n Halbschrittes ein globaler Datenaustausch notwendig. Nach der Auflosung von (2.14) enthalt Pk den Vektor U~~l im lokalen Speicher. Jetzt ist wieder globaler Datenaustausch notwendig, urn aIle Prozessoren fiir den erste n Halbschritt des nachsten Zeitschrittes vorzubereiten. Insgesamt sind somit in jedem Zeitschritt zwei globale Dat enaustausche notwendig . Dies ist zeitaufwendig. Daher wird nun eine Strategie zur Vermeidung des Dat enaustausches vorgestellt .
Vermeidung des globalen Datenaustausches Wir betr acht en beispielsweise eine Berechnung auf vier Pr ozessoren und vertei len die Daten und Gleichungen nach dem Schema in Abbildung 2.25a).
46
Kapitel 2. Parallele Verfahren fiir partielle Differentialgleichungen
y
a)
b)
Y
t
t
j
j
-
4
1
2
3
3
4
1
2
2
3
4
1
1
2
3
4
x
-
x
Abb. 2.25: Zuordnung der Gitterpunkte bei einem Quadrat und vier Prozessoren : a) fiir NI = NJ = 13, b) Spezi alfall N I = N J = 4. Die Zahl inn erhalb eines Bereichs gibt die Zuordnung zu den Prozessoren an , d. h. aile Daten , die zur Aufstellun g einer Differenzengleichung an den Punkten innerhalb eines Bereichs benotigt werd en, ste hen im lokalen Speicher zur Verfiigung, auserdem die Werte aus dem vora ngehenden Zeitschri t t fiir aile Punkt e inn erh alb des Bereichs un d fiir die Geist erpunkt e. Fiir den Spezialfall von N I = N J = 4 mit 4 Prozessoren (Abbildung 2.25b)) sowie 4 Tr idiagonalsystemen (Abb ildung 2.26) soil das Vorgehen veranschaulicht werd en . PI P2 P3 p.
XX XXX XX X XX System 1
P2 P3 P4 PI
XX XX X X XX XX
P3 p.
PI P2
XX XXX XXX XX
System 2
System 3
p.
PI P2 P3
XX X XX XXX XX System 4
Abb, 2.26: Datenverteilun g fiir vier Prozessoren und 4 Syst eme mit N I NJ=4.
=
Die nachfolgenden Schritte 1 bis 4 konnen jeweils parallel durchgefiihrt werden. 1. Schritt
Versende a ll und al2 aus System 1 von PI Versende all und a l 2 aus System 2 von P 2 Versende a ll und a l2 aus Syste m 3 von P 3 Versende a ll und a l2 aus System 4 von P 4 In P 2 wird a 21 von System 1 eliminiert. In P 3 wird a21 von System 2 eliminiert .
an an an an
P 2. P 3. P 4. P l'
47
2.3. Das ADI-Verfahren
In In
P4 Pl
wird wird
a2l a 2l
von System 3 eliminiert. von System 4 eliminiert .
2. Schritt Versende a 22 und a23 aus System 1 von P 2 Versende a 22 und a 23 aus System 2 von P 3 Versende a 22 und a 23 aus System 3 von P 4 Versende a22 und a2 3 aus System 4 von P l In P 3 wird a 32 von System 1 eliminiert. In P 4 wird a 32 von System 2 eliminiert . In Pi wird a 32 von System 3 eliminiert . In P 2 wird a32 von System 4 eliminiert. 3. Schritt Versende a 33 und a34 aus System 1 von P 3 Versende a3 3 und a3 4 aus System 2 von P 4 Versend e a 33 und a 34 aus System 3 von P, Versende a3 3 und a 34 aus System 4 von P 2 In P 4 wird a 43 von System 1 eliminiert . In P, wird a 43 von System 2 eliminiert . In P 2 wird a4 3 von System 3 eliminiert . In P 3 wird a 43 von System 4 eliminiert .
an an an an
an an an an
P 3. P 4. Pl . P 2.
P 4. Pl . P 2. P 3.
Nach diesen Schritten erhalt man Bidiagonalsysteme (Abbildung 2.27). PI P2 P3 P4
G G G G XX XX X
System 1
P2 P3 P4 PI
XX XX X
System 2
P3 P4 PI P2
P4
XX XX X
System 3
XX XX X
PI P2 P3
System 4
Abb, 2.27: Bidiagonalsysteme nach paralleler Elim ination. Zum par allelen Auflosen wird wie folgt vorgegangen : 1. Schritt P 4 lost nach X4 von System 1 auf. P, lost nach X 4 von System 2 auf. P2 lost nach X4 von System 3 auf. P3 lost nach X4 von System 4 auf. X4 aus System 1 wird von P 4 an P 3 versendet .
48
Kapitel 2. Parallele Verfahren fiir partielle Differentialgleichungen
X4 X4 X4
aus System 2 wird von PI an P4 versendet . aus Syst em 3 wird von P2 an PI versendet . aus Syst em 4 wird von P3 an P2 versendet.
Analog erfolgt das Auflosen nach
X3 , X2
und
XI
im 2. bis 4. Schritt .
Im allgemeinen Fall sind N J Tridiagonalsyst eme mit jeweils N I Unbekannten zu losen. Fur N I = N J = n und k Pr ozessoren sei n durch k teilbar . Wir bilden nun Gruppen von Tridiagonalsyst emen, wobei jede Gruppe n/ k Systeme ent hiilt, und verfahren wie oben .
Kapite13 Graph-Partitionierung Wir betrachten ein lineares Gleichungssystem
Ax=b, wobei A eine dunn besetzte Koeffizientenmatrix allgemeiner Beset zungsstruktur ist. Zum Losen sollen P Prozessoren mit lokalem Speicher eingesetzt werden. Vor der Implementierung eines geeigneten parallelen Losungsverfahrens stellt sich die Frage, wie die Dat en auf die einzelnen Pr ozessoren zu verteilen sind, damit bei der Dur chfiihrung des Algorithmus m6glichst wenig Datenb ewegungen zwischen den Pr ozessoren notwendig sind. Ein iihnliches Problem tritt auch auf, wenn man aus einer Diskretisierung mit finit en Differenzen oder finiten Element en ein Netz vorliegen hat. Zur weiteren parallelen Berechnun g soli dieses Netz nun so auf die einzelnen Prozessoren verte ilt werden, dass moglichst wenige Verbindungen zwischen den entstehenden Teilnet zen auftreten. Beide Problemst ellungen lassen sich abst rakt mit Hilfe von einfachen Begriffen aus der Graph enth eorie beschreiben. Die Darstellung in diesem Kapit el folgt weitgehend [9] .
3.1
Hilfsmittel und Definitionen
Dieser Abschnit t besteht zum Grol?teil aus Definitionen und Siitzen, die zur Herleitung des Spektralbisektionsverfahrens ben6ti gt werden.
Definition 3.1 Eine Menge Q = (V, £), bestehend a us der Knotenmenge V = {VI ,"" V n } , wobei Vi die Ecken oder Knoten (vertices) sind, und der Kantenmenge £ = { ei j = (i, j)1 Es gibt einen direkten Weg zwischen Vi und Vj }, wobei ei j die Kant en (edges) sind, heif.S t Grap h. G. Alefeld et al., Parallele Numerische Verfahren © Springer-Verlag Berlin Heidelberg 2002
50
Kapitel3. Graph-Partitionierung
Man kann jeder Matrix A = (aij) E IRn x n einen Graphen Q(A) zuordnen, indem man n Punkte als Knotenmenge V = {Vl' '' 'Vn } und E = {eij = (i,j)!aij =j:. O} als Kant enmenge wiihlt. Dann symbolisiert der Graph der Matrix A deren Besetzungsstruktur. Bei unsymmetrischen Matrizen sind die Kanten als geordnete Paare von Knoten aufzufassen, man spricht von gerichteten Graphen. Bei symmetrischen Matrizen hingegen geniigt es, lediglich die Besetzungsstruktur des unt eren Dreiecks in einem sogenannten ungerichteten Graphen abzuspei chern; hier sind die Kant en ungeordnet e Paare VOn Knoten.
Beispiel 3.1 Wir betrachten die symmetrische Matrix
Der gerichtete Graph von A hat die Kant enmenge
E = {(I , 1), (3, 1), (4, 1), (2, 2), (3, 2), (1,3), (2, 3), (3,3), (1, 4), (4, 4)}, wiihrend
E = {(I , 1), (3, 1), (4, 1), (2, 2), (3,2), (3, 3), (4,4)} die Kantenmenge des ungerichteten Graphs ist. Manchmal liisst man bei ungerichteten Graphen Schlingen - das sind Kant en vom Typ (Vi,Vi) - weg. Fur die Matrix A ist Q(A)
Je nach Anwendung sind gerichtete oder ungerichtete Graphen zur Modellierung zweckmiiEig. Det Ubetgeug zwischen beiden ist einfach: Aus jedem ungerichteten Graphen liisst sich ein gerichteter erzeugen, indem zu jeder Kant e (Vi,Vj ), die keine Schlinge ist, die Kan te (Vj,Vi) hinzugefugt wird. Umgekehrt kann man jedem gerichteten Graphen einen ungerichteten Graphen zuordnen, indem man Richtungen ignoriert, wodurch jedoch Information verlorengehen kann; falls sowohl (Vi,Vj ) als auch (Vj ,Vi) in der Kantenmenge enthalten ist , wird beim ungerichteten Graphen eines dieser Paare ignoriert. Wir betrachten hier nur ungerichtete Graphen.
Abspeichern von Graphen und diinn besetzten Matrizen Die Matrix im obigen Beispiel ist symmetris ch. Hier steckt bereits die gesamte Information im unteren Dreiecksanteil. Sind nur wenige Eintriige einer symmetrischen
3.1. Hilfsmittel und Definitionen
51
Matrix ungleich null, so geniigt es, nur diese besetzten Stell en des unteren Dreiecksanteils und deren "Adresse" im Graphen abzuspeichern. Wir speichern beispielsweise das untere Dreieck in einem eindimensionalen Feld spaltenweise ab o Diese Speicherstruktur wird in der englischsprachigen Literatur mit compressed column storage (CCS) bezeichnet. Dabei ent halt das Feld A die numerischen Eintrage in den Spalten des unteren Dreiecksanteils, das Adressfeld JA die Zeilennummern der besetzten Stellen, die in A fortlaufend spaltenweise abgespeichert sind. Die Dimension des Feldes JA ist die Anzahl der Nichtnulleintrage im unteren Dreieck der (N, N)-Matrix A. Weiterhin wird ein Feld IA der Dimension N benotigt, dessen j-te Komponente, j = 1, .. . ,N, auf den Beginn der j-ten Spalte in den eindimensionalen Feldern JA und A zeigt. Die Felder JA und IA dienen also zur Abspeicherung des Graphen.
Beispiel 3.1 (Fortsetzung) Fur den Graphen der Matrix A aus Beispiel 3.1 erhiilt man JA = LA =
1 3
4 2 3 3 4
t
t
t t
1
4
5 6
Definition 3.2 Zwei Knoten Vi, Vj E V, i =1= j heiEen benachbart, falls ungerichteten Graphen eij mit e ji identifizieren.
eij
E £ gilt, wobei wir bei
Der Grad deg( Vi) eines Knotens Vi ist die Anzahl seiner Nachbarn . Es sei nun V C V. Durch V wird ebenfalls ein Graph definiert. Dies ist der sogenannte in duzierte Graph (V, £). Er ent halt alle Kanten £ C e, die zwei Knoten in V direkt verbinden.
Beispiel zur Graph-Partitionierung Es sei 9 = (V, £) ein vorgegebener Graph. Die Knotenmenge V soli in zwei moglichst gleich grose Mengen Vi und V2 geteilt werden , so dass die Anzahl der Kanten, die die beiden Teilgraphen verbindet, minimal wird . IVI bezeichnet die Anzahl der Knoten von V. Abbildung 3.1 zeigt ein Beispiel fiir einen aus einer Triangulierung resultierenden Graphen mit zwei verschiedenen Partitionierungen. Bei der erst en Partitionierung werden sechs Kanten geschnitten, wahrend die zweite Partitionierun g nur drei verbind ende Kanten zwischen den Teilgraphen liefert . Bevor wir auf Methoden zur effizienten Graph-Partitionierung eingehen konnen, sind einige weitere Definition en notig.
52
Kapit el 3. Graph-Partitioni erung
Abb. 3.1: Netz mit zugehOrendem Graph und zwei verschiedenen GraphPartitionierungen.
Definition 3.3 Eine Matrix P heiEt Permutationsmatrix, wenn in jeder Zeile und Spalte genau eine Eins und sonst nur Nullen stehen . Beispiel Mit
gilt fiir eine beliebige Matrix H E jRnx n
d. h. Multiplikation mit P von rechts bewirkt ein Vertauschen der Spalten von H . Weiterhin ist
d. h. Multiplikation mit p T von links bewirkt dann ein Vertauschen der Zeilen von HP.
Definition 3.4 Eine Matrix H heiEt reduzibel (zerlegbar) genau dann, wenn eine Permutationsmatrix P existiert, so dass
(3.1) mit quadratischen Diagonalblocken Hll , H22 gilt .
H heifbt irreduzibel (unzerlegbar), falls H nicbt reduzibel ist , d.h. es existiert keine Permutationsmatrix, die die Gestalt (3.1) liefert.
3.2. Spektralbisektion
53
Beispiel Die Matrix
ist reduzibel. Beim Losen eines linearen Gleichungssystems Hx = b werden durch Permutation die Unbekannten und Gleichungen neu nummeriert:
HX=b<=}~6 = 0, = :H =:y
y=
(~:),
h=
(~J .
= :h
In Blockschreibweise erhalt man fiir ein lineares Gleichungssystem mit reduzibler Koeffizientenmatrix gemaf& (3.1)
Hll Y I + H12Y2 = hI H22Y2 = h 2. Das lineare Gleichungssystem zerfii.llt hier in zwei kleinere Systeme. Analog zerfallt auch das Eigenwertproblem fiir eine reduzible Matrix.
Bemerkung 3.1 Die Diagonalelemente haben keinen EinfIuss auf die Eigenschaft "reduzibel" oder "irreduzibel". Definition 3.5 Es sei A eine n x n-Matrix mit den Eigenwerten )'1 (A), ... , An(A). Die reelle Zahl p(A) = max{IAl(A)I, .. . , IAn(A)I} heiEt Spektralradius von A . Satz 3.1 (Satz von Perron-Frobenius [37]) Sei A eine Matrix (aij) mit aij ~ O. Ist A zudem irreduzibel, so besitzt sie einen positiven Eigenwert A mit A = p(A) (Spektralradius) und es gibt einen zugehOrigen Eigenvektor x = (Xi), d.h. Ax = p(A)x, mit Xi > 0, i = 1, . .. , n. Weiterhin ist A = p(A) einfacher Eigenwert von A.
3.2
Spektralbisektion
Zu einem vorgegebenen (ungerichteten) Graphen 9 = (V, £) mit wir die sogenannte Laplace-Matrix L(9) = (lij) durch
lij =
{
=f. j =f. j
und eij E
e
- I,
i
0, deg(vi),
i und eij ~ £ i=j
IVI =
n definieren
54
Kapitel 3. Graph-Partitionierung
und die Adjazenzmatrix A(g)
aij =
= (aij) durch
{-I, 0,
i f:j und eij sonst
E[.
Man beachte, dass nach Definition 3.2 mit iij = -1 auch iji = -1 gilt . Die beiden Matrizen L(Q) und A(g) unterscheiden sich hochstens in den Diagonalelementen. Ordnet man einer Matrix A ihren Graphen 9(A) zu (siehe oben) , und bildet die zugehorige Laplace-Matrix, so bezeichen wir diese mit L(A) .
Beispiel 3.1 (Fortsetzung) Die Laplace-Matrix zu A aus Beispiel 3.1 ist
L(A) =
-1 -1)
2
0
0
1 -1
-1 -1 ( -1 0
0
2
0
o
1
.
Der Algorithmus fiir die Spektraibisektion zur Aufteilung eines Graphen operiert mit den Matrizen L(g) und A(Q) . Wir untersuchen deshalb zunachst die speziellen Eigenschaften der Laplace-Matrix L(g) .
Satz 3.2 1. L(g) ist reell und symmetrisch, also sind die Eigenwerte reell und kimnen daher
in der Form A1 ~ A2 ~ A3 ~ . .. ~ An angeordnet werden. Die zugehOrenden Eigenvektoren konnen reell und paarweise orthonormal gewiihlt werden.
2. Es gilt Ai ~ 0, i = 1,2, .. . , n, d.h . L(g) ist symmetrisch posiiiv semidefinit. 3. Fur e = (1,1, ... , l)T gilt L(g) e = 0 (= 0 e), d.h. der kleinste Eigenwert ist A1 = 0 und e ist zugehOrender Eigenvektor. 4. Die Vielfachheit von A1 = 0 als Eigenwert ist gleich der Anzahl der disjunkten zusammenhiingenden Komponenten (Teilgraphen) von 9, d.h . A1 = 0 ist genau dann einfach, wenn 9 zusammenhiingend ist.
Beweis 1. ist klar. 2. wird mit dem Satz von Gerschgorin bewiesen: AIle Gerschgorin-Kreise haben die Gestalt
Ideg(vi) - zl
~
deg(vi)'
Wegen 0 ~ deg( Vi) ~ n - 1 ist
o ~ Ai ~ 2(n -
1) < 2n.
55
3.2. Spektralbisektion
3. Es gilt n
L(Q) e = (Llij(Q)) j=l
und
Also ist L(Q) e = 0 = 0 . e.
4. Wir zeigen zunachst: gist zusammenhiingend :::} A2
"# O.
Es gilt: gist genau dann zusammenhiingend, wenn L(Q) irreduzibel ist. Die Matrix 1(Q) = 2nI - L(Q) ist irreduzibel, falls L(Q) irreduzibel ist . Aul&erdem ist 1(Q) nichtnegativ, d .h. 1(Q) enthiilt keine negativen Elemente. Weiterhin seien \ , i = 1,2, ... , n, die Eigenwerte von L(Q). Dann gilt ~n-i+l = 2n - \ , i = 1,2, . . . , n. Insbesondere ist ~n = 2n - Ai = 2n > 0 der grol&te Eigenwert. Anwendung des Satzes von Perron-Frobenius auf1(Q) liefert: ~n = p(1(g)) ist einfacher Eigenwert von 1(Q), d.h. Ai = 0 ist einfacher Eigenwert von L(Q) . Nun sei g nicht zusammenhangend, g bestehe aus k zusammenhangenden disjunkten Komponent en. Wir nummerieren zuerst die Ecken von gl, dann die von g2 usw. . Dann besitzt L(Q) Blockdiagonalgestalt mit L(Qd, L(g2) , . . . , L(gk) als Diagonalblocke. Somit gilt fiir das Spektrum von LW) k
<7(LW)) =
U<7(LWi)) . i= l
J ede Menge <7(LWi)) enthiilt genau eine Null, nach dem ersten Teil des Beweises. Es gilt also: Die erst en k Eigenwerte sind gleich null, d .h. A = 0 ist k-facher Eigenwert. Somit folgt insbesondere: A2 = 0 fiir k > 1.
o Definition 3.6 g sei zusammenhiingend. (Also ist Ai = 0 einfacher Eigenwert.) Ein Eigenvektor zum Eigenwert A2 > 0 heiJSt Fiedler-Vektor von LW) (nach Miroslav Fiedler, Tschechischer Math ematiker).
56
Kapitel 3. Graph-Partitionierung
Satz 3.3 Es sei 9 = (£, V ) ein zusammenhiingender Graph, u = (Ui) sei ein Fiedler-Vektor von L(9 ) und r 2: 0 sei eiae vorgegebene reelle Zahl. Weiterhin sei
V1 = {Vi E VIUi 2: r} . Dann ist der dazugehOrende Graph zusammenhii.ngend. Die entsprechende Aussage gilt Iiir r ::; 0 und V2 = {Vi E VIUi ::; -r }.
Algorithmus 3.1 (Spektralbisektion) Gegeben sei ein zusam menhii.ngender Graph g.
1) Nummeriere die Knoten von 9 und bilde die Laplace-Matrix L(9). 2) Berechne den Eigenwert ).2(9) > 0 und den Fiedler-Vektor u = (Ui) ' 3) Bilde den Median m u der Kompon enten von u . Definition 3.7 Es sei u E jRn . Die Komponenten von u seien in aufsteigender R eihenfolge sortiert : Ul ::; U2 ::; . •. ::; Un ' Dann heiEt m
u
:=
{ ~~ ' 2(U~
+ U~+l)'
n ungerade n gerade
der Median der Komponenten von u. Wir wahlen
V1 = {Vi E VI Ui < m u } , V2 = {Vi E Vl ui > m u } . Falls Ui = m u fiir einige i gilt, so werden die entsprechenden Knot en so auf V1 und V2 verteilt, dass die Partitionierun gen moglichst gleich grof sind. Es sei nun 9 = (V, £) ein gegebener zusammenhangender (ungerichteter) Graph mit IVI = n (gerade). Das Ziel ist die Aufteilung in zwei gleich grose Mengen V1 und V2 , so dass moglichst wenige Kanten zwischen V1 und V2 existieren. Wir definieren x = (Xi), Xi =
Vi E V1 1 ' { -1 , Vi E V2
Wir betrachte n die Funk tion
f (x ) =
~
L (i,j)Et:
(Xi - Xj?'
57
3.2. Spektralbisektion
f(x) ist die Anzahl der (ungerichteten) Kanten, die von Knoten aus VI zu Knoten aus V2 fiihren, denn es gilt Xi - Xj = 0 genau dann, wenn Vi und Vj in der gleichen Teilmenge von V liegen. Weiterhin ist (Xi - xy = 4 falls Vi und Vj in verschiedenen Teilmengen liegen, denn dann haben Xi und Xj verschiedene Vorzeichen. Es gilt
L
(Xi - Xj? =
(i,j)Et:
L
L
(xr - 2XiXj + XJ) =
(i,j)Et:
(xr
+ XJ)
(i,j)Et:
- 2
L
XiXj'
(i,j)Et:
A = (aij) bezeichne die Adjazenzmatrix von Q. Dann ist
xTAx
=L
L XiaijXj = -2 L
XiXj'
(i,j)Et:
viEV vjEV
Fiir die Laplace-Matrix von Q gilt L(Q) = D + A, also D = L(Q) - A. Damit ist n
xTDx =
L deg(vi) = 21£1 = L i=1
(i,j)Et:
2=
L
(xr
+ xJ) .
(i,j)Et:
Damit ergibt sich
Eine Graphpartitionierung mit dem Ziel, dass moglichst wenige Kanten zwischen den Teilgraphen existieren , erfordert somit die Minimierung von f(x) = txTL(Q)X unter den Nebenbedingungen • Fiirx= (Xi) gilt Xi E {-l,+l}. n
• x T e = 0, d.h. LXi = 0, also die beiden Mengen VI und V2 sind gleich grof, i=1
Diese vorliegende Aufgabe ist ein ganzzahliges Optimierungsproblem und schwierig zu losen. Daher versucht man die Nebenbedingungen abzuschwachen, indem das Ersatzproblem • Minimiere f(z) = tzTL(Q)z unter den Nebenbedingungen zTz = n und zTe =
o behandelt wird.
Kapitel 3. Graph-Partitionierung
58
Die Losung der ersten Aufgabe erfiillt zT z = n und ZT e = O. Wir fassen daher die Losung der zweiten Aufgabe , die sich leichter angeben lasst, als Naherung fiir die Losung der ersten Aufgabe auf. Die Losung z gibt eine untere Schranke fiir das Minimum des vorangehenden Problems an. Zur Losung des Ersatzproblems gehen wir folgendermasen vor: g sei der Graph. Wir bilden die Laplace-Matrix, berechnen AZ sowie einen zugeh6renden Eigenvektor U (Fiedl er-Vektor). Der Median der Komponenten von U sein m u • Wir set zen
und verteilen die Knoten mit Ui = m u geeignet auf VI und Vz· Wir wahlen die Eigenvektoren U1, . . . , u., von L(Q) orthonormal. Es gilt
U1
=
In e .
n
Jeder Vektor z E lRn lasst sich darstellen als z =
2: 0Wi. Wegen
zT e
= 0 gilt
i=l n
(l:: aiuif ..;n
U1
= ..;n a1uf U1 = ..;n a1 = 0
i=l Damit folgt
Wir betrachten nun ausgehend von L(Q)Ui = AiUi n
4f(z)
n
n
n
= zTL(Q)z = (2: a i ui)T(L(Q) 2: aiui) = (2: aiui)T(L:aiAiud i=l n
i=l n
i=l
i=l
n
n
i=l
i=Z
= 2: 2: aiajAiUf Uj = 2: a; Ai = 2: a; Ai. i=l j=l n
n
2: a;Ai ~ Az2:a; i=Z i=Z Fur z =
= nAz.
,;n Uz erhalt man n
4f(z) = 2:a;Ai = nAz, i=Z denn fiir z i
=12.
= ,;n Uz
n
ist in der Darstellung z
= 2: o.u, i=l
der Koeffizient ai
= 0 fiir o
59
3.3. Weitere Partitionierungsh euristiken
3.3
Weitere Partitionierungsheuristiken
Das oben prasentierte Spektralbisektionsverfahren arbeitet mit einer globalen Strategie , da der Eigenvektor aus "Informat ionen" des gesamten Graphen generiert wird . Die beiden nachsten in diesem Abschnitt prasentierten Heuristiken arbeiten mit 10kalen Strategien, also nur mit Informationen aus der unmittelbaren "Nachbarschaft".
Greedy-Graph-Heuristik "Greedy" bedeutet gierig , aufsaugend; mit diesem Attribut wird die Vorgehensweise des Algorithmus charakterisiert: Wahle einen Startknoten, markiere und fiige ihn der ersten Partition zu. Wiederhole bis die gewiinschte Anzahl an Partitionen erreicht ist Wiederhole bis die akt uelle Partition gros genug ist Wahle unter allen zur aktuellen Partition benachbarten Knoten einen aus, der unmarkiert ist und die wenigsten unmarkierten Nachbarn hat. Markiere den Knot en und fiige ihn der aktuellen Partition zu . Falls noch unmarkierte Knoten iibrig sind, wahle einen mit den wenigsten unmarkierten Nachbarn als St artknoten fiir die nachste Partition.
Bemerkung 3.2 Des Ergebnis der Greedy-Graph-Heuristik nach obigem Algorithmus ist nicht eindeutig, da bei gleicher Anzahl unmarkierter benachbarter Knoten mehrere Moglichkeiten zur Auswahl des zu markierenden Knotens bestehen. Beispiel 3.2 Der Graph aus Abbildung 3.2 a) soll in drei Partition en zu je vier Knoten aufgeteilt werden. Knoten 1 sei der Startknoten. Die nachfolgende Tabelle gibt eine Moglichkeit zur Partitionierung. a)
_
~t--_
5
b)
_~t--
_ 5
Abb, 3.2: Zwei der moglichen Partitionierungen mit der Greedy-GraphHeuristik jeweils mit 1 als Startknoten
Kapite13. Graph-Partitionierung
60
unmarkierte Nachbarn der Partition aktuelle ausgewiihlter Knoten Partition (deren Anzahl unmarkierter Nachbarn) (aus den Moglichkeiten) 2(2),3(5) 2 (2) 1 3(4),5(2) 5 (5) 1,2 3(4), 4(1), 6(3) 4 (4) 1,2,5 Brste Partition Vi = {I, 2, 4, 5} ist groE genug. Unmarkierte benachbarte Knoten (deren Anzahl unmarkierter Nachbarn): 3(3), 6(3) --7 Knoten 3 und 6 sind mogliche Startknoten Iiit die Partition V2 . 7(2), 8(1), 12(4) 8(8) 3 7(2), 12(3) 7 (7) 3,8 12(2), 6(2) 6 (6,12) 3,7,8 Zweite Partition V2 = {3,6, 7,8} ist groE genug. --7 Dritte Partition: V3 = {9, 10, 11, I2}. Mit Vi = {I, 2,4, 5}, V2 = {3, 6, 7, 8} und V3 = {9, 10, 11, I2} werden neun Kanten geschnitten (Abbildung 3.2 b)). Entscheidet man sich in der obigen Tabelle beim letzten Knoten zur Partition V2 fiir Knoten 12, so ergibt sich Vi = {I, 2, 4, 5}, V2 = {3, 7, 8, I2} und V3 = {6, 9,1O,11}, wobei insgesamt nur sieben Kanten geschnitten werden (Abbildung 3.2 c)) . Weitere Moglichkeiten zur Partitionierung resultieren aus der Wahl von Knoten 6 als Startknoten fiir Partition V2 • Im Vergleich zum Spektralbisektionsverfahren ist die Greedy-Graph-Heuristik wesentlich einfacher zu implementieren, da jeweils nur die Anzahl der verbleibenden Nachbarn abzufragen ist . Bei der Partitionierung entstehen meist zusammenhangende Teilgraphen. Die Partitionierung erfolgt sehr schnell, unabhangig davon, in wieviele Teilgebiete aufgeteilt wird.
Kernighan-Lin-Algorithmus Der Kernigan-Lin-Algorithmus (siehe [20]) ist keine eigenstandige Partitionierungsheurististik, er wird dazu verwendet eine mit einem anderen Verfahren, z. B. Spektralbisektion, berechnete Partitionierung zu verbessern, indem Nachbarknoten nach gewissen Kriterien ausgetauscht werden.
Kapitel4 Die Methode der konjugierten Gradienten 1m vorliegenden Kapitel werden wir die Methode der konjugierten Gradi ent en zur Losung des linearen Gleichungssystems
Ax =b
mit
A symmet risch positiv definit
(4.1)
vorstellen. Das Verfahren der konjugiert en Gradi enten wurde 1952 von Hestenes und Stiefel [161 eingefiihrt und ist mit tlerweile ein Standardverfahren bei der Auflosung linearer Gleichungssysteme mit dunn besetzter symmetrisch positiv definiter Koeffizient enmatrix. Wir diskutieren zunachst die Prinzipien, auf denen diese Methode beruht und erhalten schlieslich in Abschnitt 4.1 die klassische sequentielle Methode. Fur die praktische Durchfiihrung ist eine Konvergenzbeschleunigung notwendig, die man durch sogenannte Vorkondit ionierung erreicht . Die Parallelisierung der Methode und einige Moglichkeiten zur Vorkonditionierung werden in Abschnit t 4.3 behandelt. Die Literatur zur Met hode der konjugierten Gradienten ist umfangreich. Der behandelt e Stoff ist weitgehend auch in [26] und [391 zu finden.
4.1 4.1.1
Sequentielle Durchfiihrung Minimierung eines Funktionals
Wir betrachten die quadr atische Form
(4.2)
G. Alefeld et al., Parallele Numerische Verfahren © Springer-Verlag Berlin Heidelberg 2002
62
Kapitel 4. Die Methode der konjugierten Gradient en
Satz 4.1 Die Losung x* = A -lb des linearen Gleichungssystems (4.1) ist der Minimalpunkt des Funktionals Q(x).
Beweis Wegen b = Ax* gilt fiir beliebiges x E JRn 1
1
2
2
bTX = (x*fAx = -(x*fAx + _(X*)T Ax und es ist
111 Q(x) = _xTAx - _(x*)TAx - -(x*fAx 222 1 1 1 1 1 = _xTAx - _(X*)T Ax - _(x*)TAx + _(x*)TAx* - -(x*fAx* 2 2 2 2 2 =
~(x - x*)TAx - ~(x*)T A(x 2
2
1
1
2
2
x*) -
~(x*)T Ax* 2
= -(x - x*)TA(x - x*) - _(X*)T Ax*.
Wegen
(x - X*)T A(x - x*) ~ 0, (x - x*)TA(x - x*) = 0 ¢:} x = x* und wegen (x*)TAx* fest, gilt : Q(x) ist genau dann minimal, x = x* gilt.
0
Die einfachste Idee zur praktischen Bestimmung des Minimums von Q geht aus von einer Naherung x k und einem Vektor pk, der eine sogenannte Suchrichtung bezeichnet. Wir set zen
und wollen CXk so bestimmen, dass
Bei festem x k und pk ist Q(xk + CXpk) nur noch eine Funktion von o . Es sei
4.1. Sequentielle Durchfiihrung
63
Fur p =f. 0 ist pTAp > O. Somit ist q(a) eine nach oben geoffnete Parabel, sie besitzt also eine eindeutige Minimalstelle, die wir durch Differenzieren von q(a) berechnen:
1m k-ten Minimierungsschritt ergibt sich somit fiir die feste Suchrichtung pk die Minimalstelle x k + akpk mit
(pkf(Axk - b) (pk)T Ap"
4.1.2
k
= 0,1,2, ... .
(4.3)
Zusammenhang zum Gauf&-Seidel-Verfahren
o
o Es sei e i =
1
der i-te Einheitsvektor. Weiterhin sei A =
(aij)
E
Rnxn.
o
o Fur die Suchrichtungen wahlen wir p" = e", pl = e\ . .. , pn-l = en, p" = e l . ... Dann gilt n
(e']' T (Ax - b) =
' " LaijXj - bi .
(4.4)
j=l
Somit erhalt man mit pk = ek+l , k = 0,1,2, .. . , n - 1, fiir die k-te Iterierte x k = X k- l + ak_lek . Mit (4.3) und (4.4) ergibt sich n Xk
=
X k -l -
-
1 ('" L akjX k
akk
j -
b) k ek .
j=l
1m k-ten Schritt wird bei Berechnung von x k also nur die k-te Komponente modifiziert. Insgesamt ergibt sich fiir k = 1,2 , . . . ,n
Mit Startvektor XO ist nach n Schritten mit den Suchrichtungen pi-l = e' , i = 1,2, . . . , n, also die erste Iterierte des Gauk-Seidel-Verfahrens bestimmt. Insgesamt
64
Kapitel 4. Die Methode der konjugierten Gradienten
n . m Schritte dieses Verfahrens entsprechen sowohl vom Ergebnis als auch vom Rechenaufwand m Schritten des Gauk-Seidel-Verfahrens. In den folgenden Abschnitten werden wir weitere M6glichkeiten zur Wahl der Suchrichtungen vorstellen .
4.1.3
Die Methode des steilsten Abstiegs
Durch Q(x) = ~XT Ax - b TX = 0 wird eine Quadrik beschrieben. Fiir n = 2 haben wir einen Kegelschnitt; es gilt x T Ax > 0, x =1= 0, genau dann, wenn eine Ellipse vorliegt . Filr Q(x) = ~XT Ax - bTx gilt grad Q(x) = x TA - bT. Wir wahlen nun als Suchrichtung pk = (grad Q(xk))T. Diese Wahl scheint geeignet, da Q(x) in negativer Gradientenrichtung am starksten abram. Damit ist
(Ax k - b)T(Axk - b) Q:k = - (Ax" _ b)TA(Axk - b) und das resultierende Verfahren ist die "Methode des steilsten Abstiegs". Falls das Verhaltnis >'2/>'1 der Halbachsen sehr grof ist, konvergiert das Verfahren sehr langsam. Das Analoge gilt auch im Fall n > 2.
4.1.4
Die Methode der konjugierten Verfahren)
Gradienten
(CG-
Nun wird im k-ten Schritt die neue Suchrichtung pk =1= 0 so gewahlt, dal& sie beziiglich der alten Suchrichtungen p", ... ,pk-1 A-konjugiert ist, d. h. die k + 1 Vektoren p", p1, .. . , pk haben die Eigenschaft (pi)TAp' = 0 fiir i =1= i.
Bemerkung 4.1 A-konjugierte Vektoren sind bzgl. des Skalarprodukts (x, y) = x TAy orthogonal. Wir nehmen zunachst an, dass n solche A-konjugierte Vektoren vorliegen. Dann heil&t das Verfahren mit Xk+1 = x k + Q:kpk, wobei Q:k so gewahlt wird, dass Q(x k) minimal wird, "Methode der konjugierten Gradienten" oder kurz "CG-Verfahren" (englisch: conjugate gradient method) . Wir werden spater zeigen, wie man die ben6tigten A-konjugierten Vektoren im Laufe des Verfahrens einfach erzeugen kann.
65
4.1. Sequentielle Durchfiihrung
Satz 4.2 (iiber konjugierte Richtungen) Ist A symmetrisch positi v definit und sind p O, pl , .. . , pn-l vom Nullvek tor vetscbiedene bzgl. A konjugierte Richtungen, so liefert das Verfahren
in hOchstens n Schrit ten die exakte Losutig x " von Ax = b .
Beweis Mit x k+l = x k + frkpk gilt (AXk+l - b f pi = (Ax" + frkAp k - b f pi
+ frk( A p k)T pi = (Ax" - bfpi + frk(p k)TAp ' . = (Ax" - bf pi
. Wegen (pkfApJ = 0 fiir k
':I j
und frk = -
(pkf (Ax k - b ) (pk) T Apk gilt
. k =j (Ax" - b fpJ , k > j
(AXk+l _ bfpi = { O'
Somit gilt fiir j = 0, 1,2 , ... ,n - 1
(Ax" - b f pi = (A x n- l - b)Tpi = (A xi+l - b)Tpi = 0, (A x" _ b )T(pO, p ", . . . , p n- l ) = 0. Wir zeigen nun , dass p O, p l , . .. , p n- l linear unabh angig sind . Wir bet rachte n dazu die Linearkombination copo + Cl pl Ci E JR., i = 0, . .. , n - 1. Wegen der A-Konju gierth eit der Vektoren p i, pi
+ ... + Cn_l pn- l
':I 0, gilt fiir i
= O mit
= 0, . . . , n - 1
Also sind die Vektoren p", p' , . . . , pn-l linear unabhangig, Mit r" := Ax" - b , ist somit (Ax" - b f (pO , p i, . . . , pn-l) = 0 gena u dann, wenn r" = Axn - b = 0 gilt, da die Matri x (pO, p l , . .. , pn-l) regular ist. Also ist x" die exakte Losung. 0 Wir wollen uns nun mit dem Auffinden von konju gierten Richt ungen beschaftigen. Es seien )\1, A2 , ' .. , An die Eigenwerte der symmet risch positiv definiten Mat rix A mit dazu zugehorenden paarweise ort hogona len Eigenvektoren x", x 2 , •• . , x", d. h. Ax i = AiXi und (x ifA x i = Ai(xif x i = fiir i ':I j .
°
66
Kapitel 4. Die Methode der konjugierten Gradienten
Somit bilden die Eigenvektoren von A ein solches System von A-konjugierten Vektoren. Die Berechnung eines einzigen Eigenvektors von A ist jedoch aufwendiger als das Losen eines linearen Gleichungssystems mit A und kommt daher zur Bestimmung A-konjugierter Vektoren nicht in Betracht. Wir zeigen nun, wie sich konjugierte Richtungen wahrend der Berechnung im Rahmen der Methode der konjugierten Gradienten berechnen lassen: Algorithmus 4.1 (CG) Wiihle Niiherungsvektor XO Setze pO = r O= Axo - b Berechne ('0)2 = (rO)TrO
= 0,1, ... zk = Ap" ak = _,f/((pk)TZk) Xk+1 = x k + akpk rk+ 1 = r k + akzk (Wir zeigen unten, dass sich das Residuum so darstellen liisst.) ",2 - (rk+I)T rk+l., If'"Ik+1 < estop Ik+1 -
For k
1. 2. 3. 4. 5.
6. 13k = '~+lh~ 7. pk+ 1 = rk+1 + 13kpk Wir zeigen nun, dass sich das Residuum gemail. 4. darstellen lasst : Es gilt rk+1 r k + ak zk Axk - b + akApk A(xk + akpk) - b Axk+l - b .
=
=
=
=
Somit stellt der Ausdruck aus Schritt 4 das Residuum bzgl. Xk+1 dar. Fiir theoretische Uberlegungen betrachten wir zunachst den Ersatzalgorithmus 4.2 und zeigen die Aquivalenz zum Algorithmus 4.1. Algorithmus 4.2 (CG') Setze pO = r O= Axo - b For k = 0,1 , ... 2.' Setze ak = _ ((rk)Tpk)j ((pkf Apk) = _((rk)Trk)j((pk)T Apk) (Das bleibt noch zu zeigen.) 3.' Xk+1 = x k + akpk 4.' rk+1 = r k + akApk 6.' 13k = _((pk)T Ark+l)j((pk)T Ap") = ((rk+lfrk+l)j((rk)Trk) (Das bleibt noch zu zeigen.) 7.' pk+1 = rk+1 + 13kpk
Satz 4.3
Es sei A symmetrisch positiv definit und x" die Losung von Ax = b . Dann sind die mit Algorithmus 4.2 berechneten Vektoren pk A-konjugiert, d.h.
(pk)TApi
= 0,
0
:s j
< k,
k = 1,2 , . .. , n - 1
(4.5)
4.1. Sequentielle Durehfiihrung
und es ist. pk =J 0 Die Residuen rk
¢:>
= Axk -
67
x k =J
x* .
b geniigen den Gleichungen
0:; j < k,
k = 1,2, ... ,n - 1.
(4.6)
Beweis Wegen 2.' und 6.' mit 4.' und 7.' folgen fiir j = 0, 1, ... (pif ri+1 = (pif(r i
+ aiApi) = (pi)T ri + ai(pi)T Ap' = 0
(4.7)
wegen der Definition von ai und
(pi)T A pi+ 1 = (pif A(ri+l
+ (3ipi) = (pi)T Ari+l + {3i(pi)TAp' = 0
(4.8)
wegen der Definition von {3i' Wir beweisen nun (4.5) und (4.6) mit vollstandiger Induktion nach k. Fur ein k mit 1 :; k
< n - 1 gelte (Induktionsannahme) (pk)T Ap' = 0, (rk)Tri = 0,
0:; j < k, 0:; j < k.
(4.9)
(4.10)
Insbesondere sind (4.9) und (4.10) fiir k = 1 richtig, denn wegen p" = rO = Ax'' - b gilt mit (4.8) und (4.7) fiir j = 0
(pOf ApI = (pl)T ApO = 0, (pOf r 1 = (r1)Tpo = (r1)TrO = O. Somit ist der Induktionsanfang richtig. Es bleibt noch die Durchfiihrung des Induktionsschrittes (k ---+ k + 1): • Fur j < k gilt mit 4.'
(ri)T rk+l = (ri)T (r k + akApk) = (rifr k + ak(ri)T Ap" = (ri)T r k + ak(pk)TAri . Mit ri = pi - {3i_ 1pi- 1 aufgrund von 7.' erhalt man
(rifrk+l = (ri)T r k + ak(pk)TA(pi - (3i_ 1pi- 1)
= (rif r k + ak(pk)T Ap! Nach der Induktionsannahme gelten und Somit ist auch (rk+ 1)T ri = 0 fiir j
< k erfiillt.
ak{3i-l(pkf Api-I .
68
Kapitel 4. Die Methode der konjugierten Gradienten
• Fur j = k folgt mit 7.' und 4.'
(rk)Trk+l
= (pk _ (3k_Ipk-1 f
r k+l
= (pkfr k+l _ (3k-1 (pk-I)T r k+l
= - (3k_l(pk- 1f (r k + CtkA pk).
Also ist (rk)Trk+1 = - (3k_l (pk- 1fr k - Ctk(3k_l(pk-1f Ap" = 0 aufgrund von (4.7) und wegen (pk-Ifr k = 0 und (p k- If Ap" = 0 aufgrund von (4.8) . Damit ist (4.6) bewiesen. Noch zu zeigen ist (4.5) im Fall, dass k durch k + 1 ersetzt wird. • Fur j
< k gilt wegen 7.'
Nach Induk tion svoraussetzung ist (pif Ap" = O. Aufgru nd von 4' ist r H I = r j + QjA pi, also Ap' = - ;. (r j - r H 1). (Dabei ist Ctj =1= 0 fiir r j =1= 0.) J Zusammen ergibt sich
Nun ist aber (ri+ l f r k+l = 0, da wir (4.10) bereits durch vollst iindige Induktio n bewiesen haben. Also gilt (pj)T Apk+l = 0 fiir j < k . • Fur j = k gilt
da aufgru nd von (4.8) (pi)TApi+l
= 0, j = 0, 1, ... , bereits
bewiesen wurde.
Somit gilt neben (4.6) auch (4.5) mit einem urn 1 erhohten Wert von k. Wir zeigen nun pk
=1=
0 gena u dann , wenn Axk
-
b
=1=
0 gilt .
Sei p m = 0 fiir ein m < n . Dann ist (pmfp m = (r m + (3m_I pm-1 f (r m + (3m_I pm-I) = (rm)Tr m + (3m- 1(rm)Tpm-l + (3m- 1(pm-I)Tr m + (3?n- 1(pm-l f p m- I. Wegen .B;'_1(p m- 1f p m- 1 2: 0 und (rmfpm-l = 0 nach (4.7) gilt
(pm)Tp m 2: (rmfr m 2: O. Also gilt (pmfpm = 0 nur dann , wenn r '" = 0 also Ax'" = b gilt .
4.2. Das vorkonditionierte CG-Verfahren
Sei umgekehrt pO, p', ... , p'"" konjugierte Richtungen.
f.
69
O. Dann ist x" = X· aufgrund des Satzes tiber 0
Mit Hilfe dieses Satzes lasst sich nun die Gi.iltigkeit der Berechnungsformeln
(rkfr k (¥k = - (pk)TAp"
und
aus Algorithmus 4.2 zeigen. Wir beweisen zunachst die Formel fiir (¥k . Es sei (¥k
f. O. Wegen 7.' ist (rk)Tpk = (rkf(r k + .8k_ 1pk-l) = (rk)T r k + .8k-l(rkfpk-l .
Wegen (4.7) ist (r kf pk-l = O. Also gilt (rkfpk = (rk)Trk.
(4.11)
Damit ergibt sich (rkfrk (pk)TApk'
Falls (¥k = 0 ist, gilt r k = 0 und x k = x' . Nun zeigen wir die Formeln fiir 13k' Mit 4'. und (4.6) gilt
Analog ergibt sich mit 4.', (4.7) und (4.11)
1 1 1
(pk)TAp" = _(pkf(r k+1 _ r k) = --(pkfr k = __ (rk)Tr k, (¥k (¥k (¥k woraus schlielslich
13k = -
(pk)TA rk+l (pk)TApk
(rk+l f rk+1
=
(rk)Trk
folgt.
4.2
Das vorkonditionierte CG-Verfahren
Ziel ist das Losen des linearen Gleichungssystems Ax = b mit A E lRnxn symmetrisch positiv definit . A hab e die Eigenwerte 0 < Al ~ A2 ~ .. . ~ An .
Kapitel 4. Die Methode der konjugierten Gradienten
70
Die Methode der konjugierten Gradienten liefere die Iterierten {xk}k'=o' m ~ n. Es gilt (ohne Beweis):
Dabei ist
IIAI12 = K,
IIAxl12
sup -11-11-' Ilx112,eO x 2
bezeichnet die Konditionszahl der symmetrisch positiv definiten Matrix A: K,
Wegen An
2 A1 gilt
K,
= cond A =
2 1 und
IIAI12 · IIA-lib = ~:.
~-1 a:= ~ + 1
< 1.
Bemerkung 4.2 1. Je enger die Eigenwerte von A beieinanderliegen, umso naher liegt umso kleiner wird a.
K,
bei 1 und
Wenn umgekehrt die Eigenwerte von A weit auseinanderliegen, wird gegen 1 und es gilt a --+ 1 filr K, --+ 00 .
K,
grof5
Eine schnelle Reduktion des Fehlers, d.h . a k nahe bei null filr kleines k, ist also nur zu erwarten, wenn die Eigenwerte von A nahe beieinanderliegen. 2. Filr das CG-Verfahren gelten weitere Aussagen (ohne Beweis):
(a) Ilx' - xklb < IIx' - xk- 1Ib· (b) Besitzt A nur m < n verschiedene Eigenwerte, so liefert das CGVerfahren in bocbsteas m Schritten x' = A -lb. Da eine grose Konditionszahl von A langsame Konvergenz des CG-Verfahrens bewirkt, versucht man durch sogenannte Vorkonditionierung das CG-Verfahren zu beschleunigen. Das bedeutet: Anstelle des ursprlinglichen Systems Ax = b betrachtet man das aus einer Kongruenztransforrnation resultierende System mit
A=
8A8T , X = 8-T x,
b=
Sb,
wobei 8 eine nichtsingulare Matrix ist und 8-T die Kurzschreibweise fiir (8- 1)T ist . Fiir 8 gelten weiterhin folgende Vorgaben: 1. Urn eine Reduktion der Iterationszahl zu erreichen, muss 8 so gewahlt werden, dass cond A < cond A gilt .
4.2. Das vorkonditionierte CG-Verfahren
71
2. Urn auch einen zeitlichen Gewinn zu erreichen, muss S einfach und schnell zu berechnen sein, bzw. Operationen mit S und ST miissen einfach und ohne grosen Zeitaufwand durchfiihrbar sein. Urn 1. zu erfullen, bietet sich die folgende (theoretische) Losung an: Wahle S = A -! . Die Existenz von S ist gesichert, da A! fiir symmetrisch positiv definite Matrizen A existiert. Die Berechnung von A! kann in Analogie zur Heron 'schen Formel
1 Xn +1 = -2 (X n
a
+ -X ), n
lim
n--+oo
Xn
=
va
zur Berechnung der Quadratwurzel einer positiven reellen Zahl erfolgen: lim X, = A!.
n--+oo
Mit S
= A-!
gilt A
= A-!A(A -!)T = I
und ~(A)
= 1.
Dieses Vorgehen liefert zwar die ideale Konditionszahl, ist aber wegen des grofen Aufwands in der Praxis nicht durchfiihrbar, Ebenso wiirde die Cholesky-Zerlegung A = LLT mit S = L -1 fiir A die Einheitsmatrix liefern, so dass sich die ideale Konditionszahl ~(A) = 1 ergibt . Damit hatte man die Losung nach einem Iterationsschritt, aber das resultierende CG-Verfahren entspricht dem Cholesky-Verfahren zur Losung von Ax = b. Das war jedoch nicht das Ziel. In der Praxis versucht man daher, S so zu wahlen, dass A nur eine sehr grobe Approximation fiir die Einhei tsmatrix list. Auf einige Moglichkeiten zur Bestimmung von S wird spater eingegangen . Zunachst wird der Algorithmus fiir das vorkonditionierte CG-Verfahren hergeleitet. Die Anwendung des CG-Verfahrens auf Ax = b ergibt
Dieser Algorithmus erfordert Matrix-Vektor-Multiplikationen mit nung von b.
A und die Berech-
72
Kapitel 4. Die Methode der konjugierten Gradienten
Nachfolgend wird der Algorithmus so umformuliert , dass nicht explizit berechnet werden miissen. Es gilt
A = SAS T
Ax=b, d.h . x=A-lb mit X=S-T X ,
Mit
xk
und
b=
Sb
x = A -lb.
= S-Tx k gilt
fk = Ax k - b = SASTS - Tx k - Sb = S(Ax k - b) = Srk.
Mit pi :=
sTpi gilt (pi)TApi = (pi)TSAS Tpi = (pi)TAp' = 0
d. h. die pk sind beziiglich
fiir i
t= i.
A konjungierte Richtungen. AuiSerdem ist (pkl Apk = (pk)T Ap",
Weit erhin gilt
Wir definieren f k := STSr k. Damit ist •
(fkf r k
Ctk = (pkf Apk und aus
folgt wegen STpk = pk
Weiterhin ist
Das ergibt wegen ;;} = Apk r k+l = r k + (hS-lSASTS- Tpk = r k + C¥kA pk.
•
13k =
(fk+l)Tr k+l (f kf r k
und mit p k+l = STpk+l ergibt sich aus STpk+l = STfk+l nungsvorschrift fiir die Suchrichtung: pk+l = f k+l
+ ~k pk .
+ ~k STp k die Berech-
4.2. Das vorkonditionierte CG-Verfahren
73
Wenn S bekannt ist, kann man fk einfach berechnen. Wir werden jedoch sehen, dass die Konstruktion einer geeignetenMatrix S auf eine symmetrisch positiv definite Matrix M , die A im gewissen Sinn approximieren soll, fiihrt. Dann gilt M = (STSt I . Gew6hnlich ist M aber nicht M- I bekannt. Wir formulieren nun den Algorithmus fiir das vorkonditionierte CG-Verfahren (preconditioned cg-algorithm) mit Hilfe der oben bestimmten Berechnungsvorschriften fiir x k, r k, pk, zk, (Xk und 13k unter Verwendung von M = (STSt I . Algorithmus 4.4 (PCG-Algorithmus) Start : Wahle Startvektor x'' , z. B. XO= o. (XO= STi O) Setze r O= Axo - b (r'' = S-IfO) Lose (STS)-IfO= r", d.h . fa = M - IrO (fa = STfO) Setz e pO = fa Setze 'Y5 = (fOfr O
Iteration: For k = 0,1 , .. . 1. Zk = Ap" _ _ 'Yf 2.
(Xk -
3.
xk+I = x k + (Xkpk rk+I = r k + (Xkz k
4. 5.
6.
(p k)Tzk
Lose Mfk+ I = rk+I nach fk+I auf Berechne 'Yf+I = (fk+If rk+I Falls Abbruchkriterium erfilllt: stop 2
7. 13k = 'Yk+ 1 2 'Yk
8.
pk+I = fk+I + 13kp k .
Bemerkung 4.3 1. Mit M = I erhalt man aus dem PCG-Algorithmus wie erwartet den ursprilnglichen Algorithmus Iiir das unvorkonditionierte CG-Verfahren .
2. Des Hauptproblem im PCG-Algorithmus ist das Auflosen von Mfk+I = r k+I. 3. M solI eine gute Approximation an A sein, denn A = SAST solI nahe der Einheitsmatrix sein. Optimal ware A = I , dann ware A = S-I AS - T = S-IS- T = (STS)-I = M .
4. Im realistischen Fall A =I list noch zu klaren, in welchem Sinn A durch M approximiert werden solI. Es gilt STAS-T = STSASTS- T = M-I A .
74
Kapitel 4. Die Methode der konjugierten Gradienten
Also gilt fiir it symmetrisch positiv definit
Amax(M- 1A) condA = Amin(M-1A) ' •
Demit schnelle Konvergenz erreicht wird, soll cond it klein werden. 1m Folgenden werden wir uns mit der Bestimmung einer geeigneten Matrix M zur Vorkonditionierung von A beschaftigen.
Satz 4.4 Es sei A eine nidusinguliae Matrix und A = P - Q eine Zerlegung mit P nichtsingular. Es sei H := P-1Q. Fiir den Spektralradius von H gelte p(H) < 1. Dann ist 00
A-1 =
(2: Hk)p-1 . k=O
Beweis Wegen p(H)
00
< 1 ist
L
00
Hk konvergent, und es gilt
k=O
L
Hk = (I - Ht 1 . Somit ist
k=O
00
2: Hkp- 1 = (I - Ht1p-1 = (I - p-1Qt 1p - 1 k=O
o Wir setzen nun fiir ein festes mEN
M := P(I + H
+ ...+ H m-1 t
1
•
Dann gilt
M- 1 = (I + H + ...+ Hm-1)p-1. S := 1 + H + .. .+ H m-1 ist nichtsinguliir, wenn p(H) < 1 gilt, da SH = H + H 2 + ... + H'" und S(I - H) = 1 - H'" gilt . Daraus folgt: S = (I - Hm)(1 - Ht 1 ist nichtsingular. Zum Losen von Mr = r d. h. zur Berechnung von f = M-1r Hm-1)p-1r ergibt sich folgendes praktisches Vorgehen:
=
(I + H
Wir betrachten fiir i
= 0,1 , . . . , m -
1 und r''
= O.
Dann ist r'" = f , denn • fiir i
= 0 gilt
Pr 1 = Qro + r . Wegen r O = 0 folgt r!
= p-1r.
+ ... +
4.2. Das vorkonditionierte CG-Verfahren
• fiir i
75
= 1 gilt Pr2 = Qr 1 + r = Qp-1r + r :::} r 2 = p-lQp-1r + p-1r = (P-IQ =
+ l)p-1r
(H + l)p-1r.
Die Behauptung r'" = f ergibt sich dann durch vollstandig e Induktion. Wiihlt man fiir die symmetrisch positiv definite Matrix A die Zerlegung A = D - B mit D = diagA, d.h. P = D und fiir Q den Rest von A, also Q = B, so ergibt sich eine Vorkonditionierung die auf dem Jacobi- Verfahren basiert: Mit dem Nullvektor als Startvektor fiir das Jacobi- Verfahren sind zur Berechnung von fk+l = M-1rk+l im k-ten Schritt des vorkonditionierten CG-Verfahrens m Schritte des JacobiVerfahrens durchzufiihren. Mit der Iterationsvorschrift
fiir i = 0,1 , ... , m - 1
mit
ZO
= 0 und k fest
Fiir die Vorkonditionierungsmatrix M gilt hier wegen P = D
(M-1)T = ((I + H + . . . + Hm-1)p-lf = ((I + D-1B + .. . + (D-1B)m-l)D-1)T
= (D- 1 + D-1BD- 1 + (D-1B?D-1 + . . . + (D- 1B)m-1D-1)T. Da D symmetrisch ist und B aufgrund der Symmetrie von A ebenfalls symmetrisch ist , gilt
Verwendet man anstell e des Ja cobi-Verfahrens das Einzelschritt- oder GauJ?-SeidelVerfahren, so erhalt man mit der Zerlegung A = D - L - U , wobei D = diag A und U = L T der obere Dreiecksant eil ist, mit P = D - L, Q = U , H = (D - L)-IU fiir m = 1 die Vorkonditionierungsmatrix
M = (D - L)I- 1 = P. Bier ist M nicht symmetrisch. Daher ist das Einzelschrittverfahren fiir die Vorkonditionierung symmetrischer Matriz en nicht geeignet. Wir betrachten daher das sogenannte SSOR-Verfahren.
4.2.1
Das symmetrische SOR-Verfahren (SSOR-Verfahren)
Zur Losung des linearen Gleichungssystems Ax = b betrachten wir wie beim Einzelschrittverfahren die Zerlegung A = D - L - U mit D = diag A , dem strengen unt eren Dreiecksanteil Lund dem strengen oberen Dreiecksanteil U.
Kapitel 4. Die Methode der konjugierten Gradienten
76
Ausgehend von einem Startvektor
XO
betrachten wir die Verfahrensvorschrift
x k +! = (D - L)-lUxk + (D - L)-lb { Xk+l = (D - UtlLx k+! + (D - U)-lb oder aquivalent dazu
(D - L)x k+! = Uxk + b { (D - U)xk+l = Lxk+! + b Mit der Schreibweise
Dx k +! = Lx k+! + Ux k + b Dxk+l = UXk+l + Lx k+! + b sieht man: Das symmetrische Einzelschrittverfahren kann mit dem gleichen Aufwand je Iterationsschritt wie das Einzelschrittverfahren durchgefiihrt werden. Zur Berechnung von Xk+l aus x k nehmen wir an, dass D-lUX k bereits aus der Berechnung von x k bekannt sei. Dann sind die folgenden Schritte durchzufiihren : 1. Berechne x k +! und speichere D-lLx k+!.
2. Berechne Xk+l und speichere D- l Uxk+l. Elimination von x k +! ergibt
Xk+l = (D - UtlL(D - L)-lUxk + (D - UtlL(D - Ltlb + (D - U)-lb. Mit H := (D - U)-lL(D - L)-lU und b := (D - UtlL(D - L)-lb + (D - U)-lb erhalt man die Darstellung Xk+l = Hx k + b. Mit Hilfe eines Relaxationsparameters w erhalt man das SSOR- Verfahren :
(D - wL)x k+! = {(I - w)D + wU}x k + wb { (D - WU)X k+l = {(1- w)D + wL}xk+! + wb '
k
= 0,1 ,2, . . . , w E R
Wie oben ergibt sich
Xk+l = (D - wUt l {(l - w)D +wL}(D - wLtl{(1 - w)D +wU}x k + mit
Il =
Il,
w(D - wU)-l{[(1 - w)D + wL](D - wL)-l + I} .
Mit w = 1 ergibt sich das symmetrische Einzelschrittverfahren. Wir betrachten nun wieder das allgemeine Problem und diskutieren Konvergenzfragen.
77
4.2. Das vorkonditionierte CG-Verfahren
Satz 4.5 A sei eine symmetrisch positiv definite Matrix . A = P A . P sei symmetrisch und nichtsinguliir. Weiterhin sei H
Q sei eine Zerlegung von = P-lQ.
Dann ist
R = (I + H + ...+ H m symmetrisch und Iiir m
~
1 )p-l
=: M- 1
1 gilt:
1. Fiir m ungerade: R positiv definit {:} P positiv definit. 2. Fiir m gerade: R positiv definit {:} P
+Q
positiv definit .
Zum Beweis von Satz 4.5 wird der nachfolgende Hilfssatz ben6tigt.
Hilfssatz 4.1 ([25]) B und C seien reelle, symmetrische Matrizen. Dann gilt : 1. Falls mindestens eine der beiden Matrizen B oder C positiv definit ist , so besitzt BC nur reelle Eigenwerte. 2. Sind B und C positiv definit, so besitzt BC nur positive Eigenwerte. 3. Besitzt BC nur positive Eigenwerte und ist eine der beiden Matrizen B oder C positiv definit, so auch die andere.
Beweis von Satz 4.5: Mit A = P - Q ist Q symmetrisch.
=P
- A. Wegen der Symmetrie von A und P ist Q
Wegen H = P-1Q gilt
R = (I + H + ...+ H m - 1 )p-l = p-l + p-lQP-l + p-lQP-lQP-l
+ ... + p-lQP-lQ . .. p-l.
Wegen der Symmetrie von P , p - 1 und Q sind aIle obigen Summanden symmetrisch. Also ist R symmetrisch. Da A positiv definit ist und p- 1 und A symm etrisch sind, folgt nach Hilfssatz 4.1 Teil 1., dass p-l A = 1 - P -lQ und somit auch H = P-lQ nur reelle Eigenwerte besitzt. Wir setzen T := 1 + H + ...+ Hm-l und .x sei Eigenwert von H. Dann ist J.t = 1 + .x + ... + .x m -
Eigenwert von T.
1
I-
=
{
m1 -
xm :x
fUr.x # 1 fiir .x = 1
78
Kapitel 4. Die Methode der konjugierten Gradienten
Fur A ~ 0 und A =I 1 ist \-}\'
A
> O. Also ist
Fur < 0 und m ungerade gilt \ positive Eigenwerte.
J.l
> 0 fiir A ~
O.
-_Ai > O. Also besitzt T fiir m ungerade nur
Wir beweisen nun Teil 1. aus Satz 4.5: Da m ungerade ist, hat T nur positive Eigenwerte. Sei zunachst P positiv definit. R ist , wie oben gezeigt , symmetrisch. Da T = RP nm positive Eigenwerte besitzt und P positiv definit ist, folgt mit Teil 3. von Hilfssatz 4.1 dass R positiv definit ist. Ist umgekehrt R positiv definit, so folgt analog, dass P positiv definit ist. Es bleibt noch 2. zu zeigen. Wegen H = P-1Q gilt P + PH = P + P(P-1Q) = P + Q. Damit ergibt sieh, da m gerade ist, R = (I + H + 0. 0+ H m- 1)p-l = P-1(P + PH + PH 2 + .0. + PHm-1)P- 1 = P-1[(P + Q) + (P + Q)H 2 + 000+ (P + Q)H m- 2 jP= P-1(P + Q)(I + H 2 + H 4 +. 0oH m- 2)p - l .
l
Wir set zen nun T = I + H 2 + H 4 + 0. 0+ Hm-2 und A sei Eigenwert von H. Dann ist J.l = 1 + A2 + . 00+ Am - 2 Eigenwert von To Da H = P-1Q, wie oben gezeigt, nur reelle Eigenwerte A besitzt, ist J.l als Summe gerader Potenzen von A positiv. Wirsetzen R := PRP = (P+Q)T, d.h. T = (P+Qt1R. DaR und P symmetrisch sind, ist R symmetrisch. Weiterhin ist R genau dann positiv definit, wenn R positiv definit ist . Nun kann 2. bewiesen werden . Sei zunachst P + Q positiv definit . Aufgrund der Symmetrie von P und Q ist damit auch (P + Qt 1 symmetrisch positiv definit. Da T = (P + Qt1R nur reelle Eigenwerte besitzt, gilt nach dem dritten Teil von Hilfssatz 4.1: R ist positiv definit. Sei umgekehrt R = (P + Q)T positiv definit, d oh. (P + Qt 1 existiert und es ist T = (P + Qt1R. Da R positiv definit ist und T nur positive Eigenwerte besitzt, ist nach dem dritten Teil von Hilfssatz 4.1 (P + Qt 1 und damit auch P + Q positiv definit. 0 Wir betrachten nun das Jacobi-Verfahren, d. h.
A = D - B mit D = diag A.
4.2. Das vorkonditionierte CG-Verfahren
79
In der Terminologie von Satz 4.5 gilt P = D und Q = B = D - A. Aus dem nachfolgenden Satz erhalt man eine Aussage iiber die Konvergenz des Jacobi-Verfahren s.
Satz 4.6 ([24]) A sei eine symmetrisch positiv definite Matrix mit der Zerlegung A = P - Q, wobei P symmetrisch positiv definit sei. Dann ist p(P - 1Q)
< 1 ¢:} P + Q positiv definit .
Nach Satz 4.6 gilt also: Das Jacobi-Verfahren ist fiir eine symmetrisch positiv definite Matrix A = D - B genau dann konvergent , wenn D + B positiv definit ist. Es gibt einfache Beispiele, bei denen fiir A symmetrisch positiv definit D + B nicht positiv definit ist . Aus Satz 4.5 und Satz 4.6 folgt
Satz 4.7 A sei eine symme trisch positiv definite Matrix mit der Zerlegung A = P - Q, P symmetrisch und nichtsinguliir. Weiterhin sei H = P- 1Q. Dann ist R = (I + H + H 2 + .. .+ H m-1)p-1 symmetrisch und positiv definit fur alle m ~ 1, wenn P symmetrisch positiv definit ist und p(H) < 1 gilt . Wir wollen diese Aussage nun auf das SSOR-Verfahren anwenden. A sei symmetrisch positiv definit. Wir betrachten die Zerlegung
A = D - L - U = D - L - LT. Fiir die Iterationsmatrix gilt
H = (D - wLT t 1 ((1 - w)D + wL) (D - wLt1 ((1 - w)D + wLT )
,
w E (0,2),
wobei (D - wL)- l ((1 - w)D + wLT ) die It erationsmatrix des SOR-Verfahrens ist . Nach der Bezeichnungsweise aus Satz 4.5, d .h. A
=P
- Q, H
= P-1Q erhiilt man
P = w(2 1_ w) (D - wL ) D -1 ( D - wLT ), 1 Q = w(2 _ w) ((1 - w)D + wL ) D- 1 ((1 - w) D denn mit
+ wLT ) ,
80
Kapitel 4. Die Methode der konjugierten Gradienten
ist
p - 1Q = (D - wLTt1 D(D - wL)-l((l - w)D + wL)D- 1((1 - w)D + wLT) = (D - wLTt1(1 - wLD- 1t1((1 - w)1 + wLD- 1)((1 - w)D + wLT)
= (D -
wLTt 1((1 - w)1 + wLD-1)(1 - wLD- 1t 1 ((1 - w)D + wLT)
wegen (I + B t 1(al + bB) = (al + bB)( 1 + Bt l, a, b E lR. (Das zeigt man durch Multiplikation der Gleichung mit (I + B ) jeweils von links und von rechts.) Ausklammern von D - 1 aus den beiden inneren Klammern liefert
Weite rhin ist
w(2 - w)(P - Q) = (D - wL)D-1(D - wLT) - ((1 - w)D + wL)D- 1((1 - w)D + wLT) = (D - wL)(1 - wD-1L T) - ((1 - w)D + wL)((l - w)1 + wD-1L T) = D - wL - wLT + w2LD- 1LT - (1 - w)2D - w(l - w)L
- w(l - w)LT - w2LD- 1LT = (1 - (1 - w)2) D - (w
+ w(l - w))L - (w + w(l - w))LT
= w(2 - w)(D - L - LT ) =
w(2 - w)A.
Fiir w E (0,2) sind P und Q symmetrisch positiv definit, denn es ist z. B.
und D ist positiv definit, da A positiv definit ist . Also ist P
+ Q positiv definit . Daraus ergibt sich mit Satz 4.6 und Satz 4.5
Sat z 4.8 Sei A eine symmetrisch positiv definite Matrix und 0 < w < 2. Dann sind die Matrizen R und M , die man aus dem SSOR-Verfahren erbiilt, fur jeden Wert von w positiv definit.
Bemerkung 4.4 Fiir des Jacobi-Verfahren gilt Satz 4.8 i.Allg. nicht.
4.2. Das vorkonditioniert e CG-Verfahren
4.2.2
81
Konstruktion einer Vorkonditionierungsmatrix
Ausgehend von der Zerlegung A = P - Q mit der Iterationsmatrix H = P-1Q und der Matrix M = P (I + H +...Hm-1)-1 bestimmen wir die vorkonditionierte Matrix A aus mit Damit ist
eine Ahnlichkeitstransformation, so dass A und M- 1 A die gleichen Eigenwerte haben. Diese sind positiv, da A symmetrisch positiv definit ist . Also ist
Es gilt
M- 1A = (I + H = (I + H
+ +
+ H m - 1)P- 1(p + H m - 1)(1 - H)
Q)
=1- H'".
A1'A2," " An seien Eigenwerte von H . M- 1 A hat dann die Eigenwerte J.L1 , J.L 2, · · · , J.Ln mit J.Li = 1 - Ai, i = 1,2, . . . , n. A ist symmetrisch positiv definit . Falls P ebenfalls symm etrisch positiv definit ist , besitzt H nach Hilfssatz 4.1 nur reelle Eigenwerte A1 :::: A2 :::: . . . :::: An. Mit diesen Vorauss etzungen gilt dann wegen Satz 4.6
Satz 4.9 Es sei A eine positiv definite Matrix mit der Zerlegung A = P - Q, wobei P symmetrisch positiv definit sei. Die Eigenwerte von H = P-1Q seien A1 , A2, . . . ,An' Wir setzen b = min IAil . Weiterhin sei M = P(I + H + ... + Hm-1 )-1 . l ~,~n
Dann gilt 1- Am
I--=-jIrr Amax(M- 1 A) Amin(M - 1A )
n
1- bm
1 _ A~t m
1- b
~
fur A1 2: 0 oder (A1 < 0 und m ungerade) fur m gerade und A1 < 0, IAnl 2: IA11 Iiir m gerade und A1 < 0, lAd 2: IAnl
82
Kapit el 4. Die Methode der konjugierten Gradienten
Beweis a)
-1
)\1 ;:::
0, m gerade
-1
Al ;::: 0, m ungerade c)
b)
Al < 0, IAnl >
Al < 0, m ungerade
lAd, m ungerade
Al < 0, IAnl;:::
lAd,
o m ungerade
Fiihrt man innerhalb eines CG-Schrittes m Schritte einer Fixpunktiteration zur Vorkonditionierung durch, so ist dieses Vorgehen in der Praxis nur dann gewinnbringend, wenn die Konditionszahl der vorkonclitionierten Matrix A dadurch deutlich kleiner wird . Der nachfolgende Satz macht eine Aussage iiber den Zusammenhang zwischen der Anzahl m der SSOR-Schritte und der Konditionszahl von A. Satz 4.10 A sei eine sym metrisch positiv definit e Matrix. Es gelte < w < 2 und Al ~ A2 ~ ... ~ An seien die Eigenwerte der Matrix H = p-lQ beim SSOR- Verfahren.
°
Dann ist Al ;::: 0, fur die m-Schritt-SSOR-Vorkonditionierung gilt
. 1- Am condA=~ 1-/\n iuid
cond A ist eine streng fallende Funktion von m.
Beweis Wir zeigen zunachst: Die Iterationsmatrix H des SSOR-Verfahrens besitzt nur positive Eigenwerte.
ist symmetrisch und fiir
°< w < 2 positiv definit.
4.2. Das vorkonditionierte CG-Verfahren
Q=
(
1
w2-w
83
){(1-w)D+wL}D-1{(I- w)D+ WL T }
ist ebenfalls symmetrisch und fiir 0
< w < 2, w =f:. 1 positiv definit.
Somit besitzt die Matrix P-1Q fiir 0 Eigenwerte.
< w < 2, w =f:. 1 nach Hilfssatz 4.1 nur positive
F ur w = 1 betrachten wir lim Ai(P-1Q) . Die stetige Abhiingigkeit der Eigenwerte w--+1
von den Matrixelement en garantiert A1 ~ O. Somit ist
1 _ Am
, cond A =
--dn. 1-/\ n
Wegen A1 < Am gilt fiir 1 < k ::; m
Also ist
Daraus folgt A~(1
+ An + ...+ A;:,-1) + (1 + A1+ .. .+ A~-1)(1 + An + ...+ A;:,-1) < A;:'(1 + A1 + ...+ A~-1) + (1 + A1 + ... + A~-1)(1 + An + ...+ A;:,-1) .
und
(1 + A1 + ... + A~)(1
+ An + ...+ A;:,-1) < (1 + An + .. .+ A;:') (1 + A1 + ... + A~-1) .
Damit gilt
1 - Ar+l I - A;:'+ 1
----='--:-7 -
1 - A1 1 + A1 + ... + Ar 1 - An 1 + An + ... + A;:'
-- .
d.h . die strenge Monotonie gilt .
1 - A1 1 + A1 + ... + Ar- 1 1 - Ar = --1 - An 1 + An + .. .+ A;:,-1 1 - A;:' ,
< -- .
0
Bemerkung 4.5 Der Beweis von Satz 4.10 zeigt, dass die strenge Monotoni e immer gilt , wenn Iiir die Eigenwerte der Matrix H
gilt.
84
Kapitel 4, Die Methode der konjugierten Gradienten
Als Anwendungsbeispiel betrachten wir die Matrix A aus der Diskretisierung der Laplace-Gleichung U xx + U yy = f(x, y) mit Dirichlet-Randbedingungen auf einem N x N-Gitter:
mit (N x N)-Matrizen -4 1 1 -4
Ai =
1 i = 1, .. . ,N.
1 1 1 -4
Die Matrix A ist symmetrisch und besitzt nur negative Eigenwerte, d. h. -A ist symmetrisch positiv definit. Mit D
= diag A ist H = D-IB die Iterationsmatrix des Jacobi- Verfahrens.
Fur die Eigenwerte von H gilt (siehe z. B. [371): 1
j~
Ajk=2(cOS N+l
k~
+ cos N+l)'
An = cos N
~
+1 =
j,k=1,2, . .. ,N, N~
- cos N
+1 =
-A1 .
Setzt man m Schritte des Jacobi-Verfahrens zur Vorkonditionierung in einem CGSchritt ein, so gilt fiir die vorkonditionierte Matrix A.:
1- Am
A
condA
=
~,
m ungerade
n
I-om { ~, mgerade. n
Beispielsweise ist ftir N = 44, An = 0.9976, 0 = 0 A
condA =
I + 0.9976m 1 _ 0.9976111 ,
m ungerade
1 { 1 _ 0.9976 m , m gerade.
Hier ist cond A. keine streng monoton fallende Funktion von m. Damit ergibt sich die nachfolgende Tabelle:
4.2. Das vorkonditionierte CG-Verfahren
85
Wie erwartet, ist fiir m gerade die Konditionszahl von
A kleiner.
Das zeigt sich auch , wenn man die Anzahl der erforderlichen CG-Iterationen bis zum Erreichen eines vorgegebenen Abbruchkriteriums in Abhangigkeit von m untersucht: m
CG-Iterationen
4.2.3
Weitere M6glichkeiten zur Vorkonditionierung
A sei eine symmetrisch positiv definite Matrix. Bekannterweise existiert dann die Cholesky-Zerlegung A = LL T mit einer Dreiecksmatrix L. Zum Losen des linearen Gleichungssystems Ax = b wird dann die Faktorisierung A = LL T berechnet, und anschlies end sind die Dreieckssysteme Ly = b und L T x = y aufzulosen. In vielen Anwendungen, wie z. B. der numerischen Behandlung von Differentialgleichungen, treten dunn besetzte Matrizen A auf, d.h. nur sehr wenige Eintrage von A sind ungleich null. Faktorisiert man jedoch eine solche dunn besetzte Matrix, so werden i. Allg. viele Nulleintrage zerstort, d.h. L + L T ist in der Regel wesentlich dichter besetzt als A , hat also deutlich mehr Eintrage ungleich null. Solche Eintrage in L bzw. L T bezeichnet man als .Fill-in-Stellen", Deshalb fiihrt man zur Vorkonditionierung von A die Cholesky-Zerlegung nicht vollstandig durch, indem z. B. alle .Fill-in-Stellen" vernachlassigt werden . Daraus ergibt sich der Algorithmus fiir die "unvollstandige Cholesky-Zerlegung".
Algorithmus 4.5 (Unvollstandige Cholesky-Zerlegung) III =
vau
For i = 2, . . . , n For j = 1, . .. , i - 1 If aij = 0 then lij = 0 j-l
else setze lij = (aij -
E likljk)/lii
k=l
Beispiel 4.1 Wir betrachten die symmetrisch positiv definite und irreduzible Matrix
A=G
H)
Kapitel 4. Die Methode der konjugierten Gradienten
86
Die (vollstandige) Cholesky-Zerlegung liefert 1 L __
- V2
2
0
J3
1 (1
~J3
Mit der unvollstandigen Faktorisierung ergibt sich
L =
~ (~J3 1 0
y2
).
J3
Das Beispiel zeigt: Fiir die unvollstandige Faktorisierung gilt i. Allg. LLT :j:. A . Die oben beschriebene Variante der unvollstandigen Cholesky-Zerlegung unterscheidet sich also von der Cholesky-Zerlegung, wie sie bei der direkten Gleichungsl6sung eingesetzt wird, dadurch, dass fiir aij = 0, i > j auch lij = 0 erzwungen wird. Das bewirkt offensichtlich auch Folgefehler fiir die Berechnung weiterer Eintrage lij fur aij :j:. 0, so dass sich der Eintrag lij ftir aij :j:. 0 bei der unvollstandigen Faktorisierung LAIlg. yom entsprechenden Eintrag der (vollstandigen] Cholesky-Zerlegung unterscheidet. Das hat zur Folge, dass die Existenz der unvcllstandigen Faktorisierung nicht mehr fiir aIle positiv definiten Matrizen garantiert ist. Aussagen iiber die Existenz sind fiir spezielle Matrizenklassen bekannt.
Definition 4.1 • Eine Matrix A = (aij) heiJ5t M-Matrix (Minkowski-Matrix), falls i :j:. j und A -1 2: 0 (elementweise) gilt.
• Eine Matrix A = - = (-) A aij
. -
mIt aij
(aij)
=
aij
< 0 filr
heif.St H-Matrix (Hadamard-Matrix), falls die Matrix
{-Ia . M-Ma txi .t I Iij l, i:j:. ._ j . eme flX IS . aij,
Z-
J
Beispiel 4.2 Die Matrix
A= (i ~ ~2) -2 2
5
ist eine H-Matrix, denn filr
A=
(~1 ~1 =~) -2 -2
5
4.3. Parallelisierung des CG-Verfahrens
87
gilt mit D = diag A
A-I
D- 1B ))- 1 = (I - D - 1B t = (I + D- 1B + (D- 1B ? + ... )D- 1 2 0, = (D - Bt l
= (D(I -
1D - 1
da p(D- 1 )B < 1, D- 1 und alle Potenzen von D- 1B elementweise nichtn egativ sind.
Satz 4.11 ([3D)) A sei eine symmetrisch positiv definite H-Matrix . Dann existiert die unvollstiindige Cholesky-Zerlegung von A . Im Falle der Nichtexist enz kann man sich durch eine Diagonalmodifikati on behelfen: St att fiir A wird die unvollst iindige Fakt orisierung fiir A := A + QI mit einem geeignet en Q > 0 durchgefiihrt und als Vorkondi tionierung eingeset zt. Welche Wahl fiir i- I Q
geeignet ist , hangt vom P roblem ab oSobald
aii -
E llk negativ ist , ist die unvoll-
k=l
st iindige Faktorisierun g abzubrechen, Q zu vergrosern und die Faktorisierung neu zu starten. Da die unvollst andi ge Fakt orisierung im Vergleich zur vollst andigen Fakto risieru ng nur sehr wenig Rechenzeit erfordert, kann selbst bei mehreren Anlaufen mit unterschiedlichen Werte n fiir Q eine effiziente Vorkondit ionierun g resul ti eren.
4.3
Parallelisierung des CG-Verfahrens
Im CG-Algorithmus treten drei verschiedene Typen von Operationen auf: a) Skalarprod ukte, b) Matrix-Vekto r-Multiplikat ionen qk
= Ap",
c) Vektor-Aufdat ierun gen, z. B. X k+ 1 = x k
+ Q k p k.
Diese Operat ionen sind zu parallelisieren, wobei zuniichst eine geeignete Datenvert eilun g fiir Matrizen und Vektoren zu bestimmen ist.
4.3.1
Der parallele Algorithmus
J ede Gleichung im Gleichungssyste m Ax = b resultiert iiblicherweise aus der Diskretisieru ng einer Differenti algleichung an einem Git t erpunkt . Daher ist es nah eliegend, das zugrundeliegende Gitter in Teilgit ter zu zerlegen und die darin enthaltenen Pu nkte jeweils einem Prozessor zuzuordnen. Ob eine Menge von Gleichungen, die einem Prozessor zugeordnet werden, aufeina nderfolgende Num mern haben, hangt davon ab , wie die Gitterknoten auf die einzelnen Prozessoren aufgeteilt werden (siehe Abbildung 4.1), bzw. wie die Gitterknoten nummeriert werden.
88
Kapitel 4. Die Methode der konjugierten Gradienten
a)
b)
y
c)
y
y
g P,
PoPI P2 P3
R Po X
P2
P3
Po
PI
X
X
Abb. 4.1: Mogliche Aufteil ungen eines quadr atischen Gitters
y j
* I I I I
j=1
I I I I I
I I I I I
I I I I I I I I I I I
._._ . . - .- .
. -. ~
' r-' r ' J=O -1-.,.. ._ ._ . .- .- . .- .~
x
Ro
Abb, 4.2 : Aufteilun g in y-Richt ung (vgl. Abbi ldung 4.1 b)) Gegeben seien ein (m x m) -Gitter und P Prozesso ren. Bei fortlaufender Nummerierung der Gitterpunkte in x-Richtung und Aufteilung gemii~ Abbildung 4.2 erhiilt der Prozessor Pi die Gleichungen mit den Nummern m
J· · m + i · -P + k ,
m . k = 0,1, . . . , P - 1, J = 0, 1, . . . , m - 1.
Die Prozessoren Pi erhalten also nicht nur au feinander folgende Gleichungen. Falls jedoch die Punkte zuerst in y-Richt ung nummeriert werden, so erhalt Pi die Gleichungen mit den Num mern . 1 z. ·m · -m P +J+ ,
j=0,1,2, ...
,m .;
- 1.
Ebenso erhalt man mit einer Aufteilung gemiiil, Abbildung 4.1 a) bei Nummerierung in x-Richtung aufei nanderfolgende Gleichungen. Entsprechend der Zuordnung der Gleichungen werden alle Kompo nenten von x k , t", Z k und p k , die mit einer Gleichung verb unden sind, dem entsprechenden Prozessor zugeordnet. Zur Berechnung von qk = Ap" werden Komponenten von p k an Gitterpunkt en beno t igt, die auserhalb des eigenen Teilgebiets liegen konnen, Hier ist Dat enaust ausch n6t ig. Der Umfang des Datenaust ausches hiingt von der Be-
4.3. Parallelisierung des CG-Verfahrens
89
setzungsstruktur der Matrix A ab, also von der verwendeten Diskretisierung der zugrundeliegenden Differentialgleichung und der Nummerierung der Gitterpunkte. Die Vektoraufdatierungen zur Berechnung von xk+l, rk+l , pk+1 konnen parallel und ohne Kommunikationsaufwand erfolgen. Zur Berechnung der Skalarprodukte (pkfqk und (rkfr k wird ein lokaler Anteil auf jedem Prozessor berechnet. Diese lokalen Anteile werden dann mit dem Fan-inAlgorithmus (siehe Kapitel1) aufsummiert. Daraus ergibt sich der Algorithmus 4.6 zur parallelen Durchfuhrung des CG-Verfahrens.
Algorithmus 4.6 (Parallelisierte Methode der konjugierten Gradienten) Wahle x", setze pO = rO = Ax" - b, 1'3 = (rO)TrO. For k = 0,1,2, ... 1. Berechne zk = Ap" parallel. 2. Berechne (pkf Zk mit Fan-in-Algorithmus, 2
setze
Ctk
= -
(p~~'zk und verschicke Ctk an alle Prozessoren.
3. Berechne Xk+1 = x k + Ctkpk parallel 4. Berechne rk+1 = r k + CtkZk parallel 5. Berechne 1'f+1 = (rk+If(rk+l) mit Fan-in If 1'f+1 ~ E then stop 2
6. Berechne 13k = ~ und verschicke 13k an alle Prozessoren. 1'k 7. Berechne pk+1 = rk+1 + 13k p k parallel 8. Tausche Komponenten von pk+1 zwischen Prozessoren aus.
4.3.2
Parallele Vorkonditionierung durch Gebietszerlegung
Die Implementierung des vorkonditionierten CG-Verfahrens auf einem Parallelrechner erfordert in jedem CG-Schritt das parallele Losen eines !inearen Gleichungssystems Mz = r . Erfolgt die Vorkonditionierung mit Hilfe des Jacobi- Verfahrens, so ist die Parallelisierung offensicht!ich. Fiir Vorkonditionierung mit unvollstiindiger Faktorisierung, SOR- und SSOR-Verfahren kann red-black-Nummerierung eingesetzt werden. Nachfolgend stell en wir eine weitere, speziell fiir parallele Berechnungen zugeschnittene Methode dar, die auch eine parallele Vorkonditionierung liefert .
Gebietszerlegungsmethoden (Domain Decomposition Methods) Wir lehnen uns in diesem Abschnitt eng an [25] an und erklaren die Idee dieser Methoden zunachst anhand des gewohnlichen Differenzenverfahrens fiir das einfache
90
Kapitel 4. Die Methode der konjugierten Gradienten
Randwert prob lem
X" = f (t),
a < t< b
x(a) = a, x(b) = (3. Die iibliche Diskretisierun g mit der Schrittweite h = 1/(n + 1) fiihrt auf das lineare Gleichungssystem
Xi+1 - 2Xi + Xi-I = h2 fi,
i = 1, 2, . . . ,n,
mit f i = f (t i ). Die Xi sind Niiherungswerte fiir X(ti). a
b
I
I
..
Abb. 4.3: Zusam menfassen der Git terpunkte zu Teilgebieten.
Die Unte rte ilung des Intervalls [a, b] erfolge gleichabstandig mit dem Abstand h. Es seien
... , ...,
d .h . die P unkte t l , t 2 , . . . , t n werden in p Gruppen (Gebiete) von jeweils q P unkten fort laufend zusammengefasst . Zwischen je 2 Gruppen wird je 1 Punkt ausgelassen. Dazu setzen wir voraus, dass es n = pq + p - 1 P unkte t l , . . . , t« gibt . (Es gibt p Teilgebiete D i , jedes ent halt q P unkte, dazwischen liegen die p - 1 Punkt e t q+ l, t 2q+2 , . ... ) Wir numm erieren nun die Punkte urn, und zwar so, dass zunachst die in den D i , i = 1,2, . . . ,p, ent haltenen P unkte fortlaufend durchnummeriert werden, anschliese nd erfolgt die fortlaufende Nummerierun g der zwischen den D, liegenden Punkte. Das Prinzip ist in dem nachfolgenden Bild fiir q = 2 und p = 3 erklart , a
b I
I (to)
t2
t}
'r
I
t3
t4
'e
ts
t6
"'--y--'
"'--y--'
"'--y--'
Dl
D2
D2
Abb. 4.4: Umnum merieren der Gitterpunkte.
(t9)
..
4.3. Parallelisierung des CG-Verfahrens
91
Unter Verwendung dieser Nummerierung erhalt man das folgende Gleichungssystem (ohne die rechten Seit en) fiir die Xi, wenn man die diskretisierte Differentialgleichung entsprechend dieser Nummerierung der Punkte aufschreibt: - 2 XI
+ X2
Xl
- 2 X2
+ X7 - 2 xa
+X4
xa
- 2 X4
X2
+ X7 + Xg - 2 X5
+ X6
X5
- 2 X6
+ Xg
- 2 X7
+ xa X4
-2Xg
+ X5
Die Koeffizientenmatrix A hat Blockstruktur:
mit C, = Br ,
Ansonsten sind aile Elemente gleich null. Fur beliebige p und q mit n = pq + p - 1 besit zt die ents t ehende Koeffizientenmatrix A die an aloge Gest alt mit Ai
(q ,q)-Tridiagonalmatrizen ,
B, (q,p - l)-Matrizen, fiir i = 1, ... , p, und A s (p - 1, P - 1)- Diagonalmatrix.
A wird als "Pfeil(kopf)matrix" bezeichnet . Analoges Vorgehen fiir die partielle Differentialgleichung U xx
+ Uy y =
f( x , y)
in
n
mit den Randbedingungen
U(X, y) = , (x, y) liefert ein Gleichungssyst em ahnlicher Struktur.
auf 8n
92
Kapitel 4. Die Methode der konjugierten Gradienten
... ..--
-----I ~
t
ann Abb. 4.5: Zerlegung von D in die beiden Teilgebiete D1 und D2 und den Rand 8D 12 • Bei Zerlegung in zwei Teilgebiete werden zuerst die P unkte in D1 "von unten nach oben nummeriert". Anschliesend erfolgt entsprechend die Nummerierung der P unkte in D2 und schlieslich auf dem gemeinsamen Rand 8D12 (siehe Abb . 4.5). Dar aus ergibt sich das Gleichungssystem
BT) x= b.
0 0 A 2 Bf ( C 1 C 2 BI 2 AI
Ax=
Allgemein erhiilt man filr p Teilgebiete
Dies kann geschrieben werden als
+ Bx, = b- , + A sxs = b s
AIxI CXI
mit
C = (C ll C 2 , ..• , C p ) ,
BT Al
= (Bf, Br, . . . ,B;), = diag(A ll A 2 , • . . , A p ) ,
Dab ei hat Xl gewohnlich wesentlich mehr Komponenten als X S ' Mult iplikat ion der erste n Gleichung von links mit CAll und Subt raktion von der zweiten liefert (As - CA I 1B )xs = b s - CAr Ib I.
93
4.3. Parall elisierung des CG-Verfahrcns
Die Matrix
heiJ5t Schur-Komplement oder Gaufl-Tmnsformierte des Ausgangssystems. Zusammen mit
ist das Ausgangssystem aquivalent zu AlxI
+ Bx, =
bI
.Axs = b. Die Auflosung der zweiten Gleichung ergibt x,
=A A
-1
A
b.
Damit erhalt man aus der ersten Gleichung
oder aquivalent dazu
i = 1, 2, . .. ,p . Die tatsachliche Berechnung von x, und Xl geschieht folgendermasen (dabei wird noch nicht beriicksichtigt, dass A symmetrisch und positiv definit ist) : Zunachst werd en die Dreieckszerlegungen Ai = L iV i ,
i = 1, 2, .. . , p
und anschliesend Y, und Zi bzw. Yi und Zi berechnet, d.h . die Systeme
L iYi=Bi , ViZ i
werden gel6st . Wegen
und
=Yi ,
und
L iYi = b., V iZ i
= Yi,
i = 1,2, . . . , p
94
Kapitel 4. Die Methode der konjugierten Gradienten
gilt p
A
=
p
As - L: CiAilBi =
As - L:CiZi,
i=1
i=1 p
P
b, - L: CiAilbi
=
bs
-
i=1
L: CiZi· i=1
Nach der Berechnung von x, werden die rechten Seiten b, - Bjx, berechnet und anschliesend unter Verwendung der Dreieckszerlegungen der Ai die Vektoren Xi berechnet. Ein groser Teil der Operationen kann parallel durchgefiihrt werden .
Zusammenfassung 1. Bilde die LU-Zerlegungen Ai = L, U i, i = 1, . . . ,p (parallel) und lose die Systeme LiYi U iZ i
= s, = Vi,
LiYi = b., f~r UiZi = Yi, fur
2. Berechne CiZi, CiZi , i
3. Bilde A,
b und
~ = 1, = 1,
t
,p}
(parallel) .
,p
= 1, . . . ,p (parallel) .
lose das Gleichungssystem Ax s =
b nach x,
auf.
4. Bilde c, = b , - Bixs, i = 1, ... ,p (parallel).
5. Lose Aixi = c., i = 1, .. . ,p, unter Verwendung der bereits berechneten LUZerlegung von A, (parallel) .
Bemerkung 4.6 Die Anzahl der Unbekannten aufdem Rand zwischen den Teilgebieten ist gewohnlich sehr viel kleiner sls die Anzahl der Unbekannten in jedem Teilgebiet . Somit bedeutet das Loseu eines Gleichungssystems mit der Matrix As einen viel kleineren Aufwand als das Loseu eines Gleichungssystems mit einer der Matrizen A i' Die Matrix A, die man bei Diskretisierung des Randwertproblems mittels des 5Punkte-Sterns ohne Umnummerierung der Unbekannten erhalt, ist symmetrisch positiv definit . Dies kann man bei der Auflosung des Gleichungssystems Ax = b verwenden: Durch Umnummerierung der Unbekannten erhalt man
PAp T Px = Pb,
'-v--"~
=:A
= :x
~
= :6
wobei Peine geeignete Permutationsmatrix ist . Man sieht unmittelbar, dass mit A auch
4.3. Par allelisierung des CG-Verfahrens
95
symmetrisch positiv definit ist . Des weit eren sind auch aile Matrizen Ai, i = 1, . . . ,p symmet risch posit iv definit. Die Symmetrie der Matrizen Ai, i = 1, . . . .p, sieht man sofort. Wir zeigen, dass A l positiv definit ist . Es gilt fiir Xl ¥- 0:
C T1 cT2
Xl 0
A p c PT C l C 2 ... C p A s
0 0
Al A2
xi A lXl = (xi, 0, . .. , 0, 0)
> O.
Die positve Definitheit der anderen Matrizen Ai wird analog dazu nachgewiesen. Da Ai symmetrisch positiv definit ist, existiert die Cholesky- Zerlegung:
i = l, .. . ,p .
Ai = LiLT,
Setzen wir Y , := Li lCr und Y« := Li lbi, so erhalten wir wegen CiA i lCr = C t·(Lt·LT)-l CT = C,·(LT)lL t:-lCT = vtv, t t t t t P
p
" YiT Vi, A = A s - L... CiA i- 1C Ti = A s - 'L... i=l i=l A
' "
P
b = bs A
W ir zeigen nun: Mit
A ist
-
P
" Y T Yi· L... CiA i- 1b, = b, - 'L... i i=l i=l
' "
au ch
A=
A s - CA/ lC T symmetrisch positiv definit.
a) Symmetrie: P
p
" TVi)T = A s - 'L... " Y TY, = AA . AAT = A Ts - 'L...(Y i i i=l i=l b) Positive Definitheit: Sei A s E IRsxs und X2 E IRS nicht der Nullvektor. Setz e x, := - A/lCT X2 und bilde damit den Vektor ist gilt
xAx > 0 und
X
=
(:~) . Da A positiv definit
somit:
T (XlT , XT) 2 (AI C C A s ) (Xl) X2
>0
~
=A
xi A IXI + 2xic TX2 + xI A sx 2 > 0 xIC( A/l)TA IA / lC TX2 - 2xIC( A/ l)T C T X2 + xI A sx 2 > 0 ¢:} - x ICA / lC TX2 + xI A sx 2 > 0 ¢:}
Xl
ei~ tzen
A
¢:}
XT2 AX2 > O.
96
Kapitel 4. Die Methode der konjugierten Gradienten
Zusammenfassung 1. Bilde die Cholesky-Zerlegungen Ai = LiL[, i = 1, . . . ,p (parallel) und lose die
Systeme fiir i
= 1, .. . , p
(parallel) .
2. Berechne CiZi, CiZ i, i = 1, . . . ,p (parallel). 3. Bilde
A, b mit p
b, = b s
-
' " LJ
Y Ti s,
i=1
und lose das Gleichungssystem Ax s = b nach x, auf. Zur Auflosung des Gleichungssystems kann wiederum die Cholesky-Zerlegung verwendet werden . 4. Bilde c, = b, - Cr x s , i = 1, . . . ,p (parallel). 5. Lose AiXi = Ci, i = 1, . . . ,p unter Verwendung der bereits berechneten Cholesky-Zerlegung von Ai (parallel) .
Verwendung der Gebietszerlegungsmethode zur Vorkonditionierung Wir erlautern das Vorgehen anhand des Systems
Au=f
(4.12)
mit
u=
(:~)
f =
,
U12
(~~) . f 12
A sei symmetrisch positiv definit . Somit sind AI, A 2 und B 12 ebenfalls symmetrisch. Durch die Kongruenztransformation
geht das System 4.12 tiber in
mit
A =SAST ,
b=
Sf .
97
4.3. Parallelisierung des CG- Verfahrens
Wir wahlen mit
mit geeignetem R, so dass
die Gestalt
besitzt, d. h. es gilt
Daraus erhalt man
und somit
Sobald R bekannt ist , findet man u folgendermasen:
1. Berechne
h=
Sf = L- 1f, d.h.Iose
Lh =
f nach
h auf, d .h.Iose
hI und h2 konnen parallel berechnet werden. Anschliesend ist dritten Gleichung zu berechnen. 2. Lose
h3
aus der
Ax = h nach x auf, d.h. berechne
Bei bekanntem R und
h konnen
Xl> X2 und
)(3
parallel b erechnet werden .
98
Kapitel 4. Die Methode der konjugierten Gradienten
3. Berechne
U
= ST X, d. h. lose
oder
LT U = X
oder
Hier hat man zunachst Ua aus der dritten Gleichung zu berechnen , anschlies end konnen UI und U2 parallel berechnet werden. Die Verallgemeinerung diese Vorgehens auf den Fall, dass A eine "gr6f&ere" Pfeilmatrix ist, ist offensichtlich . Eine Schwierigkeit bei dem geschilderten Vorgehen ist die Tatsache, dass in der Darstellung von R die Inversen von A, und A 2 auftreten. Deren explizite Berechnung mochte man natiirlich gerne vermeiden . Ein Ausweg best eht in der Approximation der Inversen durch "einfache" Matrizen, z. B. Bandmatrizen mit schmal er Bandbreit e, durch Verwendung eines weiteren It erationsverfahrens an geeigneter Stelle .
Kapitel5 Mehrgitterverfahren (Multi-Grid Method) 5.1
Motivation
Die nachfolgende Diskussion des Mehrgit terverfahrens lehnt sich eng an [61 an. Zum vert ieften Studiem dieses Verfahrens sollt e man insbesondere [141 zu Rat e ziehen. Weitergehende Diskussionen betr effend die Programmierung des Mehrgitterverfahrens sind in [391 und dem neueren Werk [361 zu finden.
Urn die Idee des Mehrgitterverfahren zu erklaren, bet rachten wir auf dem Gebiet (0, 1) x (0, 1) das Randwertproblem
n=
+ U yy = f (x , y), u(x , y) = g(x, y),
U xx
(x,y) En, (x, y) E an.
Die Funktionen f( x , y) und g(x, y) sind dab ei vorgegeben. Zur Diskretisierung verwenden wir zwei unterschiedlich feine Gitter. Das feine Gitter habe den aqudistanten Gitterabstand h, das grobe Gitter 2h hingegen den aquidistante n Gitterabstand 2h (siehe Abbildung 5.1). Die Diskretisierung mittels des 5-P unkte-St erns auf dem feinen Gitter fiihrt zum Gleichungssystem Au = f , das wir mit einem It erationsverfahr en
n
nh
k = 0,1 , 2, . . . , zu losen versuchen. Als Startvektor konnen wir, wenn wir keine Kenntnis iiber die gesuchte Losung besitzen, beispielsweise UO = 0 wiihlen. Wir konnen versuchen eine bessere Star tnaherung zu erhalt en, indem wir auf dem groben Git t er n2h eine Naherungslosung berechnen und diese dann in geeigneter Weise als St artnaherun g fiir das feine Gitter Oh verwcndcn.
G. Alefeld et al., Parallele Numerische Verfahren © Springer-Verlag Berlin Heidelberg 2002
Kapitel 5. Mehrgitt erverfahren (Multi-Grid Method)
100
Oh
y
,I
02
y
2h
h
-
x
h
X
2h
Abb. 5.1 : Feines Gitter nh und grobes Gitter
n2h .
Urn dieses P rizip besser zu verst ehen, betrachten wir nun zunachst das gewohnliche Randwertproblem U {
II
= f(t) ,
u(a) = a , u(b) = (3.
Zur Diskretisierung verwenden wir wieder zwei unterschiedlich feine Gitter. Das feine Gitter nh habe einen aquid ist anten Gitterabstand h, das grobe Gitter 2h hingegen hab e den aquidistanten Gitterabstand 2h (siehe Abbildung 5.2). Die Diskretisierung
n
u
. ..... ............................................... . .....;:;;;;:<>:~::,'~
II
--
st
b
2h
Abb, 5.2: Nah erungslosung u auf dem grob en Gitter Gitter h •
n
n2h und auf dem feinen
durch den Differenzenquotienten zweiter Ordnung fiihrt auf das Gleichungsystem
5.1. Motivation
101
Au = f. Umformen in Fixpunktform ergibt die Iterationsgleichung
k = 0,1,2, ...
(5.1)
mit Fixpunkt u", der mit der Losung von Au = f iibereinstimmt. Der Fehler im k-ten Schritt ist dann gegeben durch e k = Uk - u*.
Beobachtungen bei cler Durchfiihrung 1. Der Fehler eO sei die Summe eines Vektors aus "glatten" Komponenten niedriger Frequenz mit einem Vektor aus oszillierenden Komponenten: Nach einigen
+
Abb. 5.3: Summe der glatten und oszillierenden Vektorkomponenten des Fehlers (oben) und Glattung nach einigen Iterationsschritten (unten rechts) .
Schritten des Iterationsverfahrens werden die oszillierenden Komponenten reduziert , ohne dass der Fehler notwendigerweise klein wird, d. h. der Fehler wird
102
Kapit el 5. Mehrgitterverfahren (Multi-Grid Method)
gegliittet (siehe Abbildung 5.3). Wir bezeichnen deshalb das Iterationsverfahren (5.1) auch als Clatter (englisch: smoother) . 2. Ein glatter Fehler auf einem feinen Gitter kann, wenn er auf ein grobes Gitter projiziert wird, nicht glatt sein (siehe Abbildung 5.4).
Abb. 5.4: Der Fehler e ist links auf dem feinen Gitter betrachtet "glatt" (7 Punkte fiir eine Periode) und rechts auf dem groben Gitter betrachtet oszillierend (4 Punkte fiir eine Periode).
Idee • Iteriere an dem Gleichungssystem Au = f auf einem ,,sehr" groben Gitter.
n4h • Iteriere an dem Gleichungssystem Au = f auf dem Gitter n2h . Iteriere an dem Gleichungssystem Au = f auf dem Gitter nh .
• Iteriere an dem Gleichungssystem Au = f auf dem Gitter • •
Dieses Vorgehen bezeichnet man als Nested Iteration. Dabei haben wir bis jetzt nicht genau definiert, was die Formulierung .Jteriere an dem Gleichungssystem Au = f auf dem Gitter 2h " bedeutet. Das Analogon zum urspriinglichen Problem auf dem groberen Gitter muss formuliert werden.
n
Des weiteren miissen wir uns fragen, was zu tun ist , wenn nach Erreichen des feinsten Gitters immer noch oszillierende Fehleranteile vorhanden sind. In der Nested Iteration benutzen wir die groben Gitter, urn einen besseren Startwert fiir die Iteration auf dem feinen Gitter zu gewinnen. Nun wollen wir die beiden zuvor gemachten Beobachtungen dazu verwenden, urn eine auf dem feinen Gitter berechnete Naherungslosung durch Berechnungen auf dem groben Gitter zu verbessern.
5.2. Ubergang zwischen Gittern
103
Man spricht in diesem Fall von einer Grobgitterkorrektur . Es sei v eine Naherungslosung der Gleichung Au = f . Definieren wir das Residuum an der Stelle v durch r., = f - Av , so erfiillt der Fehler e = u - v die Gleichung:
Ae = A(u - v) = Au - Av = f - Av = r v . Das Losen des Gleichungssystems Au = fist also aquivalent zum Losen des Gleichungsystems Ae = r v fiir den Fehler.
Idee • Iteriere mit Au = f auf
0,h .
• Berechne das Residuum r
Dies liefert eine Naherungslosung v",
=f -
Av .
• Iteriere mit der Residuumsgleichung Ae = r auf 0,2h (e ist auf dem groberen Gitter betrachtet starker oszillierend als auf dem feinen Gitter. Darum hat das Iterationsverfahren auf dem groberen Gitter bessere Dampfungseigenschaften]. Dies liefert eine Approximation e 2h des Fehlers. • Verbessere die Approximation v" auf 0,h unter Verwendung des Fehlers e 2h . Symbolisch geschrieben v h f- v h + e 2h • • Iteriere mit Au
= f auf 0,h .
Bei unser Ideenskizze bleiben die folgenden Fragen noch offen: a) Wie berechnen wir die Approximation des Residuums auf b) Wie wird der Fehler dann auf
0,2h?
approximiert?
0,h
c) Was bedeutet Au = f auf dem groben Gitter?
5.2
Ubergang zwischen Gittern
Nachfolgend sei immer vorausgesetzt, dass das grobe Gitter die doppelte Schrittweite des feinen Gitters habe . Wie fiihrt man nun die Ubertragung des Fehlers vom graben auf das feine Gitter e2h -t e h , die sogenannte Prolongation, durch? Eine Moglichkeit dazu ist Interpolation (siehe Abbildung 5.5). Wir beschreiben diesen Ubergang durch einen Prolongationsoperator I~h : V
h
--
h I 2h v 2h •
Kapitel 5. Mehrgitterverfahren (Multi-Grid Method)
104
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2 0+-+--+--+---+-----t4-+---,1'i=-+-+-+-+-~
o+--+---+----'r+--f---+----+---
-0.2
- 0.2
Abb, 5.5: Prolongation durch lineare Interpolation Bei der Verwendung linearer Interpolation gilt : i
= 1,2 ,
, ~ - 1,
i
= 0,1,
'~-
Der Operator I~h kann als lineare Abbildung lR't- l --+ lRN geschrieben werden , beispielsweise gilt fiir den Fall N = 8:
1 2 Ih y 2h _ _1
2h
-
2
Vl
1 1
2 1 1 2
(~r
1
l
1.
au ch mit einer Matrix
h
V2 V3 =yh.
V4 V5 V6 V7
Nun beschaft igen wir uns mit der Ubertragung des Residuums vom feinen auf das grobe Gitter r h --+ r 2h , die sogenannte Restriktion. Analog zum vorherigen Vorgehen beschreiben wir diesen Ubergang dur ch einen Operator I~h :
Wir wahlen fiir den Restriktionsoperator I~h z. B.
a) die Injektion:
.
N
z = 1,2 , . . . , "2 oder
-
1
5.3. Grobgitt erkorrektur (Coarse Grid Correction)
105
b) den Full-Weighting-Operator: 2h vi
h 2 h h ) = 4"1 (V2i1 + V2i + V2i+l ,
.
2
= 1,2 , . .. ,
2N -
1.
Der Operator I~h kann als lineare Abbildung lI~N-l --+ 1R't- 1 unter Verwendung einer Matrix beschrieben werden. Fiir den Full-Weighting-Operator erhalt man z. B. im Fall N = 8:
2 1 121
1 2 Die Prolongationsmatrix und die Restriktionsmatrix stehen zueinander in der Beziehung: (hier c = 2).
5.3
Grobgitterkorrektnr (Coarse Grid Correction)
• Iteriere Ill-mal mit AhUh = fh, auf nh mit einer vorgegebenen Anfangsnaherung, beispielsweise mit dem Gesamts chrittverfahren. Dies liefert die Niiherung v", • Berechne die Prolong ation des Residuums auf das grobe Gitter
• "Lose"
A2h e2h
= r 2h (auf
n2h :
n2h ) .
• Verbessere die Feingitter-Approximation durch
• Iteriere liz-mal mit
Ahu
h
= fh mit Startn aherung v",
Wie lost wir nun das lineare Gleichungssystem A 2h eZh = r 2h? Auch hierzu konnen wir wieder die Grobgitterkorrektur verwenden. Wir gehen also zum Gitter 4h iiber und losen dort die entsprechende Gleichung des Fehlers. Urn die Schreibweise auf den unterschliedlich feinen Gittern zu vereinheitlichen, schreiben wir statt r Zh (in Analogie zu fh) nun f2h und anstelle von e 2h (in Analogie zu v'') nun y Zh .
n
Es seien im Folgenden Q > 1 unterschiedlich grobe Gitter gegeben . Das grobste Gitter sei also L h mit L = 2Q- l . Wir konnen dann den Mehrgitteralgorithmus in der folgenden Form durchfiihren:
n
106
Kapitel5. Mehrgitterverfahren (Multi-Grid Method)
Algorithmus 5.1
• Iteriere vl-mal mit A hUh = fh. Dies liefert die Niiherung v'' ,
- Iteriere vl-mal mit A 2hU2h = f2h mit Anfangsniiherung y2h = O. Dies liefert die Niibenmg y2h.
= I~~r2h = I~~(f2h _ A2hy2h). * Iteriere vl-mal mit A 4hU4h = f4h mit Anfangsniiherung y4h = o. Dies
- Berechne f4h
liefert die Niibetung y4h . Berechne fBh = I~~r4h = I~~(f4h
*
-
* Korrigiere y4h {- y4h + I~~yBh. * Iteriere v2-mal mit A 4h U4h = f4h _ Korrigiere y2h
{- y2h
A 4h y4h) .
mit Anfangsniiherung y4h .
+ I~~y4h .
- Iteriere v2-mal mit A 2h U2h = f2h mit Anfangsniiherung y2h .
• Iteriere v2-mal mit A hUh
= fh mit Anfangsniiherung v",
Der Algorithmus steigt also einmal vom feinsten auf das grobste Gitter hinunter und von dart wieder zum feinsten Gitter auf. Insgesamt wird ein sogenannter V-Zyklus durchgefiihrt (siehe Abbildung 5.6). h
_-
4h _...
8h _
__
.
Abb. 5.6: V-Zyklus (links) und W-Zyklus (rechts).
In Algorithmus 5.2 beschreiben wir diesen V-Zyklus rekursiv, urn eine iibersichtlichere Form zu erhalten.
5.4. Interpolation und Prolongation im zweidimensionalen Fall
107
Algorithmus 5.2 (MVh(yh , fh)) If (Oh ist grobstes Gitter) then Lose A hUh = fh direkt. Else 1. Iteriere l/l-mal mit Ahuh = fh. Dies liefert die Niiherung v" , 2. Berechne f2h = I~h(fh - Ah y h). 3. y2h = O. 4. Rufe Routine MV 2h(y2h, f2h) auf. Dies liefert den neuen Vektor y2h. 5. Korrigiere v h +- yh + I~h y2h . 6. Iteriere l/2-mal mit A huh = fh mit Anfangsniiherung v" , Der V-Zyklus ist nur ein Speziealfall des sogenannten J.t-Zyklus, den wir in Algorithmus 5.3 beschreiben. Bei dieser Verallgemeinerung wird auf einer Gitterebene die Grobgitterkorr ektur nicht einmal wie beim V-Zyklus sondern J.t-mal aufgerufen. Fur J.t = 2 ergibt sich der in Abbildung 5.6 dargestellte W-Zyklus.
Algorithmus 5.3 (MJ.th(yh, fh)) If (Oh ist grobstes Gitter) then Lose A huh = fh direkt. Else 1. Iteriere l/l-mal mit Ahuh = fh. Dies liefert die Niiherung v" , 2. Berechne f2h = I~h (fh - A hyh). 3. 4.
5. 6.
5.4
y 2h
= O.
Rufe Routine M J.t2h(y2h, f2h) J.t-mal auf. Dies liefert den neuen Vektor v 2h. Korrigiere v" +- yh + I~h y 2h. Iteriere l/2-ma1 mit A h Uh = f h mit Anfangsniiherung v'' ,
Interpolation und Prolongation im zweidimensionalen Fall
Fur den eindimensionalen Fall haben wir bereits beschrieben, wie man zwischen den unt erschiedlich groben Gittern wechseln kann . Die dort gewonnenen Ideen wollen wir nun auf den zweidimensionalen Fall iibertragen. Wir setzen ein quadratisches Gebiet voraus. Es sei N die Anzahl der Teilintervalle in x- und in y-Richtung des feinen Gitters, die wir als gerade voraussetzen. Wir definieren den Interpolationsopera tor I~h durch
o
Kapitel 5. Mehrgitterverfahren (Multi-Grid Method)
108 y
..........~ ......... ....... .$ . ....... ...... ..<Jr.......... ..........$ . ......
7 6
··········r·········· ..........~ ..........
5
. .......?... . ..
..........$ ............
,
4
.. ....4>...
3
.....
+.
...
2
..
~ .. ..
.. .... ~ . ...
...
$ . ....
..........$...........
, · 0·
1
..
$ . ...
2h
x
~
h
1
2
3
456
7
Abb. 5.7: Grobgitterpunkte eine Gitters der Maschenweite 2h in einem feinen Gitter der Maschenweite h. Ubergang zwischen den Gittern erfolgt mittels Interpolation und Prolongation mit h V2i,2j
1< iJ"
= Vij2h ,
.
N
h V2i+l ,2j
=
1 (2h 2h ) 2 Vij + Vi+l,j ,
O< i
l <J < - - l' - - 2
h V2i,2j+l
=
h 2h ) 21 (2 Vij + ViJ+ l ,
1
" N O < J< - - l
h V2i+l ,2j+ l
-
2h 2h 2h ) = "41 (2h Vij + Vi+1 J + ViJ+ l + Vi+l ,j+l ' 0 ······ ····· ·
el..·········r
- 2 - 2
' '
-
- 2
O
,
..61.. .. 0 Abb. 5.8 : Verteilung der Gewichte links beim Half-Weighting-Operator, rechts beim Full Weighting Operator. Den Prolongationsoperator I~h definieren wir durch y 2h
= I~hyh
'
5"5" Bemerkungen zur Programmierung des Mehrgitterverfahrens
109
alt ernativ mit
a)
l ~ i, j ~ ~- l ,
v?~ = v2ht, 2J"' 1,1
b) als Half-Weighting-Operator (siehe Abbildung 5.8): 2h 1 (4 h " +V2h"v.. IJ =8 V2"2 I, J I
h h h) 1, 2J" +v2 I "+ , 12J" +V2 I"2 , J"-1 +V2 I,"2" J+ 1 '
oder c) als Full Weighting Operator (siehe Abbildung 5.8): 2h
1
h
v""IJ = -16 (4v2I", 2+ J
2(V 2ih - 1,2j
h h h) + V 2i+l ,2j + V2i,2j-l + V2i,2j+l
+
h h h h) V2i - 1,2j -l + V2i+l ,2j- l + V2i- 1,2j +l + V2i+l,2j+l .
5.5
Bemerkungen zur Programmierung des Mehrgitterverfahrens y 0 0 0 0 0 0 0 0 0 0 0 0 0
0
• • • • • • • 0 0
0
0
0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0
0
0
0
0
• • • • • • • • • • • • • • • •0 0• 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 0 0 0 0 0 0 0 0 0 0 0
0
0
0
0 0 0 0 0
0
0
0
0
0
• • • •
0
0
0
0
0
• • • • • • 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 0 0 0 0
• • • • • • • • •
0
• • • • • • 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 0 0 0 0
0
0
0
0
0 0 0
0
0 0
0
0
0
0
0
x
A b b . 5.9: Unterteilung der Gitter soren .
nh
und
n2h
in 16 Teilgitter fiir 16 Prozes-
Zur Parallelisierung des Mehrgitterverfahrens unterteilen wir das Gebiet n in P (Anzahl der Prozessoren) Teilgebiete . Jed em Prozessor wird dab ei genau ein Teilgebiet zugeordn et . Jeder Prozessor ist dann fiir die Gesamtheit der Punkt in diesem Teilgebiet auf allen Vergroberungs ebenen zustandig. Wir wollen dab ei eine Unterteilung
Kapitel5. Mehrgitterverfahren (Multi-Grid Method)
110
gemaB Abbildung 5.9 verwenden, also das Gitter mit moglichst gleich grosen rechteckigen Teilgittern iiberdecken und gleichzeitig den Rand zwischen den Teilgittern moglichst klein halten . Nachfolgend wollen wir nun verschiedene Iterationsverfahren, die als Clatter verwendbar sind, auf ihre Parallelisierbarkeit durch Gitterzerlegung unt ersuchen. 1. Verwendung des Jacobi-Verfahrens als GUitter: Auf jedem Teilgitter
kann fiir Punkte im Inneren eine neue Naherung unabhangig von den anderen Teilgittern berechnet werden. Fiir Punkte am Rand eines Teilgitt ers werden die Naherungen fiir die unmittelbaren Nachbarn aus den anderen Gebieten benotigt. Urn diese Werte zu speichern, vergrofert man das gespeicherte Teilgitter urn einen gewissen Uberlappungsbereich (siehe Abbildung 5.10). Wenn die Werte am Rand zur Verfiigung st ehen, konnen in jedem Prozessor aIle Berechnungen eines Iterations schrittes ohne weitere Kommunikation dur chgefiihrt werden.
y
r:
! • • ii • •
•
:
• ii • • !• • ______J • I• •
• • • • • • • • • • • • • •
_ _ _ _ _ ____ _ _ _ _ _ P ___• _ _ _ ___ _ _
x
Abb. 5.10: Abhangigkeit en bei der Berechnung einer neuen Naherung fiir einen inneren Punkt und einen Randpunkt bei Verwendung des Jac obiVerfahr ens als Glatter, Gestrichelt ist der zur Berechnung von Naherungen an Randpunkten notwendige Uberlappungsbereich eingezeichnet.
2. Verwendung des Gauls-Seidel-Verfahrens mit Red-Black-Ordnung als GUitter: Die Berechnung der Naherungen an den roten Gitterpunkten im ersten Halbschritt des Gauf-Seidel Verfahrens (siehe Abbildung 5.11 links), kann vollstandig parallel durchgefiihrt werden. Anschlielsend miissen Dat en
5.5. Bemerkungen zur Programmierung des Mehrgitterverfahrens
111
ausgetauscht werden. Danach wird an den schwarzen Gitterpunkten iteriert (siehe Abbildung 5.11 rechts). Zuletzt werden wieder Daten ausgetauschet. 1m Vergleich zum Jacobi-Verfahren werden also doppelt so oft Daten ausgetauscht , dafiir sind die Datenmengen aber bei jeder Kommunikation nur halb so gros . Wie beim Jacobi-Verfahren speichern wir die Naherungswert e unmittelbarer Nachbarn der Randpunkte auch wieder lokal unter Verwendung eines gewissen Uberlappungsbereichs.
y
y
•
•
0
r:
•
•
0
•
0
•
0
•
0
•
0
•
•
0
0
•
0
•
0
•
0
•
0
•
--------------------------- -------,
0
0
i ! !
I, I
0
•
•
0
1 0
•
!•
0
i
•
0
•
0
0
•
---------------------------
x
•
o __1 _____
•
0
•
0
•
0
•
0
•
0
x
Abb. 5.11 : Abhangigkeiten bei der Berechnung einer neuen Naherung fiir einen inneren Punkt und einen Randpunkt bei Verwendung des GaussSeidel-Verfahrens mit Red-Black-Ordnung als Glatter. Links Berechnung der roten Naherungspunkte, rechts der schwarzen. Gestrichelt ist der lokal gespeicherte Uberlappun gsbereich eingezeichnet. 3. Verwendung des Gauls-Seidel-Verfahrens mit Wavefront-Form als Glatter: Wir berechnen neue Naherungen in der linken unteren Ecke beginnend (siehe Abbilung 5.12). Urn Naherungen fiir Punkten auf einer Diagonale zu besti mmen, benotigen wir die Werte von darunterliegenden Diagonalen. Somit ist bei jedem Schritt von einer zur nachsten Diagonale Kommunikation notwendig. Die Pr ozessorauslastung ist ungleichmasi g (siehe auch Abschnitt 2.2.3).
Vergleich der Parallelisierbarkeit der Glatter In diesem Abschnit t wollen wir die Parallelisierbarkeit der unt erschiedlichen Glat ter, als zent rale Komponente des Mehrgitter-Verfahr ens, anhand ihres Parallelisierungsgrades par-deg( M) beurteilen. Im folgenden bezeichne #n h die Anzahl der Gitterpunkte des feinen Gitters. Dann gilt :
Kapitel5. Mehrgitterverfahren (Multi-Grid Method)
112
y
.
..
•......•... -. -"
...... ...
"
... ..
•..... ........ . . ................ ...•..... .... ..........•..........• . .... ..... .. . ................. ..... •..... •..... -, .. ..... .... . .....• .....• • .........• "
. ..
"
"
-.
"
x
Abb. 5.12: Beginnend in der unteren iinken Ecke verliiuft die Berechnung von neuen Niiherungswerten beim Gaus-Seidel-Verfahren mit Wavefront-Form auf Diagonalen .
1. Das Jacobi-Verfahren ist vollstiindig parallelisierbar, d. h. aIle neuen Iterierten konnen gleichzeitig berechnet werden. Es gilt somit par-deg(J) =
#nh.
2. Fur das Gauk-Seidel-Verfahren mit Red-Black-Ordnung gilt
3. Das Gaus-Seidel-Verfahren mit Wavefront-Form besitzt den Paralleiisierungsgrad par-deg(GS w p ) Es gilt somit fiir
#nh
~
= V#nh •
4 par-deg(GS RB )
~
par-deg(GS w p ) .
In Definition 1.2 haben wir den Begriff des Speed-up und in Definition 1.3 den Begriff der Effizienz eingefiihrt. Anders als dort wollen wir nun aber auch deren Abhangigkeit von der Problemgrose, die wir in der Anzahl der Unbkannten messen, beriicksiohtigen. Wir betrachen also den Speed-up und die Effizienz als Funktionen der Prozessorenzahl P und der Problemgrolse N, also S = S(P, N), e = e(P, N). Diese beiden Leistungsmase wollen wir nun nut zen, urn die Qualitiit der Parallelsierung des Multigrid-Verfahrens fiir eine feste Anzahl von Prozessoren fiir N -+ 00
5.5. Bemerkungen zur Programmierung des Mehrgitterverfahrens
113
(d.h. es werden auch beliebig grose Speicher zugelassen) zu beurteilen. Im Gegensatz zur Diskussion in Kapitel 1 beziehen wir jetzt auch den Zeitbedarf fiir den Datenaustausch mit ein. Dazu nehmen wir an : 1. Das gegebene Problem ist , wie bei der 5-Punkte Diskretisierung, durch .Iokale
Abhangigkeiten" definiert. 2. Das Glattungs-Verfahren hat einen hinreichend hohen Parallelisierungsgrad. 3. Die Anzahl der Gitterpunkte und arithmetischen Operationen fiir jeden Gitterpunkt ist fiir N -+ 00 fiir alle Teilgitter gleich. Somit gilt lim e(P, N)
N--too
=1
fiir festes P.
Dieses Verhalten wird in der Literatur als Boundary Volume Effect bezeichnet. Zum Beweis dieser Aussage verwenden wir, dass sich der Quotient
Tcomm Tcom p
Gesamte Kommunikationszeit Gesamte Rechenzeit
verhalt, wie die Gesamtzahl der Randgitterpunkte der Teilgebiete zur Gesamtzahl der inneren Punkte der Teilgebiete. Das heilst, fiir N -+ 00 gilt
Tcomm -+ o. Tcomp
Somit gilt e(P, N) -+ 1 fiir N -+
00
(bei festem P) .
Beispiele fiir Clatter mit geniigend hohem Parallelisierungsgrad sind das JacobiVerfahren und das Gauls-Seidel-Verfahren mit Red-Black-Ordnung.
5.5.1
Gitterzerlegung und Mehrgitterverfahren
Im vorangehenden Abschnitt haben wir die Parallelisierbarkeit der Glatter durch Gitterzerlegung diskutiert. Nun wollen wir die Idee der Gitterzerlegung auch zur Parallelisierung des Mehrgitterverfahrens anwenden. Wir betrachten der Ubersichtlichkeit wegen im Folgenden nur noch ein Zwei-GitterVerfahren. Die Verallgemeinerung auf mehr Gitter lauft analog . Als Clatter wollen wir das Gaus-Seidel-Verfahren mit Red-Black-Ordnung verwenden (obwohl es einen geringeren Parall elisierungsgrad als das Jacobi- Verfahren besitzt) , da es bessere Glattungseigenschaften aufweist .
114
Kapitel 5. Mehrgitt erverfahren (Multi-Grid Method)
y
P~
(24 P.)
P (20 P.)
• • • • • • • 4• • • • • • • • • • •• • • ••••••••••• • • • • •• • • • • • . i. • • • • • • • ___J ---_•..-•.------------_._-----_. • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •P.j • • • ·P2.(2! P.) . PI (30
x
Abb. 5.13: Aufte ilung des Gitters in 4 Teilgit t er. Die Teilgebiete enthalten dabei unterschiedlich viele Gitterp unkte. Gestrichelt ist der notwendige Uberlappungsbereich von P rozessor 3 dargestellt.
1. Restriktion: Nach den GHitt ungschritten und dem Aufdatieren der Werte in den Uberlappungsbereichen konnen wir die Half-Weighting-Restrikt ion ohne jegliche weit er e Kommunikat ion durchfiihren, da alle fiir die Berechnun g des Defektes notwendigen Dat en lokal vorliegen. Da wir das Gaus-Seidel-Verfahren mit Red -Black-O rdnung verwenden, muss nur der Defekt in den roten Gitterpunkten berechnet werden. In den schwarzen Gitterpunkten verschwindet das Residuum. Denn fiir das Gleichungssystem
erge be n sich die It erier t en des Gaus-Seidel-Verfahrens mit Red- Black-Ordnung zu
Fur das Residuum gilt somit im Fall D r = Db
5.5. Bemerkungen zur Programmierung des Mehrgitterverfahrens
115
2. Prolongation: Bei der Prolongation haben wir die gleiche Situtation wie bei der Restriktion vorliegen. Nach dem Durchfiihren der Clattungschritte und dem Aufdatieren in den Uberlappungsbereichen sind alle Informationen fiir bilineare Interpolation lokal vorhanden. Es ist somit keine weitere Kommunikation notwendig.
Zusammenfassung 1. Alle Ausgangsdaten, wie etwa die Problemgrose, miissen allen Prozessoren zur Verfiigung gest ellt werden. Danach sind die Prozessornachbarn und damit zusammenhiingend die Uberlappungsbereiche zu bestimmen.
2. Gliittung, Defektberechnung, Restriktion und Prolongation werden wie zuvor beschrieben durchgefiihrt . Dies erfordert Kommunikation zwischen benachbarten Prozessoren. 3. Eine Vergroberung des Gitters findet nur solange statt, wie noch alle Prozessoren arbeiten. 4. Auf dem grobsten Gitter wird ein schneller Loser fiir das verbleibende Problem verwendet.
Kapitel6 Das symmetrische Eigenwert-Problem Gegeben sei die reelle und symmetrische Matrix A. Wir suchen alle Eigenwerte (und event uell die zugehorigen Eigenvektoren) dieser Matrix. Wir wiederholen zunachst in Abschnitt 6.1 die Idee des klassischen Jacobi-Verfahrens zur Diagonalisierung einer symmetrischen Matrix durch eine (unendliche) Folge von geeigneten Ahnli chkeitstransformationen. Die Beschreibung einer Parallelisierung schliefst sich an . Alternativ dazu wird in Abschnitt 6.2 die Transformation auf eine Tridiagonalmatrix und deren Eigenwertberechnung mit Hilfe des (parallelisierten) Bisektionsverfahrens diskutiert.
Schlielslich bringt Abschnitt 6.3 mit dem "Divide-and-Conquer-Verfahren" einen typischen Vertreter der auf Paralleli sierung zugeschnittenen moclernen Verfahren zur Berechnung der Eigenwerte von Tridiagonalmatrizen. Die Parallelisierung in diesen Abschnitten folgt dabei in grolsen Teilen dem Vorgehen in 1121 und 113] . Zuerst ziti eren wir ohne Beweis, den aus der linearen Algebra bekannten Satz 6.1 Sei A E jRnxn, A = AT dann gilt :
1. Alle Eigenwerte von A sind reell. 2. Es existiett eine Basis des jRn aus orthogonalen Eigenvektoren von A .
3. Eigenvektoren zu verschiedenen Eigenwerten von A sind orthogonal. 4. Falls linear unabhiingige Eigenvektoren zu demselben Eigenwert von A orthogonelisiert sind, so ist die Matrix Q, deren Spalten gerad e die normierten
G. Alefeld et al., Parallele Numerische Verfahren © Springer-Verlag Berlin Heidelberg 2002
Kapitel6. Das symmetrische Eigenwert-Probl em
118
Eigenvektoren sind, orthogonal, d. h.
und es gilt
mit einer Diagonalmatrix D, deren Diagonalelemente gerade die Eigenwerte von A sind.
6.1
Das Jacobi-Verfahren zur Berechnung von Eigenwerten
Das nachfolgend beschriebene Jacobi- Verfahren benotigt Matrizen spezieller Gestalt:
Definition 6.1 Seien p, q E {I, 2, . . . , n} , p =I q, BE lR. Dann heiEt die Matrix
c
~
p-te Zeile
~
q-te Zeile
J(p,q, B) = c
- 5
1
mit c = cosB, Winkel B).
S
= sinB
Rotations-Matrix zum Winkel B (oder Jacobi -Matrix zum
Bemerkung 6.1 a) Fur A E IRn x n iindert die Multiplikation mit der Jacobi-Matrix von rechts, also AJ(p, q, B), die Spalt en p und q von A und die Multiplikation von links, also J(p, q,BfA, die Zeilen p und q von A.
b) Rotations-Matrizen sind orthogonal. Lemma 6.1 Seien A , Q E IRn x n , Q orthogonal und n
IIAllp =
n
:L:La;j ;=1 j=l
die Frobeniusnorm. Dann gilt :
1. 2.
IIAllp = IIATllp· IIQAllp = IIAQllp = IIAllp·
6.1. Das J acobi-Verfahren zur Berechnung von Eigenwerten
119
Beweis n
1.
IIAIIF =
n
n
n
LLatj= LLatj= LLa;i= IIATIIF. i=1 j=1
2. Sei
n
n
j=1 i= 1
i= 1 j=1
aoi die i-te Spalte von A , dann gilt: IIQAII~ =
n
n
. ,=1
. ,=1
n
L IIQaoill~ = La~ QTQaoi = L Ilaoill~ = IIAII~,
IIAQII~ = II(AQfll~
"-v-"
. ,=1
=1
= IIQTATII ~ = IIATII~ = IIAII~· o
Der folgende Satz liefert die grundlegenden Eigenschaften, die im Jacobi-Verfahren benotigt werd en.
Satz 6.2 Sei A = E lRn x n symmetrisch, p, q E {I, 2, .. . , n } zwei feste aber beliebige Indizes mit p i q und apq i O. Es sei
(aij)
7 :=
tan () :=
aqq - app , 2apq sign r
171 + Jl +r2
,
mit
I()I ~ ~ .
Dann gilt fur die durch Ahnlichkeitstransformation entstehende Matrix
A= 1.
a
pq
( aij)
= J(p,q,()fAJ(p,q,())
= 0,
mit IIAII~
:=
n
n
i= 1
j=1
LLa;j. i"' j
("Bei einer Ahnlichkeitstransformation mit einer Jacobi-Matrix nimmt die Summe der Quadrate der auEerhalb der Diagonale liegenden Elemente a b")
Beweis 1. Sei cP eine zunachst beliebige reelle Zahl. Setzen wir
A = J(p,q, cP)TAJ(p,q, cP) , so ist A symmetrisch und nur in der p-t en und q-ten Spalte und Zeile von A verschieden. Es gilt :
120
Kapitel 6. Das symmetrische Eigenwert-Problem
a
Wir suchen nun einen Winkel ¢, so dass das transformierte Element pq verschwindet. Fur cos ¢ :f. 0 gilt :
_
ffino/ • A.)
apq = 0 {:} apq ( 1 -
(
cos ¢
2) + (app - aqq) cos. ¢ = 0 ffino/ A.
{:} (1 - tan 2 ¢)a pq + tan ¢(a pp - aqq) = 0
+ 2 app -aqq tan ¢ =
{:} 1 - tan2 ¢
2apq
+ 27 tan ¢ - 1 = {:} tan ¢ = -7 ± VI + 7 2 . {:} tan 2 ¢
0
0
Von diesen beiden Wurzeln wahlen wir die betragskleinere Wurzel, im Falle 7 = 0 die positive, also
0:
tan¢
= -7 + VI +7 2 =
<0:
tan ¢
= -7 -
fiir
7 ~
fiir
7
Diese Wahl von
~2
V
1 +7
=
+72 + 1 1 = ---==-=2 2 7 + VI + 7 171 + VI + 7 '
_7 2
7 2 - 1 - 72
-7 + VI + 7
8 impliziert, dass 181 ::; %gilt
2. Nach 1. und der Definition von
2
=
-1
171 + VI + 72
a
und pq verschwindet.
A gilt:
Nach Lemma 6.1 gilt:
a;p + 2a;q +
a~q = I (~: ~::) II: app = II (~~~: ~~~n/) ( aqp
2
apq) ( cos 8 sin 8) 11 aqq - sin 8 cos 8 F
I eo a~J II: p
=
Au1Serdem gilt
aii
=
aii
fiir i
:f. p, q. Somit erhalten wir
.
6.1. Das Jacobi-Verfahren zur Berechnung von Eigenwerten
121
n
( IIA II~)2 = II AI I~
-
L iiri i= l n
= II AII~ -
L
ari - (a~p + 2a~q + a~q)
1=1 i,#p ,q
o Die Idee des Jacobi-Verfahr ens ergibt sich aus dem vorangegangenen Satz praktisch von selbst : Tran sformiere A durch ein Folge von Ahnlichkeitstransformationen mit Jacobi-Matrizen, bei denen jeweils ein Paar von auserhalb der Diagonale stehenden Element zu null gemacht wird, auf Diagonalgestalt. Dabei sollt e man aber beachten, dass einmal erzeugte Nullen spater wieder zerstort werden konn en, Fur die Wahl des Paares (p,q) und damit des Element es apq, das zu Null gemacht werden solI, gibt es verschiedene Moglichkeit en: 1. Die klassische Wahl bestimmt (p, q) so, dass die Summe der AuBendiagonalelemente nach der Transformation moglichst klein wird, d. h. (p,q) wird so gewahlt, dass lapq l maximal ist.
Fu r das J acobi-Verfahren mit klassischer Wahl der Paare ist die Konvergenz des Verfahrens gegen eine Diagonalmatrix gesichert. 2. Bei der zyklischen Wahl wird eine Reihenfolge festgelegt , bei der aIle Elemente apq (mit p > q) genau einmal zu null gemacht werden. Beispiel hierfiir ist die zeilenzyklische Wahl, die der Reihe nach die Paare (2,1), (3, 1), (3, 2), (4, 1), (4,2) , (4,3), . . . , (n, n -1) auswahlt d.h es werden die Zeilen der Reihe nach durchlaufen und dann in jeder Zeile die Element e von links nach rechts selektiert. (Siehe Algorithmus 6.1). Fur das Jaco bi-Verfahren mit zeilenzyklischer Wahl der Paare ist die Konvergenz des Verfahr ens gegen eine Diagonalmatrix gesichert. 3. Beim Treshhold-Verfahen werden wie bei der zyklischen Wahl aIle Elemente apq (mit p > q) durchlaufen. Das Element apq wird abe r nur dann zu Null t ransformiert, wenn es betragsmas ig gr6iSer als ein vorgegebener Parameter ist .
Algorithmus 6.1 (Jacobi-Verfahren, zeilenzyklisch, ein Durchgang) For p = 2 to n For q = 1 to P - 1 If apq :f- 0 then B erechne tan fJ fur des Paar (p,q). B erechne A := J (p, q, fJ )TAJ (q, p, fJ), Q := QJ (q, p, fJ ).
122
Kapitel6. Das symmetrische Eigenwert-Problem
Die im Algorithmus auftretenden Werte c = cos () und den beiden t rigonomet rischen Beziehungen tan () berechnen durch cos () =
1
VI + tan
2
=
5
= sin () lassen sich mit
sin () und sin 2 () cos ()
+ cos? () = 1
. () tan () sm = -;:===:;;=::; VI + tan2 ()
, ()
In der Praxis werden nur so viele Durchgange des Jacobi-Verfahrens durchgefiihrt bis die auferhalb der Diagonale st ehenden Elem ente dem Betrage na ch hinreichend klein sind.
6.1.1
Parallele Durchfiihrung
Beim zeilenzyklischen Vorgehen hangen aufeinanderfolgende Rotations-Parameter tan () voneinander ab , konn en also nicht parallel berechnet werden. Diese Schwierigkeit solI durch geschickte Wahl der Reihenfolge der Paare (p,q) vermieden werd en.
Definition 6.2 Seien p, q, r, 5 E {I, 2, . .. , n}. Das Peer (p, q) heiEt Ind expaar falls p > q ist. Zwei Indexpaare (p,q), (r,5) heiEen vertraglich falls {p, q} n {r, 5} = 0. Die Bedeutung obiger Definition liegt darin, das s Rotations-Parameter zu vertr aglichen Ind expaaren gleichzeitig berechnet werden konn en und dass die JacobiMatrizen kommutieren. Ein Beispiel soli dies verd eutlichen: Sei A E 1R4 x 4 . Wir betracht en die beid en vertraglichen Ind expaar e (p, q) = (2, 1) und (r, s) = (4,3). Die Matrix A wird transformiert zu:
A := J(r, s,()2)TJ(p,q,(), f
AJ(p,q,(), ) J(r , s,()2) '-----.,..----' andert Spalten p ,q
,
...
and ert Spalten r,s
Die Multiplikation von rechts mit J(p, q, (),) und J(r, s, ()2) andern unterschiedliche Spalten von A und konn en daher gleichzeitig durchgefiihrt werd en. Genau so andert die Multiplikation von links mit J(r, 5 , ()2)T und J (p, q, ()d T unterschiedliche Zeilen von A und sind daher gleichzeitig durchfiihrbar. Ein Durchgang des Jacobi-Verfahrens entspricht n(n + 1)/2 Jacobi-Transform ationen. Somit exist ieren hochst ens n/2 vert rag liche Ind expaare, ohne das ein Indexp aar jeweils doppelt vorkommt. Ohne Beschrankung der Allgemeinh eit sei n fortan gerade. Urn eine moglichst gute Parallelisierung zu erreich en, suchen wir also n - 1 Mengen von je n/2 vertraglichen Indexpaaren . Der .Karussell'vAlgorithmus, den wir am
123
6.1. Da8 Ja cobi-Verfahren zur Berechnung von Eigenwerten
folgenden Beispiel fiir n = 8 erlaut ern wollen, liefert solche Mengen: Schritt 2:
Schritt 1:
1 2
3 -+ 5 -+
/'
7
4
/' 4
6
8
=> (2,1), (4,3), (6, 5), (8,7) Schri tt 3:
Schritt 4:
~
~
4 -+ 2 -+
1
/' 6
~
8
5 -!-
7 => (4,1), (6,2),(8,3), (7,5)
~
6
2 -+ 3 -+
1
-!-
3
~
7
~
5
~
~
6 -+ 4 -+
1
/'
-!-
8
~
8
~
2 -!-
7
~
5
~
3
=> (6, 1),(8,4), (7,2), (5,3)
=> (8,1),(7,6), (5,4), (3,2)
Schritt 5:
Schritt 6:
8 -+ 6 -+
1
/' 7
~
4
1
/'
-!-
5
~
3
~
2
7 -+ 8 -+
5
~
6 -!-
3
~
2
~
4
=> (7,1), (8,5),(6,3),(4,2)
=> (5,1), (7,3), (8,2), (6,4)
Schritt 7:
Schritt 8:
1
5 -+ 7 -+
/'
8
/'
-!-
3 ~ 2 ~ 4 ~ 6 => (3,1), (5,2), (7,4),(8, 6)
3 -+ 5 -+
1 2
7 -!-
4
6
8 => (2,1), (4,3), (6, 5), (8,7) ~
~
~
In Algorithmus 6.2 beschreib en wir das am Beispiel gezeigte Rotieren der Elemente in Pseudocode. Die obere Zeile unserer Anordnung sei dabei im Feld top , die untere Zeile im Feld bottom abgelegt . Die n/2 vertraglichen Indexpaare ergeben sich dann aus top( i) und bottom(i) fiir i = 1, .. . , n/2 .
Algorith mus 6.2 (K arussell(top, bot tom)) new_top(l) = top(l) , new_top(2) = bottom(l) . new_bottom(n/2) = top(n/2) . For k = 3 t o n /2 new_top(k) = top(k - 1). For k = 1 t o n/2 - 1 new _ bottom (k ) = bottom(k + 1). top = new_top, bottom = new_bottom .
Initialisierung der Felder vor dem ersten Aufruf durch: t op = (1,3,.. . , n - 1), bottom = (2,4, .. . , n ). In Algorithmus 6.3 beschreiben wir ein Modifikation von Algorithmus 6.1. Dab ei
124
Kapitel 6. Das symmetrische Eigenwert-Problem
werden die lndexpaare entsprechend Karussell-Algorithmus 6.2 zyklisch gewahlt,
Algorithmus 6.3 (Jacobi-Verfahren, parallele Ordnung der Indexpaare)
Q=I Repeat For s = 1 to n - 1 For k = 1 to n/2 p = top(k), q = bottom(k) If apq :j: 0 then Berechne tan Ok fur das Peer (p, q). Berechne A := J(p, q, Okf AJ(q,p, Ok), Q := QJ(q ,p , Ok)' Karussell(top, bottom) Until IIAIIF < E Initialisierung der Felder und Matrix vor dem ersten Aufruf durch: top = (1,3, . .. , n - 1), bottom = (2,4, . .. , n), Q = I , n gerade.
Bemerkung 6.2 1. Die Konvergenz des Jacobi- Verfahrens ist bei dieset Wahl der Indexpaare nicht gesichert.
2. Det aktuelle Wert der Matrix Q enthiilt das Produkt der Jacobi-Matrizen . Falls Konvergenz des Jacobi- Verfahrens vorliegt, so konvergiert die Matrix Q gegen eine Matrix deren Spalten eine Orthonormalbasisvon Eigenvektoren von A bilden. 3. Eiti Durchgang der Repeat-Schleife entspricht einem Jacobi-Durchgang. Fiir verschiedene k kiintieti die Werte tan Ok parallel berechnet werden. Ebenso kimueti die zugehOrigen Modifikationen der jeweiligen Spalten bzw. Zeilen von A parallel durchgefiihrt werden.
6.1.2
Realisierung auf einem Parallelrechner
1m Folgenden wollen wir die Parallelisierung des Jacobi-Verfahrens auf P Prozessoren beschreiben. Dabei sei zunachst P = n/2 mit geradem n . Die Prozessoren seien in einem Ring angeordnet. Die einzelnen Schritte der k-Schleife aus Algorithmus 6.3 werden parallel durchgefiihrt . Jeder der Prozessoren Pi; k = 1, . . . , P , bearbeitet zwei Spalten von A und Q , die wir hier mit Aloe, Qloe E IRn x 2 bezeichnen wollen. Die zugeh6rige kleine Transformationsmatrix ist
125
6.1. Das J acobi-Verfahren zur Berechnung von Eigenwert en
Algorithmus 6.4 beschreibt das parallelisierte Jacobi-Verfahren in Pseudocodeform.
Algorithmus 6.4 (Paralleles Jacobi- Verfahren fiir Prozssor Pk ) Repeat For s = 1 to n - 1
(*)
(**)
P = top(k), q = bottom (k) Berechne tan Ok Iiir das Paar (p, q) aus den entsprechenden Elementen von Aloe' Berechne Aloe := AloeJk, Qloe := QloeJk. Verschicke tan Ok an alle Prozessoren. For m = 1 to n/2 If m =J k Empfange tan Om von Prozessor Pm. p' = top(m), q' = bottom(m) (Aloe) i=p' ,q' = .r;;. (Aloe) i=p' ,q' ;= 1,2
; =1 ,2
Ringtausch(A loe, QlocJ Karussell(top, bottom) Until IIAllp < « Bemerkung 6.3 1. Die Prozedur Ringtausch gibt die Spalten von Aloe und Qloe auf die gleiche Weise weiter, wie die Indizes im Karussell Algorithmus 6.2 rotiert werden: top
1
/' bottom
*
+-
PI
*
-+
*
+-
-+
+-
g
*
-+
*
+-
-+
*
Pp
Pp-I
Spalte 1 von Aloe bzw. Qloe
*
-!-
-+
-+
/' +-
Spalte 2 von Aloe bzw. Qloe PI
I -!-
+-
P2
+-
+P p- I
I Pp
Prozessor Pk fur k = 2, . . . , n/ 2 - 1 hat also die folgende Kommunikationsaufrufe s uszuiiibren: Sende (Aloe).1 an Prozessor Pk+l . Sende (A loe).2 an Prozessor Pk- I . Empfange (Aloe). 1 von Prozessor Pk- I . Empfange (A loe).2 von Prozessor PHI . Fur Prozessor PI fallt ein Sende-Empfangs-Paar weg und bei Prozessor Pn j 2 wird eine Sende-Empfangs-Paar durch internes Umspeichern ersetzt. 2. Die Zeile (*) von Algorithm us 6.4 berechnet die Spalten p und q von AJ(p,q,Ok) bzw. QJ(p,q,Ok). Die Zeile (**) berechnet die Spalten p uud q von J(p' , q',Om)TA .
Kapit e16. Das symmetris che Eigenwert-Problem
126
3. Der Rechenaufwand pro Prozessor fiir einen Durchgang durch die s-Schleife
betriigt I8n + 0(1) Operationen. Fur den gleichen Durchgang sind n/2 Kommunikations-Operationen notig. Es ist also sehr viel Kommunikation bei nur geringem Rechenaufwand zu leisten. Dieses Missverhiiltnis zwischen Kommunikation und Rechenaufwand liiJ.St sich verbessern, wenn ein Prozessor mehr sls nur zwei Spalten von A und Q bearbeitet.
6.2
Berechnung der Eigenwerte durch Reduktion der Matrix auf Tridiagonalgestalt
Im Folgenden beschreiben wir ein Verfahren, dass zur reellen symmetrischen Matrix A eine Orthogonalmatrix H berechnet, so dass H- 1 AH Tridiagonalgestalt besizt. Danach geben wir einen Algorithmus an, der alle Eigenwerte einer Tridiagonalmatrix berechnen kann.
6.2.1
Reduktion auf Tridiagonalgestalt
Betrachtet wird die symmetrische Matrix
A=
Unser Ziel wird es nun sein, den Vektor a durch eine symmetrische orthogonale Transformationsmatrix in ein Vielfaches des ersten Einheitsvektors zu iiberfiihren d.h. wir suchen eine Matrix P mit P = p T = P-\ so dass gilt
Pa = ae 1 E
jRn-l.
Hat man eine solche Matrix P gefunden, so gilt
0) (1 0) (alla =
POP
aT) (1
A22
aT ) (1
PA 22 a(e
1V)
° P0)
° P0) -
(all
Pa
PA 22P , d. h. der erste Schritt bei der Transformation auf Tridiagonalgestalt ist getan. Wie man solch eine Matrix P mit den gewiinschen Eigenschaften findet, wollen wir uns am zweidimensionalen Beispiel in Abbildung 6.1 klarmachen . Ist a = ae 1 so
6.2. Berechnung der Eigenwerte durch Reduktion der Matrix auf Tridiagonalgestalt
127
kann man P gleich der Einheitsmatrix wahlen. Andernfalls spiegeln wir den Vektor a an der Geraden g, so dass er in ein Vielfaches des ersten Einh eitsvektors iibergeht. Dab ei bleibt seine Lange erhal ten.
a
u
Abb. 6.1 : Spiegelung von a an der Geraden 9 iiberfiihrt a in ein Vielfaches des ersten Einh eitsvektors unter Beibehaltung der Lange von a.
Die Gerade 9 lasst sich in Hessenormalform schreiben als mit IIuI12 = 1. Das Bild n e t soli die gleiche Lange wie der Ausgangsvekt or a besizten. Somit erhalt en wir
Da der Verbindungsvektor zwischen a und net in Richtung von u zeigt , gilt a-net = AU fiir ein A E JR, also u = ±(a - net) . Da u Einheitsvektor ist gilt
und somit, wenn wir nur noch das positive Vorzeichen beriicksichtigen a - net
u = .,-,-----::-:-:-
Ila- netlb'
Fiir n haben wir uns noch nicht auf ein Vorzeichen festgelegt . Urn numerische Ausloschung, die bei der Addition zweier Zahlen mit unterschiedlichem Vorzeichen auftreten kann , bei der Berechnung des Vektors u zu verhindern, wahlen wir n = {-SignadlaI12, at # O. Ila112' a l = 0
Kapitel6. Das symmetrische Eigenwert-Problem
128
Dabei bezeichnet jetzt al die erste Komponente des Vekto rs a. Nun wollen wir uns der Best immung der eigentlich gesuchte n Matrix P zuwenden . Es gilt :
lIa - ael ll~ = (a - a e ll(a - a e l) = ((a - aI el) + (al - a) el)T(( a - aI el) + (al - a)e l) = Ii a - al elm + ,2(a - al el)(al - a) e l, +(al - a)2 v
=0 (ausmultiplizieren)
= Il all~ - 2ai
+ ai + ai - 2al a + a 2
~
=0
= 2(aTa -
~ =lIal l ~
lT a e a)
= 2(a - ae 1l a und somit
a el= a-(a-ae l) = a-/1
1 IW(a a - ae 2
-ael)lIa -ael/1~
= a-2
1IW(a-ael)(a-ael)Ta 11 a - ae 2 T . a - ae 1 = (I - 2ww) a mit w := II 111 a - ae 2 =Pa mitP: =I- 2ww T .
Definition 6.3 Die Matrix P = 1- 2wwT mit IIwl12 Matrix) zu w .
= 1 heiEt Housholder-Mat rix (oder'Spiegelungs-
Housholder-Mat rizen haben die folgenden Eigenschaften:
1. P = p T , denn
2. P = p - 1 , denn
PP
= (I -
2w w T) (I - 2w w T) = I - 2wwT - 2wwT +4w6
wT = I. =1
Definition 6.4 Die Ahnlichkeitstransformation p - l AP = p T AP = PAP mit einer HousholderMatrix P heiEt Housholder-Tr ansformat ion,
6.2. Berechnung der Eigenwerte durch Reduktion der Matrix auf Tridiagonalgest alt
129
Wenden wir uns nun der Durchfiihrung der Housholder-Transform ation zu. Mit P ist auch
(~ ~)
eine Housholder-Mat rix. Bei Transformation der Mat rix A mit der
Housholder-Matrix H
B
=I -
2ww T ergibt sich:
2ww T) A(I - 2wwT ) = (A - 2ww T A)(I - 2ww T ) = A - 2w( Awf - 2(Aw)w T + 4ww T AwwT = A - w 2(Aw - ww T Awf - 2(Aw - wwTAw )w T.
= HAH = (I -
Die Berechnun g von B kanri also in den folgenden Schritten durchgefiihrt werden: 1. Berechne y = Aw (dafiir sind O(n 2 ) Operat ionen n6tig).
2. Berechne z = 2(y - w (wTy)) (dafiir sind O(n) Operationen notig). 3. Berechne B
=A -
wz T
-
zwT (dafiir sind O(n2 ) Operationen notig) .
Insgesamt ben6tigen wir mit diesem schrit tweisen Vorgehen fiir eine Houshold erTransform ation O(n 2 ) Operationen im Gegensat z zu O(n 3 ) Operationen bei Durchfiihrun g der Mat rix-Matrix-Multiplikat ionen. Die Schritte sind gut parallelisierbar, beriicksichtigen aber nicht die Symmetrie der Matrix A oder eine event uell vorhandene Diinnbesetzth eit von H (und B ). Durch (n - I) -fache analoge Wiederholung der obigen Uberlegungen erzielt man schliesl ich Trid iagonalgestalt.
6.2 .2
Berechnung der Eigenwerte emer symmetrischen Tridiagonalmatrix
Wir betrachte n die reelle symmetrische Tridi agonalmatri x
T
~
(:
b.
::
:J
Die Matrix T sei a.B.d.A. irredu zibel, d.h. b; =I- 0 fiir i = 2, ... , n. Fiir redu zible Matrizen T zerlegen wir T in irredu zible Teilmatri zen und berechnen die Eigenwert e fiir diese. Wir bezeichnen mit Pi(.-\) den Hauptminor i-te r Ordnu ng, d. h.
Ul b2
Pi(.-\) := det
x
b2 U2.
( und setzen Po(.-\) := 1 sowie Pl(.-\) := Ul -.-\.
~ .-\
)
,
". bi
bi Ui -
.-\
130
Kapitel6. Das symmetrische Eigenwert-Pr oblem
Satz 6.3 Die Hauptminoren i-ter Ordnung etiiill eu die Rekursionsformel i = 2,3, . . . , n. Der Beweis dieses Satzes erfolgt durch Entwicklung der Determinante nach der let zten Zeile oder Spalte der Matrix.
Definition 6.5 Fur festes A E IR. bezeichen wir mit S(A) die Anzahl der Vorzeichenwechsel der Folge Po(A),Pl(A), ... ,Pn(A) (ohne Nullen). Satz 6.4 Es gilt S(A)
= IE>. I mit E>. = {t.t < A I t.t ist Eigenwert
von T}.
Zum Nachweis verwendet man , dass die Menge {Pi} eine sogenannte SturmscheKette bild et. (Zur Definition des Begriffes der Sturmschen-Kette sieh e 134]).
Satz 6.5 Eine symmetrische irreduzible Matrix T besit zt n verschiedene reelle Eigenwerte
Mit IITlloo := .max (Ibil + jail + Ibi+d) (wobei b1 = bn +1 = 0 gesetzt sei) gilt t= l, ...,n
i= I ,2 , . .. ,n.
Einen Beweis fiir den erst e Teil der Auss age des Satzes findet man in 134]. Den zweit en Teil zeigt man durch Normabschatzung der Eigenwerte. Die vorangegangenen Satze wollen wir nun nutzen um eine Na herung fiir den k-t en Eigenwert zu berechn en. Algorit hmus 6.5 startet mit einem Int ervall , das den k-ten Eigenwer t ent halt . Dieses Intervall wird dann in jedem Schritt halbi ert und dasj enige Teilintervall selektiert, welches den k-ten Eigenwert enthalt,
Algorithmus 6.5 (Bisektion fiir den k-ten Eigenwert) Setze I = [a, b] = [-IITlloo, IITlloo] Repeat c = (a + b)j 2 If s(c) < k then setze a = c Else setze b = c Until b - a < f In Algorithmus 6.5 wird das Intervall , in dem der k-te Eigenwert liegt , in jedem Schr it t halbiert. Es ist a ber au ch mogl ich, dieses Intervall in mehr als 2 Teile zu unterteilen. Algori thmus 6.6 beschreibt das Verfahren, welches man dann erhalt:
6.3. Ein Divide-and-Conquer-Verfah ren ("Teile-und-Herrsche-Verfahr en")
131
Algorithmus 6.6 (Multisektion fiir den k-ten Eigenwert) Setze I = [a , b] = [-IITlloo, IITlloo] Repeat For i
= 0 to P + 1
ai + i(b - a)/(P + 1) Berechne 8(Ci) (fur i = 0 und i = P + 1 bereits bekannt!) Bestimme Index i o so dass 8(Cio) < k und 8(Cio+1) ~ k gilt Setze a = Cio ' b = Cia+1 Until b - a < E Ci =
Der folgend e Satz vergleicht den Aufwand fiir Algorithmus 6.5 mit Algorithmus 6.6:
Satz 6.6 Urn den Eigenwert Ak in ein Intervall mit einer Lange kleiner als E einzuschlieJ5en benbtigt. man (ausgeh end von einer Interva111ange 1):
Bisektion
Schritte ~ - log2 E
Multisektion
~
Auswertungen ~ -log2 E
-log2 E/ log2(P + 1) ~ -P log2 E/ log2(P + 1)
Bemerkung 6.4 1. Da P/ log2(P + 1) > 1 fur P Bisektion.
~
2 ist Multisektion i.A. weniger efIizient als
2. Die Parallelisierungist bei Mu1tisektion einfach. Jeder Prozessor berechnet 10-
kal den Wert 8(Ci)' Des neue Intervall I wirddann durch eineglobale Operation bestimmt .
6.3
Ein Divide-and-Conquer-Verfahren ("Teile-undHerrsche-Verfahren")
Wir betrachten die irreduzible symmet rische Tridiagonalmatrix
Kapitel 6. Das symmetrische Eigenwert-Problem
132
Dabei sei o.B.d.A. n als gerade vorausgesetzt, n = 2m. Mit einem () E JR definieren wir den Vektor
=:vT
~
v := (0" . . ,0, 1,
t
0,' .. ,O)T.
(),
t
m m+1
Fur
v gilt
Damit gilt fiir p E JR
bm - 1
T := T
bm+l - pO am+l - p02
- pv v T =
bm +2
Wir wahlen nun 0 E {-1, 1} so, dass min{ lam - ()bm+11, lam+l - Obm +t1 } maximal wird . Wir setzen p := bm+10. Es gilt dann bm +1 - pO = 0 und
T=T+pvv T Es sei Q E
JRnxn
mitT=
(~l ~J
Orthogonalmatrix, D E
JRnxn
Diagonalmatrix, so dass gilt:
Weiterhin seien Ql, Q2 E JRmxm Orthogonalmatrizen, D 11 D 2 E JRmxm Diagonalmatrizen, fiir die
i = 1,2, gilt . Mit diesen Matrizen bilden wir Blockmatrizen:
Es gilt
6.3. Ein Divide-and-Conquer-Verfahren ("Teile-und-Herrsche-Verfahren")
133
Der Vektor z liil&t sich darstellen als z=
(Qf(o,... , 0, If, QIUj,0, ... , o)Tf·
Wir suchen nun eine orthogonale Matrix
und damit Q =
V E lRn x n , so dass
QV gilt.
Lemma 6.2 Sei p =j:. 0 ein Skalar, z = (Zi) E lRn ein Vektor mit Zi =j:. 0 fur i = 1, .. . , n und n = diag(di , d2 , . . • , dn ) E lRn x n eine Diagonalmatrix mit di =j:. dj fur 1 ~ i < j ~ n. Es gelte
(0 + pzzT)w = AW mit w =j:. o. Dann gilt 1. ZTW=j:.O .
2.
0 - AI ist regular.
Beweis 1. Sei ZTw = O. Dann gilt Ow = AW. Da 0 Diagonalmatrix ist, folgt w J.Lei mit J.L =j:. O. Somit gilt zTw = J.LZi = 0 also Zi = 0 im Widerspruch zur Voraussetzung. 2. Sei 0 - AI singular, d.h. es existiert ein j E {I , 2, .. . , n} mit A = Voraussetzung folgt
dj • Aus der
(0 - AI)w + pzzTw = o.
Betrachten der j-ten Komponente fiihrt zum Widerspruch:
o Satz 6.7 Sei p =j:. 0 ein Skalar, z = (Zi) E lRn ein Vektor mit Zi =j:. 0 fur i = 1, . . . , n und = diag(d ll d2 , • . . ,dn ) E R'":" eine Diagonalmatrix mit di > d2 > '" > i; Desweiteren sei V = (Vi , V 2 , . . . , V n ) E lRn x n eine orthogonale Matrix mit
o
Kapitel 6. Das symmetrische Eigenwert-Problem
134
1. Die Eigenwerte .>.;, i = 1, . .. , n, sind Nullstellen der Funktion
f(A)
Al > d1 > A2 > d2 > d1 > Al > d2 > A2 >
2. Fur p > 0 gilt Fur p < 0 gilt
= ai(D A
3. Vi
= 1 + pzTCD -
Ail)
-1
Alt 1z .
> An > dn. > dn > An·
z.
Beweis 3. Fiir i = 1, ... , n gilt : T
(D + pzz )Vi A
= AiVi,
Ilvill = 1.
Auf Grund von Lemma 6.2 gilt
D-
ZT Vi # 0,
Ail ist regular.
Zusammen erhalt man
T AT (D + pzz )Vi = AiVi {::> (D - Ail)vi = -pzz Vi A
A
{::>
- 1
A_I
T
Vi = -(D - \1) z pz Vi
{::>
"'--v-"
=:
1. Fur i
Vi = ai(D - Ail) z.
-ai
= 1, . . . , n gilt T AT (D + pzz )Vi = AiVi {::> (D - Ail)vi + pZZ Vi = 0 A
{::>
Vi
+ p(D - Ailt1zzTVi =
0
Multipliziert man die letzte Gleichung von links mit ZT, so ergibt sich:
+ pzTCb - Ail)-IZZT Vi zTvi(l + pZTCb - Ailt lz)
0= zTVi =
= zTVi f(Ai) ~
#0
=> f(Ai) = 0,
i
= 1, ... ,no
2. Es gilt 2
n
f(A)
z:t_, = 1 + P""' LJ _ -
A
i==l di Fiir p > 0 ist
f
-
A
2
n
I'(A)
=p
?= (J. ~ A)2' tool
t
stetig und streng monoton wachsend auf den Intervallen
(-oo,dn ) , (di+},di ) fiir i = n -1, ... , 1 und auf (d},oo). (Siehe Abbildung 6.2). Es gilt lim f(A) = ±oo fiir i = 1, .. . , n und lim f(A) = 1. Die A--+d;'fO
A--+±OO
Funktion f (A) hat somitin (-00, dn ) keine und in (di+}' di ) fiir i = n -1, ... , 1 und (d1 , (0) jeweils genau eine Nullstelle. Da die Nullstellen von f (A) den Eigenwerten von D + pzzT entsprechen, ist fiir p > 0 die Aussage bewiesen . Fiir p < 0 verfahrt man analog.
6.3. Ein Divide-and-Conquer-Verfahren ("Teile-Ilnd-Herrsehe-Verfahren")
135
,
~IRAI
l ! i ,i r
, ----1!-------------------------------1-----------------------------------------._.------------------
-------------------------1,------}-
Abb. 6.2: Funktion f(>.) fiir p > 0.
o Satz 6.8
Sei D = diag(dll d2, . . . , dn) E IRnxn, Z E IRn. Dann existiert eineorthogonale Matrix W E IRnxn und ein Index r E {I , 2, . . . , n}, so dass mit w = WT z gilt: T -
_.
1. W DW - dlag(J.L ll J.L2, ··· , J.Ln) ' 2. J.LI > J.L 2 > .. . > J.Lr· 3. wi1fOfiir i=1,2, .. . , r , Wi = fiir i = r + 1, r + 2,
°
4. {J.LllJ.L2, . .. ,J.Ln} =
Beweis Es sei
di = dj
mit i
{dl ,d2,
, n.
,dn }.
< j . Wahl e 4> E [-~,~] so, dass (J(i ,j,4»Tz )j =0
gilt (Zur Definition von J(i,j , 4» siehe Definition 6.1). Dureh Nachrechnen sieht man dann:
J(i ,j, 4>fDJ(i,j, 4» =
D.
Analoges Vorgehen benutzt man bei allen anderen mehrfachen Eigenwerten. Es sei I{dll d2, .. . , dn}l , W das Produkt der n - r' Rotationsmatrizen, Z = WTz . Der Vektor besitzt r ::; r' von null verschiedene Komponenten . Sei PI eine Permutationsmatrix die so permutiert, dass diese Elemente am Anfang des Vektors stehen:
r' :=
z
z
piz =
(*,*, . . . , *, O, O, . . . ,of ~
r
·
136
Kapitel 6. Das symmetrische Eigenwert-Problem
Dann gilt:
pfwTi:nvP1 = diag(fL1, fL2,' . . , fLn) In einem letzten Schritt wahle man eine Permutationsmatrix P2, welche die fLi fiir i = 1,2, .. . , r der GroBe nach sortiert. Setze nun
o Divide-and-Conquer-Verfahren fiir Tridiagonalmatrizen T E jRnxn mit n = 2m
6.3.1
1. Bestimme p, 8, v wie zuvor beschrieben. Die Matrix T lasst sich dann schreiben
als mit Tridiagonalmatrizen T 1, T 2 E lRm x m .
2. Berechne orthogonale Matrizen
gilt mit Diagonalmatrizen
QbQ2 E lRm x m , sodass
D1, D2 E lRm x m .
3. Setze ._ Z.-
'TT( 00 .,0,1)TT) . (Q1(0, Q 2 8,0'00 .,0) A
Dann gilt
QTTQ
~ (~'
gJ ((~' ~,)
+ pvv
)(~' g,)
T
(~r gr)(~' ~,)(~' g,) +p (~r gr) v( (~r grH
=
(~1
=
gJ +
pZZT
= D+ pZZT .
4. Bestimme eine orthogonale Matrix WE lRnxn und den Index r E {I, 2, ... , n}, sodass mit w = WT z gilt: T
A •
(a) W DW = d1ag(JlI, /L2," " /Ln) '
(b) /L1 > /L2 > . .. > /LT' (c)
Wi
#
°fiir i = 1,2, . . . , r und
Wi
=
°fiir i > r .
T
6.3. Ein Divid e-and-Conquer-Verfahren ("Teile-und-Herrs che-Verfahren")
137
Setze
z :=w=WTz. Dann gilt
WTQTTQW
= WTCD + pzZT)W = wtow + pWTz[WTzf = D+ pzzT .
5. Berechne die Nullstellen der Funktion n
'2
" ~. z· f(>') = 1 + P'L..t i= l
6. Berechne fiir i
di
-
>.
= 1,2 , . . . , r
mit Z = (Zl, Z2, . . . ,zrf und Vektoren Vi '
f>
,
"
= diag(dbd2 , .. . ,dr ) . Normiere danach die
7. Setze
und berechne Q = QWV.
Bemerkung 6.5 1. Nach der Zuweisung in 4. gilt
mit zzT =
(
*~. 1 *r1
*lr
o
0) .
* rr
0
Es sind also n - r Eigen,werte von T bereits bekannt. , Dies~ konnen , direkt aus der Diagonalmatrix D abgelesen werden, niimlich dr +b dr +2 , .. . , dn • Die zugehorigen Eigenvektoren von T sind die entsprechenden Spalten von QW . Die Berechnungen in den Punkten 5 bis 7 reduzieren sich deshalb im Wesentlichen auf lRr . Man spricht in diesem Zusammenhang von Deflation.
2. In den Punkten 5, 6 und 7 bestimmt m an
also insgesamt
138
Kapitel 6. Das symmetrische Eigenwert-Problem
3. Deflation tritt relativ hiiufig auf. Nur deshalb ist das Divide-and-ConquerVerfahren zu anderen Verfahren konkurrenzfiihig. 4. Zur Berechnung der Nullstellen von f(>..) in Punkt 5 existieren einfache, global konvergente, schnelle Newton-iihnliche Verfahren.
Kapite17 Der Cauls-Algorithrnus - Anwendung bei Integralgleichungen In diesem Kapitel betrachten wir eine parallele Implementierung des Gaul&Algorithmus, die fiir die Losung von linearen Gleichungssystemen mit vollbesetzten unsymmetrischen Matrizen geeignet ist. Als ein Anwendungsfall, bei dem Matrizen dieses Typs auftreten, stellen wir das Nystromverfahren vor, das zur numerischen Losung linearer Fredholmscher Integralgleichungen zweiter Art dient . Zuvor aber geben wir einige grundlegende Eigenschaften dieser Integralgleichung an.
7.1
Grundlagen
Wir betrachten im Folgenden die lineare Fredholmsche Integralgleichungen zweiter
Art x(s)
-l
b
K( s, t)x(t) dt = y(s),
s E [a, b) .
(7.1)
Die gegebene rechte Seite y(s) sei auf dem Intervall [a, b) stetig. Die gegebene Funktion
K : {la, b] x [a, b)-tlR, (s, t) rl K(s, t), der sogenannte Kern, sei auf dem Quadrat [a,b] x [a, b] stetig. Funktionen x(s), die auf [a, b) stetig sind und die Integralgleichung (7.1) auf [a, b] erfiillen, bezeichen wir als Losungen der Integralgleichung. Der lineare Operator K, definiert durch
(Kx)(s)
:=
l
b
K(s, t)x(t) dt,
G. Alefeld et al., Parallele Numerische Verfahren © Springer-Verlag Berlin Heidelberg 2002
x E C[a,b]
140
Kapitel 7. Der Gauf-Algorithmus - Anwendung bei 1ntegralgleichungen
heif5t Fredholmscher Integraloperator. In Operatorschreibweise lautet die Fredholmsche Integralgleichung (7.1) somit
(I - K)x = y,
x E C[a,b).
(7.2)
Bei der Untersuchung der eindeutigen Losbarkeit der Fredholmschen Integralgleichung spielt der Begriff des kompakten Operators eine wichtige Rolle.
Definition 7.1 Ein linearer Operator K vom Banachraum X in den Banachraum Y heiEt kompakt, wenn fur jede beschriinkte Folge (Xi) in X die Folge (KXi) eine konvergente Teilfolge enthiilt. Ein kompakter Operator K vom Banachraum X in den Banachraum X heiEt kompakt auf X . Der folgende Satz macht nun Aussagen tiber Existenz und Eindeutigkeit einer Losung.
Satz 7.1 (Fredholmsche Alternative) Gegeben sei die Fredholmsche Integralgleichung zweiter Art
(I - K)x = y. Der Operator K : X
-7
(7.3)
X sei auf dem Banachraum X kompakt.
Dann hat der Operator I - K entweder eine beschriinkte lineare Inverse
(I - K.)-l : X
-7
X,
sodass also Gleichung (7.3) fur jede rechte Seite y E X eine eindeutig bestimmte Losuug X E X besitzt. Oder die Gleichung (7.3) besitzt nicht fur jede rechte Seite y E X eine Losung. 1m Falle, dass eine Lbsung existiert, ist sie nicht mehr eindeutig, d. h. die homogene Fredholmschen 1ntegralgleichung zweiter Art
(I - K.)x = 0 besitzt nichttriviale Losungen. Der Losungsraum der homogenen Gleichung ist aber endlichdimensional. Den Beweis findet man in [17] oder [15). Im folgenden Satz geben wir Voraussetzungen an, unter denen der Fredholmsche Integraloperator K auf CIa, b) kompakt ist und somit der Satz tiber die Fredholmsche Alternative anwendbar ist.
7.2. Das Nystrom-Verfahren
141
Satz 7.2 Der Kern K des Fredholmschen Integraloperators K erfulle
~b IK(s,t)1 dt < 00 , lim
rIK(~,
fur alle s E [a, b],
t) - K(s, t)1 dt = 0,
fur alle s E [a, b].
€-+S } a
Dann ist K kompakt auf X = CIa, b]. Fiir den Beweis siehe
[151.
Somit ist unter der von uns zuvor gemachten Voraussetzung, dass der Kern der Fredholmschen Integralgleichung auf [a, b] x [a,b] stetig ist, die Fredholmsche Alternative anwendbar. 1m Folgenden setzen wir voraus, dass die Fredholmsche Integralgleichung zweiter Art eindeutig losbar ist und gehen naher auf die numerische Berechnung einer Naherungsl6sung ein.
7.2
Das Nystrom-Verfahren
Zur Approximation des in (7.1) auftretenden Integrals verwenden wir ein Quadraturverfahren
mit gegebenen Quadraturgewichten Wnj , j = 1, ... , n und Quadraturknoten tnj, j = 1, . . . , n. Anstelle der gesuchten Losung x(s) von (7.1) berechnen wir nun eine Niiherungsfunktion xn(s), indem wir die durch Anwendung des Quadraturverfahrens fiir s E [a, b] resultierende semidiskrete Gleichung n
xn(s) -
L wnjK(s,tnj)xn(tnj) = y(s).
(7.4)
j=l
nach xn(s) auflosen . Unter den zuvor gemachten Stetigkeitsvoraussetzungen ftir y(s) und K(s ,t) ist X n E
C[a,b] .
Mit dem Nystrom-Operator n
(Knx)(s) :=
L wnjK(s ,tnj)x(tnj) j=l
142
Kapitel 7. Der Gauls-Algorithmus - Anwendung bei Integralgleichungen
ergibt sich fiir (7.4) in Operatorschreibweise die sogenannte Nystrom-Gleichung : Xn
E C[a,b] .
(7.5)
Wir stellen nun das Nystrom- Verjahren (siehe 1151) vor, das diese Gleichung in zwei Schritten lost. Im ersten Schritt betrachten wir Gleichung (7.4) jeweils fiir s := t-«. i = 1,2, . . . ,n und erhalten n
Xn(tni) -
I: wnjK(tni, tnj)xn(tnj) = y(tni),
i = 1,2, . . . , n,
j=l
Diese n Gleichungen konnen als lineares Gleichungssystem
(7.6) mit der (n, n)-Matrix
An = (aij), der rechten Seite
Yn := (y(tni)) und einem Vektor
mit der gesuchten Naherungslosung an den n Quadraturknoten als Komponenten aufgefasst werden. Nach Losen dieses fur geniigend grolse n eindeutig losbaren linearen Gleichungssystems (siehe Satz 7.3) kennen wir die Funktionswerte der Naherung X n an den Quadraturknoten tnj, j = 1, . . . , n . Damit definieren wir im zweiten Schritt ftir s E [a ,b] eine Funktion xn(s) durch
xn(s) := y(s) +
n
n
~1
~1
I: wnjK(s, tnj)xn(tnj) = y(s) + I: wnjK(s,tnj)x'] .
(7.7)
Die so erhalten Funktion lost gemaf& Konstruktion die semidiskrete Gleichung (7.4) fiir aIle s E [a, b] . Die Funktion xn(s) betrachten wir als Naherung von x(s) aus (7.1). Mit ihr ist es einfach moglich auch fiir von den Quadraturknoten verschiedene Werte von s Naherungswerte fiir die gesuchte Losung x(s) der lntegralgleichung zu berechnen. Auf die Konvergenztheorie des Verfahren wollen wir hier nicht naher eingehen (fiir Naheres siehe 1151). Wir halten hier nur die wesentlichen Ergebnisse fest. Das verwendete Quadraturverfahren sei konvergent, d .h. lim Qn(J) =
n~oo
l
a
b
j(t)dt,
Dann gilt die nachfolgende Konvergenzaussage.
j E C[a,b] .
7.3. Parallelc Durchfuhrung des Nystrom-Verfahrcns
143
Satz 7.3
1st die lineare Fredholmsche 1ntegralgleichung zweiter Art (7.3) eindeutig Wsbar, so gibt es ein no E N, sodass fur alle n 2 no das lineare Gleichungssystem (7.6) eindeutig auflosbar ist und fur die dann eindeutig bestimmte Funktion (7.7) gilt lim
n-tOO
Xn
=
X.
Bemerkung 7.1 Des Losen der Nystrom-Gleichung (7.4) mit Hilfe des Nystrom-Verfahrens erfordert bei Verwendung eines direkten Verfahrens zur AufIosung des linearen Gleichungssystems (7.6) einen sehr hohen Rechenaufwand von O(n3 ) .
Des von Atkinson in [1, Kapitel 6} vorgestellte iterative Zweigitter- Verfahren reduziert den Rechenaufwand zur Losuag der Nystrom-Gleichung auf O(n 2 ) . Auf Eiuzelheiten gehen wir hier nicht ein.
7.3
Parallele Durchfiihrung des Nystrom-Verfahrens
Zur Durchfiihrung des Nystrom-Verfahrens auf einem Rechner miissen wir zunachst die Eintrage der Matrix An und des Vektor Yn berechnen. Dies kann bei geeigneter Datenverteilung (siehe Definition 7.2) ohne Kommunikationsaufwand parallel geschehen. Den meisten Rechenaufwand erfordert das Losen des linearen Gleichungssystems (7.6). Die Matrix I - An ist in der Regel voll besetzt und i. Allg. unsymmetrisch. Zum Losen dieses Gleichungssystems wollen wir ein direktes Verfahren, den GaulsAlgorithmus mit Pivot-Suche verwenden. Sobald der Losungsvektor x., allen Prozessoren bekannt ist, konnen wir die Bestimmung von Naherungswerten an von den Quadraturknoten verschiedenen Stellen parallel und ohne Datenaustausch durchfiihren . Dazu iibernimmt jeder Prozessor alle Aufgaben die fiir die Berechnung der Naherung an einer Stelle notwendig sind. Berechnungen fiir verschiedene Stellen laufen parallel auf unterschiedlichen Prozessoren . Wir konzentrieren uns daher hier auf die Parallelisierung des Oauls-Algorithmus.
7.3.1
Der parallele Gauf&-Algorithmus mit Pivotsuche
Urn das lineares Gleichungssystem Ax=b
mit A := I - An, b := Yn
Kapitel 7. Der Gaus-Algorithmue - Anwendung bei Integralgleichungen
144
mit nichtsingularer Matrix A = (aij) E JRnxn und rechter Seite b = (bi ) E JRn zu losen, setzen wir zunachst voraus, dass fiir die Matrix A eine Zeriegung der Form
A=LU existiert, sodass die Matrix L = (lij) E JRnxn untere Dreiecksgestalt und die Matrix U = (Uij) E JRnxn obere Dreiecksgestalt besitzt (LU-Zerlegung von A). Die Losung x = (xd E JRn berechnen wir dann fiber die beiden gestaffeiten Gleichungssysteme:
Lx=b,
Ux=x.
Die Berechnung der Faktoren Lund U dieser Zeriegung erfordert dabei den hOchsten Rechenaufwand. Nachfolgend beschreiben wir erst, wie diese Zeriegung seriell, dann parallel, erzeugt wird. Bei der Parallelisierung folgen wir dem Vorgehen in Frommer [11, Kapitel 4]. In Algorithmus 7.1 geben wir die einfachste Form der LU-Zeriegung in Codeform an.
Algorithmus 7.1 (LU-Zerlegung) L :=1, U :=A For k = 1, .. . ,n - 1 For i = k + 1, ... ,n lik := Uik/Ukk, Uik := 0 For j = k + 1, ... ,n Uij := Uij - likUkj
Die beiden nachfolgenden Matrizen zeigen schematisch die Veranderungen die Algorithmus 7.1 im k-ten Schritt (hier k = 3) an den Matrizen Lund U durchfiihrt, Mit dem Symbol gekennzeichnete Eintrage sind in diesem Schritt neu erzeugte von null verschiedene Elemente. Mit 0 gekennzeichnete Elemente werden im weiteren Veriauf der LU-Zeriegung nicht weiter benotigt und auch nicht weiter verandert.
*
1
L=
0
0
1
0
0
0
0
0
0
0
0
1
* * *
1
U= 1 1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
* * * *
* *
* *
*
Die Faktoren Lund U werden auf Grund dieser Speicherbenutzung bei der praktischen Implementierung der LU-Zeriegung auf einem Rechner im Speicherbereich der Matrix A abgelegt und benotigen damit keinen zusatzlichen Speicher. Der einfache Algorithmus 7.1 birgt aber Probleme, denn auch bei nichtsingularer Matrix A kann das Element Ukk, durch das im k-ten Schritt dividiert wird, verschwinden.
7.3. Parallele Durchfiihrung des Nystrom-Verfahrens
145
Ein weiteres Problem ergibt sieh, wenn im k-ten Schritt Ukk sehr klein ist. In diesem Fall sind die Zahlen lik' i = k + 1, . .. n, sehr grog, was zu Problemen mit Rundungsfehlern bei der Berechnung von Lund V fiihren kann . Aus diesen beiden Grunden berechnen wir keine Faktorisierung von A, sondern verwenden bestimmte Pivotstrategien , die Zeilen oder Spalten von A vertausehen und bestimmen eine Zerlegung der umsortierten Matrix. Bei der Spaltenpivotsuche bestimmen wir im k-ten Schritt das betragsgroste Element von V in der k-ten Spalte unterhalb der Hauptdiagonale einschlieslich des Diagonalelementes. Danach vertauschen wir die zugehorige Zeile s und die Zeile k. Auf die daraus resultierende modifizierte Matrix V wenden wir wie schon bei der Faktorisierung ohne Pivotsuche einen Gau&-Eliminationsschritt an . Durch dieses Vorgehen berechnen wir eine LU-Zerlegung der Matrix PA = LV, mit einer durch die Vertauschungen in den einzelnen Schritten bestimmten Permutationsmatrix P. Aus den beiden gestaffelten Gleichungssystemen
Lx= Pb,
Vx=x
bestimmen wir nun die gesuchte Losung von Ax
= b.
Bei der Zeilenpivotsuche bestimmen wir im k-ten Schritt das betragsgroste Element von V in der k-ten Zeile rechts der Hauptdiagonalen einschlielslich des Diagonalelementes und vertauschen danach die zugehOrige Spalte s und die Spalte k. Auf die so modifiziertc Matrix V wenden wir wieder einen GauJ&-Eliminationsschritt an. Auf diese Weise berechen wir cine LU-Zerlegung der Matrix AP = LV, die iiber die beiden gestaffelten Gleichungssysteme
Li = b,
VX = i ,
x = PX
(7.8)
zu einer Losung von Ax = b fiihrt . Eine serielle Version der LU-Zerlegung mit Zeilenpivotsuche hat die in Algorithmus 7.2 beschriebene Form :
Algorithmus 7.2 (LV-Zerlegung mit Zeilenpivotsuche)
P := I, L := I, V := A For k = 1, . . . ,n - 1
Bestimme einen Index s mit
IUksl
= max
J=k,...,n
IUkj!
Vertausche die Spalten mit Index s und k von V und P For i = k + 1, . .. , n lik := Uik/Ukk, Uik := 0 For j = k + 1, . . . , n Uij := Uij - likUkj
Auch hier konnen wir wieder , urn zusatzliche Belegung von Speicherplatz zu vermeiden, die Matrizen Lund V im Speicherbereich der Matrix A ablegen. Zur Speicherung der Matrix P geniigt es, wenn wir einen Vektor anlegen, der die Spaltenvertauschungen wahrend des Algorithmus mitprotokolliert.
146
Kapit el 7. Der Caus-Algorithmus - Anwendung bei Int egralgleichungen
Fur die parallele Durchfiihrung des Gaus-Algorithmus wollen wir die Matrix A nicht auf allen Prozessoren vollstandig vorliegen haben, sondern nur immer die Zeilen, die im jeweiligen Prozessor benotigt werden. In Definition 7.2 erklaren wir wie die Datenverteilung erfolgen soIl, wenn die Prozessoren PI, . .. , P» zur Verfiigung stehen:
Definition 7.2 (zyklisch nach Zeilen (Spalten) abgespeichert) Die Matrix A E lR,n xn heiJ5t im Parallelrechner mit den Prozessoren PI,"" Pp zyklisch nach Zeilen (Spalten) abgespeichert, falls Prozessor Pi genau die Zeilen (Spalten) j von A enthiilt mit jmodP = i. In Algorithmus 7.3 beschreiben wir die LU-Zerlegung mit Zeilenpivotsuche fiir Prozessor l. Die Matrizen, die wir darin benutzen, wollen wir dabei zyklisch nach Zeilen abspeichern. Auch hier konnen wir wieder bei der praktischen Implementierung die Matrizen Lund U im Speicherbereich der Matrix A ablegen und die Matrix P durch einen Vektor reprasentieren.
Algorithmus 7.3 (Parallele LU-Zerlegung mit Zeilenpivotsuche) myrows = {i E N I imodP = l, i ~ n} P := I, L := I, U := A (nur fiir Zeilen aus myrows) For k = 1, . . . , n - 1 If k E myrows Bestimme einen Index s mit IUksl = max IUkjl J=k,...,n
Versende Vektor (Ukk ,Uk,k+b " . , Ukn) und Index s an elle anderen Prozessoren (tkl t k+b ... , t n) := (Ukk , Uk,k+b ... , Ukn) Else Empfange Vektor (tk, tk+b' . . , t n) und Index s Vertausche die Spalte mit Index s und k von U und P (nur fiir Zeilen aus myrows) Vertausche Elemente mit Index s und k von t For i = k + 1, .. . , n If i E myrows
lik := Uik/tk, Uik := 0 For j
= k + 1, .. . , n
Uij := Uij - liktj Auf die Parallelisierung der Auflosung nach dem gesuchten Vektor x aus der LUZerlegung (siehe (7.8)) wollen wir hier nicht naher eingehen. Da diese einen bedeutend geringeren Rechenaufwand benotigt als die LU-Zerlegung (O(n2 ) zu O(n3 ) ) und viel Kommunikaton fiir eine verteilte Berechnung erfordert, kann es sinnvoll sein die Losung x auf nur einem Prozessor zu berechnen und danach an alle anderen zu verschicken.
Kapitel8 Aufgaben fiir ein Parallelrechnerpraktikum 1m vorliegenden Kapitel werden Beispielaufgab en vorgest ellt , die sich fiir ein inhaltlich an die vorangehenden numerischen Verfahren angelehnt es Parallelrechnerpraktikum anbieten. Dabei gibt es zwei Typen von Aufgaben: Element are Aufgab en und sogenannte Spezialaufgaben. Die element aren Aufgaben sind Gegenst and des erst en Abschnitts. Ihre Bearb eitung soll ein Einstieg in paralleles Programmieren sein. Darauf aufbauend konnen dann die weiteren Aufgaben bearb eit et werden. Zur Programmierung wird die Pr ogrammbiblioth ek MPI empfohlen. Eine kurze Einfiihrung in ihre Verwendung findet man in Abschnitt A.3.
8.1 8.1.1
Elementare Aufgaben Speed-up
a) Berechnen Sie den minimalen prozentu alen parall elisierbaren Anteil eines Programms, urn auf 128 P rozessoren einen Speed-up von 100 zu erreichen. b) Der inkrementelle Speed-up eines parallelen Programms sei stets 1.8. Berechnen Sie ohne Beriicksichtigung von Kommunikati onszeiten den maximal err eichbaren Speed-up und die zugehorige Effizienz fiir 8, 32 und 128 Prozessoren.
Losung a) Nach dem Amdahl 'schen Gesetz ist
s=
1 a + (1 - a)/P
p
(P - l )a+ 1
G. Alefeld et al., Parallele Numerische Verfahren © Springer-Verlag Berlin Heidelberg 2002
p (P - l )a + 1 = S'
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
148
wobei a der prozentuale sequentielle Anteil ist. Auflosen nach a ergibt
r :»
1 P-l'
a=--·--
S
Wir set zen P
= 128 und S = 100 und erhalten a
28
1
= 100 . 127 = 0.002204724. ...
Mit 1 - a = 0.997795275. .. ergibt sich: Mit einer Parallelisierung von etwa 99.8% ist S = 100 fiir P = 128 garantiert. b) Fiir 2k Prozessoren ergibt sich bei einem inkrementellen Speed-up von 1.8 S = 1.8 k • Damit erhalt man die folgenden (auf zwei Stellen gerundeten) Werte fiir den Speed-up und fiir die Effizienz:
I Prozessoren I Speed-up I Effizienz I 2 8 32 128
8.1.2
1.80 5.83 18.90 61.22
0.90 0.73 0.59 0,48
Ein erstes paralleles Programm
Schreiben Sie ein Programm hallo. f bzw. hallo. c, so dass Prozess Po die Meldung "Halla . . . Ihr Name!" und jeder Prozess Pi eine Meldung mit der zugehorenden Prozessnummer, z.B. "Ich bin Prozess Nr. .. . von insgesamt . . . Prozessen" ausgibt und lassen Sie das Programm mit unterschiedlicher Anzahl von Prozessen laufen .
Durchfiihrung In Abschnitt A.3.1 wird der C-Quellcode des Programms angegeben und das Programm diskutiert.
8.1.3
Punkt-zu-Punkt-Kommunikation mit MPI
Schreiben Sie ein Programm pipeline so, dass eine zu versendende Nachricht in einem Ring aus mindestens drei Prozessen verschickt wird. Bestimmen Sie dazu mit geeigneten MPI-Befehlen die Variablen procs (Anzahl der Prozesse) und mypid (Prozessnummer). Ermitteln Sie dann die Nummern der Nachbarprozesse leftpid und rightpid. Lesen Sie nun die Nachricht von Prozess Po ein, versenden Sie sie im Ring und geben Sie danach die von Prozess Po empfangene Nachricht wieder aus.
8.1. Elementare Aufgaben
149
Durchfiihrung und Ergebnis In Abschnitt A.3.1 wird der C-QueIlcode fur das Programm pipeline diskutiert.
8.1.4
Kommunikationsbandbreite und Start-up-Zeit
Schreiben sie unter Verwendung von MPI ein paraIleles Programm Pingpong fiir zwei Prozesse, das n-mal ein m-dimensionales Feld aus Integer-Zahlen zwischen den Prozessen hin und herschickt. Lesen Sie dazu n und m von Prozess Po ein und versenden Sie diese Werte an Prozess Pt. Messen Sie bei unterschiedlichen Werten von n und m die Programmlaufzeit fiir den "Ping-Pong-Prozess". Ermitteln Sie daraus Start-up-Zeit und Kommunikationsbandbreite.
Durchfiihrung und Auswertung ParaIlele Programme erfordern in der Regel Kommunikation zwischen den einzelnen Prozessen zum Datenaustausch. (Dabei sind Kommunikationsoperationen meist deutlich zeitaufwendiger als Rechenoperationen.) Die Kommunikationszeit setzt sich grob betrachtet aus 2 Komponenten zusammen: t comm
=
t startup
+ tsend·
Zeit urn die Kommunikation anzustosen. Sie ist unabhangig von der Graf.l,e der zu versendenden Nachricht. Versendet man eine kleine Nachricht (z.B. eine Integerzahl), so gilt t comm ~ tstartup'
tstartup:
tsend:
Zeit zum versenden der Daten. Sie ist proportional zur Grage der zu versendenden Nachricht. Versendet man sehr viele Daten in einem Paket, so gilt t comm ~ tsend ·
Kommunikationsbandbreite (z.B . gemessen in Mlsyte /s) Anzahl der versendeten Daten Benotigte Zeit
bei
ts end
>> tstartup'
Abbildung 8.1 zeigt die Bandbreite in Megabyte pro Sekunde aufgetragen tiber der Grage des vcrsendeten Datcnpaketes. Pakete bis zu einer Paketgrose von 8 Kilobyte benotigen aIle in etwa die gleiche Ubertragungszeit. Hier iiberwiegt also die Startup-Zeit die Versende-Zeit. Es sind die Bandbreiten fiir drei unterschiedliche Ubertragunsgwege aufgetragen. Der langsamste Weg ist die Ubertragung zwischen zwei Knoten des Linux-Clusters (siehe auch Abschnitt A) tiber 100Mbit Ethernet. Die Ubertragung tiber Gigabit Ethernet liefert schon deutlich hohere Bandbreiten. Am schnellsten ist der Datentransfer zwischen zwei Prozessoren innerhalb eines Knoten.
150
Kapitel8. Aufgaben fiir ein Parall elrechnerpraktikum
Aus Abbildung 8.1 ergeben sich die folgenden Messwerte fur die Ubertragung tiber Gigabit Ethernet:
I=} maximale Bandbreite: ~ 38 MByte js I ---.----r---.,.------.----.....---,.~
102 r - - -......
,,~.
•
41
.... ....... .
. .' ..
.
'
intern GigaBit Ethernet
•
100 Me aBit Ethernet 10-4
10- 3
10- 2
10- 1
Paketgr6Be in MegaByte
Abb. 8.1: Bandbreitenmessung fiir unterschiedliche Paketgrcsen fiir die interne Kommunikation im Cluster und die externe Kommunikation tiber 100 Mbit Eth ernet und Gibabit Ethernet.
8.1.5
Kollektive Kommunikation mit MPI
Gegeben ist ein Blockvektor
mit
Xi
E
JRm , p . m = n. Dabei wird
Xi
dem Prozess
P;-l
zugeordnet .
a) Lesen Sie m und n mit Prozess Po ein und versenden Sie diese Werte an aile anderen Prozesse mit MPI _Bcast.
8.1. Elementare Aufgaben
151
b) Schreiben Sie ein paraUeles Programm zur Berechnung von IIxliI, Ilxlloo und IIxl12 indem zunachst Ilxillj, j E {I , oo} bzw.llxill~ berechnet wird und dann die MPI-Routine MPI_Allreduce zweimal aufgerufen wird.
c) Berechnen Sie nun 1I~lIx. Messen Sie die Zeit fiir Berechnung und Kommunikation und bestimmen Sie den Speed-up Ihres Programms. Verwenden Sie zur Zeitmessung MPCWtime. Die Ausgabe der Zeiten soll stets von Prozess Po erfolgen .
Durchfiihrung und Ergebnisse In jedem Prozess wird jeweils der lokale Anteil zum Skalarprodukt berechnet. Bei Berechnung von IlxliI und Ilxl b sind jeweils Additionen durchzufiihren , wahrend die Berechnung von Ilxlloo Maximumsbildung erfordert. Daher kann IlxliI und Ilxlb zusammen mit einem MPCAllreduce-Aufruf unter Verwendung der Operation MPI_SUM fiir einen zweikomponentigen Vektor aus den lokalen Anteilen berechnet werden. Zur Berechnung von Ilxlloo wird MPI_Allreduce mit der Operation MPI_MAX aufgerufen. Mit Hilfe verschieden er Problemgrosen wurden Berechnungen mit 1, 2, 4, 8 und 16 Prozessoren durchgefiihrt. Wahlt man die lokale Problemgrose fest und variiert nur die Prozessorenzahl, so erfordert das parallele Programm jeweils etwa gleiche Berechnungsz eit. Das bed eutet: Das Losen eines Problems der Dimension n auf einem Prozessor erfordert etwa die gleiche Berechnungszeit wie das Losen eines Problems der Dimension n . P auf P Prozessoren. Die Kommunikationszeit hangt von der Problemgrofse nicht ab, sie ist nur abhangig von der Prozessorenzahl, da zur Berechnung einer Summe mit vert eilten Summanden umso mehr Kommunikationsschritte notig sind , je mehr Prozessoren beteiligt sind (siehe auch Abbildung 1.13). Diese Ergebnisse sind in Abbildung 8.2 dargesteUt. Messung und Vergleich der gesamten Programmlaufzeit bestehend aus Kommunikation und Berechnung zeigt: Bei Berechnungen mit gro/?'er Dimension konnen die Kommunikationszeiten gegeniiber den Berechnungszei ten vernachlassigt werden , so dass sich fiir bis zu 8 Proz essoren ein optimaler Speed-up (Abbildung 8.3) ergibt. Bei Verwendung von 16 Prozessoren, wobei jeweils zwei Prozessoren zu einem Rechnerknoten gehoren, ist der Speed-up geringfiigig schlechter , weil sich jeweils zwei Prozessoren einen gemeinsamen Datenbus und Speicherbandbreite teilen. Der etwas schlechtere Speed-up bei 16 Prozessoren ist also Folge der verwendeten Hardwarekonfiguration.
152
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
Komunikationszeit 2 Proz: --+--Komunikationszeit 4 Proz: ---.)<--•. Komunikationszeit 8 Proz: . . Komunikationszeit 16 Proz: ·······8 ······· Berechnungszeit 1/2/4/8/16 Proz: -._.• -.•.
10/
.'
](1 -.
10-1
~
10-2
~
10-3
--., ., .,
~~~-=~=~~~~~~~~~~~::~::~~~~~~~~~~~~~~~~~~~~~~~~~~--::~~~.- ~
10-4 10-5 10/
---
•
. . ......
102
.>
---
.' 103
; .,
...
104
loS
Dimensionn
Abb. 8.2: Berechnungszeit und Kommunikationszeit bei paralleler Berechnung von Vektornormen mit fester lokaler Problemgrose 16
r------,-------.------...-------,
8
2
].J<:-
--'-
2
1
-L
4 Prozessoren
-'--
8
-.J
16
Abb, 8.3: Speed-up bei paralleler Berechnung von Vektornormen mit n 60 000 000
153
8.2. Parallele Matrix-Vektor-Multiplikation fiir dichtbesetzte Matrizen
8.2
Parallele Matrix-Vektor-Multiplikation dichtbesetzte Matrizen
fiir
Es solI y = Ax mit p Prozessen berechnet werden. a) Schreiben Sie ein (sequentielles) Programm zur Aufteilung einer reellen (n,n)Matrix und des zugehorigen Vektors in Blockkomponenten moglichst gleicher GroBe:
A=
All A12 A 2l A 22
.. ( .
ApI
AlP] A 2p
...
..
A p2
•••
...
.
,
A u E lRn 1ok ; xnlok;
A pp
p
mit
L nlok, = n . Hierzu wird dem Prozess P;-l, i = 1, ... ,p, entweder die ;=1
i-te Blockspalte (Fall 1) oder die i-te Blockzeile (Fall 2) zugeordnet. Fiir jeden Prozess solI dann eine eigene Eingabedatei mat . 01, mat . 02, mat . 03 usw. erstellt werden , die folgendes enthalt: • lokale Problemgrolse nlok, fiir den entsprechenden Proz ess, • globale Dimension n der Matrix, • Anzahl der Prozesse p, • die dem Prozess zugeordneten Matrixeintriige und Eintriige der entsprechenden Blockkomponente der rechten Seite. b) Programmieren Sie nun die Matrix-Vektor-Multiplikation y = Ax nach folgendem Vorgehen: 1. Lesen Sie mit den einzelnen Prozessen die zugeordneten Matrix- und Vektorkomponenten ein.
2. St ellen Sie den Vektor nlok = (nlok;) E NP jedem Prozess zur Verfiigung. 3. Priifen Sie mit Hilfe der gelesenen Daten, ob die Eingabedaten plausibel sind, indem Sie Prozessanzahl p und L:f=l niok, = n priifen. 4. Zur Berechnung des Losungsvektors y sind p2 Teil-Ergebnisvektoren Y;j := A ;jxj zu berechnen. Wir betrachten zwei verschiedene Vorgehensweisen. Berechnen Sic • im Fall 1, das heiBt Aufteilung in Blockspalten (siehe(a)), in Schritt k, k = 1, .. . , p,
KapiteI 8. Aufgaben fiir ein ParaIIelrechnerpraktikum
154
= 1, ... ,p. Verwenden Sie anschlies end p Berechnung von Yk = I: Yu . so dass das Ergebnis
jeweils im Pro zess P;-b i MPI_Reduce zur
i=l
im Prozess k - 1 vorliegt. • im Fall 2, das hei&t Aufteilung in Blockzeilen, in Schritt k, k = 0, , p - 1, die Produkte A i,i+kXi+k in den Prozessen Pi - b i = 1, , p - k, und die Produkte A i ,i-p+kXi-p+k in den Prozessen Pi - b i = P - k + 1, . . . ,p. Die Blockkomponenten von x sind im Ring zu versenden . Das heist: Schritt 1: Prozess Po: Prozess PI: P rozess P2 :
= A llXb = A 22X 2, Y 33 = A 33 X3,
sende sende sende
X2 X3
an Pp an Po an PI
Berechne Ypp
= Appxp,
sende
xp
an Pp - 2
Schritt 2: Prozess Po: P rozess P I :
Berechne Berechne
= A 12X2 , = A 23X3 ,
sende sende
Prozess Pp - 2 : Prozess Pp - l :
Berechne Berechne
Yp-l ,p
= Ap-l ,pxp , = ApIXI ,
sende x p sende x,
an Pp - 3 an Pp - 2
Schritt 3: Prozess Po: Prozess PI :
Berechne Berechne
Yl3
= A 13X3 , = A 24X4 ,
sende sende
X3
an Pp an Po
Prozess Pp- 2 : Prozess Pp - l :
Berechne Berechne
Yp-l ,l
sende sende
Xl
Prozess Pp -
Berechne Berechne Berechne l:
Yll
Y 22
Yl2 Y23
Ypl
Y24
Yp2
=
= Ap-I, IXI, A p2 X 2 ,
Xl
X2 X3
X4
X2
l
an Pp an Po
l
l
an Pp - 3 an Pp - 2
Verwenden Sie zum Versenden eine geeignete Routine, so dass Berechnung und Kommunikation parallel ablaufen konnen,
c) Erweit ern Sie nun Ihr parallel es Programm, so dass mit der Vektoriteration nach von Mises der betragsgrcste Eigenwert von A berechnet wird.
d) Fiihren Sie Laufzeitmessungen fur Ihr paralleles Programm dur ch, indem Sie die Rechenzeit en in c) fiir verschiedene Matrixdimensionen (n = 125, n = 250, n = 500 bis n = 8000) und Prozesszahlen vergleichen. Verwenden Sie als
8.2. Parallele Matrix-Vektor-Multiplikation fiir dichtbesetzte Matrizen
155
Testmatrizen z.B.
A = (aij) , A = (aij ), A
= (aij),
aij = i aij = i
+ (j +j ,
l)n,
1
aij = 2Ii-jl ' n
aij = {
~1,
i =j i =I j
Bemerkungen und Bearbeitungshilfen Die (n x n)-Matrix A habe die Darstellung aus a). Mit dieser Blockschreibweise gilt fiir den Ergebnisvektor y = Ax mit y = (;:) , s. E JR"'"' , fiir s = 0, .. . , p
~
1 und
p
I: nlok, =
n
i= 1 P
Yi = LYij, j=1
Zur Realisierung der Matrix-Vektor-Multiplikation betrachten wir zwei Moglichkeiten zur Aufteilung der Blockkomponenten von A auf die einzelnen Prozesse (siehe Abbildung 8.4) 1. Auft eilung in Blockspalt en (Fall 1, Abbildung 8.4 a))
2. Aufteilung in Blockzeilen (Fall 2, Abbildung 8.4 b))
a)
(ww=~) ApI
Po
p2
PI
A pp pp. 1
b)
Cll umuuAlP'I ) I ~21
... .• •.. •• . . . . . .
~2P
IA pi · · · · .... ········ A pp I
Po PI
Pp-I
Abb. 8.4: a) Aufteilung in Blockspalten b) Aufteilung in Blockzeilen
In beiden Fallen erfolgt die Aufteilung der Vektoren in Blockkomponenten der Dimension nlok, (Abbildung 8.5), wobei die i-te Blockkomponente dem Prozess Pi - 1 zugeordnet wird.
156
Kapitel 8. Aufgaben fur ein Parallelrechnerpraktikum
Pp- ' ' - - - ' - - - - - - - - = - - - - '
Abb. 8.5 : Aufteilung zweier Vektoren
X
und Y fiir p Prozesse
Berechnung von Y = Ax bei Aufteilung in Blockspalten Die Anteile Yij zur Blockkomponente Y« werden verteilt berechnet, indem Y» im Prozess Pj - l berechnet wird. Das ergibt folgende Vorschrift
For i = 1, . .. , p • Berechne
Yij
=
Aijxj
• Berechne
Yi
=
I: Yij
im Prozess Pj -
l
(parallel)
p
mit kollektiver Kommunikation (MPI_Reduce) so, dass
j=l
das Ergebnis im Prozess Pi -
l
vorliegt.
Berechnung von Y = Ax bei Aufteilung im Blockzeilen Jeder Prozess Pi-I, i = 1, ... ,p berechnet aIle seine Anteile Yij zum Ergebnis Yi. Dazu werden die entsprechenden Blockkomponenten von x benotigt. Zuniichst wird im Prozess Pi - l die Multiplikation mit den Diagonalblocken A ii durchgefiihrt, da die entsprechenden Komponenten Xi bei Programmstart vorliegen . Die Multiplikation mit der k-ten oberen und der (p - k)-ten unteren Nebendiagonalen kann in einem Schritt erfolgen (Abbildung 8.6) . Dazu ist im Prozess Pi - l die aktuell vorliegende Komponente von x zum linken Prozessnachbarn in einer Ringtopologie zu versenden. Das ergibt folgende Vorschrift Berechne Yii = AiiXi im Prozess Pi - l (parallel) If i > 1 Sende Xi an Prozess Pi - l If i=l Sende Xl an Prozess Pp - l y.. I im Prozess Pi-I, A "+IX ' I Bere chne ','+ ',' ,+ { Yp ,l im Prozess Pp- l = Ap,IXI usw .
i=l, ... ,p-l
8.2. Parallele Matrix-Vektor-Multiplikation fiir dichtbesetzte Matrizen
157
k - ') -~
k=l k=O
Abb. 8.6: Diagonalweises Durchlaufen der Matrix bei Matrix-VektorMultiplikation. Im Schritt k wird der Anteil von der k-ten oberen und der (p - k)-ten unteren Nebendiagonalen zur Matrix-VektorMultiplikation berechnet
Bemerkungen • Die Matrix-Vektor-Multiplikation mit der Realisierung nach Fall! ist einfacher zu implementieren.
• Die Vorgehensweise im Fall 2 ist auf manchen Rechnerarchitekturen (z. B. Ringtopologie, 2D-Gitter) effizienter, da keine kollektive Kommunikation notig ist und der Datenaustausch nur zwischen unmittelbaren Prozess-Nachbarn erfolgt .
• Das Abspeichern der Matrixblocke und der Zugriff auf diese sollte aus Effizienzgriinden in Fortran spaltenweise und in C zeilenweise erfolgen.
Zum Verfahren der Vektoriteration nach von Mises verweisen wir auf 134\.
Auswertung Wir untersuchen nachfolgend die Rechenzeiten fiir die parallele Vektoriteration mit der ersten Testmatrix. Es werden jeweils neun Iterationen benotigt. Die Rechenzeiten gelten fiir das Fortran-Programm mit Blockzeilen-Aufteilung.
158
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
Dimension der Matrix 125 250 500 1000 2000 4000
1 Prozessor 0.0082 0.0374 0.1452 0.5749 2.2699 8.9149
Rechenzeit in Sekunden fiir 2 Prozessoren 4 Prozessoren 8 Prozessoren 0.0057 0.0369 0.0804 0.0207 0.0306 0.0858 0.0848 0.0402 0.0527 0.2996 0.1394 0.0855 1.2116 0.5144 0.2490 4.1567 2.0025 1.1956
Bei der Vektoriteration ergeben sich die folgenden Zeit en: Dimension der Matrix
It erationen
1000 2000 4000 8000
15 15 15 15
Rechenzeit in Sekunden fiir 2 Prozessoren 4 Prozessoren 8 Prozessoren 0.881586 3.761922 18.22691 81.52879
0.353920 1.763998 7.492505 36.107614
0.293231 0.644379 3.150254 14.733503
Fur die gro~te Matrix mit N = 8000 liefert das Verfahren einen optimalen inkr ementellen Speed-up.
8.3
SOR-Verfahren mit Red-Black-Ordnung
Gegeben ist die Randwertaufgabe
{
uxx +Uyy = -201r 2 sin 21rx cos 41rY, (x,Y) E D :=(O, I) x(O, l ) u(x, y) = sin 21rx , (x , y) E aD.
Die Diskr etisi erung mit dem 5-Punkt-Differenzenstern auf einem aquidistanten Gitter mit je N inneren Gitterpunkten in x- und y-Richtung liefert bei Red-BlackOrdnung ein lineares Gleichungssystem mit einer Koeffizientenmatrix der Bauweise
wobei D r und Db Diagonalmatrizen sind. Zur parallelen Berechnung der Naherungswerte Vij ~ U ( Xi , yj), i,j = O, ... ,N -1 , soli das SOR-Verfahr en implementi ert werden. a) Lesen Sie N, den Relaxationsparameter w, die maximale Anzahl an Iterationen und die Toleranz e fiir das Abbruchkriterium vom Prozess Po ein und versend en Sie diese Werte an aIle anderen Prozesse.
8.3. SOR-Verfahren mit Red-Black-Ordnung
159
b) Bestimmen Sie zu jedem black-Gitterpunkt die benachbarten red-Gitterpunkte und ermitteln Sie damit die Besetzungsstruktur von E. (Falls eij =I ist, speichern Sie im Feld JE den Index jab. Verwenden Sie weiterhin einen Zeigervektor IE, dessen Komponenten auf den Beginn der Zeilen im Feld JE zeigen.) Fur eine Berechnung mit P Prozessen ist dazu die j -Schleife in P mogli chst gleiche Abschnitte aufzuteilen.
°
c) Berechnen Sie nun die It erierten fiir die Red- und Black-Punkte. Brechen Sie Ihre Iteration ab, sobald Ilvt - vt-11loo ~ e ist oder die maximale Anzahl an Iterationen erreicht ist. d) Die Diskretisierung der Randwertaufgabe
+ U yy = 0, (x, y) En := (0,1) x (0,1) u(x, y) = 1, (x, y) E an
Uxx {
fiihrt auf ein lineares Gleichungssystem mit einem Losungsvektor, dessen Komponenten aile gleich 1 sind . Testen Sie Ihr Programm anhand dieser Randwertaufgabe, ind em Sie sich die Komponenten der letzten Iterierten ausgeben lassen . e) Stellen Sie die Naherungslosung von (*) mit Hilfe eines geeigneten Visualisierungstools graphisch dar. f) Fuhren Sie Berechnungen mit unterschiedlichen w-Werten durch und tragen Sie die Anzahl der Iterationen in Abhiingigkeit von w auf.
Bemerkungen und Bearbeitungshilfen Im entstehenden aquidistanten (N x N)-Gitter werden zuerst die roten und dann die schwarzen Punkte nummeriert. Daraus resultiert ein lineares Gleichungssystem mit n = N 2 Unb ekannten , den Nahungswerten fiir die Losung an den inneren Gitterpunkten . Die Koeffizient enmatrix des resultierend en linearen Gleichungssystems Au = f hat die Bauweis e
Wobei D r eine (n, x n, )-Diagonalmatrix mit n r = Diagonalmatrix mit nb = n - n r ist .
[N~+l]
und Db eine (nb x nb)-
Zur Parallelisierung der GleichungslOsung mit p Prozessen werden die Blockkomponenten D r> Db und E von A in Blockzeilen moglichst gleicher Dimension aufgeteilt. Wenn die inneren Punkte (Xi , Yj), i = 0, . . . , N - 1, j = 0, . .. , N - 1 von n durchlaufen werden, entspricht das einer Aufteilung der (auf5eren) j-Schleife. Dabei sind
160
Kapitel 8. Aufgaben fur ein Parallelrechnerpraktikum
a)
b)
E:EEI:J:J18 13
TiT13Ti214 L-Ll--J 1 9 2 10
Po
31
14
32
15
33
~12
~~ 7
25
8
26
9
27
~6
Po~ 1
19
2
20
3
21
Abb. 8.7: Red-Black-Ordnung mit Aufteilung in horizontale Streifen zur parallelen Implementierung a) (4 x 4)-Gitter, 2 Prozessoren b) (6 x 6)-Gitter, 3 Prozessoren zunachst die Nachbarn der red-Punkte zu bestimmen. Das ergibt die Besetzungsstruktur von E. In unserem Fall hat E = (eij) nur die Eintrage 0 und 1, d. h. wir mussen nur die Indizes (i, j) bestimmen, fiir die eij = 1 gilt. Wir werden E zeilenweise durchlaufen und die Indizes mit Hilfe zweier Integer-Felder JE und IE abspeichern : • Das Feld JE enthalt die Indizes j fiir eij = 1. • Das Feld IE ist ein Zeigervektor. Die i-te Komponente zeigt auf den Beginn der i-ten Zeile im Feld JE. IE ist ein Feld der Lange nb, da E nb Zeilen hat, wahrend JE ein Feld der Lange 2N(N -1) ist, da 2N(N -1) Kanten zwischen den einzelnen Gitterpunkten existieren
und jede solche Kante einen Eintrag in der Matrix E bewirkt . Wir betrachten als Beispiel ein (4 x 4)-Gitter (Abbildung 8.7 a)). Hier ist
E=
1 1 1 1 1 111 1 1 1 1 1 1 1
111 1
1 1 1 1 1
und JE
= 0 2 0 1 3 0 234 1 3 5 2 4 6 3 457 4 6 7 5 7 t t t t t t t t
IE =
0
2
5
9
12
15
19
22
8.3. SOR-Verfahren mit Red-Black-Ordnung
161
Hier ist IE ein Feld der Lange nb = 8 und JE ein Feld der Lange 24. Zur parallelen Matrix-Vektor-Multiplikation mit p Prozessen mit E (die in jedem Iterationsschritt zur Berechnung von u~ = Dbl(br-Eu~-l) erforderlich ist) machen wir eine Aufteilung von E in Blockzeilen der Dimension nloki , L:f':~ niok, = ~2. Die Komponenten des zu multiplizierenden Vektors u, werden entsprechend auf die einzelnen Prozesse aufgeteilt. Wir nehmen an, dass N gerade ist. Da sich die Nummern der zu einem red-Punkt benachbarten black-Punkte hochstens urn N unterscheiden (j-Richtung), hat E die halbe Bandbreite ~ ' Wir veranschaulichen dies fiir eine Aufteilung fiir 3 Prozesse (Abbildung 8.8).
Abb. 8.8: Aufteilung der Matrix E fiir eine Berechnung mit p Prozessen Da von dem zu multiplizierenden Vektor u, in Prozess Pi nur nlok; Komponenten vorliegen, werden aufgrund der Bandbreite von E eventuell ~ Komponenten von den Nachbarprozessen ben6tigt. Fiir Prozess Pi ergibt sich also folgende Situation: • Falls i
:I 0 gilt,
• Falls i
:I p -
werden ~ Komponenten von Pi - I ben6tigt.
1 gilt, werden ~ Komponenten von
PHI
ben6tigt.
Wir realisieren die Verwaltung der Vektoren u, und u, im Prozess Pi folgendermaBen: Es wird ein Vektor der (maximalen) Dimension nlok = ~(~ + 1) + N bereitgestellt. Die Komponenten, die der Vorgangerprozess Pi - I sendet, werden ab ur(O) bzw. Ub(O) abgelegt. Die eigenen Komponenten beginnen bei ur(mypoint) bzw. ub(mypoint).
162
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
Abb. 8.9: Blockspaltenaufteilung von E T
Die Komponenten, die der Nachfolgeprozess PHI sendet, werden ab ur(nextpoint) bzw. ub(nextpoint) abgelegt.
{o,
°
falls i = un d nextpoint = mypomt . + myneq, wobei N 2' falls i #myneq die Anzahl der Zeilen von E ist, die dem Prozess Pi zugeordnet sind . .. . t Da b ei ist mypom
=
°
Ist die Matrix-Vektor-Multiplikation EU~-1 erfolgt, so kann u~ = D bl (b r - EU~-l) ohn e weiteren Datenaustausch parallel erfolgen, wenn Db und b, in Blockkomponenten der Dimension nlok, auf die einzelnen Prozesse verteilt sind . Zur Berechnung von
ist eine Matrix-Vektor-Multiplikation mit ET notig. Da wir E in Blockzeilen aufgeteilt haben, liegt E T nun in Blockspalten vor (Abbildung 8.9). Nun werden Anteile zum Ergebnisvektor ET u~ in mehreren Prozessen berechnet. Diese sind dann an die Nachbarprozesse zu versenden . Ist die Matrix-Vektor-Multiplikation ET u~ erfolgt, so ist zur weiteren Berechnung von u~ kein Datenaustausch mehr notig.
Programmaufbau und benotigte Unterprogramme • Lese die Eingabedaten (maximale Iterationszahl, Dimension des Problems, Abbruchkriterium usw. ) in Prozess Po und versende sie an aIle iibrigen Prozesse.
8.3. SOR-Verfahren mit Red-B1ack-Ordnung
163
• Bestimme die Beset zungsstrukt ur (I E, JE) der Matrix Emit der Aufteilung in Blockzeilen , so dass jeder Prozess eine Blockzeile bestimmt . • Berechne die zugeordneten Komponenten der rechten Seite (bb' b. }. • Paralleles SOR-Verfahren. • Ausga be der Losun g zur Visua lisieru ng.
Auswertung In jedem Prozessor wird ein lokaler Ante il zur Nah erungslosung u, und u, berechnet . Anschliesend werden diese Ant eile der Nah erungslosung von Red-BlackNummerierung in lexikographische Nummerierung konvertiert und in jedem Prozess in eine eigene Ausgabedatei geschrieben. Diese Daten konnen dann mit einem geeignete n Pl ot-Prograrnm, z. B. Gnuplot visualisiert werden. Abbildung 8.10 zeigt die mit einem 50 x 50-Git te r berechnet e Losungsflache,
0.5 -------.
o
-0.5 . 0.5 •... ..•.
o ...._..•...•
u
-0.5 •.•.• .•. 0.5 -------0--···----·--··
-0.5 . .. .. -. . 0.5
o -0.5 -1
y
x
Abb. 8.10: Losun gsflache resul tierend aus einer Berechnun g mit 3 Prozessen auf einem 50 x 50-Gitter Abbildung 8.11 zeigt die Anza hl der benotigten It erat ionen bis zum Erreichen des Abbruchkriteriums des SOR-Verfahrens bei einem 50 x 50-Gitter. Ohne Relaxati on (w = 1) werd en 1086 Iterationen ben6tigt . Beim optimalen Relaxationsparameter
164
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
w = 1.887 sind nur noch 80 Iterationen notig. Bei geeigneter Wahl des Relaxationsparameters ist also eine Beschleunigung urn mehr als den Faktor 13 moglich. Wie man aus Abbildung 8.11 ebenfalls erkennen kann, fallt die Kurve der benotigten Iterationen flach ab bis zum optimalen Param eter w und steigt danach steil an. Wir erkennen daraus, dass eine Unterschatzung giinstiger ist als eine Uberschatzung, wenn wir den optimalen Parameter w nicht kennen. 5000 4500 4000 3500 c: Q) c: 0 ::::
3000
~
~ 2500 Q; 'tl
:;:
'c:" N
2000
1500 1000 500 0 0.2
0.6
0.4
0.8
1.2
1.4
1.8
1.6
2
Ol
Abb. 8.11 : Anzahl der benotigten Iterationen bis zum Erreichen des Abbruchkriteriums des SOR-Verfahrens in Abhangigkeit vorn Relaxationspar ameter w.
8.4
Direktes Losen von Gleichungssystemen mit Tridiagonalmatrix
a) Schreiben Sie ein Unterprogramm zum sequentiellen Losen eines Iinearen Gleichungssystems mit (unsymm etrischer) Tridiagonalmatrix T , welches eine Faktori sierung der Form
(=:: o
b"~') (i~ =
en
an
0
1 0) (d': in 1
0
:_,) dn
= : LU
8.4. Direktes Losen von Gleichungssystemen mit Tridiagonalmatrix
165
verwendet.
b) Zum parallelen Losen soli T zunachst in Blockzeilen der Dimension nlok, aufgeteilt werden. Fur drei Prozesse betrachten wir zum Beispiel
T=
Die oberen Indizes der Matrix eintrage bezeichnen den Prozess, dem sie zugeordnet sind. Die parallele Elimination der Faktorisierung T = LV mit
Ci
1 l~O)
1 l~O)
L=
und
1
innerhalb der Diagonalblocke entspricht einer
166
Kapitel 8. Aufgaben fiir ein Par allelrechnerpraktikum
\
u=
\
Die parallele Elimination der erst en nlok, - 2 Eintrage in den oberen Nebendiagonalen des i-t en Diagonalblocks von U jeweils beginnend mit u~loki-2 und des Elements u~loki im oberen Dreieck auserhalb des Diagonalblo cks entspricht einer Faktorisierung U = VW mit
( 1)
1 u.
dVT 1
1
v=
U(2)
1
;tar 1
~ 3 d2
1
(3)
~ d(3 ) 3
1 1
und
8.4. Direktes Losen von Gleichungssystemen mit Tridiagonalmatrix
(0)
d(O)
g1
1
d(O)
2
(0)
g2 -(0)
(1)
d3
-::(1) 11 -(1)
12 -(1) 13
W=
167
g3
g~1)
d(1)
1
d(1)
2
(1) g2 -(1) d3 f(2)
11 -(2) 12 - (2) 13 -(2) 14
\
(2) g4
g~2)
d(2)
1
(2)
d(2)
g2
2
d (2) 3
(2) g3 d(2)
4
/
Bestimmen Sie die Rekursionsformeln zur parallelen Berechnun g von Ii, gi·
Ji und
c) Zum Auflosen von Tx = LVWx = b werden die Syst eme Ly = b , Vz = y und Wx = z parallel gelost. Zum Losen von W x = z ist zunachst sequent iell die Losung des linearen Gleichungssystems
(
Z~O» ) (1) Z3 (2) Z4
zu bestimmen. Schreiben Sie nun unter Verwendung von a) und b) ein paralleles P rogram m zum Losen eines Tridiagonalsystems Tx = b . d) Bestimmen Sie den Rechenaufwand fiir sequentielle und parallele Berechnung. Welcher Speed-up kann maximal erreicht werden? e) Fiihren Sic nun Laufzeitmessungen anhand der Matrizen
und
durc h. Wa hlen Sie die rechte Seite jeweils so, class x = (1 1 ... Losungsvektor ist. Best immen Sie den Speed-up Ihres parallelen P rogramms.
If
der
168
Kapit el 8. Aufgaben ftir ein Parallelrechnerpraktikum
Bemerkungen und Bearbeitungshilfen Zur Bestimmung der Eintrage lji) in der Matrix Lund dy) ,uji) sowie f?) in der Ma-
T durch und
trix V fiihren wir formal die Matrix-Multiplikation LV = die Eintrage von T mit denen von T .
vergleichen
Damit erhalt man filr den Prozess i, wobei wir im Folgenden die oberen Indizes weglassen
dl =
aI,
d l . 12 =
C2
C2 ==}
12 = d
' l
Ul
= bl ,
Ul .
12
+ d2 =
d2 • 13 =
a2
==}
d2 = a2 -
Ul .
12'
C3
C3 ==}
13 = d ' 2
II = Cl, II ·l2 + h = 0 ==} h = - II · l2, [z . 13 + h = 0 ==} h = -h' 13' Auf Prozess 0 set zen wir
Cl
= O.
Allgemein ergeben sich so die Formeln
Durch die Matrix-Vektor-Multiplikation V . W = U und Vergleich von V mit U erhalt man die Formeln ftir und die Modifikationen fiir fY) , j = 1, . . . , nlok,
gy)
iJi)
.
-(i) SOWle dn1ok ;'
Wir erhalten fiir Prozess i: (i)
(i)
gl
+ g2(i) ~ = d( i)
0
=}
2
g2(i ) -_uti) 2 -->...
r-r:
- (i+ l ) d-(i) _ d(i) _ _1 _ (i) 3 3 d(i+l) U3 1
f
169
8.4. Direktes Losen von Gleichungssystemen mit Tridiagonalmatrix
(i)
-(i ) fI
+ j-(i)~ =
f(i)
2 d(i) 2
f
I
-(i )
= f(i) _
(i) -(i) UI f2
I
d(i)
I
2
j(i)
- (i ) -
j2
-
2
j(i)
- (i ) -
j3
-
3
(i) (i) _ gl (i-I) g3 - -d(i)U3
falls i
> O.
1
h
Allgemein ergeben sich zur Berechnung von und der nlok, -1 ersten Komponenten von 9j auf Prozess i, also bei der Elimination der oberen Nebendiagonalelemente innerhalb der Diagonalblocke, die nachfolgenden Rekursionsformeln: = fnlok; und inloki- I = For j = nlok, - 2, ... , 1
inlok; -
fJ'
uI+1
fnlok;-h
gnlok;-I
= Unlok;-I
u 'g+1
- fJ' - ~ dj+I'
gJ'--~ dHl '
-
Zur Elimination von u~lok; ist Kommunikation notwendig, da zur letzten Zeile ein Vielfaches der ersten Zeile des .Nacbfolgeprozessee" zu addieren ist. Dadurch entsteht die Modifikation d--r;.lok; und die letzte Komponente g~iloki des Vektors g mit Hilfe der Vorschrift fiir Prozess i, wobei wir die oberen Indizes weglassen. If i
>0
• Versende d l und • Empfange • gnlok •'
If i
U recv
t,
von Prozess i-I
l
= - fll dI . Urecv
< Prozessanzahl -
• Empfange
-
• d n1ok;
an Prozess i-I
d recv
und
fre cv
von Prozess i
+1
d
-
~ . Unlok;
Unlok;
an Prozess i
= dnloki
• Versende
1
lrecv
+1
Damit ist die Faktorisicrung von T = LVW beendet.
Bemerkung 8.1 Beim letzten Prozess kann des Entstehen der Fill-in-Stellen gj vermieden werden. Dies wilrde jedoch eine "Sonderbehandlung" des letzten Prozesses im Programm erfordern.
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
170
Im nachsten Schritt beschaftigen wir uns mit dem Auflosen von Tx = b . Tx=b
LUx=b
LVWx=b
Mit z := Wx und y = VWx = Vz sind nachfolgend die Systeme Ly = b , Vz=y , {
Wx=z
zu losen. List eine Blockdiagonalmatrix, wobei die Diagonalblocke jeweils untere Dreiecks matrizen mit zwei Diagonalen sind . Das Losen von Ly = b kann also parallel ohn e Datenaustausch durch Vorwartseinsetz en in den einzelnen Prozessen erfolgen. V ist ebenfalls eine Blockdiagonalmatrix. Hier liegt jedoch die erste Zeile des Diagonalblocks beim Vorgangerprozess vor. Das Losen kann daher parallel erfolgen, erforde rt ab er im Gegensatz zur Behandlung von Syst em Ly = b Datenaustausch. Die Komponenten Zl bis Zn lok; - l konnen parallel und ohne Datenaustausch durch Riickwarts einsetzen berechnet werd en. Zur Berechnung von Znlok ; in Prozess i, i = 0, .. . , P - 2, werden
Zl
und d l vom Nachfolgeprozess benot igt .
d~i+l) liegt bereits aus der Berechnun g von W vor. Es bleibt also noch z~i+l) an Pi zu versenden, falls i < P - 2 ist. Zum Losen von Wx = z betrachten wir die jeweils .Ietzten" Unb ekannten x~lok; der einz elnen Prozesse (in unserem Fall x~O), X~l) und Wiirden wir deren Werte kennen, so konnten die weit eren Unb ekannten einfach parallel aus Wx = z bestimmt werden , da keine Kopplungen zwischen den Unbekannte n war en.
xi2)).
Zur Bestimmung von x~O), X~l) und
xi2 ) ist das Tridiagonalsyst em
(:f~~) (1r~ ~{~jJ2) gd!:ti (~f~~) xi2) zi2) 2
)) 2)
=
(8.1)
zu losen. Im allgemeinen Fall mit P Prozessen ist also zur Bestimmung von x~lok; ' i 0, . . . ,P - 1 ein Gleichungssystem mit einer (P x P)- Tridiagonalmatrix zu losen. Da P wesentli ch kleiner als nlok, sein sollt e, kann das Losen von (8.1) sequent iell, und zwar in jedem der P Prozesse, erfolgen. Dazu sind jedoch die Matrixeintrage mit Hilfe von kollekti ver Kommunikation so zu versenden, dass in jedem Prozess das Gleichungssystem (8.1) vorliegt . Dazu kann die MPI-Routine MPI_Allreduce verwendet werden, so da ss in jedem Prozess ein Gleichungssyste m wie in Teil a) vorliegt . Nach dem Losen von System (8.1) konnen die verbleibenden Unbekannten in den einzelnen Prozessen parallel berechn et werd en.
8.4. Direktes Losen von Gleichungssystemen mit Tridiagonalmatrix
171
Programmaufbau und benotigte Unterprogramme • Lese die Eingabedaten (Dimension des Problem s, Matrixtyp usw. ) in Proz ess Po und versende sie an aile iibrigen Pr ozesse. • Berechne Faktorisierung T = LU. Das erfolgt parallel und ohne Datenaustausch. • Berechne Faktorisierung U = VW. Hier ist das erste Diagonalelement an den Vorgangerprozess zu senden. • Lose Ly = b parallel nach y auf. Es ist kein Datenaustausch notwendig . • Lose Vz = y parall el nach z auf, indem zunachst jeweils Z~?Oki- l bis z~i) berechnet werden. Anschliesend ist Datenaustausch zur Berechnung von noti g.
a:
• Stelle Koeffizientenmatrix und rechte Seite des linearen Gleichungssyst ems (8.1) allen Prozessen durch kollektive Kommunikati on zur Verfiigung und lose (8.1) sequentiell in allen Prozessen. • Fiihre die verbleibenden Operationen zum Auflosen von Wx = z parallel dur ch. Es ist kein weiterer Datenaustausch erforderlich.
Auswertung Wir vergleichen zunachst die Anzahl der erforderlichen Operationen im sequent iellen und parallelen Fall.
Sequentieller Aufwand In den drei Schleifen der Lange n - 1 fallen die folgenden Operati onen an : • etwa 3n Multi plikationen, • etwa 2n Divisionen, • etwa 3n Addit ionen bzw. Subtraktionen. Insgesamt sind also etwa 8n Operationen dur chzufiihren.
172
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
Paralleler Aufwand Es sind fiinf Schleifen der Lang e n - 1 zu durchlaufen. In diesen fallen die folgenden Operationen an: • etwa IOn Multiplikationen , • etwa 3n Divisionen, • etwa 6n Additionen bzw. Sub traktionen. Insgesamt sind also etwa I9n Op erationen durchzufiihren, Bei sehr grosen Problemen kann man den Aufwand fiir den Datenaustausch und fiir das sequentielle Losen des (P x P)- Tridiagonalsystems vernachlassigen. Der maximal erreichbare Speed-up beim Ein satz von P Prozessoren ist somit
8
S = I 9 P ~ 0.42P. Bei einer Berechnung mit zwei Prozessoren ist somit kein Zeitgewinn zu erwarte n, wohl aber bei einer Berechnun g mit mindestens drei Prozessoren. Laufzeitmessungen flir die zweite Mat rix mit n = 4000000 ergeben die in der nachfolgend en Tabelle aufgelisteten Rechenzeiten. Prozessorenzahl 1
2 4 8
Rechenzeit 1.50 s 5.23 s 2.68 s 1.34 s
Diese Rechenzeiten ergeben einen unb efriedigenden Speed-up, obwohl der inkrementelle Spe ed-up optimal ist . Inkrementeller Speed-up
Rechenzeit
2 -t 4 4 -t8
1.95 2.00
Speed-up
Rechenzeit
I -t 2 1-t4 I-t 8
0.29 0.77 1.12
Angesichts dieser Rechenzeiten fur das parallele Programm ist eine Parallelisierung fiir diese Problemstellung nur da nn empfehlenswert, wenn das Problem so grail. ist , dass es wegen zu hohen Speicherbedarfs sequent iell nicht meh r bear beit et werd en kann.
8.5. Graphpartitionierung I
8.5
173
Graphpartitionierung I
Gegeben ist eine Matrix A mit der Besetzungsstruktur
* *
A=
* * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * *
* * * * * * * * * * * * * * * * * * * *
* * a) Skizzieren Sie den Graph der Matrix. b) Bestimmen Sie die Indexfelder IA und J A zur Abspeicherung der symmet rischen Matrix A. c) Stellen Sie die zu A gehorende Laplace-Matrix auf. Berechnen Sie Ihre Eigenwert e und die Eigenvektoren zu den beiden kleinsten Eigenwerten. (Dazu kann beispielsweise Maple verwendet werden. Ein Worksheet steht zur Verfiigung .) d) Welche Graphpartitionierung fiir eine Berechnung mit zwei Prozessen resultiert aus dem Spektralbisektionsverfahren? Ist diese Par titionierung optimal? e) Fiihren Sie nun fur A Partitionierungen mit der "Greedy-Graph-Heurist ik" durch. Welche Qualitiit haben die da raus resultierenden Partitionierungen?
Bearbeitung a) Fiir Q(A) ergibt sich
16
"- - .
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
174
b) Fur die Adressfelder der Besetzun gsstruktur von A erhalt man JA = IA =
8
1 2 2 3 3 4 4 5 5 6 12
6
7 11
7
8 9 10
t
t
t
t
t
t
t
1
3
5
7
9
12
15
9 10
9
10 10 11 11 12 12 13 13 14 14 15
t
t
t
t
r
t
t
19
22
24
26
28
30
32
15 16 16
t
t
34
36
c) Weiterhin ergibt sich flir die Laplace-Matrix 1 -1
-1
L=
2-1 -1 2 -1 -1 2-1 -1 3 -1 -1 -1 3 -1 -1 -1 4 -1 -1 -1 - 1 3 -1 -1 -1 -1 3-1 -1 -1 -1 4-1 -1 -1 3 - 1 -1 -1 3-1 -1 2-1 -1 2 - 1 -1 2 - 1 -1
1
Mapl e liefert fiir L(A) die Eigenwerte
A1 = -0.1114027921 . 10- 15 und
A2
= 0.103333887.
Wir betrachten die Komponenten des Fiedler- Vektors (auf vier Stellen genau): X2
= ( - 0.4475, -0.4012, -0.3135, -0.1934, - 0.5335 . 10- 1 , -0.1445 . 10- 1 ,
- 0.2951 . 10- 2 ,0 .7464 .10-8,0 .7516.10- 8 ,0 .2951.10- 2 ,0 .1445 .10-\ 0.5335.10- 1,0.1 934,0.3135,0.4012,0.4475). d) Der Median liefert fiir das erste Teilgebiet die Knoten {I , 2, 3, 4, 5, 6, 7, 8} und flir das zweit e Teilgebiet die Knoten {9, 10, 11,12, 13, 14, 15, 16}, also die Partitionierung
8.6. Graphpartitionierung II
175
Bei dieser Aufteilung werden 6 Kanten geschnitten. {I , 2, 3, 4,13,14,15, 16} und V2 = Die Aufteilung in VI {5, 6, 7, 8, 9, 10, 11, 12} ware besser, da hier nur 2 Kanten geschnitten werden . e) Die Greedy-Heuristik zur Graph-Partitionierung liefert bei Start mit Knoten 1 je nach Vorgehensweise bei mehreren Moglichkeiten z. B. die Partitionierungen
= {I, 2, 3, 4, 5, 6, 7, 9}, V2 tenen Kanten,
• VI
= {8, 10, 11, 12, 13, 14,15, 16} mit 6 geschnit-
• VI = {I , 2, 3, 4, 5,12,13, 14}, V2 = {6, 7, 8, 9,10,11,15, 16} mit nur 3 geschnittenen Kanten .
8.6
Graphpartitionierung II
1. Erstellen Sie ein Datei box. poly, die das in Abbildung 8.12 gezeigte Gebiet = (0,3) x (0,3)\[1,1] x [1,1] in der Syntax des Programmes triangle beschreibt.
o
Das Programm triangle wurde von J. R. Shewchuk geschrieben und ist im Internet unter der Adresse http://www .cs.cmu.edu/-quake/triangle.html erhaltlich, y
3
o
2
o
o
x
2
3
Abb. 8.12: Das zu triangulierende Gebiet O.
176
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
2. Verwenden Sie das P rogramm triangle urn eine Triangulierun g des Gebietes n zu erzeugen. Verfeinern Sie diese Triangulierun g solange bis sie aus ca. 1000 Dreiecken besteht. Das Programm triangle erzeugt dabei in jedem Verfeinerun gsschritt zwei Dat eien: • box. *.node beschreibt die Lage und die Anzahl der Knoten der Triangulierung . • box. *.ele beschreibt die zu einem Dreieckselement gehorenden Knoten und die Anzahl der Elemente. 3. Schreiben Sie ein Programm partition, das die Partitionierung der durch das Pro gramm triangle erzeugten Triangulierung dur chfiihrt: Lesen Sie in einem erste n Schritt die vom Programm triangle erzeugten Dateien box. *.node und box. *.ele ein. Erzeugen Sie daraus eine Dat ei box. *.mesh die die Triangulierun g in einer dur ch das Programmpaket metis lesbar en Form ent halt , Rufen Sie nun das Pro gramm partnmesh aus dem Progra mmpaket metis auf, urn die Par titioni erung durchfiihren zu lassen. Erzeugen Sie in einem letzten Schritt eine Datei, die die Par titionierung der Triangulierung in einer visualisierbaren Form beschreibt . Das Programmpaket metis wurde von G. Karypis geschrieben und ist im Internet unter der Adresse http://www-users .cs.umn.edu/-karypis/metis/ erhalt lich. 4. Visualiesieren Sie die Partitionierun g der Triangulierun g von geeignet en Programm, beispielsweise mit gnuplot.
n
mit einem
Bearbeitungshilfen Netzgenerierung mit triangle Das Program m triangle dient zur Triangulierung eines vorgegebenen Gebietes. Triangulierun gen konnen so berechnet werden, das keines der Dreiecke einen Winkel kleiner als einen vorgegebenen Mindestwinkel besitzt. (Dies ist bei der Methode der Finite n-Elemente von Bedeutung). Des Weiteren konnen Triangulierun gen verfeinert werden. Fur einen tieferen Einblick in die triangle zugrundeliegenden Algorithmen siehe
[331·
8.6. Graphpartitionierung II
177
Beschreibung der Geometrie Die Geometrie des Gebietes, das zu triangulieren ist, wird in einer Datei mit der Endung .poly beschrieben. In dieser Datei werden alle Knoten und Kanten angegeben, die auf dem Rand das Gebietes liegen. Weiterhin konnen Locher im Gebiet durch ihre Koordinaten angegeben werden. Syntax der . poIy-Datei: • Erste Zeile:
<x> [Attribute] [Randkennzeichnung] • Eine Zeile: <Endpunkt> [Randkennzeichnung] • Eine Zeile: • Folgende Zeilen: <x> Kommentarzeilen beginnen mit einem #-Zeichen und konnen iiberall in der Datei eingefiigt werden. Verwendung des Programms Die Verarbeitung der Eingabedaten in der . polyDatei erfolgt durch das Programm triangle, das auf der Kommandozeile durch triangle [Programmschalter] . pol y- Dat ei aufgerufen werden kann. Folgend sind einige der wichtigsten Programmschalter kurz beschrieben: -r Verfeinert eine zuvor berechnete Triangulierung. Die neue Triangulierung wird unter gleichem Namen mit einer urn eins erhohten Versionsnummer abgespeichert. -a Gibt den maximale Flacheninhalt vor, den ein Dreieck der Triangulierung haben darf. -q Gibt den minimalen Innenwinkel vor, den ein Dreieck der Triangulierung haben darf. -Q Unterdriickt jegliche Textausgabe.
178
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
- V Erzeugt eine besonders ausfiihrliche Textausgabe. -h Zeigt einen Hilfetext an. Programmausgabe Die Ausgabe der von triangle erzeugte n Triangulierung erfolgt in zwei Dateien. Die Datei mit der Endung . node beschreibt die Knoten des Netzes, die Datei mit der Endung . ele die Elemente. Nachfolgend beschreiben wir die Syntax beider Dateien: Syntax der . node-Datei: • Erst e Zeile: <x> [Attribute] [Randkennze ichnung] Syntax der . ele-Datei: • Erste Zeile: • Folgende Zeilen: .. . [Attr i but e] Die Knoten der Dreiecke sind gegen den Uhrzeigersinn nummeriert. Wenn mehr als drei Knoten angegeben werden, sind diese nur fiir nachfolgende Finite-ElementeProgramme von Bedeutun g. Kontrolle der Programmausgabe Das P rogramm showme stellt eine graphische Oberflache zur Betrachtu ng der mit triangle erzeugten Triangulierung bereit. Es wird auf der Kommandozeile iiber showme Eingabefile aufgerufen. Abbildung 8.13 zeigt eine mit triangle erzeugte und verfeinerte Triangulieru ng, ausgegeben mit showme. Partitionierung des Netzes mit dem Programmpaket Metis Metis ist ein P rogrammpaket zur Partitionierung unst rukt urierter Graphe n (und damit zusammenhiingend zur Berechnung fill-in-reduzierender Umordnungen fiir diinnbesetzte Matrizen). Die zugrundeliegend en Algorithmen benutzen Multilevelmethoden und sind da her auch fiir groiSe Graphen anwendbar.
8.6. Graphpartitionierung II
179
Abb, 8.13: Beispiel einer mit triangle erzeugten und verfeinerten Tri an guli erung.
Nah ere Einbli cke in die Funkti onsweise der Bibliothek und deren Verwendung findet man in [181 oder [191 ·
Der Algorithmus Der Algorithmus, der in Metis zur Unte rteilung des Netzes verwendet wird, gliedert sich in die drei Hauptphasen (siehe Abb ildung 8.14): 1. Vergroberungsphase 2. Par tit ionierungsph ase 3. Riickverfeinerungsph ase
Die Vergrdberungsphase Z Ulli Graphen G = Go wird eine Folge von Gr aphen G ll G2 , . . . ,G m konstruiert , so dass die Anza hl der Knot en von G H I kleiner als die Anzahl der Knoten von Gi ist . Dazu werden in jedem Vergroberungsschrit t disjunkte Mengen von Knoten des Gra phen Gi zu Kno ten (sogenannte n Mult iknoten) im Graphen Gi+l zusammengefasst (siehe Abbildung 8.15). Eine Moglichkeit, eine solche Folge grober werdend er Gr aphen zu erzeugen, ist das sogena nnte R and om Matching. Wir besuchen die Kn oten in zufalli ger Reihenfolge. Wur de ein Kn oten noch nicht zu einem Multi knote n zusa mmengefasst, dann wahl en wir zufallig einen seiner ebe nfalls noch nicht zusa mmengefasste n Nachba rn au s und fassen diese bei den Knoten zusa mmen.
Die Partitionierungsphase Zum grobsten Graphen Gm wird nun eine Unte rteilung berechnet , so dass in jedem Teil moglichst gleich viele Kn oten ent ha lte n sind und die Anzahl der Kanten zwischen den Teilen moglichst gering ist . Ais eine Moglichkeit , diese Par titionierung zu berechnen, haben wir die Spekt ralbisektio n (siehe Kapi tel 3) kennen gelernt.
180
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
Graphparfitionierung mit Multilevelmethoden:
Go
Ql
III
C
s:
n IS> c
2
Ql
.0 :0
...
21
~
Parfitionierungsphase
Abb. 8.14: Die dre i Hauptphasen der Graphpartitionierung mit met is : Vergroberu ng, Partitionierung und Riickverfeinerung (siehe [191).
Abb. 8 .15: In der Vergr6berungsphase von metis werde n Knoten zu Mult iknote n zusammengefasst (siehe [19]).
8.6. Graphpartitionierung II
181
Eine weitere Moglichkeit ist der sogenannte Kernighan-Lin-Algorithmus (siehe Abschnitt 3.3). Dieser iterative Algorithmus sucht ausgehend von einer Startpartitionierung des Graphens in jedem Schritt eine Menge von Knoten in den Teilgebieten, so dass deren Austausch zwischen den Teilgebieten zu weniger Kanten zwischen den Teilgebieten fiihrt. 1st keine gute Startpartitionierung bekannt, so wird der Kernighan-Lin-Algorithmus auf mehrere zufiillig gewahlte Startpartitionierungen angewandt oder mit einer einfachen Heuristik (z.B. mit der in Abschnitt 3.3 beschriebenen Greedy-GraphHeuristik) eine Startpartitionierung bestimmt.
Die Riickverfeinerungsphase Die Unterteilung des groben Graphen Gm wird auf den Orginalgraphen Go zuriickprojiziert, indem der Reihe nach durch die Graphen Gm - 1 , Gm - 2 , • • . , G 1 gelaufen wird. Da jeder Knoten von G i in genau einem Multiknoten von Gi +1 enthalten ist, ist diese Riickprojektion der Unterteilung sehr einfach: 1st der Knoten k des Graphen G, im Multiknoten k des Graphen Gi+l ent halten, so soli k in der gleichen Partition wie k liegen. Auch wenn die Partitionierung des Graphen Gi+l "optimal" gewesen ist, so muss dies nicht fiir die auf G i riickprojizierte Partitionierung gelten. Man kann aber diese Partitionierung als gute Startpartitionierung des Kernighan-Lin-Algorithmus verwenden und damit diese Unterteilung iterativ verbessern.
Beschreibung des Netzes Das zu partitionierende Netz wird fiir Metis in einer Datei mit der Endung . mesh beschrieben. In der ersten Zeile dieser Datei wird festgelegt aus welchen Elementen das Netz besteht. Die einzelnen Elemente des Netzes werden dann in den darauffolgenden Zeilen durch die zu ihnen gehorenden Knoten reprasentiert, Syntax der .mesh-Datei : • Erste Zeile: <# Elemente> <Elementtyp> mit <Elementtyp> = 1 fiir Dreiecke 2 ftir Tetraeder 3 fiir Quader 4 fur Vierecke • Folgende Zeilen (fiir jedes Element eine Zeile): .. .
Verwendung des Programmpakets Das Programmpaket Metis stellt ein externes Programm oder alternativ eine Bibliotheksroutine zur Partitionierung des Netzes zur Verfiigung:
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
182
Programmaufruf: partnmesh Eingabefile <# Teilgebiete> Routinenaufruf: METIS_PartMeshNodal( . . . ); Wir verwenden hier das externe Programm und verzichten daher auf die nahere Beschreibung der Ein- und Ausgabeparameter des Routinenaufrufs.
Programmausgabe Die Ausgabe der von Metis erzeugten Partitionierung des Netzes erfolgt in eine Dateien mit der Endung .mesh. epart. und eine mit der Endung .mesh .npar t. . Die .epart-Datei beschreibt die Unterteilung der Elemente, die .npart-Datei die der Knoten. Syntax der . epart-Datei: Zeile i enthalt die Nummer der Partition in der das Element mit Elementnummer i liegt . Syntax der .npart-Datei: Zeile i enthalt die Nummer der Partition in der der Knoten mit Knotennummer i liegt .
Ergebnis Wir triangulieren das Gebiet n mit dem Programm triangle. Danach verfeinern wir die Triangulierung, bis sie aus ungefahr 1000 Dreiecken besteht. Diese Triangulierung unterteilen wir dann mit dem Programmpaket Metis in beispielsweise drei Teilnetze. Eine Visualisierung mit Hilfe des Prgramms gnuplot liefert uns Abbildung 8.16.
8.7
CG-Verfahren
Gegeben ist das Randwertproblem 2(y + l)u x x
+ (x + l)uyy =
u(x, y) = x 2 + y2,
2x + 4y + 6,
(x, y) En := (0,1) x (0,1) (x,y)Ean
a) Bestimmen Sie mit dem 5-Punkt-Differenzenstern auf einem quadratischen Gitter mit N2 inneren Gitterpunkten und Schrittweite h = N~l das resultierende lineare Gleichungssystem Au = b zur Losung des diskretisierten Problems. Berechnen Sie parallel die Eintrage der Matrix und der rechten Seite,
8.7. CG-Verfahren
183
3
2
o
x
o
2
3
Abb. 8.16: Unterteilung der Triangulierung des vorgegebenen Gebietes dr ei Partitionen.
n
in
indem Sie A in Blockzeilen und b in entsprechende Blockkomponenten aufteilen . Wahlen Sie zur einfacheren Implementierung N als Vielfaches der Prozesszahl
P. b) Schreiben Sie fiir die Aufteilung nach a) je ein Unterprogramm zur parallelen Matrix-Vektor-Multiplikation und zur Berechnung von Skalarprodukten. c) Implementieren Sie nun das CG-Verfahren mit .Jacobi-Vorkonditionierung zur parallelen Losung des diskretisi erten Problems. d) Wenden Sie nun das CG-Verfahren auf die diskretisierte Randwertaufgabe aus Aufgabe 8.3 an und vergleichen Sie die Rechenzeiten fiir CG- und SORVerfahren .
Bearbeitungshilfen Wir betrachten die gegebene Differential gleichung
2(y + 1)ux x
+ (x + 1)uyy =
2x + 4y + 6,
(x, Y) En := (0,1) x (0,1) .
Zur Diskretisierung wird ein quadratisches Gitter mit N2 inneren Gitterpunkten verwendet .
Kapitel 8. Aufgaben fur ein Parallelrechnerpraktikurn
184
y
1+-
-.
YN-
',, , ' / m .
Y2 Yl Yo
.
. / n
......... .... . .. ...... .. ... .
o
Dann ist
h=_1_
N+1 ' i+1 Xi = N + i : j+1 Yi = N + L'
i = 0, . .. ,N -1 ,
j = 0, . . . ,N - 1.
Zur Approximation der Ableitungen werden zentrale Differenzen verwendet:
Eins et zen der zentralen Differenzen fiir U xx und U yy liefert bei Vernachliissigung des Diskretisierungsfehlers Naherungen Uij fiir U(Xi' Yj) , i,j = 0, ... , N - 1, die aus den Gleichun gen
(Xi + 1)Ui,j-l + 2(Yj + 1)U;_1 ,j - 2(x; + 2Yj + 3)u;j + 2(Yj + 1)UHl,j + (X; + 1)U;,j+l 2 = h (2x; + 4Yj + 6) berechnet werden. Dab ei set zen wir . _ U _ l,] -
2
Yj '
UN,]. -1 -
+ Yj2'
. _ 2 U,,l -X i ,
wegen der Randbedingung
fiir (x, y) E an.
Ui,N = 1 + x;
8.7. CG-Verfahren
185
Dies stellt ein lineares Gleichungssystem Au = f der Bauweise
Dl D l Bl
C 0
UOO
faa
UN-l,O
fN-l,O
UOI
fOl
0
D N-
=
DN_') 1
BN-
UN-l ,l
fN-l,l
UO,N-l
fO,N-l
UN -l ,N-l
fN-l ,N- l
l
dar. Dabei ist _ lli£ - 6 N+l 2(j+l) N+l
+2
+2
2(j+l) N+l _ 4j+8 _ N+l
6
[
2(j+l) N+l
D, =
(
N~l + 1
2 N+l
j = O, ... , N -1 ,
+
+1
+2
_
2(j+l) 2 N+l 4j+2(N+2) N+l
6
)
' . '
j = 1, . .. , N -1,
~l +1 2(yj + l)y; , (Xi+ 1)X;,
°
falls i = falls j = 0 2 f ij = (2x i + 4Yj + 6)(N + 1) ( )( 2) { 2 Yj + 1 1 + Yj , fallsi=N-1 (Xi + l)(x; + 1), falls j = N -1 Zur parallelen Aufstellung der rechten Seite f des linearen Gleichungssystems teilen wir f in P gleich grose Blockkomponenten auf und ordnen diese den einzelnen Prozessen zu:
Die Koeffizientenmatrix A ist dunn besetzt. Daher soilten in einem Programm nur die besetzten Stellen abgespeichert werden. Hier ist die Besetzungsstruktur sehr regelmasig, A besteht aus fiinf Diagonalen . Bei einer Aufteilung in Blockzeilen erhalt man z. B. fiir den Proz ess Pk, k = 0, . .. P - 1 die Blockzeile
186
Ak =
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
C·· :
0:
0
0
D km B km
0
D km+ 1
0
D (k+l)m- l B (k+ l )m- l D (k+ l )m
0
0
]
E
jRmN xN 2 .
Dabei ist m = !f;, wobei P die Anzah l der Prozesse ist. Falls k = 0 gilt , existiert die Blockkomponente Do nicht . Fiir k = P - 1 verschwindet D p m = D N . Da B j , j = 0, .. . , N -1 Tridiagonalmatrix und D , Diagonalmatrix ist , geniigen drei Vektoren zum Abspeichern von A k :
bo
o
o bm N - 1
CmN-l
amN-l
Wir ste llen nun die Koeffizientenmatrix auf, indem wir die Eintriige der Vektoren a, b und c bestimmen. Berechne in jedem Prozess Pk Fiir l
= 0, . . . , m N -
1
Bestimme Blocknummer j = mk
+ [k ]
i = mod(l,N) CI
=-
Xi -
1
(iiuiSere Nebendiagonale)
bi = -2(Yj + 1) al
=
2Xi
(Nebendiagonale)
+ 4Yj + 6
(Diagonale)
Einige Eintriige sind bed ingt durch die Randbedingung falsch, wir korrigieren: • Falls k
= 0 ist , setz e CI = 0 fiir l = 0, . .. ,N -
• Falls k
=P-
• Fur I
1 ist, setze
= 0, .. . , mN und
CI
1.
= 0 fiir l = mN, .. . , (m + l)N -
mod(l, N)
1.
= 0 setze bl = O.
Mit der obigen Speicherstruktur fiir A gilt fiir die Matrix-Vektor-Multiplikation
8.7. CG-Verfahren
187
q (O) )
Ap = q mit der Blockaufteilung q =
: ( q (P-I )
i
= 0, . . . , mN -
1.
Fur die Matrix-Vekto r-Multi plikat ion im P rozess Pk wird jedoch nicht der gesa mte Vektor p be n6tigt, sondern nur ein (m + 2}N-ko mponent iger Vektor p (k) mit (k)
(k)
Komponenten Po , . .. ,P(m+2)N-l' so dass i = 0, .. . ,mN - l gilt . Urn die ersten N und die letzt en N Komponent en von p bereitz ustellen , ist im . (k) (k) Prozess P k , k = 0, .. . , P - l der Block mit den Komponent en PmN" " ,P(m+I) N-I an (HI) a bzu sn eichern. ei den Prozess PHI zu versende n und dort als Po(H I) , .. . , PN-I zusp E b enso ist im P rozess P k , k = 1, . . . , P -1 der Block mit p~), . . . ,P~~- I an P k - I zu senden und dort als p~~~l)N ' . .. , P~~~~)N-I abz ulegen (siehe Abbildung 8.17).
Abb. 8.17: Dat enaust ausch fiir den Vektor p bei einer Berechnung mit drei P rozessen. Die gra uen Bereiche entsprechen den lokal aus der Aufdatierung vorliegenden Komp onenten. Die weisen Bereiche werden zusatzlich filr die Matrix-Vektor-M ultiplikation ben6tigt.
Programmaufbau und benotigte U nterprogramme • Lese die Eingab edaten (ma ximale It erationszahl , Dimension des Probl ems, Abbruchkriterium usw. ) in P rozess Po und versende sie an alle iibrigen Prozesse.
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
188
• Generiere die Matrix und die rechte Seite des linearen Gleichungssystems. • Fiihre das CG-Verfahren durch: - Berechne Skalarprodukte. (Hier ist kollektive Kommunikation notig.) Fiihre Matrix-Vektor-Multiplikation durch. (Bier ist Datenaustausch mit den Nachbarprozessen erforderlich.) Lose das Vorkonditionierungssystem. • Ausgabe der Losung zur Visualisierung.
Auswertung In jedem Prozess wird der lokal berechnete Anteil zur Losung in eine eigene Ausgabedatei geschrieben . Diese Daten konnen dann mit einem geeigneten Plot-Programm, z. B. Gnuplot visualisiert werden. Abbildung 8.18 zeigt die mit einem 40 x 40-Gitter berechnete Losungsflache.
u
2 1.5
0.5
o
Abb. 8.18: Losungsflache resultierend aus einer Berechnung mit 4 Prozessen auf einem 40 x 40-Gitter Wir untersuchen nun die Leistungsfahigkeit unseres parallelen Programms. Die nachfolgende Tabelle zeigt den inkrementellen Speed-up ftir eine Berechnung mit zwei bis acht Prozessoren.
8.7. CG-Verfahren
189
Q!] 2-+41 4-+ 8 128 256 512 1024
1.45 1.96 1.84 1.95
1
0.80 1.51 1.81 1.89
Fur geringe Problemgrosen (N = 128 oder N = 256 mit 8 Prozessoren) ist der erreichte Speed-up bei Verdoppelung der Prozessorenzahl unbefriedigend, weil die lokale Problemgrolse zu klein ist und somit der Anteil der Kommunikation im Vergleich zur Berechnung zu groBist. Bei grolsen Problemen, z. B. N = 1024 - das ergibt ein lineares Gleichungssystem mit 1 048576 Unbekannten - ist der Speed-up jedoch durchaus zufriedenstellend. Fiir die Randwertaufgabe aus Aufgabe 8.3 vergleichen wir nun CG- und SORVerfahren. Beim SOR-Verfahren wurde der mit einer Genauigkeit von 10-3 empirisch bestimmte optimale Relaxationsparameter w verwendet. Die nachfolgende Tabelle zeigt die erforderlichen Iterationszahlen von SOR- und CG-Verfahren bei unterschiedlichen Problemgrosen. Die Iteration wurde jeweils abgebrochen, sobald Iluij - U(Xi' Yj)lloo ~ e erfiillt war, wobei e jeweils die GroBenordnung des Diskretisierungsfehlers hat.
N 50 100 200 300 500 750
CG iter 26 64 136 210 354 535
SOR w iter 1.865 1.910 1.952 1.968 1.981 1.987
41 66 180 257 533 832
e 0.00525 0.00134 0.00034 0.00015 0.00006 0.00002
Ein fairer Vergleich der Rechenzeiten ist fiir die von uns gewiihlten Implementierungen von CG- und SOR-Verfahren nicht moglich. Das CG-Verfahren ist allgemeiner implementiert, wiihrend das SOR-Verfahren speziell auf die Laplace-Gleichung zugeschnitten ist . Daher wird im SOR-Verfahren die Matrix- Vektor-Multiplikation mit E und E T nicht explizit durchgefiihrt, es werden nur die zu eij = 1 entsprechenden Komponenten addiert, denn E hat als Eintriige nur 0 und 1. 1m CG-Verfahren wird die Matrix-Vektor-Multiplikation mit A in jedem Fall, also auch fiir die LaplaceGleichung als solche durchgefiihrt. Ein Vergleich der Iterationszahlen zeigt bei Anwendung auf die diskretisierte Laplace-Gleichung, dass das CG-Verfahren mit Jacobi- Vorkonditionierung etwas weniger Iterationen benotigt. Da der Rechenaufwand je Iteration bei beiden Verfahren etwa gleich ist, ist bei allgemeinen Problemen auch ein geringer Zeitgewinn fiir das CG-Verfahren zu erwarten. Zudem hat das CG-Verfahren den Vorteil der Parameterfreiheit, wahrend beim SOR-Verfahren die Kenntnis des optimalen Relaxationsparameters entscheidend fiir den erforderlichen Zeitaufwand ist.
190
8.8
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
Jacobi-Verfahren zur Berechnung von Eigenwerten
Wir betrachten das symmetrische Eigenwertproblem AX=AX
mit gegebener symmetrischer Matrix A E lRn x n und gesuchten Eigenwerten A E lR mit zugehOrigen Eigenvektoren x E lRn • Wir wollen mit Hilfe des Jacobi-Verfahrens (siehe Abschnitt 6.1) Naherungen fiir aIle Eigenwerte der Matrix A berechnen. Das Jacobi-Verfahren fiihrt dazu A.hnlichkeitstransformationen mit Rotationsmatrizen J(p, q, 8) durch :
A = (aij) = J(p, q,8)TAJ(p, q,8). Dabei ist der Parameter 8 so gewahlt das das Element apq verschwindet und die Summe der Quadrate der Nichtdiagonaleintrage abnimmt. a) Schreiben Sie ein Programm sjacobi, das aIle Eigenwerte der Matrix A mit Hilfe des Jacobi-Verfahrens mit zeilenzyklischer Wahl der Indexpaare seriell berechnet . b) Modifizieren Sie ihr Programm sjacobi so, dass nur die Matrixeintrage unterhalb der Diagonale und auf der Diagonale berechnet werden, die oberhalb der Diagonale stehenden aber durch Symmetrieeigenschaften bestimmt werden. (Dieses Vorgehen solIte eine Beschleunigung ihres Programmes urn ca. den Faktor 2 bringen) . c) Anderen Sie ihr bereits modifiziertes Programm weiter, so dass die Auswahl der Indexpaare nun nicht mehr zeilenzyklisch sondern in der durch den Karussellalgorithmus (siehe Algorithmus 6.2) bestimmten parallelen Ordnung geschieht. d) Schreiben Sie nun ein Programm pjacobi, das das parallele Jacobi-Verfahren implementiert. e) Die Matrix
mit
aij
=
2' i=j, 1, Ii - jl { 0, sonst,
= 1,
besitzt die Determinante n + 1. Das Produkt aller Eigenwert e von A ist somit n + 1. Verwenden Sie dies urn ihre Programme zu testen. f) Fiihren Sie Rechenzeitmessungen fiir verschiedene Problemgrolsen und unterschiedliche Anzahlen von Prozessoren durch. Visualisieren sie diese Messwerte.
8.8. Jacobi-Verfahren zur Berechnung von Eigenwerten
191
Bemerkungen und Bearbeitungshilfen Transformationen im Jacobi-Verfahren Das Jacobi-Verfahren iiberfiihrt die Matrix A in eine ahn liche Matrix. Dazu wird in jedem Jacobi-Schritt von links und reehts mit einer Jacobi-Matri x multipliziert. 1m Folgenden geben wir an, welche Verander ungen an den Eint ragen der Matrix A diese Matrixmult iplikat ionen bewirken. (a.p bzw. ape bezeiehnet dabei die p-te Spalte bzw. die p-te Zeile von A .)
-s
1
= (a.d ·· · ja.p- dca.p- sa.qla.P+lI·· ·!a.q_dsa.p + ca.qla.q+ll · · · Ia.n ) a l.
c
-s
al .
a p- l.
ap -h
a p•
C8p.- saq.
a p+ l.
a p +l.
J (p, q,Of A = llq-I .
llq- h
llq .
sap.+caq.
llq+l .
llq+ h
au
au
mit c = cosO und s = sinO.
Anpassung des parallelen Jacobi-Verfahrens Der in Abschnitt 6.1 vorgestellte parallele Algorithmus (Algorithmus 6.3) setzt voraus, dass n (n ist die Anzahl der Spa lten der Mat rix A ) genau 2P (P ist die Anzahl der P rozessoren) ist . Auf realen Reehenan lagen wird aber i. Allg. die Anzahl der Spalten der Matrix A wesentlich gr6Eer als die Anzah l der zur Bereehnung zur Verfiigung ste henden P rozessoren sein. In diesem Fall hat ein Pro zessor dan n fiir mehr als nur ein Spaltenpaar der Matrix die im Jacobi- Verfahren notwendigen Transformationen dur ehzufiihren. 1m Folgenden besehreiben wir exemplariseh fiir 2 P rozessoren und 8 Spalten wie die Datenverteilung aussehen kann .
192
Kapitel 8. Aufgaben fiir ein Par allelrechnerpraktikum
Schritt 1: Prozessor 1: Prozessor 2: 1 3-+-+5-+7
Schritt 2: Prozessor 1: Prozessor 2: 1 2-+-+3-+5
/'
4-
/'
4-
2 +--
+-- 6 +-- 8
4 +--
+-- 8 +-- 7
4 +-(2,1), (4,3)
(6,5), (8,7)
Schritt 3: Prozessor 1: Prozessor 2: 1 4-+-+2-+3
/' 6
4-
+-- 8 +-- +-- 7 +-- 5 (6,1), (8,4) (7,2), (5,3)
Schritt 5: Prozessor 1: Prozessor 2: 1 8-+-+6-+4
/'
4-
7 +--
+-- 3 +-- 2
5 +-(7,1) , (8,5)
/'
/' 48 +-- 7 +-- +-- 5 +-- 3 (8,1), (7,6)
(5,4), (3,2)
Schritt 6: Prozessor 1: Prozessor 2: 1 7-+-+8-+6
/' 5
4-
+-- 3 +-- +-- 2 +-- 4 (5,1), (7,3) (8,2), (6,4)
Schritt 8: Prozessor 1: Prozessor 2: 1 3-+-+5-+7
4-
+-- 2 +-- +-- 4 +-- 6 (3,1), (5,2) (7,4), (8,6)
(8,3), (7,5)
Schritt 4: Prozessor 1: Prozessor 2: 1 6-+-+4-+2
(6,3), (4,2)
Schritt 7: Prozessor 1: Prozessor 2: 1 5-+-+7-+8 3
6 +-(4,1), (6,2)
/' 2
4-
+-- 4 +-- +-- 6 +-- 8 (2,1) , (4,3) (6,5), (8,7)
In jedem Schritt ist der Austausch von jeweils zwei Spalten zwischen benachbarten Prozessoren notwendig. AIle Werte tan Ok miissen auf allen Prozessoren vorliegen, wozu ebenfalls Kommunikation notwendig ist .
Auswertung Abbildung 8.19 zeigt den Rechenzeitbedarf des Jacobi-Verfahrens fiir zwei verschiedene Problemgrcsen fiir unterschiedliche Anzahlen von Prozessoren. Wir erwarten, dass das serielle Programm, das im Gegensatz zum parallelen Programm die Symmetrie der transformierten Matrix beriicksichtigt etwa doppelt so schnell ist wie das parallele Programm. Das serielle Programm sollte somit auf einem Prozessor in etwa so schnell sein, wie das parallele Programm auf zwei Prozessoren.
8.9. Nystrom-Verfahren
1000
193
r---------,r-------,---.,.----,r---.,.-......-....,....-.,.---r--....-~~
240x240 Matrix ---.480x480 Matrix ---)(---
-------------
~---- --,-----._-- -.---------.-------*----~------.-
-----------'-------------
100 ~
:aiN
--
c:
Q)
J: 0
Q)
a: 10
1l.-
-.l
-.l_ _-L_-.l_-L_..I...-....1...-L-L_....1..._.l..--1
4 5 6 3 Anzahl der Prozessoren
2
1
7
8
9 10
12
14 16
Abb. 8.19: Rechenzeiten des parallelen Jacobi- Verfahren fiir zwei verschiedene Problemgrosen
Tatsachlich kosten aber die Umspeicherungen der Matrixeintrage zur Erhaltung der Symm etrie der transformierten Matrix schon soviel Rechenzeit, dass der Geschwindigkeitsvorteil nicht so deutlich ausfallt. Bis acht Proz essoren skaliert das parallele Programm gut. Werden bei der hier verwendeten Rechenanlage mehr als acht Prozessoren angefordert , miissen sich jeweils zwei die Busanbindung des Speichers teilen , was zu dem in Abbildung 8.19 sicht baren schlechten Skalierungsverhalten fiihrt .
8.9
Nystrom-Verfahren
Gegeben ist die lineare Fredholms che Integralgleichung zweiter Art
-l
b
x(s)
K(s ,t)x(t) dt = y(s),
s E [a,b],
mit stetigem Kern K und stetiger rechter Seite y. Die Funktion x(s), s E [a ,b] soil berechnet werden.
194
Kapitel 8. Aufgaben fur ein Parallelrechnerpraktikum
Ers etz t man die Integration in dieser Gleichun g durch ein Quadratur verfahren (mit Quadraturknoten tnj, j = 1, ... , n und Quadraturgewicht en Wnj, j = 1, . . . , n), so geht sie in die sogena nnte Nystrom-Gleichung n
Xn(S) -
L K(s ,tnj)x(tnj) = y(s),
s E fa, b),
j=l
fiir die unbekannte Funktion xn(s) tiber. Mit Hilfe des Nystrom-Verfahrens solI die Losung xn(s) dieser Gleichun g berechnet werden. (Die Funktion xn(s) wird dann als Nah erung fiir die unbekannte Losung der Fredholmschen Integralgleichung aufgefasst.) Urn die Funktionswerte von xn(s) an den Quadraturknoten t-«, i = 1, ... , n zu bestimmen , ist im Nystrom-Verfahren das lineare Gleichungssystem
mit
= K (tni ,tnj ), Xi = Xn(tni),
i = 1,
Yi = y(tni),
i
aij
,n, ,n,
i = 1,
j = 1, . . . ,n,
= 1, ,n,
aufzulosen. Die Losung des linearen Gleichungssystems solI mit Hilfe des parallelen Gauf5Algorit hmus mit Zeilenpi vot suche erfolgen. 1. Schreib en Sie eine Rou tine parameter_read, die die Integrationsgrenzen a und b und die Problemgrcse n in Proz ess 0 einliest und dann an aIle anderen P rozesse verteilt.
2. Schreiben Sie eine Routine simpson_const, die die Quadraturknoten t -« und Qu adraturgewichte Wni gemaiS der Summierten-Simpson-Regel parallel berechnet und allen Prozessen zur Verfiigung stellt. Hinweis: Fiir die Verwendung der Summierten-Simpson-Regel muss n ungerade sein. Die Abstande zwischen den Quadraturknoten sind aIle gleich h = ~=~ . Somi t sind die Quadraturknoten gegeben durch
tn,i = tn,i-l
tn,l = a,
+ h,
i = 2, . .. , n.
Die Quadraturgewichte sind gegeben durch
~ h,
Wni =
{
th,
i ungerade, i i gerade, i
'3h, i = l ,n.
=f. 1, n,
=f. 1, n,
8.9. Nystrom-Verfahren
195
3. Schreiben Sie eine Routin e pgauss_factor, die ftir eine zeilenzyklisch gespeicherte Matrix A parallel die LU-Faktorisierung mit Zeilenpivotsuche durchfiihrt , es gilt also AP = LV mit einer geeigneten Permutationsmatrix P . Dabei ist es sinnvoll, zuerst eine Routine sgauss_factor zu programmieren, die die LU-Faktorisierung mit Zeilenpivotsuche seriell durchfiihrt. Denn das Vorhandensein einer seriellen Routine vereinfacht das Programmieren der parallelen Routine und eine eventuelle Fehlersuche in der parallelen Routine deut lich. 4. Schreiben Sie eine Routin e sgauss_solve, die die Auflosung des Gleichungssystems (I - An)x = y mit Hilfe der zuvor berechneten LU-Zerlegung seriell in einem Prozess durchfiihrt und das Ergebnis allen Prozessen zur Verfiigung stellt . 5. Schreiben Sie eine Routine nystroem, die die Eintrage der Matrix A und des Vektors y parallel berechnet und zeilenzyklisch in den Prozessen speichert, fiir die Matrix A mit Hilfe der Routine pgauss_factor die LU-Zerlegung mit Zeilenpivotsu che durchfiihrt und dann das lineare Gleichungssystem Ax = y mit der Routine sgauss_solve nach x auflost. 6. Schreiben Sie eine Routine solution_plot, die die Paare (tni, Xn (t ni )), i = 1, .. . ,n in eine Datei ausgibt. Diese Datei solI dann mit Hilfe des Programmes gnuplot graphisch ausgegeben werden. (Gnuplot interpoliert dabei dann stiickweise linear.) 7. Die Int egralgleichung 1
x (s ) -
1 s ·t ·x(t)dt=1--s,
1 a
besitzt die Losung x (s) Programm zu testen.
2
s E [0,1]
= 1. Verwenden Sie diese Int egralgleichung urn ihr
8. Fiihr en Sie Rechenzeitmessungen fiir verschiedene Problemgrosen und unterschiedliche Anzahlen von Prozessoren durch. Visualisieren sie diese Messwerte.
Auswertung Abbildung 8.20 zeigt den Rechenzeitbedarf des parallelen Nystromverfahrens fiir drei verschiedene Problemgrosen fiir unters chiedliche Anzahlen von Prozessoren. Wie erwartet, fiihrt eine Verdoppelung der Probl emgrose zu einer Verachtfachung der benotigten Rechenzeit. Bis zu einer Gesamtanzahl von acht Prozessoren skaliert das Programm zumindest fiir grose Problemgrosen gut. Fur Prozessorzahlen iiber acht ist ein deutlich schlechteres Skalierungsverhalten festzustellen . Dieses Verhalt en liegt in der verwendeten Rechenanlage begriindet und ist nicht auf das Programm
Kapitel 8. Aufgaben fiir ein Parallelrechnerpraktikum
196
1000
r-------,..----.----..----..---,---.---.----r--r---.---,--. 800 Unbekannte --+-1600 Unbekannte ···x··· 3200 Unbekannte " . 'IE" .
*
. .
100
.. · "ll(.· · ' · · " ' lll· · · .. ··ll(. " ",W " "W '
~
~ .,
-x
-x: .'
lIE
ll(
--
*- • •.•*- .ll(..
~ ~ N cQ) s: o
x-------------x---------
Q)
a:
x.
" -><...x--"*-'x"x
10
lL1
-I...
2
-'x.*
.....L.._ _.L--_...I-----JL..-.......L..--L.--l.--l._-L...----JL--'
3 4 5 6 Anzahl der Prozessoren
7
8
9 10
12
14 16
Abb. 8.20: Rechenzeiten des parallelen Nystromverfahrens fiir drei verschiedene Problemgrcsen
zuriickzufiihren. Bei mehr als acht angeforderten Prozessoren miissen sich in der hier verwendeten Rechenanlage zwei Prozessoren den Speicherbus teilen , die zur Verfiigung stehende Speicherbandbreite halbiert sich somit. Da der Gaul&-Algorithmus ein speicherintensiver Algorithmus ist , fiihrt dies zu dem in der Abbildung abl esbaren schlechen Skalierungsverhalten fur Prozessoranzahlen groBer acht .
Anhang A Ein Linux-Cluster als Parallelrechner Immer neue Anwendungen, etwa in der Strukturmechanik, der Stromungsmechanik, der Optimierung, der Visualisierung und in vielen anderen Gebieten, verlangen nach immer mehr Rechenleistung und Arbeitsspeicher. Dieses Verlangen nach immer neuen Hochstleistungen im TeraFlops- und GigaByte-Bereich wird in gleicher Weise befriedigt wie auch stimuliert durch standig sinkende Hardwarepreise. Somit ist es naheliegend , mehrere "billige" d.h. handelsiibliche Hardwarekomponenten mit einem geeigneten Netzwerk zu so genannten Rechner-Clustern zusammenzubauen. Diese Einzelrechner sind aber ohne geeignete Software als Einheit d. h. als Parallelrechner noch nicht einsatzfahig, also ein toter Haufen an Hardware . Was dieses Rechnernetzwerk nun zum Leben erweckt, ist ein Betriebssystem wie etwa Linux. Damit kann diese Ansammlung von Schaltkreisen als ein einziges logisches Objekt abgebildet werden. Im Folgenden sollen die Arbeitsschritte, von der Hardwareauswahl tiber die Vermittlung der notigen Kenntnisse zum Betriebssystem und zur Rechnerverwaltung bis hin zum Einsatz von parallelen Programmbibliotheken und paralleler Software, dargestellt werden.
A.I
Hardware
Der erste Schritt beim Aufbau eines Clusters ist die Auswahl der dafiir benotigten Hardware . Das Charakteristische bei Clustern ist deren Aufbau aus Einzelrechnern und das Verbinden dieser so genannten Knoten tiber ein Netzwerk. Damit horen die Gemeinsamkeiten unter Clustern aber auch schon auf. Sowohl bei der Auswahl der Rechner fur die Knoten, als auch fiir das Netzwerk stehen von den unterschiedlichsten Anbietern Komponcnten zur Verfiigung. Aus diesem Grund kann hier kein allumfassender Wegweiser gegeben werden, sondern es soli stattdessen exemplarisch an der hier verwendeten Hardwarekonfiguration gezeigt werden, wie ein solches System aussehen kann und worauf man achten sollte. Abbildung A.I zeigt das schematische BUd eines Clusters und seiner Verbindungs-
198
Anhang A. Ein Linux-Cluster als Parallclrechner
Internet IP, 129.l 3.IIU 05 nounuk, 255.255.0.0
nodeO:
node!:
2 CPUs
2 CPUs
2 CPUs
Speicher Serverfestplatte
Speicher Festplatte
Speicher Festplatte
node2:
Abb. A.I: Vernetzungsstruktur fiir den geplanten Linux-Cluster.
st rukt ur . Rechner nodeO besitzt zwei Netzwerkkarten, eine fiir die interne Kommunikation mit den anderen Knoten und eine fiir die AuEenanbindung d. h. die Integration des Rechners in ein Netzwerk, wie beispielsweise das Int ernet. Dieser Rechner ha t bis auf die Festplatte die gleiche Ausstattung wie die anderen Knoten . Bei nodeO wird die Pl atte wegen der zentralen Verwaltung und Lagerung der Benutzerdaten gr6J.1.er gewiihlt. Die Verbindung mit den anderen Knoten erfolgt tiber einen 100 Mbit Ethernet Switch . Nachfolgend wird die hier verwendete Hardware iibersichtsmakig skizziert: • Knot en nodeO (siehe Abbildung A.2): - Festplatte: Mindestens 10 GB, auf denen die Benutzerdaten und das Betri ebssyst em Platz finden. - Hauptspeicher: 512 MB RAM. - Prozessoren: Zwei 800 MHz Pentium III Prozessoren. - Netzwerk: Zwei 100 Mbit Netzwerkkarten, eine fiir die Ausenanbindung und eine fiir die interne Kommunikation. • Knoten nodel , node2 , . . . : - Festplatte: Mindestens 2 GB fiir das Betriebssyst em. - Hauptspeicher: 512 MB RAM. - Proz essoren: Zwei 800 MHz Pentium III Prozessoren. - Netzwerk: 100 Mbit Netzwerkkarte fiir die interne Kommunikation. • 100 Mbit Ethernet Switch (siehe Abbildung A.3): Dient zum Verbinden der einzelrien Rechnerknot en. Switches zeigen ein besseres Durchsatzverhalten als
A.2. Systemsoftwarc
199
HUBs, da gleichzeitige Kommunikation zwischen verschiedenen Knoten moglich ist, ohne dass diese sich gegenseitig behindern. Bei HUBs ist keine parallele Kommunikation moglich, Des Weiteren ist nur mit Switches der so genannte Full-Duplex-Mode also das gleichzeitige Senden und Empfangen von Daten moglich. Bei HUBs miissen Sende- und Empfangsoperationen seriell abgearbeitet werden.
Abb. A.2: Dual-Prozessor-Motherboard mit 512 MB Hauptspeicher, zwei 800 MHz Pentium III Prozessoren, Grafikkarte und Netzwerkkarte.
Fur die einzelnen Knoten wurden wegen des besseren Preis-Leistungs-Verhaltnisses Dual-Prozessor-Systeme gewahlt. Dies hat zur Folge, dass die beiden Prozessoren sich die Netzwerk-Bandbreite teilen miissen, aber intern direkt iiber einen schnellen Bus miteinander kommunizieren konnen. Mit der Auswahl geeigneter Hardwarekomponenten ist der erste Schritt zum Aufbau eines Parallelrechners vollzogen.
A.2
Systemsoftware
Im Foigenden werden die wichtigsten Softwarekomponenten, die zum Betrieb der ausgewahlten Hardware als Parallelrechner notwendig sind , dargestellt.
200
Anhang A. Ein Linux-Cluster als Parallelrechner
Abb. A.3: 100 Mbit Switch mit RJ45 Verkabelung.
A.2.1
Betriebssystem-Installation
Urn auf die Hardware-Ressourcen, die im letzten Abschnitt ausgesucht und physikalisch miteinander verbunden wurden, zugreifen zu konnen , braucht man ein Bet riebssyst em. Fiir x86-Prozessoren st ehen dabei eine Vielzahl von Kandidaten wie etwa Windows 2000 Professional von Microsoft , Solaris von Sun Microsystems, Beas von Be Inc. und Linux zur Verfiigung. Aus den folgenden Griind en ist fiir die Einrichtung des Clusters die Wahl auf Linux gefallen: • Linux ist freie Software , wodurch nur geringe Kost en bei der Beschaffung des Betriebssystems anfallen. Bei einem Cluster, bestehend aus acht Knoten, waren beispielsweise bei einem kommerziellen System acht mal Lizenzgebiihren zu entrichten. Bei Linux hingegen ist nur der einmalige Anschaffungspreis fiir eine Linuxdistribution zu bezahlen, Lizenzgebiihren fallen keine an. Aukerdem sind bei kommerziellen Systemen Programm-Entwicklungswerkzeuge, die bei Linux zum Lieferumfang dazugehoren, oftmals noch separat zu erwerben. • Linux ist ein Mehrbenutzersystem. Das bedeutet , dass auf einem Rechner gleichzeitig mehrere Benutzer arbeiten konnen, ohne sich gegenseitig zu behind ern . Aujerdern wird der Gefahr, dass Daten von Benutzern gegenseitig iiberschrieben werden, durch geeignete Schutzmechanismen vorgebeugt. • Linux bietet eine starke Netzwerkumgebung. Dies ist einerseits wichtig bei der Verbindung der einzelnen Knoten des Clusters untereinander, andererseits ab er auch schon beim Zugriff auf den Cluster von auserhalb.
A.2. Systemsoftware
201
• Linux unterstiitzt so genanntes Symmetric Multi Processing (SMP). In einem Rechner konnen dabei mehrere Prozessoren an unterschiedlichen Aufgaben arbeiten, d.h. ein Linux-Clust er kann als MIMD-Rechner betrieben werden. Linux sorgt durch so genannte Semaphore dafiir, dass Daten im BetriebssystemKern konsistent bleiben. • Unter Linux stehen diverse Standardbibliotheken zur parallelen Programmierung zur VerfUgung. Auf eine dieser Bibliotheken , LAM, wird spat er im Abschnitt A.3 genauer eingegangen. Nicht verschweigen sollte man dabei , dass Linux auch einige Nachteile mit sich bringt: • Linux bietet keinen Support, der mit dem Produkt miterworben wird. Wird professionelle Unterstiitzung benotigt, so ist diese separat zu erwerben. • Linux gibt keine Garantie fiir das Funktionieren von Betriebssystemteilen. Durch eine standige Weiterentwicklung sind viele Werkzeuge noch in der Entwicklungsphase und es ist rnoglich, dass bestimmte Teile iiberhaupt nicht oder noch nicht richtig funktioni eren. • Linux ist immer noch ein System , das wegen fehlender grafischer Werkzeuge schwierig zu administrieren ist . Viele Programmpakete sind nicht so dokumentiert, wie man sich das vielleicht wiinschen wiirde. Darum ist ein gewisses Eigenengagement und Wissen notig , urn komplexere Dinge, wie den Aufbau eines Clusters zu verwirklichen. Bevor nun auf die Installation des Betriebssystems im Einzelnen eingegangen wird , seien noch ein paar allgemeine Dinge erwahnt, Selbstverstandlich ist jeder einzelne Knoten separat einzurichten. Dabei ist zu beachten , dass auf allen Rechnern die gleiche Software eingespielt wird, urn Inkompatibilitiiten durch unterschiedliche Programmversionen oder fehlende Teile zu verhindern . Der Rechner nodeO bildet hier eine gewisse Ausnahme , denn er ben6tigt, da er zusatzlich zu der Verwendung als Rechenmaschine auch als Server eingesetzt werden soil, neben den Client-Programmen fiir bestimmte Netzwerk-Werkzeuge, zusiitzJich noch die ServerProgramm e. Weiterhin ist es sinnvoll, auf nodeO zusiitzliche Software, wie eine Programm-Entwicklungsumgebung oder ein Officepaket aufzuspielen, da nodeO der einzige direkt vom Internet erreichbare Knoten ist und die Benutzer sequentiell e Programme hauptsachlich hier abarbeiten werden. 1m Folgenden soil die Installation der SuSE-Linux Distribution auf einem einzelnen Rechner beschrieben werden. Die Verwendung der SuSE-Distribution ist dabei fiir den Aufbau eines Clust ers nicht notwendig, sondern hangt mit personlichen Vorlieben und Gewohnheit en der Autoren zusamm en. Das Vorgehen zur Installation einer anderen Dist ribution wird im Einzelnen von dem hier beschriebenen abweichen, insgesamt gesehen sind die Installationsroutin en jedoch ahnlich.
202
Anhang A. Ein Linux-Cluster als Parallelrechner
Zunachst wird von der Installations-CD Nr. 2 gebootet. Dazu muss allerdings zuvor im BIOS die Option booten von CD-ROM aktiviert worden sein . Das Programm linuxrc startet dann automatisch. Mit diesem Programm werden die grundlegenden Einstellungen wie Sprache, Bildschirmart und Tastaturbelegung vorgenommen. Im Hauptmenii wahlt man unter Kernel-Module das fiir die eigene Netzwerkkarte passende Modul aus. Welches das passende Modul fiir die eigene Karte ist, kann man aufder Homepage von SuSE (http://www.suse.de) in deren Hardware-Datenbank herausfinden. Danach wird die Installation iiber Installation / System starten begonnen. Im nachsten Menii ist der Punkt Installation starten auszuwahlen und danach als Quellmedium CD-ROM zu wiihlen. Wenn alles richtig funktioniert, startct nun das Programm YaST (Yet another Setup Tool), in dem man den Meniipunkt Linux neu installieren auswiihlt. Als nachstes muss nun die Festplatte so aufgeteilt werden, dass Linux darauf Platz findet. Da auf dem Cluster vermutlich keine weiteren Betriebssysteme laufen sollen, kann diese Aufgabe durch den Meniipunkt Gesamte Platte automatisch erledigt werden. Als nachster Schritt ist die zu installierende Software auszuwahlen. Jeder einzelne Teil des Betriebssystems ist in so genannten RPM-Paketen verpackt, wodurch nur ganze Pakete ausgewiihlt werden konnen, Unter den Paketen konnen Abhiingigkeiten bestehen, d. h. ein bestimmtes Paket benotigt zum korrekten Arbeiten ein anderes Paket. Solche Abhiingigkeiten werden von YaST automatisch erkannt und durch Installation des zusatzlich benotigten Pakets befriedigt. Damit diese Auswahl nicht fiir jeden Knoten erneut vorgenommen werden muss, sollte man unbedingt daran denken, die Konfiguration tiber Konfiguration speichern auf Diskette zu sichern. Wichtig fiir die Einrichtung eines Clusters ist noch, dass die Pakete zur Programmerstellung paralleler Programme im Ordner beo zu finden sind. Beim Einrichten von nodeO sollte man nicht vergessen, die Server-Software ypserv und nfsserv zu installieren. Sind alle gewiinschten Pakete ausgewiihlt, startet man die Installation iiber den Meniipunkt Installation starten. Wenn die Installation der Pakete zu Ende ist , wahlt man einen fiir den Rechner passend en Kernel aus . Bei der im vorhcrgehenden Abschnitt beschriebenen Hardware ist cin Kernel mit SMP-Unterstiitzung auszuwahlen, Im nachsten Schritt ist der Bootloadcr LILO, der den Linux-Kernel von der Festplatte liest und startet, im so genannten Master Boot Record (MBR) zu installieren. Dieser MBR ist der Bereich auf der Festplatte, der vom BIOS beim Rechnerstart automatisch gelesen und danach ausgefiihrt wird. Mit Hilfe von YaST erfolgt die Grundkonfiguration des Rechners. Man wahlt die passende Zeitz one MET und beginnt dann mit der Netzwerkkonfiguration. Zuerst sind Rechner- und Domainname festzulegen. Die Knoten des Clusters soliten, wie in Abbildung A.I gezeigt , der Reihe nach mit nodeO, nodel, usw. benannt werden , urn eine gewisse Ordnung zu erhalten. Aile Knoten soliten der gleichen Domain angehoren, etwa cluster. par. com. Bei der Frage loopback oder echtes Netz muss man sich fiir letzteres entscheiden. Urn dieses Netzwerk nun einzurichten, sind zu-
A.2. Systemsoftware
203
erst die vorhandene Netzwerkkarten einzurichten. Dazu muss fiir jede Netzwerkkarte eine IP-Adresse vergeben werden. Die IP-Adressen fiir das interne Netzwerk soBten dabei aus einem privaten, im Internet nicht vergebenen Adressraum, wie es Abbildung A.l zeigt, gewahlt werden. Sowohl IP-Adresse als auch IP-Adresse des Gateways und Netmask zur Ausenanbindung von nodeO sind abhangig vom Netzwerk, in das er eingebunden werden soll. Die Dienste inetd und portmapper soBten auf allen Rechnern gestartet werden, die Dienste NFS-Server und NIS-Server nur auf nodeO. Auf einen Nameserver kann nur nodeO zugreifen, weswegen bei den anderen Knoten kein solcher einzutragen ist . Bei der Frage nach der YP-Domain sollte der Eintrag auf allen Knoten identisch sein, etwa wieder cluster. par. com. Da von den Knoten nodel, node2 usw. iiblicherweise keineMail verschickt werden soB, kann bei der sendmail-Konfiguration fiir diese Rechner Einzelplatzrechner ohne Netzverbindung ausgewahlt werden, fiir nodeO hingegen sollte man Rechner mit permanenter Netzverbindung wahlen. Als nachster Schritt wird nun fiir den Benutzer root ein Passwort festgelegt . Dieses Passwort kann ohne Bedenken fiir alle Knoten gleich gewahlt werden, da spater sowieso durch verschiedene Mechanismen ein passwortfreies Wechseln zwischen den Knoten eingerichtet wird. Danach konnen die Benutzer-Accounts angelegt werden, was bei einem Cluster aber nicht empfehlenswert ist, da diese zentral auf nodeO verwaltet werden soBen (siehe A.2.3). Die nun folgende Konfiguration fiir Maus und grafische Oberflache braucht man nicht durchzuflihren, da iiblicherweise niemand direkt am Cluster arbeiten wird, sondern der Zugang immer iiber Netz erfolgen wird. Das System ist damit vollstandig eingerichtet und steht nun zum Arbeiten zur Verfligung. Nach der InstaBationjedes einzelnen Knotens stehen diese als Einzelplatzrechner zur Verfiigung. Was nun noch fehlt, urn den Rechner als Parallelrechner anzusprechen, ist die Einrichtung der Netzwerksoftware und der Programmbibliotheken zur parallelen Programmierung. Das dazu notwendige Vorgehen wird nachfolgend beschrieben.
A.2.2
Nameservices
Zur Ubertragung von Daten zwischen den einzelnen Knoten und nach augen ins Internet wird auf Linux-Rechnern iiblicherweise das so genannte TCP-IP-Protokoll verwendet . Dieses Protokoll verwendet zur Adressierung von Rechnern IP-Adressen, das sind 32 Bit Adressen, die aus Grunden der Ubersichtlichkeit iiblicherweise in vier 8 Bit Gruppen zusamrnengefasst werden, wobei die 8 Bit Zahl dann als Dezimalzahl ausgeschrieben wird (z.B. 127.0.0.1). Diese Adressierungsart ist nicht besonders intuitiv und daher fiir den Menschen schwer zu merken. Man mochte deshalb die einzelnen Knoten des Rechners iiber einen eingangigen, gut zu behaltenden Namen ansprechen, etwa nodel fiir Knoten 1. Fur die Adressierung des Rechners muss dann eine Umsetzung des Namens in die zugehOrige IP-Adresse erfolgen.
204
Anhang A. Ein Linux-Cluster als Parallelrechner
Fur Rechner, die mit dem Internet verbunden sind , wird diese Umsetzung normalerweise durch einen DNS-Server vorgenommen. Von Rechnern, die nur mit dem internen Netzwerk des Linux-Clusters verbunden sind, ist aber das Internet nicht direkt erreichbar . Auferdem wurden fiir die einzelnen Knoten IP-Adressen aus einem privaten Bereich verwendet, die nicht in 6ffentliche DNS-Server eingetragen werden. Das Betreiben eines eigenen DNS-Servers erscheint fiir eine geringe Anzahl von Knot en iibertrieben. Deswegen muss auf die Moglichkeit zurtickgegriffen werden, solche Namenseintragungen auf jedem einzelnen Knot en in der Datei Jete/hosts vorzunehm en. Die folgende Beispieldatei fiir vier Knoten zeigt das Vorgehen hierfiir: # Jete/hosts #
127 .0.0.1 172.26.1.1 172 .26.1.2 172.26 .1.3 172 .26 .1.4
loealhost nodeO.eluster.par.eom node1.eluster.par .eom node2 .eluster.par.eom node3.eluster.par .eom
nodeO node1 node2 node3
In die erste Spalte schreibt man die IP-Adresse, in die zweite den so genannten FuIl-Qualified-Hostname, das ist der Rechnernam e plus der Domainname und in die dritte Spalte triigt man den Rechnernam en ein. Zum Einloggen auf Knoten 1 kann nun wesentlich kiirzer ssh nodel anstelle von ssh 172 .26 .1.1 verwendet werden.
A.2.3
NIS (Network Information Service)
Der heute mit NIS bezeichnet e Network Information Service hie/!, zuerst yellow pages. Da dieser Name aber durch die Firma British Telecom geschtitzt war , wurde das Produkt in NIS umben annt . Dennoch heisen die Pakete, die die Software fiir NIS zur Verfiigung steIlen, bei der SuSE Linux Distribution nach wie vor ypelient und ypserv. NIS basiert auf dem Client-Server-Modell, d.h. der Client stellt Anfragen an den zentralen Server, der diese dann beantwortet. Server gibt es daher meist nur einen, Clients hingegen im Allgemeinen mehrere. Ziel von NIS ist es, Informationen im Netzwerk zentral zu verwalten und nach Bedarf an die Clients zu liefern. Zu diesen zentral verwaltbaren Informationen gehoren die im Zusammenhang mit dem Aufbau eines Linux-Clu sters besonders wichtigen, wie Benutzername, Passwort und Name des Home-Verzeichnisses. Viele weit ere Information en, wie etwa Rechnernamen und IP Adressen, konnen ebenfalls tiber NIS verte ilt werden, sind aber eher im Zusammenhang mit grose n Net zen als mit einem Linux-Clust er von Bedeutun g. Zusamm enfassend liisst sich sagen: NIS ermoglicht es, aIle Benutzer des Parallelrechners zentral auf dem Server einzuricht en und dann diese Benutzerinformationen tiber den ganzen Clust er zu verteilen. Der Administrator spart damit die Arbeit, sich auf allen Knoten einzuloggen und aile Benutzer auf jedem einzelnen einzuricht en.
205
A.2. Systemsoftware
Der Rechner nodeO soil hier die Aufgabe des Servers iibernehmen und aile anderen Knoten inklusive nodeO selbst sollen ihre Information als Clients von diesem bekommen. Auf der Client-Seite ist nicht viel zu tun, urn auf den NIS-Server zugreifen zu konnen, Im Wesentlichen muss nur das RPM-Paket ypclient eingespielt werden und in der Datei / etc/yp . conf die IP-Adresse (Achtung: Generischer Name funktioniert nicht!) des Servers bekannt gegeben werden: # /etc/yp .conf #
ypserver 172 .26 .1 .1 Welche Informationen iiber NIS bezogen und welche lokal verfiigbar sind, wird in der Datei /etc/nsswitch.conf (Name Service Switch) festgelegt. Diese Datei ist im Paket ypclient enthalten und kann fiir die hier beni:itigten Standardaufgaben unverandert verwendet werden. Beim nachsten Start des Rechners wird von dem Startup-Skript /etc/init .d/ypclient das Programm ypbind automatisch gestartet, das dann seinerseits die Verbindung zum Server herstellt. Mochte ein Benutzer in einer NIS-Umgebung sein Passwort andern, so kann er nicht den Befehl passwd verwenden, sondern muss stattdessen mit dem Befehl yppasswd die Passwortanderung auch dem Server bekannt geben, damit dieser sie dann iiber das ganze Netzwerk verteilen kann. Damit ein Benutzer nicht versehentlich sein Passwort nur lokal andert, sollte der Administrator dafiir sorgen, dass passed nicht verfiigbar ist, indem er passwd umbenennt oder loscht. Auf der Server-Seitc, also auf nodeO, muss das RPM-Paket ypserv eingespielt werden. Danach miissen die Informationen, die iiber NIS verteilt werden sollen, zuerst cinmal in so genannten Maps abgelcgt werden. Diese Maps kann man von Hand anlegen oder aber einfacher durch Ausfiihren von make im Verzeichnis /var/yp erzeugen lassen. Ob alles richtig funktioniert hat, kann man iiberpriifen, indem man sich den Inhal t der Maps mit dem Kommando ypcat <mapname> anzcigen lasst . Sind nun die Informationen in den entsprechenden Maps gespeichert, so muss noch bestimmt werden, welche Informationen iiberhaupt iiber NIS verteilt werden. In der Datei / etc/ypserv. conf konnen Option en und Zugriffsberechtignngen fiir den NIS-Server festgelegt werden. Optionen werden in der Form option: [yeslno] angegeben . Zugriffsberechtigungen haben die Syntax host:map:security :mangle[:field]
206
Anhang A. Ein Linux-Cluster als Parallelrechner
In der Beispielkonfigurationsdatei # #
letc/ypserv.conf
dns: no 172.26.1. 172 .26 .1. 172.26.1.
*
shadow.byname passwd.adjunct.byname
* :*
port port none deny
yes yes
bedeutet beispielsweise die Option dns: no, dass der Server, wenn Anfragen von Clients kommen, die nicht in der hosts-Map verzeichnet sind, keine Anfrage an einen DNS-Server stellt. Dies ist fiir den Linux-Cluster sinnvoll, da aile Knoten IP-Adressen aus einem privaten Bereich haben und somit nicht in DNS-Server eingetragen werden. Bei der erste n Zugriffsberechtigung steht im Feld host die Zahl 172.26.1. als Wildcard fiir aile Rechner deren IP-Adresse mit 172.26.1 beginnt. Die Map, fiir die Berechtigungen festgele gt werden solien, ist shadow. byname. Die Angabe port im security-Feld erlaubt nur Anfragen von Ports mit Nummern niedriger als 1024. Dies sind so genannte pri vilegierte Portnummern, die den Benutzern nicht zur Verfiigung st eh en, sondern exklusiv fiir das Syst em reservi ert sind. Die Angabe yes im mangle Feld besagt, das bei Anfragen, die nicht von privilegierten Ports kommen, ein x als Ergebnis zuriickgeliefert wird . Auch der Start des NIS-Server-Dienstes erfolgt wie schon der der Client Dien ste wahrend des Bootvorgangs durch Startup-Skripte. Das Skript / etc/ini t . d/ypserv start et den NIS-Server ypserv und das Skript / etclinit . d/yppasswdd start et das Programm rpc . yppasswdd, das dem Benut zer das And ern seines Passwortes erla ubt.
A.2.4
NFS (Network File System)
Im letzten Abschnitt ist beschrieben worden, wie es moglich ist , die Benutzer des Parallelrechn ers zentral zu verwalten. Hier soli es nun darum gehen , wie man diesen Benutzern , die sich auf jedem Knoten des Parallelrechners einloggen konnen, iiberall die gleiche Arbeitsumgebung zur Verfiigung ste llt , d . h. insb esondere, wie man ihn en den Zugriff auf die Dateien aus ihr em Hom e-Verzeichnis erm6g1ichen kann. Da bei soli nicht auf allen Festplatten der einzelnen Knoten fiir den Benutzer ein Hom e-Verzeichnis vorha nden sein, sondern die Arb eitsverzeichnis se solien von einem zentralen Rechner bezogen werden. Damit verhinde rt man unnoti ges Hinund Herkopieren zwischen den einzelnen Knoten und erreicht gleichzeitig, dass der Benutzer immer mit der aktuellen Datei arbeitet. Das N etwork File System (NFS) , das 1984 von der Firma Sun Microsystems entwickelt wurde, ist der geeignete Weg zur Realisierung dieser Wiinsche. NFS ist ein
A.2. Systemsoftware
207
Server-Client-System, d. h. ein Server bedient die Anfragen (in diesem Fall Lese- und Schreibzugriffe auf eine Festplatte) der Clients. Ublicherweise wird man den NFS-Server auf nodeO aufsetzen, da dieser mit einer gr6f&eren Festplatte ausgestattet ist und die Benutzer dort zentral eingerichtet wurden. Dazu muss der NFS-Server beim Hochfahren des Rechners vom Prozess init gestartet werden. Dies erreicht man am einfachsten durch das Anlegen der Datei / ete!init. d/re3 . d/Sl1nfsserver mit dem folgenden oder ahnlichem Inhalt: # /ete/init.d/re3 .d/Sllnfsserver #
echo -n "Starting NFS server" startproc /usr/sbin/rpc.mountd startproe /usr/sbin/rpc .nfsd (Bei der SuSE-Linux-Distribution muss diese Datei nicht angelegt werden, sondern sie wird mit dem Paket nfsserv . rpm eingespielt. Die Aktivierung des NFS-Server Dienstes erfolgt dann tiber die Eintrage START_PORTMAP="yes" und NFS_SERVER= "yes" in der Datei / ete/re. eonfig.) Zum Beenden des NFS-Servers beim Herunterfahren des Rechners dient die Datei /ete!init .d/re3.d/K12nfsserver, die wie die Startdatei vom Prozess init verarbeitet wird: # /ete/init.d/rc3 .d/K12nfsserver #
eeho -n "Shutting down NFS server" killproe -TERM /usr/sbin/rpe.mountd killproe -TERM /usr/sbin/rpe.nfsd (Bei der SuSE-Linux-Distribution ist auch diese Datei im Paket nfsserv.rpm enthalten und muss deshalb nicht von Hand angelegt werden.)
Urn dem NFS-Server mitzuteilen, welcher Rechner welche Verzeichnisse beziehen darf, gibt es die Datei /ete/exports: # /ete/exports # # Diese Datei wird ben6tigt von rpe.nfsd und rpe.mountd .
/home *.eluster.par .eom(rw,no_root_squash) In die erste Spalte dieser Datei schreibt man den vollstandigen Namen des Verzeichnisses, das tiber NFS zur Verfiigung gestellt werden soll. Die zweite Spalte enthalt die Namen der Rechner, die berechtigt sind, dieses Verzeichnis zu importieren, und welche Rechte diesen Rechnern in dem Verzeichnis eingeraumt werden. Ein * in der
208
Anhang A. Ein Linux-Cluster als ParaJlelrechner
Bezeichnun g des Rechnern amens steht dab ei fiir eine beliebige Zeichenfolge. Die Berechtigungen rw steht fiir Lese- und Schreibb erechtigung , no_root_squash bedeute t, dass dem Benutzer root ihm auf dem Client-Rechner zust ehende Sonderrechte auch fiir das importierte Verzeichnis gewahrt werden, obwohl es auf einem anderen Rechner "beheimatet" ist (Achtung: root darf somit auch beispielsweise aIle Dateien, die vom Server zur VerfUgun g gestellt werden, loschen). In der vorhergehenden Beispielkonfigurationsdatei wird z. B. allen Rechnern in der Domain cluster . par . com das Verzeichnis /home zum Lesen und Schreiben zur Verfiigung gesteIlt, wobei root seine Sonderr echte beha lt . Auf der Client-Seite konnen beim St art des Rechners aIle iiber NFS zu beziehende n Verzeichnisse aut omatisch gemountet werden, indem man vom Init-Prozess die Datei / etclinit . d!rc3. d/S09nfs ausfiihren lasst , # /etc/init.d/rc3 .d/S09nfs #
mount -at nfs
Urn beim Herun terfahren des Rechners oder beim Wechsel des Runlevels die iiber NFS bezogenen Verzeichnisse wieder ordnungsgemaf auszuhangen, legt man auserdem eine Datei /etc/init.d/rc3 .d/K14nfs mit dem folgenden Inhalt an: # /etc/init.d/rc3.d/K14nfs #
umount -at nfs & (Die Dateien S09nfs und K14nfs sind bei SuSE-Linux vorhanden und rniissen nicht gesondert angelegt werden) .
Urn mount mitzut eilen, welche Verzeichnisse iiber NFS zu beziehen sind, dient die Datei /etc/fstab: # /etc/fstab #
/dev/hda2 /dev/hda3 /dev/hdal . nodeO:/home
swap
/ /boot /home
swap ext2 ext2 nfs
defaults defaults defaults defaults
0 1 1 1
0 1 2 3
Bier werden die NFS-P latten genauso wie lokale Pl at ten einget rage n. Anstelle des Device schreibt man nun den Namen des NFS-Servers und den dortigen Verzeichnisnamen . Als Filesystemtyp verwendet man nfs . Der Mountpoint wird , wie bei lokalen Plat ten, in die zweit e Spalte eingetragen und auch die and eren Paramet er hab en die gleiche Bedeutung wie fur lokale Platten.
A.2. Systemsoftware
A.2.5
209
Remote Shell (rsh) / Secure Shell (ssh)
Nachdem nun die Benutzer auf allen Knot en des Clusters einen Account besitz en und nach dem Einloggen dart auch ihr Home-Verzeichnis vorfinden, ist der Wunsch , ein m6glichst einfaches Wechseln zwischen den einzelnen Knoten zu erm6glichen, verst andlich, Es erscheint verniinft ig, das Einloggen von einem Knoten des Clusters auf einen anderen Knoten ohne Passwortabfrage zu errnoglichen, so dass nach der erst en Authent ifizieru ng beim Einloggen auf nodeO von aujerhalb keine weit eren Berecht igun gsabfragen mehr folgen. Dies ist insbesondere dann sinnvoll, wenn von nodeO aus auf jedem Knoten ein Programm gestartet werden solI. In diesem Fall ware namli ch ansonste n fiir jeden einzelnen Knoten jeweils eine Passwortabfrage n6tig . Sowohl das Programm rsh als auch das Programm ssh erm6gli chen ein solches Einloggen ohne Passwortabfr age, weshalb auch beide hier kurz besprochen werden sollen. Bei rsh (Remote Shell) kann jeder Benutzer in seinem Home-Verzeichnis eine Date i rv/ .r host s anlegen, in die die Namen aller Rechner einget rage n werden, von denen aus ein Einloggen ohne Passwortabfrage erfolgen da rf. Wenn ma n also auf nodeO diese Datei mit dem folgenden oder ahnlichem Inhalt erzeugt , so wird diese iiber das zuvor bespro chene NFS auf alle Knoten des Clusters export iert und ein passwortfr eies Einloggen auf allen Rechnern ist verwirklicht . # -/.rhosts #
nodeO node1 node2 node3 Urn dem einzelnen Benutzer die Arbe it, sich eine Datei . rhosts zu erzeugen, abzunehmen, legt der Administrator entweder eine globale Dat ei / etc/hosts. equiv an , die dann fiir alle Benutzer gilt und nur von root geandert werden kann , oder er legt eine Datei / etc/skel/ . rhosts an, die beim Einrichten eines neuen Benutzers automatisch in dessen Home-Verzeichnis kopiert wird und von ihm dort unverandert benutzt oder modifiziert werden kann. Fiir das Programm ssh (secure shell) ist das Vorgehen, urn sich passwortfr ei einloggen zu konn en, ein wenig anders . Zuerst erzeugt sich jed er Benutzer mit dem Befehl ssh-keygen einen so gena nnte n privat en- und einen offentli chen Schliissel. Urn da bei kein Passwort zu vergeben, sollte die Frage Enter passphrase: und Enter the same passphrase again : jeweils durch Driicken der Ent er-Taste bea ntwortet werden. Nach Ausfiihren des
210
Anhang A. Ein Linux-Cluster als Parallelrechner
Programmes findet man dann im Verzeichnis 'V/ . ssh den offentlichen Schliissel identity . pub und den privaten Schliissel identity vor. AIle Rechner, auf denen der offentliche Schliissel in der Dat ei authorized_keys eingetragen ist , erlauben nun ein Einloggen ohne Abfrage des Passwort es. Kopiert man also die Dat ei i dent i t y .pub in die Datei authorized_keys urn und exportiert diese iiber NFS auf aIle Knoten des Clusters, so kann man passwortfrei zwischen den einzelnen Knoten wechseln. Der private Schliissel darf auf keinen Fall fiir andere Benutzer lesbar sein, da diese sich sonst in den eigenen Account auf allen Rechnern einloggen konnen, bei denen der eigene offentliche Schliissel in die Datei authorized_keys einget ragen ist . Beim ersten Einloggen auf den Knoten, von nodeO aus, sind diese Rechner fiir das Pro gramm ssh unbekannt. Deswegen erscheint die Meldung Host key not found from the list of known hosts . Are you sure you want to continue connecting (yes/no)? Die Frage ist mit yes zu beantworten. Bei weiteren Einloggvorgangen sind die Knoten da nn in der Datci known_hosts eingetragen und es findet keine weitere Abfrage mehr statt. Ein Wort zum Sicherheitsaspekt: Das passwortfreie Wechseln zwischen den einzelnen Knoten bedingt eine gewisse zusatzliche Gefahr. Gelingt es einem Hacker, auf nodeO einzudringen, so hat er auch Zugang zu allen andere n Knot en des Clusters. Richt et er auf den einzelnen Knot en Schaden an , die eine Neuinst allat ion notwendig machen, so ist nicht ein Rechner, sondern es sind aIle Rechner des Clusters neu zu installieren, was einen enormen Arbe itsaufwand bedeutet. Deswegen kommt dem Schutz von nodeO, als Zugangsrechner fiir den Cluste r, eine besondere Bedeut ung zu. Jeder Benutzer sollte sich aus diesem Grund von au Ben auf dem Cluster nur mit dem P rogramm ssh einloggen, das die Authentifizierungs- und Session-Daten in verschliisselter Form iibertragt. Das Programm rsh sollte auf keinen Fall zum externen Einloggen verwendet werden, da es aIle Daten in unverschliisselter Form ans Netz gibt und ein Hacker, der an diesem Netz lauscht, so die Passworter im Klartext mitlesen kann. Bei Einloggvorgangen innerhalb des Clusters ist eine Verschliisselung, wenn man den eigenen Benut zern vertraut, nicht notwcndig, da jemand der das interne Netz abhoren will, Zugang zu mindestens einem Knote n des Clusters haben muss. Urn niemanden in die Versuchung zu fiihren, sich unverschliisselt bei nodeO anzumelden , sollte der Administrator Zugange iiber rsh generell, auch im internen Netzwerk, verbieten. Dazu ist der rsh-Dienst in der Datei / etc/inetd. conf auszukomment iereno Das Programm ssh bietet als weiteren Vorteil gegeniiber rsh automatisches XlI-Forwarding, d. h. die Ausgabe von XlI-basierten Programmen wird automatisch an den richtigen Bildschirm weit ergeleit et. Auch das Prog ramm ftp iibert ragt iibrigens die Passworter im Klartext und sollte
A.2. Systemsoftware
211
daher vermieden werden. Als Ersatz hierfiir kann das Programm scp (secure copy) zum Einsatz kommen, das im gleichen Paket wie das Programm ssh enthalten ist .
A.2.6
Automatisierung durch Skripte
Viele Aufgaben , die auf einem Cluster zu erledigen sind, betreffen nicht nur einen einzelnen Knoten, sondern miissen auf allen Knoten durchgefiihrt werden. Urn ein manuelles Einloggen auf jedem Rechner des Clusters und dann die manuelle Durchfiihrung der Aufgabe auf dem entsprechenden Rechner zu vermeiden, kann man Skripte zur Automatisierung verwenden. Sinnvolle Skripte waren beispielsweise ein Skript namens cps , das aIle laufenden Prozesse auf allen Knoten des Clusters ausgibt , ckillall, das aIle Prozesse eines bestimmten Namens auf dem ganzen Cluster beendet, creboot oder chal.t, die den Cluster neu starten oder herunterfahren. Beispielhaft solI hier das Skript chal.t vorgestellt werden:
#!/bin/bash ############################################# # Herunterfahren aller Knoten des Clusters # ############################################# BASENAME= "node" LASTNODE=O NUM=3 NAME=$BASENAME$NUM ERROR=" ok" until [ $BASENAME$LASTNODE = $NAME ] do echo $NAME if ping -c 1 - i 1 $NAME >/dev/null 2>&1 then ssh $NAME /sbin/halt -n else echo "Rechner " $NAME " antwortet nicht ." ERROR="not_responding" fi NUM=$ [$NUM - 1] NAME=$BASENAME$NUM done if [ $ERROR = "not_responding" ] ; then echo "Herunterfahren des Clusters war nicht erfolgreich!!!"
212
Anhang A. Ein Linux-Clus ter als Parallelrechner
else echo "Herunterfahren des Clusters war erfolgreich ." Isbin/halt -n fi Dieses Skript ist auf nodeO zu st art en und sollte deswegen auch nur dort installiert sein. Auserdem sollte nur root die Berechtigung dazu haben, dieses Skript auszufiihren. Wenn auf nodeO das Skript gestartet wird, so wird beginnend bei node7 bis zu node! durch die until-Schleife immer wieder die gleiche Aufgabe erledigt. Zuerst wird mittels des Kommandos ping gepriift, ob der Rechner erreichbar ist. Falls ja, wird ihm mittels des Kommand os halt mitgeteilt, er solle sich herunterfahren. 1st er nicht erreichbar, so wird eine Fehlermeldung ausgegeben und ein Flag gesetzt. Waren nun aIle Rechner erreichbar, so kann sich nodeO nach Beendigung der Schleife selbst herunterfahr en. War aber mindestens einer der Rechner nicht erreichbar, so wird eine Fehlermeldung ausgegeben und nodeO nicht heruntergefahren, urn root die M6glichkeit zu geben, manuelle MalSnahmen zu ergreifen, urn den nicht antworte nden Rechner herunterzufahr en. Auf ganz ahnliche Weise kann man auch die oben angedachten Skripte ckillall usw. verwirklichen, indem man einfach das Kommando halt gegen ein entsprechendes Kommando austauscht .
A.3
Programmbibliotheken gramnuerung
zur
parallelen
Pro-
Nachdem in den letzten Abschnitten das Aufbauen eines Parallelrechners beschrieben wurde, soIl es hier nun konkret darum gehen, wie dieser zu nutzen ist . Prinzipiell gibt es dafiir zwei Wege, namlich zum einen die Verwendung von vorgefertigten, meist kommerziellen parallelen Programmen, wie etwa LS-Dyna zur Fini teElemente-Berechnung, oder zum anderen das Erstellen von eigenen parallelen Programmen. Bei eigener Pr ogrammerstellung wiederum ergeben sich die unterschiedlichen Ansatze: • Automatische Parallelisierung eines seriellen Programms durch einen Compiler, wie sie etwa in High Performance Fortran verwirklicht ist. • Hinzubinden von P rogrammbibliotheken, die fiir Standardaufgaben, wie etwa Matr ix-Vektor-Multiplikation, parallelisierte Routinen zur Verfiigung stellen. Die Biblioth ek pblas, eine Unterbib liothek von ScaLAPAK und erhaltlich von http://www .netlib. orgl scalapack/, ist ein gutes Beispiel fiir diesen Ansatz. • Explizite parallele Pr ogrammierung.
A.3. Programmbibliotheken zur parallelen Programmierung
213
1m Weiteren solI nur auf die explizite parallele Programmierung naher eingegangen werden . Da die Programme, die dabei entstehen, portabel bleiben sollen, sollte man auf eine Standardkommunikationsbibliothek, die auf moglichst vielen Parallelrechnern verfiigbar ist, zuriickgreifen. Es existieren oftmals auch vom Hersteller des Parallelrechners geschriebene, speziell auf seine Hardware zugeschnittene und damit sehr effiziente Implementierungen solcher Standardbibliotheken. 1m Internet findet man neben anderen die folgenden in der Tabelle zusammengestellten kostenfreien Implementierungen von solchen Standardbibliotheken, die nicht auf einen speziellen Rechner ausgelegt sind und somit auf vielen verschiedenen Architekturen laufen:
I Programmbibliothek PVM (Parallel Virtual Machine) LAM (Local Area Multicomputer) MPICH (MPI CHameleon)
I WWW-Homepage www.epm.ornl.gov/pvm/pvm_home.html www .mpi.nd.edu/lam www-unix .mcs .anl.gov/mpi/mpich
Alle hier aufgefUhrten Bibliotheken basieren auf dem Message-Passing-Konzept, d. h. ein Prozess kommuniziert mit einem anderen Prozess, indem er diesem eine Nachricht zusammenstellt und dann zusendet . Aus Zeit- und Platzgriinden solI hier nur auf eine solche Implementierung eingegangen werden. Ohne eine Bewertung hinsichtlich Qualitat und Verwendbarkeit der anderen Bibliotheken vornehmen zu wollen, ist die Wahl hierbei auf die MPI-Implementierung LAM gefallen. Aber alles, was hierbei gesagt wird, gilt in sehr ahnlicher Form auch fiir MPICH .
A.3.1
Programmerstellung
Die MPI-Bibliothek wird durch die Anweisung #include "mpi.h" in den C-Quellcode, durch #include "mpi++.h" in den C++-Quellcode und durch INCLUDE "mpif . h" in den Fortran-Quellcode eingebunden und stellt dann Funktionen fiir die folgenden Bereiche zur Verfiigung: • Initialisierung (Start der Kommunikationsumgebung (init), Abfrage der Anzahl der Prozesse (comm_size) und der eigenen Prozessnummer (comm_rank)). • Finalisierung (Beenden der Kommunikationsumgebung (finalize), Abbruch des Programms (abort)). • Punkt-zu-Punkt-Kommunikation (blockierende oder nichtblockierende und gepufferte oder ungepufferte Sende- und Empfangsoperationen (send, receive)) . • Kollektive Kommunikation (kollektive Einsammelfunktionen (gather), kollektive Verteilfunktionen (scatter), kollektive Synchronisation (barrier), kollektive Reduktionsoperationen z.B. Fan-in (reduce)).
214
Anhang A. Ein Linux-Cluster als Parallelrechner
• Datentyp en (Grunddatentyp en (char, byte, int, float , double, packed, . . . ), Vektoren (type_vector), Felder (type_contiguous) , indiziert e Felder (type _indexed), Verbiinde (type_struct)). • Fehlerbehandlung (mit Fehlercodes aus MPI-Routinen, Erstellen eigener Fehlerb ehandlungsroutinen (errhandler_create) , Ausgabe von Fehlermeldungen (error_string)) . • Profiling (zu jeder MPI-Routinen gibt es eine zugehorige Profiling-Routine mit gIeichem Namen und vorangestelltem P, die Zeitmarken schreibt) . • Gruppenmanagement, Kommunikatormanagement (Kommunikator erstellen (corom_create), Kommunikator loschen (corom_free), . .. ). • Prozesstopologie (AbbiIdung des Clust ers auf kart esische Topologie (cart _cr eat e,. . . ), AbbiIdung des Clusters auf eine vorgegebene Graph-Topologie (graph_create,. . . )). Auf die durch MPI zur Verfiigung gestellten Funktionen kann hier, wegen deren FiilIe, nicht im EinzeInen eingegangen werden. Das folgende einfache Programm Hallo zeigt die Grundziige der Programmierung. Fiir eine vollstandige Beschreibung des Bibliotheksumfangs sei auf http ://www.mpi-forum . org/docs/docs .ht ml verwiesen. Die wichtigsten MPI-Befehle konnen auch der MPI-Kurzreferenz (Abschnitt A.3.5 auf Seite 220) am Ende dieses Kapitels entnommen werden.
1* ********************** *** Programm Hallo *** ********************** */ #include <stdio .h> #include <mpi.h>
1* --- -- -- --------------------------------- ----- ---
Abbruch des Programmes bei Fehler in MPI-Rout ine
--- -- -- -- - - ----------------------- - - ------- - - --- */ void MPI_Fehler( int error, char *mpi_routine, char *subroutine, i nt rank) { char error_message[MPI_MAX_ERROR_STRING] ; i nt message_length ; printf("Fehler %i in MPI-Rout ine %s in Unterprogramm %s in Prozess %i\n", error, mpi_routine, subroutine, rank) : MPI_Error_string(error, error_message, &message_Iength); printf("MPI Fehlermeldung : %s\n", error_message): MPI_Abort(MPI_COMM_WORLD, 1) ; }
1* -- ----- -----Hauptprogramm
A.3. Programmbibliotheken zur parallelen Programmierung
215
--- - - ------ -- */
int main(int argc, char *ar gv[] ) { int rank, size ; int error ; /* MP1 1nitialisierung */ if «error = MP1_1nit(&argc , &argv» != MP1_SUCCESS) MP1_Fehler(error , "MP1_1nit", "main", -1); MP1_Er r handl er _set (MP1_COMM_WORLD, MP1_ERRORS_RETURN) ; i f «error = MP1_Comm_r ank(MP1_COMM_WORLD, &rank» != MP1_SUCCESS) MP1_Fehler(error , "MP1_Comm_r ank" , "main", rank ); i f «error = MP1_Comm_s i ze (MP1_COMM_WORLD, &size» != MP1_SUCCESS) MP1_Fehler(error, "MP1_Comm_size", "main" , rank) ; if (rank == 0)
pr intf("Wi llkommen auf dem Parallelrechner!\n"); pr intf( "1ch bin Prozess Nr %i von %i.\n",rank,size ) ; i f «error = MP1_Finalize( ») != MP1_SUCCESS) MP1_Fehl er( er r or, "MP1_Final i ze" , "main" , ran k); return 0 ; }
Die Aufgabe des Pr ogrammes Hallo ist es, von Pr ozess 0 die Meldung "Wi llkommen auf dem Parallelreehner" ausgeben zu lassen und auf allen Pr ozessen die eigene Prozessnummer und die Anzahl der insgesamt vorhande nen Prozesse zu dru cken. Dazu wird im Haupt programm main mittels i ni t die Kommun ikationsumgebung initialisiert und mit size die Anzahl der vorhandenen Pr ozesse festgeste llt . Die MPI-Routine rank liefert die eigene Prozessnum mer, mit deren Hilfe P rozess 0 seine Ident it at festst ellen kann und die Begrus ungsmeldung ausgibt. Alle Prozesse geben hiernach die zuvor ermittelten Werte fiir Pr ozessanzahl und eigene Pr ozessnum mer aus und beenden danach die Kommunikationsumgebung. Jede der aufgerufenen MPI-Routin en liefert einen Fehlercode zuriick, der iiberpriift wird. Bei einem Fehlercodewert ungleich MPCSUCCESS wird die Fehlerb ehandlungsrout ine MP1]ehler aufgerufen. Diese gibt die zum Fehlercode geh6rige Fehlermeldung aus und bricht dann das Programm ab , d. h. es beendet alle Prozesse von Hallo. Das Ergebnis, das man erhalt, wenn das P rogramm Hallo mit vier P rozessen ausgefiihrt wird , sieht typischerweise folgenderrnaken aus: 1eh bin Prozess Nr 1eh bin Pro zess Nr Willkommen auf dem 1ch bin Prozess Nr 1eh bin Prozess Nr
2 von 4 . 3 von 4 . Parallelreehner! 0 von 4 . 1 von 4 .
216
Anhang A. Ein Linux-Cluster als Parallelrechner
Da aile Pro zesse auf dem gleichen Terminal schreiben, ist die Reihenfolge der Ausgaben nicht vorhersehbar. Mochte der Benutzer die Ausgabe in einer bestimmten Reihenfolge haben, so muss er dafiir explizit selbst sorgen, indem beispielsweise aile Ausgaben an Prozess 0 gesendet werden und dann von diesem, in der gewtinschten Reihenfolge, ausgeben werden. Ublicherweise ist in einem parallelen Programm Datenaustausch, so genannte Kommunikation, zwischen den einzelnen Prozessen notig. Unter Kommunikation versteht man das Versenden von Nachrichten zwischen den Prozessen. Eine Nachricht best eht aus einer Datenmenge (z.B . Real-, Integerzahlen oder -feldern). Urn eine solche Nachricht zu versenden , sind beim Sender folgende Inform ationen bereitzustellen: • Welcher Prozess soIl die Nachricht empfangen? • Wo ist die Nachricht lokal abgelegt? • Urn welchen Datentyp handelt es sich bei der Nachricht? • Welchen Umfang hat die Nachricht? • Von welcher Art ist die Nachricht? Auf der Empfangerseite ben6tigt man: • Von welchem Prozess soIl die Nachricht empfangen werden? • Wohin soIl die Nachricht geschrieben werden? • Was fiir einen Datentyp sollen die empfangenen Daten haben? • Wieviele Daten sollen empfangen werden? • Von welcher Art ist die zu empfangende Nachricht? Die Realisierung dieser Sende- und Empfangsaufgaben erfolgt mit verschiedenen MPCSend und MPCRecv Routinen. 1m Abschnitt A.3 .5 im Teil "Punkt-zu-P unktKommunikation" kann man sich tiber die verschiedenen Varianten und deren Parameter genauer informieren. Ein einfaches Beispiel fiir ein Programm, das sich der Kommunikationsm6glichkeiten von MPI bedient , stellt das folgende Pr ogramm pipeline dar. Eine Nachricht , die fiber die Tastatur in Prozess 0 eingelesen wird, soil im Rin g verschickt werden. Dazu wird diese von Prozess 0 an seinen rechten Nachbarn gesendet . Danach wart et er auf den Empfang einer Nachricht vorn letzten Proz ess im Kommunikator. Wiihrenddessen empfangen die and eren Prozesse nacheinander die Nachricht von ihrem linken Nachbarn und versenden diese sofort weiter an ihren rechten Nachbarn . Zu beachten ist hierbei, dass bei gedanklicher Anordnung der Prozesse im Ring der rechte Nachbar des letzten Prozesses im Kommunikator wieder Prozess 0 ist . 1st die Nachricht wieder bei Prozess 0 angekommen , wird sie ausgegeben.
A.3. Programmbibli oth eken zur parallelen Programmierung
217
/* ************************* *** Programm pipeline *** ************************* */ #include <stdio.h> #include <mpi .h>
/* ------ ---------------------- --------- ------- ---Abbruch des Programmes bei Fehler in MPI-Routine -------- ------------------------------------- --- */ void MPI_Fehler(int error, char *mpi_routine, char *subroutine , int rank) { char error_message[MPI_MAX_ERROR_STRING); int message_length; printf("Fehler %i in MPI -Routine %s in Unterprogramm %s in Prozess %i\n", error, mpi_routine, subroutine, rank) ; MPI_Error_string(error, error_message, &message_length); printf("MPI Fehlermeldung: %s\n", error_message); MPI_Abort(MPI_COMM_WORLD, 1); }
/* -- --- --- ----Hauptprogramm - -- ------- --- */ int main(int argc, char int procs; int mypid; int leftpid; int rightpid; int length = 100; char buffer[length) ; int error; MPI_Status status;
*argv[)) { /* Anzahl der Prozesse */ /* Eigene Prozessnummer */ /* Prozessnummer des linken Nachbarn */ / * Prozessnummer des rechten Nachbarn */ /* maximale Lange der zu versendenden Nachricht */ / * Speicherplatz fur zu versendende Nachricht */
/* MPI Initialisierung */ if «error = MPI_Init(&argc, &argv)) != MPI_SUCCESS) MPI_Fehler(error, "MPI_Init", "main", -l); MPI_Errhandler_set(MPI _COMM_WORLD, MPI_ERRORS_RETURN); if «error = MPI_Comm_rank(MPI_COMM_WORLD, &mypid))) MPI_Fehler(error, "MPI_Comm_rank", "mai n" , myp id) ; if «error = MPI_Comm_size (MPI_COMM_WORLD, &procs))) MPI_Fehler(error, "MPI_Comm_size", "main" , mypid); /* Auffinden der Nachbarn im Ring */ if (procs <= 2) { printf("Es sind zu wenig Prozessoren vorhanden .\n"); printf("Das Programm wird beendet .\n"); MPI_Abort (MPI_COMM_WORLD , 1);
218
Anhang A. Ein Linux-Cluster als Parallelrechner
}
rightpid = (mypid+l)Xprocs; leftpid = (mypid-l+procs)Xprocs ;
/* Versenden der Nachricht */ (mypid==O) { pr intf("Bitte geben Sie Ihre Nachricht ein: gets(buffer);
if
II);
error = MPI_Send(buffer, length , MPI_CHAR, rightpid, 0, MPI_COMM_WORLD) ; if (error != MPI_SUCCESS) MPI _Fehl er (er r or , "MPCSsend", "main", mypid) ; error = MPI_Recv(&buffer, length, MPI_CHAR, leftpid , 0, MPI_COMM_WORLD, &status); i f (error != MPI_SUCCESS) MPCFehler(error, "MPI _Recv" , "main", mypid); pr i ntf ( "Nachricht i m Ri ng: Xs\n",buffer) ; }
el se { error = MPI_Recv(&buffer, length, MPI_CHAR, leftpid, 0, MPI_COMM_WORLD , &status) ; if (error != MPI_SUCCESS) MPI _Fehler(error, "MPI_Recv", "mai n" , mypid); error = MPI_Send(buffer, l ength , MPI_CHAR, rightpid , 0 , MPI_COMM_WORLD) ; i f (error != MPI_SUCCESS) MPI_Fehler(error, "MPI_Ssend" , "main", mypI d) ; }
if «error = MPI _Fi nalize (») MPI _Fehl er (er r or , "MPI_Fi nalize", "mai n" , mypid) ; return 0 ; }
A .3.2
Die Compiler mpicc, mp iCC und mp if77
Zum Uberset zen von MPI-P rogrammen verwendet man an Stelle des C-Compilers cc den Compiler mpicc , an Stelle des C++-Compilers c++ den Compiler mpiCC und an Stelle des Fort ran77- Compilers £7? den Compiler mpif?? Diese Compiler linken da nn auto matisch die MPI-Bibliothek zum Programm hinzu, so dass kein Hinzubi nden von Hand notig ist . Die Opt ionen, die man diesen Compilern iibergeben kann , sind nah ezu die gleichen wie die der entsprechenden sequent iellen Compiler (etwa - 03 -mpent iumpro zur Optimierung).
A.3. Programmbibliotheken zur parallelen Programmierung
A.3.3
219
Starten und Beenden der Kommunikationsumgebung mit lamboot und lamwi pe
Damit Programme, die mit der LAM-Bibliothek iibersetzt wurden, miteinander kommunizieren konnen, muss fiir sie eine Kommunikationsinfrastruktur zur Verfiigung steh en. Man kann sich dies folgendermasen vorstellen: Ein Brief solI von A nach B befordert werden - das entspricht dem Kommunikationswuns ch eines Prozesses. Die Beforderung erfolgt durch die Post , die die Kommunikationsinfrastruktur darstellt. Das Programm lamboot startet diese Kommunikat ionsinfrastruktur, indem es sich auf jedem Knoten des Parallelrechners einloggt und dort den Damon (ein Programm das im Hintergrund lauft] lamd startet. Welche Knoten zu diesem Parallelrechner gehoren sollen, wird in der Dat ei bhost .def festgelegt. Diese Datei wird vom Benutzer root zentral fiir aIle zur Verfiigung gestellt. # /etc/lam/bhost.def # Syntax: Rechnername Userid
nodeO. cluster.par . com node1 .cluster .par .com node2 . cluster .par. com node3 . cluster.par. com
A.3.4
Starten von parallelen Programmen mit mpirun
Zum Ausfiihren der mit der MPI-Bibliothek iibersetzten Programme dient das Programm mpirun. Mit der Aufrufsyntax mpirun -np Prozessanzahl Programmnamen werden Prozessanzahl Prozesse des Programms Programmnamen auf irgendwelchen Knoten des Parallelr echners gestartet. Die Anzahl der Prozesse muss dab ei nicht zwingend mit der Anzahl der real vorhandenen Prozessoren iibereinstimmen. Beispielsweise kann man einen seriellen Rechner als Entwicklungsumgebung fiir parallele Programmierung verwenden, indem, wie auf einem Parallelrechner, mehrere Prozesse gest artet werden, die auf dem seriellen Rechner jedoch nicht gleichzeitig ablaufen . Auch bei Progr ammen, die in einer Master-Slave-Konstellation arbeiten, bei der der Master nur wenige Ressourcen benotigt, kann auf dem Prozessor des Mast er-Proz esses ein zusatzlicher Slave-Proz ess laufen. In manchen Fall en mochte man gezielter darauf Einfluss nehmen, auf welchen Knoten das Programm zur Ausfiihrung kommt (beispielsweise urn andere Rechenjobs nicht zu behindern) . Dazu kann man wiederum das Programm mpirun, diesmal aber in Verbindun g mit einem so genannt en Maschinenfile, verwenden. Man erzeugt sich eine ausfiihrbare Dat ei Machinefile, z.B. mit dem Inhalt
220
Anhang A. Ein Linux-Cluster als Parallelrechner
# Machinefile nO -np 2 Programm n4 -np 1 Programm nS -np 1 Programm
und verwendet dann die Syntax
mpirun ./Machinefile zum Starten von zwei Prozessen des Programms Programm auf Knot en 0 und von jeweils einem Prozess auf den Knoten 4 und 5. Beachten sollte man hierbei , dass die Ausgab e der Prozesse immer an den Knoten geht, der im Machinefile an erster Stelle steht. Abbildung AA zeigt die durch mpirun . /Machinefile gestarteten Programme und die dur ch lamboot zur Verfiigung gestellte Kommunikationsinfrastruktur.
Abb. A.4: Durch lamboot gestartete Kommunikationsinfrastruktur und durch mpirun gestartete Programme
A.3.5
MPI-Kurzreferenz
1m Folgenden werden die fiir unsere Bediirfnisse wichtigsten MPI-Befehle vorgestellt. Wir beschranken uns auf die bei Programmierung in C verwendete Syntax. Bei der Verwendung von Fortran ist die Syntax geringfiigig geandert, da ein Fehlerindikator ierr vom Typ INTEGER als letzte Variable zusatzli ch auftritt. 1m Gegensatz zu Fortran, wo fast aile MPI-Routinen Unterprogramme sind , sind sie in C Funktion en. Ihr Riickgabewert entspricht dem in der Fortran-Variablenlist e zusatzlich auft retenden Fehlercode ierr. Beispielsweise haben die Aufrufe zur Beendigung der Kommunikationsinfrastruktur in C und Fortran die folgende Form:
C Fortran:
ierr = MPI_Finalize(); CALL MPI_FINALIZE(ierr)
A.3. Programmbibliotheken zur parallelen Programmierung
221
SolIten sich C- und Fortran-Syntax in weiteren Punkten unterscheiden, so werden beide Versionen angegeben.
Initialisieren und Beenden der MPI-Umgebung • int MPI_Init (int*
argc,
chars« argv []
/* in/out */ /» in/out »F);
SUBROUTINE MPI_INIT (ierr) Initialisieren der MPI-Umgebung: Die Variable argc enthalt die Parameteranzahl und argv die Parameter, mit denen das C-Programm aufgerufen wurde. • int MPI_Initialized (int* flag
/* out */) ;
Priifen ob die MPI-Umgebung initialisiert wurde: Das Ergebnis wird in der Variable flag zuriickgeliefert. • int MPI_Comm_size (MPI_Comm comm, int* size
/* in */ /* out */);
Anzahl an Prozessen im Kommunikationsverbund comm: Das Ergebnis steht in der Variable size. • int MPI_Comm_rank (MPI_Comm comm, int* rank
/* in */ /* out */) ;
Eigene Prozessnummer im Kommunikationsverbund comm: Diese Nummer wird in der Variable rank zuriickgeliefert. • int MPI_Finalize (void); Beenden der MPI-Umgebung. • int MPI_Abort (MPI_Comm comm, int error
/* in */ /* in */);
Beenden von allen Prozesse im Kommunikator comm: An das aufrufende Betriebssystem wird der Fehlercode error zuriickgegeben.
Punkt-zu-Punkt-Kommunikation Bei allen folgenden Kommandos befinden sich sendcount zu sendende Daten vom Typ sendtype im Feld sendbuf. Empfangen werden hochstens recvcount Daten vom Typ recvtype im Feld recvbuf. Die Kennzeichnung der Nachricht erfolgt mit tag.
222
Anhang A. Ein Linux-Cluster als Parallelrechner
Blockierende Operationen MPI_Send MPI_Recv MPI_Ssend MPCBsend MPCRsend • int MPI_Send (void* int MPCDatatype int int MPI Comm
sendbuf, sendcount, sendtype, dest, tag, comm
/* /* /* /* /* /*
in in in in in in
*/ */ */ */ */ */) ;
Blockierende Sendeoperation im Standardmodus: Nachdem der blockierende Zustand aufgehob en wurde , kann (muss aber nicht) die Sendeoperation abgeschlossen sein. Der Puffer sendbuf kann ab er auf jeden Fall wieder beschri eben werden. Geschickt wird an den Prozess mit der Prozessnummer dest im Kommunikationsverbund comm. Als Kennzeichnung der Nachricht wird tag verwendet . sendbuf, /* in */ • int MPCSsend (vo id« int sendcount , / * in */ MPI_Datatype sendtype, /* in */ dest, int 1* in *1 int tag, 1* in */ comm MPCComm / * in */) ; Blockierende synchronisierende Sendeoperation: Der blockierende Zust and wird erst aufgehoben, wenn der Empfangsprozess die Daten empfangen ha t. Das Datenfeld sendbuf kann dana ch wieder beschrieben werden. Die verwendet en Parameter sind die gleichen wie bei MPI_Send. sendbuf, /* in */ • int MPI_Bsend (vo i.d« int sendcount, /* in */ MPCDatatype sendtype, 1* in */ dest, int /* in */ tag, int /* in */ comm MPCComm /* in */); Gepufferte Sendeoperation: Die zu sendenden Dat en werden in einen Syst empuffer iibernommen und die P rogrammausfiihrung wird sofort fort gesetzt. Das Feld sendbuf darf wieder beschrieben werden. Die verwendete n Parameter sind die gleichen wie bei MPI_Send. Urn gepufferte Sendeoperationen verwenden zu konnen, muss der Benutzer dem System zuvor Sendepuffer zur Verfiigung gestellt haben. Die Verwalt ung von Sendepuffer erfolgt tiber die Kommandos MPI_Buffer_attach und MPI_Buffer_detach.
A.3. Programmbibliotheken zur parallelen Programmierung
• i nt MPI_Rsend (vo id* i nt MPI _Datatype int i nt MPI Corom
sendbuf, sendcount, sendtype, dest , t ag, corom
1* 1* 1* 1* 1* 1*
223
in *1 in *1 i n *1 in *1 i n *1 in */) ;
Send en bei vorliegendem Empfangswunsch: Die Daten aus sendbuf werde n sofort an das Netzwerk gegeben . Liegt dort von Prozess dest aus dem Kommu nikat ionsverbund corom bereits ein Empfangswunsch vor, so lauft die Ubertragung normal ab o Liegt abe r kein Em pfangswunsch vor, so ist der Ausgang der Routine un gewiss. Denkbar ist z.B. , dass die Nachricht verworfen wird oder eine Fehlerm eldun g zuriickgegeben wird. • int MPI_Recv (void* int MPI _Datatype i nt int MPI Corom MPI _St at us*
recvbuf, 1* recvcount , 1* recvtype, 1* 6ourC6. Itag , 1* corom, 1* status 1*
out in in
*1 *1 *1
in
·1
in in out
*1 *1 */ ) ;
Blockierende Empfangsoperation: Empfangen wird vom P rozess mit der Prozessnum mer source im Kommunikationsverbund comm. Als QueUe ist auch MPI_ANY_SOURCE zulassig. Als Kennzeichnung der Nachricht wird tag verwendet . Dabei kan n auch MPI_ANY_TAG als Kennzeichnung verwendet werden. Der Status des Dat enempfangs wird in status abgel egt .
I MPI _s endr e cv I MPLsendrecv_r epl a ce • i nt MPI_sendrecv (void* int MPI_Datatype int int void* int MPI_Datatype i nt i nt MPI _Comm MPI_Status*
sendbuf, sendcount, sendtype, dest, sendtag, recvbuf , recvcount, recvtype , source, recvtag, comm , status
1* 1* 1* 1* 1* 1* 1* 1* 1* 1* 1* 1*
in in in in in out in in in in in out
*1 *1 *1 *1 *1 *1 *1 *1 *1 *1 *1 */) ;
Blockierende Send e- und Empfangsoperation: Es werden gleichzeitig Daten vom Prozess so urce empfangen und Daten an den P rozess dest geschickt , wobei sich beide Prozesse im Kommunikationsverbund comm befinden. Kennzeichnungen fiir die jeweiligen Nachrichten lassen sich in den entsprechenden
Anhang A. Ein Linux-Cluster als Parallelrechner
224
tag-Variablen ablegen. Der Status des Datenempfangs ist in status dokumentiert. • int MPI_sendrecv_replace (void* int MPI_Datatype int int int int MPI_Corom MPI_Status*
but, count, type, dest, sendtag, source, recvtag, corom, status
/* /* /* /* /* /* /* /* /*
in/out in in in in in in in out
*/ */ */ */ */ */ */ */ */);
Blockierende Sende- und Empfangsoperation mit Ersetzen: Wie in MPI_sendrecv liegt eine blockierende Sende- und Empfangsoperation vor, aber die empfangenen Daten ersetzen die gesendeten Daten im Feld buf.
I MPLBufter_attach I MPLBufter_detach I • int MPI_Butter_attach (void* but, int count
/* in */ /* in */) ;
Bereitstellen von Sendepuffer: Im Feld buf werden dem System count Bytes als Puffer fiir gepufferte Sendeoperationen zur Verfiigung gesteBt. • int MPI_Butter_detach (void* but, int* count
/* out */ /* out */);}\\
Freigabe von Sendepuffer: Das Feld but von count Bytes wird erst dann freigegeben, wenn alle Sendeoperationen , die dieses Feld benotigen, zu Ende gekommen sind.
Nichtblockierende Operationen
I MPLIsend I MPI_Irecv I • int MPI_Isend (void* buf, int count, MPI_Datatype int int MPI_Corom MPI_Request*
datatype, dest, tag, corom, request
/* /* /* /* /* /* /*
in in in in in in out
*/ */ */ */ */ */ */) ;
Nichtblockierende Sendeoperation im Standardmodus: Es werden die gleichen Parameter wie bei MPLSend verwendet. Mit dem Parameter request kann mit Hilfe der Operationen MPLWait und MPLTest festgestellt werden, ob das Versenden beendet ist.
A.3. Programmbibliotheken zur parallelen Programmierung
• int MPI_Irecv (void* buf, count, int MPCDatatype int int MPCComm MPCRequest*
datatype, source, tag, comm, request
/* /* /* /* /* /* /*
225
out in in in in in out
*/ */ */ */ */ */ */) ;
Nichtblockierende Empfangsoperation: Die Parameter sind die gleichen wie bei MPI_Recv. Mit dem Parameter request kann mit Hilfe der Operationen MPI_Wait und MPCTest festgestellt werden, ob der Empfang beendet ist . MPCWait MPI_Waitall MPCWaitany MPCWaitsome
MPCTest MPCTestall MPCTestany MPCTestsome
• int MPI_Wait (MPI_Request* request, MPI_Status* status
/* in/out */ /* out *f) ;
Warten auf Beenden der Dateniibertragung: Der Programmablauf wird fortgesetzt, wenn die mit request verbundene nichtblockierende MPI-Operation beendct worden ist . Die Variable status enthalt dann den Status der Dateniibertragung. count, • int MPI_Waitall (int MPI_Request requests[], MPI_Status statuses[]
/* in
*/
/* in/out */ /* out *f) ;
Warten auf Beenden von count Dateniibertragungen: Mit dem Feld requests [] werden die nichtblockierenden MPI-Operationen identifiziert. Wenn aile Operationen zu Ende sind , wird die Programmausfiihrung fortgesetzt und im Feld statuses [] ist der Status der jeweiligen Dateniibertragung abgelegt. • int MPI_Waitany (mt count, MPI_Request requests [] , index, int* MPCStatus* status
/* /* /* /*
in in/out out out
*/ */ */ */) ;
Warten auf Beendigung genau einer von count Dateniibertragungen: Mit dem Feld requests [] werden die nichtblockierenden MPI-Operationen identifiziert . Wenn eine Operation zu Ende ist , wird die Programmausfiihrung fortgesetzt, index enthalt dann den Wert der zu Ende gekommenen Ubertragung und status deren Dateniibertragungsstatus. Der Eintrag requests [index] wird entweder auf MPI_REQUESLNULL gesetzt oder inaktiv gemacht.
226
Anhang A. Ein Linux-Cluster als Parallelrechner
• int MPI_Waitsome (int count, MPCRequest int* int MPCStatus
requests [] , comp_count, indices [] , statuses []
/* /* /* /* /*
in in/out out out out
*/ */ */ */ */);
Warten auf Beendigung einiger von count Dateniibertr agungen: Mit dem Feld requests [] werden die nichtblockierenden MPI-Op erati onen identifiziert . Wenn mindestens eine der Operationen zu Ende ist , wird die Programmausfiihrung fortgesetzt. Die Anzahl der zu Ende gekommenen Dateniibertragungen findet sich in comp_count. 1m Feld i ndi ces [] finden sich ihre Indizes und das Feld statuses [] ent halt an den entsp rechenden StelIen deren Stat us. • int MPI_Test (MPI_Request* request, int* flag , MPI_Status* status
/* in/out */ /* out */ /* out */);
Testen auf Beendigung der Dat eniibertragung: Mit request wird die nichtblockierende MPI-Operat ion identifiziert. Wenn die Ubertragungsoperation zu Ende ist, so wird in flag ein Wert ungleich 0 zuriickgegeben und status enthalt dann den Status der Dateniibertragung. Wenn die Operat ion noch nicht zu End e ist , so wird in flag der Wert 0 zuriickgegeben.
• int
MPCTestall (int count, MPI_Request requests [] , flag , i nt* MPCStatus statuses []
/* /* /* /*
in i n/ out out out
*/ */ */ */) ;
Testen auf Beendigung alIer count Dat eniibertragungen: Mit dem Feld requests [] werden die nichtblockierenden MPI-Operati onen identifiziert . Wenn aIle Operationen zu Ende sind, so wird in flag ein Wert ungleich 0 zuriickgegeben und das Feld statuses [] enthalt dann den Stat us alIer Dateniibertragungen. Wenn die Operationen noch nicht zu Ende sind, so wird in flag der Wert 0 zuriickgegeben. • int MPI_Testany (int count, MPI _Request int* int* MPI_Status*
requests [] , index, flag, statuses
/* /* /* /* /*
in in/out out out out
*/ */ */ */ */) ;
Testen auf Beendigung einer von count Dateniibertragungen: Mit dem Feld requests [] werden die nichtblockierenden MPI-Op erati onen identifiziert . Wenn eine Operation zu Ende gekommen ist , so wird in flag ein Wert ungleich 0 zuriickgegeben und index enthalt deren Index, status deren Status. Der Eintrag requests [index] wird entweder auf MPI_REQUESLNULL gesetzt oder una ktiv gemacht . Wenn keine Operation zu Ende gekommen ist, so wird in flag der Wert 0 zuriickgegeben.
A.3. Programmbiblioth eken zur parallelen Programmierung
• int MPCTest some (tnt count, MP CRequest int * i nt MPI_Status
227
/* /* /* /* /*
requests [] , comp_count, indices [] , statuses []
in i n/ out out out out
*/ */ */ */ */ ) ;
Testen auf Beendigung einiger von count Dateniibertragungen: Mit dem Feld requests [] werden die nichtblockierenden MPl-Operationen identifiziert. Die Anzahl der zu Ende gekommenen Dateniibertragungen steht in comp_count. Im Feld indi ces [] finden sich ihre Indizes und das Feld stat uses [] enthalt an den entsprechenen Stellen deren Status.
Kollektive Operationen Bei allen folgenden Kommandos befinden sich sendcount zu sendende Daten vom Typ sendtype im Feld sendbuf . Empfangen werden hochstens recvcount Daten von jedem Prozess vom Typ recvtype im Feld recvbuf . • int MPI_Barrier (MPI_ Comm comm
/* in */ );
Synchronisation: Die Programmausfiihrung aller im Kommunikationsverbund comm befindlichen Pr ozesse geht erst dan n weiter, wenn alle P rozesse einen Aufruf von MPI_Barrier abgesetzt haben, d.h. diese Stelle im Programm erreicht haben. • int MPI _Bcast (void* buf , int count , MPCDat atype type, i nt roo t , comm MPC Comm
/ * i n/ out /* i n / * in 1* in 1* i n
*/ */ */
*1 */) ;
Versenden einer Nachricht an alle: Von Prozess root wird die Nachricht buf der Lange count , die vom Datentyp type ist , an alle anderen Pr ozesse im Kommunikati onsverbund comm gesendet . root
0
2
• i nt MP CGather (voi d* i nt MPCDatatype void*
0
sendbuf, sendcount, sendtype, recvbuf,
/* /* /* /*
2
in in in out
*/ */ */ */
228
Anhang A. Ein Linux-Cluster als Parallelrechner
int MPI_Datatype int MPI_Comm
recvcount, recvtype, root, comm
1* 1* 1* 1*
*1 *1 *1 */) ;
in in in in
Einsammeln: Bei allen sich im Kommunikationsverbund comm befindenden Prozessen werden die in sendbuf liegenden Dat en eingesamm elt und im Pro zess root im Feld recvbuf abgelegt . root
0
2
0
• int MPI_Allgather (void* int MPCDatatype void* int MPCDatatype MPCComm
2
1* 1* 1* 1* 1* 1* 1*
sendbuf, sendcount, sendtype, recvbuf , r ecvcount , recvtype, comm
in in in out in in in
*1 *1 *1 *1 *1 *1 */);
Einsamm eln und Verteilen: Bei allen sich im Kommunikationsverbund comm befindenden Prozessen werden die in sendbuf liegenden Daten eingesammelt und in das Feld recvbuf in allen Prozessen im Kommun ikationsverbund comm geschrieben.
@@ 0
~.,-",g.
IillI£l
2
0
• int MPI_Scatter (void* int MPI_Datatype void* int MPI_Datatype int MPI_Comm
sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype , root, comm
~@ ABC
IillI£l 2
1* 1* /* /* /* /*
1* 1*
in in in out in in in in
*1 */ */ */ */ */
*1 */) ;
Auft eilen: Die Dat en, die sich in sendbuf im P rozess root befinden, werden der Reihe nach auf die Empfangspuffer recvbuf der Prozesse im Kommunikationsverbund comm aufgeteilt .
A.3. Programmbibliotheken zur parallelen Programmierung
229
root
0
2
0
• int MPLAlltoall (void* int MPLDatatype void* int MPI_Datatype MPLCorom
2
1* 1* 1* 1* 1* 1* 1*
sendbuf, sendcount, sendtype, recvbuf, recvcount, recvtype, corom
in *1 i n *1 in *1 out *1 in *1 in *1 in */) ;
Einsamm eln und Aufteilen: Aile Dat en aus den Feldern sendbuf werden auf einem virtuellen Prozess gesammelt und dann, wie mit der Routine MPI_Scatter, auf die Empfangspuffer recvbuf der Proz esse im Kommunikat ionsverbund corom aufgeteilt .
~~ 0
..
~"'-"" ~ "~ GHI
ITO
0EEl 0
2
• int MPLReduce (void* void* int MPLDatatype MPLOp i nt MPI Carom
ABC
operand, result, count, datatype, op , root, carom
1* 1* 1* 1* 1* 1* 1*
~~ ~
@ElI) 2
in out in in in in in
*1 *1 *1 *1 *1 *1 */) ;
Globale Reduktionsoperat ion: Die Opera tion op wird auf die Dat en in den Feldern operand komp onentenweise angewandt und das Ergebnis im Feld result in Pro zess root abgelegt . Vordefinierte Operationen werden ab Seite 234 vorgeste llt. root
o
2
o
2
230
Anhang A. Ein Linux-Cluster als Parallelrechner
• int MPI_Allreduce (void* operand, void* result, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm
/* /* /* /* /* /*
in out in in in in
*/ */ */ */ */ */);
Globale Reduktionsoperation und Ergebnisverteilung: Verhalt sich wie MPI-Reduce mit dem Unterschied, dass allen Prozessen im Kommunikator comm das Ergebnis in result zur Verfiigung gestellt wird .
~ ~
o
MPI-Al l redUC~ ~
2
CO o
2
MPI Datatype Im Folgenden werden die wichtigsten MPl-Datentypen zur Charakterisierung des Datentyps der zu iibertragenden Daten aufgelistet. MPl-Datentypen fiir Programmierung in C sind : • MPI_CHAR fiir den C-Datentyp signed char. • MPLUNSIGNED_CHAR fiir den C-Datentyp unsigned char. • MPI_SHORT fiir den C-Datentyp signed short int o • MPI_UNSIGNED_SHORT fiir den C-Datentyp unsigned short. • MPLINT fiir den C-Datentyp signed into • MPI_UNSIGNED fiir den C-Datentyp unsigned into • MPLLONG fiir den C-Datentyp signed long int o • MPI_UNSIGNED_LONG fiir den C-Datentyp unsigned long into • MPI]LOAT fiir den C-Datentyp float . • MPLDOUBLE fiir den C-Datentyp double. • MPLLONG_DOUBLE fiir den C-Datentyp long double. MPl-Datentypen fiir Programmierung in Fortran sind :
A.3. Programmbibliotheken zur par allelen Programmierung
231
• MPCLOGICAL fiir den Fortran-Datentyp LOGICAL. • MPCCHARACTER fiir den Fortran-Datentyp CHARACTER. • MPCINTEGER fiir den Fortran-Datentyp INTEGER. • MPI_REAL fiir den Fortran-Datentyp REAL. • MPCDOUBLE_PRECISION fiir den Fortran-Datentyp DOUBLE PRECISION. • MPI_COMPLEX fiir den Fortran-Datentyp COMPLEX. Datentypen ohne Entsprechungen in den Programmiersprachen sind: • MPCBYTE fiir einen Datentyp, der genau ein Byte Platz im Speicher belegt. • MPCPACKED fiir einen Datentyp, der aus mehreren unterschiedlichen Daten, die von unterschiedlichem Typ sein konnen und nicht zwingendermasen zusammenhangend im Speicher vorliegen miissen. Mit dem Befehl MPI_Pack konnen dazu Daten zusammengepackt und mit dem Befehl MPI_Unpack wieder auseinandergepackt werden . Befehle zum Erzeugen eigener Datentypen: • int MPCPack (void* int MPI_Datatype void* int int* MPI_Comm
inbuf, incount, datatype , pack_buf, pack_buCsize, position, comm
1* 1* 1* 1* 1* 1* 1*
in *1 in *1 in *1 out *1 in *1 in/out *1 in */) ;
Zusammenpacken von Daten unterschiedlichen Datentyps zum gemeinsamen Versenden: In inbuf befinden sich incount Daten vom Datentyp datatype , die in das Feld pack_buf mit der Gr6f1,e pack_buCsize umkopiert werden. Die Variable position ent ha lt dabei die erste freie Speicherposition im Feld pack_buf. Die Variable position wird durch MPI_Pack automatisch urn die Anzahl belegter Speicherstellen erhoht .
• i nt
MPCUnpack (void* int int* void* int MPCDatatype MPI_Comm
pack_buf, pack_buCsize, position, outbuf, outcount, datatype, comm
1* 1* 1* 1* 1* 1* 1*
in *1 in *1 in/out *1 out *1 in *1 in *1 in */) ;
232
Anhang A. Ein Linux-Cluster als Parallelrechner
Entpacken von Daten unterschiedlichen Datentyps, die gemeinsam verschickt wurden : Im Feld pack_buf mit der Gro~e pack_buf_size befinden sich die zusammengepackten Daten. Es werden outcount Daten vom Datentyp datatype in outbuf abgelegt . Die Daten, die entpackt werden sollen, befinden sich im Feld pack_buf an der Position position. Die Variable position wird von MPI_Unpack automatisch erhoht, so dass sie nach Aufruf der Routine auf die nachsten Daten in pack_buf zeigt.
• int
MPI_Pack_size (int incount, MPI_Datatype datatype, MPCComm comm, size int*
/* /* /* /*
in in in out
*/ */ */ */);
Ermittlung des Speicherbedarfs fiir zusammengepackte Daten: Es wird der Speicherbedarf, den incount Daten vom Datentyp datatype in einem zusammengepackten Feld belegen wiirden, ermittelt und in size zuriickgegeben. location, • int MPI_Address (void* MPI_Aint* address
/* in */ /* out */);
Bestimmen der Speicheradresse: In address wird die MPI_Aint-Adresse des Pointers location zuriickgegeben. Diese Routine ist insbesondere dann hilfreich, wenn die Speicherverschiebungen zwischen einzelnen Komponenten eines Verbundes zu bestimmen sind. • int MPI_Type_size (MPI_Datatype datatype, int* size
/* in */ /* out */);
Bestimmen des Speicherbedarfs eines Datentyps: Die Variable size enthalt nach Aufruf der Routine den vom Datentyp datatype benotigten Speicherplatz in Bytes. • int MPI_Type_struct (int int MPI_Aint MPI_Datatype MPI_Datatype*
count, blocklengths [] , displacements[], datatypes [] , newdatatype
/* /* /* /* /*
in in in in out
*/ */ */ */ */) ;
Erstellen eines Verbunddatentyps: In der Variable newdatatype wird der neue Verbunddatentyp zuriickgegeben. Dabei beschreiben die Eintrage des Feldes displacements die Speicherverschiebungen der einzelnen Komponenten des Verbunds in Bezug zur ersten Komponente, das Feld blocklengths die AnzahI von Elementen dieser Komponenten und das Feld datatypes deren Datentypen.
233
A.3. Prog rammbibliotheken zur parallelen Programmierung
MPC INT
.. b locklengths[O )=) displacements [O] =O (Byt e s ) di splac emen t s [ l] =12 (Bytes )
.blocklengths[ l) =l
Ii
..
b lock l engths[ 2 1=8
..
.. ..
d isplacements [2 ] =20 (By tes )
• int MPI_Type_contigous (int count, MPI_Datatype datatype, MPI_Datatype* newdatatype
/* in */ /* in */ /* out */) ;
Erstellen eines Datentyps fiir zusammenhangende Daten: In der Variable newdatatype wird der neue Datentyp zuriickgegeben. Die Variable count beschreibt , aus wievielen Elementen die zusammenhangenden Daten bestehen , und datatype gibt den Datentyp der Elemente an.
--- - - - -- - -- - -- - - - - - - - - - - - - - - - - - count=7
• int MPI_Type_vector (int int int MPI_Datatype MPI_Datatype*
count, blocklength, stride, datatype , newdatatype
/* /* /* /* /*
in in in in out
*/ */ */ */ */);
Erstellen eines Vektordatentyps: In der Variable newdatatype wird der neue Vektordatentyp zuriickgegeben. Die Variable count beschreibt , aus wievielen Komponenten der Vektor besteht. Die Variable blocklength bestimmt die Anzahl von Elementen jeder Komponente, stride den Versatz zwischen zwei Komponenten (in Anzahl von Elementen) und datatype den Dat entyp eines Elementes.
..
.
s t r i de
..
..
b lockl ength
b locklength
. .. s t r ide
• int MPI _Type_indexed (int int int
..
b locklength
.. ..
.
stride
count, blocklengths[], displacements [] ,
/* in /* in /* in
*/ */
*1
234
Anhang A. Ein Linux-Cluster als Parallelrechner
MPI_Datatype datatype, MPI_Datatype* newdatatype
/* in */ /* out */);
Erstellen eines indizierten Vektordatentyps: In der Variable newdatatype wird der neue indizierte Vektordatentyp zuriickgegeben. Dabei beschreiben die Eintrage des Feldes displacements den Versatz der einzelnen Komponenten des Vektors in Bezug zur ersten Komponente (in Anzahl von Elementen), das Feld blocklengths die Anzahl von Element en dieser Komponenten und datatype deren Datentyp.
blocklengthslOl =3
blocklengths[11 =5
blocklengthl2l=7
I
displacements 101 =0 I
•
d isplacements 111=8 I
.,
d i sp lacements 121=19
• int MPI_Type_commit (MPI_Datatype *newdatatype
/* in/out */);
Bekanntmachen eines neuen Datentyps: Bevor ein mit MPI_Type_struct, MPI _Type_vector oder MPCType_indexed erzeugt er Datentyp newdatatype verwendet werden kann, muss er dem MPI-System bekannt gemacht werden. • int MPI_Type_free (MPI_Datatype *newdatatype
/* in/out */);
Loschen eines neuen Datentyps: Der Speicherplatz, der fiir die Beschreibung des Datentypes newdatatatype verwendet wurde , wird wieder freigegeben.
MPI Op Im Folgenden findet man einige in MPI vordefinierte Operationen fiir die Reduktionsoperationen MPI_Reduce bzw. MPI_Allreduce: • MPI_MAX fiir die globale Maximumbildung. • MPCMIN fiir die globale Minimumbildung. • MPI_MAXLOC fiir die globale Maximumbildung und das Find en des Ort es, an dem das Maximum vorliegt. • MPCMINLOC fiir die globale Minimumbildung und das Finden des Ortes, an dem das Minimum vorliegt. • MPCSUM fiir die globale Summation.
A.3. Programmbibliotheken zur parallelen Programmierung
235
• MPI_PROD fiir die globale Produktbildung. • MPCLAND fiir die globale logische und-Operation. • MPI_LOR fiir die globale logische oder-Operation. • MPI_LXOR fiir die globale logische exklusiv-oder-Operation. • MPI_BAND fiir die globale bitweise und-Operation. • MPCBOR fiir die globale bitweise oder-Operation. • MPI_BXOR fur die globale bitweise exklusiv-oder-Operation. Mit den folgenden Routinen kann man eigene Operationen erzeugen, die dann in den Reduktionsoperationen MPCReduce bzw. MPCAllreduce verwendet werden konnen : •
typedef void MPI_User_function void *invec, void *inoutvec, int *len, MPI_Datatype *datatype) Form einer benutzerdefinierten Funktion urn mit MPCOp_create daraus einen benutzerdefinierten Operator fiir die MPI-Reduktionsoperationen zu erzeugen.
• int MPI_Op_create (MPI_User_function* function, int commute, MPI_Op* operator
/* in /* in
*/ */
/* out */);
Erzeugen eines benutzerdefinierten MPI-Operators: Die durch function beschriebene Operation wird den MPI-Reduktionsoperationen als Operator operator zur Verfiigung geste11t. Wenn die Operation kommutativ ist, sollte die Variable commute auf true gesetzt werden. • int MPI_Op_free (MPI_Op* operator
/* in/out */);
Freigeben eines benutzerdefinierten MPI-Operators: Die Verbindung zwischen benutzerdefinierter Funktion und operator wird aufgehoben, so dass operator wieder eine andere Funktion zugewiesen werden kann .
MPI Comm Im Folgenden findet man MPI-Routinen, Kommunikatoren ermi:iglichen:
die
den
Umgang
mit
MP1-
236
Anhang A. Ein Linux-Cluster als Parallelrechner
• MPI_COMM_WORLD Kommunikator, in dem sich aIle beim Programmstart vorhandenen Prozesse befinden. Dieser kann genutzt werden urn eine Kommunikation von jedem Prozess mit jedem anderen zu ermoglichen oder urn durch Aufteilung kleinere Kommunikatoren zu schaffen.
•
int MPI_Corom_split (MPLCorom int int MPLCorom*
corom, split_key. rank_key, new_corom
/* /* /* /*
in in in out
*/ */ */ */) ;
Aufteilen eines Kommunikators: Der Kommunikator comm wird in disjunkte Teilmengen aufgeteilt. AIle Prozesse mit dem gleichen Wert split_key kommen in den gemein samen Kommunikator new_corom. Den Rang innerhalb des neuen Kommunikators kann man mit rank_key festlegen . MPI_Corom_split ist eine globale Op eration, d. h. aIle Prozesse innerhalb des Kommunikators comm miissen die Operation aufrufen. • int MPI_Corom_free (MPI_Corom* corom
/* in/out */);
Freigeben eines Kommunikators: Der Kommunikator comm wird freigegeben , sod ass er beispi elsweise in der Op eration MPLCorom_split ern eut verwendet werden kann .
Fehlerbehandlung • MPLSUCCESS Riickgab ewert von MPI-Komma ndos bei erfolgreicher Durchfiihrung. • int MPI_Error_string (int error, char error_message[]. int* message_length
/* in */ /* out */ /* out */);
Fehlerm eldung: In message wird eine Fehlermeldung message_length zum Fehlercode error zuriickgeliefert.
der
Lange
• MPI_MAX_ERROR_STRING Konstante, die die maximale Zeichenkettenlange einer Fehlermeldung angibt.
Zeitmessung und Zeitprotokollierung • double MPI_Wtime(); Zeitmessung : Die Zeit in Sekunden, die seit einem vom Syst em festgelegten festen Zeitpunkt vergan gen ist , wird zuriickgeliefert.
237
A.3. Programmbibliotheken zur parallelen Programmierung
• double MPI_Wtick(); Genauigkeit der Zeitmessung: Die kleinste mit MPLWtime messbare Zeit in Sekunden wird zuriickgegeben. • int MPI_Pcontrol(const int level,
1*
in
*1 );
Setzen der Stufe der Zeit-Protokollierung fiir alle MPI-Funktionen, die an Stelle von MPI mit PMPI beginnen (Profiling Routines) .
Status der Dateniibertragung Alle MPI-Empfangsoperationen liefern einen Datenverbund vom Typ MPLStatus zuriick, der genutzt werden kann, urn Informationen iiber die Dateniibertragung zu erhalten: • typedef struct { int MPI_SOURCE; int MPLTAG; int MPI_ERROR; } MPLStatus Die Datenstruktur MPI_Status liefert Informationen iiber einen Datenempfang : MPLSOURCE enthalt die Prozessnummer des Senders, MPI_TAG die Kennzeichnung, die der Sender gesetzt hat. MPI_ERROR enthalt einen Fehlercode fiir die Dateniibertragung. • int MPI_Get_count (MPI_Status* status, MPI_Datatype datatype, int* count
1* 1* 1*
in *1 in *1 out */);
Abfrage der GroBe der iibertragenen Nachricht: In count wird die Anzahl der empfangenen Datenelemente vom Datentyp datatype der durch status gekennzeichneten Dateniibertragung zuriickgegeben.
Literaturverzeichnis [1] Atkinson, K. E., The numerical solution of Fredholm integral equations of the second kind, Preprint, Iowa City, 1994. [2] Axelsson, 0., Iterative solution m ethods, Cambridge University Press, Cambridge, 1996. [3] Barnard, S. T., Simon, H. D., A fast multilevel implementation of recursive spectral bisection, Proceedings of the Sixth SIAM Conference on Parallel Processing for Scientific Computing, Philadelphia, 711-718, 1993. [4] Barret, R., Berry, M., Chan , T . F ., Demmel, J., Donato, J., Dongarra, J., Eijkhout, V., Pozo, R., Romine, Ch., Vorst, H.v.d., Templates for the solution of linear systems: Building blocks for iterative methods , SIAM, Philadelphia, 1994. [5] Bertsekas, D. P., Tsitsiklis, J. N., Parallel and distr ibuted computation, PrenticeHall, Inc., Englewood Cliffs, 1989. [6] Briggs, W. L., A multigrid tutorial, SIAM, Philadelphia, 1987. [7] MacDonald, N., Minty, K, Harding, T ., Brown, S., Writing message-pas sing parallel programms with MPI, Course Notes, Edinburgh Parallel Computing Cent er, University of Edinburgh, 1995. Erhaltlich von: http://www.epcc .ed.ac.uk/epcc-tec/documents/coursemat .html [8] Dongarra, J. J., Sidani, M., A parallel algorithm for the non-symmetric eigenvalue problem, Technical Report CS-91-137, University of Tennessee and Oak Ridge National Laboratory, 1991. Available at : http://www . cs. utk. edurlibrary 11991 . html [9] Elsner , U., Graph partitioning - A survey, Preprint SFB393/97-27, Technische Universitat Chemnitz, Sonderforschungsbereich 393, Chemnitz, 1997. [101 Fiedler, M., A property of eigenvectors of nonnegative symmetric matrices and its application to graph theory, Czech. Math. J. 25 (100), Praha, 619-633, 1975. [111 Frommer, A., Li5sung linearer Gleichungssyst em e auf Parallelrechn ern, Vieweg Verlag, Braunschweig, 1990.
240
LITERATURVERZEICHNIS
[121 Frommer, A., Vorlesungsmanu skript , Wuppertal, 2001. [13] Golub , G. H., Van Loan, Ch. F., Mat rix computations , The Johns Hopkins University Press , Baltimore, 2nd edit ion, 1989. [141 Hackbusch, W. , Mult i-grid methods and applications Springer, Berlin, 1985. 115] Hackbusch, W. , Integralgleichungen - Theorie und Num erik, B. G. Teubner, Stuttgart , 1989. [16] Hestenes, M. R., Stiefel, E., Methods of conjugate gradients for solving linear systems, J. Res. Nat. Bur. Stand. 49, Washington DC, 409-436, 1952. [17] Heuser, H., Funktionalanalysis, B. G. Teubner, Stuttgart, 1992. [18] Karypis, G., Kumar, V., MeTiS: Unstructured graph partitioning and sparse matrix ordering system, University of Minnesota , Minneapolis , 1995. [19] Karypis , G., Kumar, V., MeTiS: A soft ware package for partitioning unstructured graphs, partitioning m eshes and computing fill-reducing orderings of sparse matrices, University of Minnesota, Minneapolis, 1998. [20] Kernighan, B. W., Lin, S., An EjJicent Heuristic Procedure for Partitioning Graphs, Th e Bell System Technical Journal, 1970. [211 Kirch, 0. , Linu x network administrator's guide, O'Reilly, Beijing, 2nd editit ion, 2000. Erhaltlich von: http ://www. linuxdoc . org [221 Message Passing Interface Forum , MPI: A messag e-passing interf ace standard, University of Tennessee, Knoxville, version 1.1. Jun e 12, 1995. Erhiiltlich von: http ://www.mpi-forum . org 123] Message Passing Interface Forum, MPI-2: Extensions to the m essage-passing interface, University of Tennessee, Knoxville, version 2.0. July 18, 1997. Erhiiltlich von: http://www.mpi-forum. org 124] Ortega, J. M., Num erical analysis: A second course, Academic Press , New York and London , 1972. 125] Ortega, J . M., Matrix theory: A second course, Plenum Press, New York, 1987. /26J Ortega, J. M., Introdu ction to parallel and vector solution of linear system s, Plenum Press, New York, 1988. [27J Pacheco, P. S., Parallel programmi ng with MPI, Morgan Kaufmann Publishers, Inc., San Francicso, 1997.
LITERATURVERZEICHNIS
241
[28] Pourzandi, M., Tourancheau , B., A parallel performance study of jacobi-lik e eigenvalu e solution , Technical Report CS-94-226, Ecole Normale Superieure de Lyon and University of Tennessee, 1994. Erhiiltlich von: http://www . cs . utk . edu/ r l ibrary /1994. html [29] Rauber, T ., Riinger, G., Parollele und verteilte Programmierung , Springer, Berlin, 2000. [30] Saad, Y., Iterative methods for sparse lin ear syst ems , PWS publishing company, Boston, 1996. [31] Sanders, P., Wosch, Th., Parall ele Programmierung mit MPI - ein Praktikum, Logos Verlag, Berlin, 1997. [32] Schweizerhof, K., Guilloteau, 1., Vorlesungsmanuskript, Karlsruhe, 2000. [33] Shewchuk, J. R , Triangl e: Engineering a 2D quality m esh generator and delaunay triangulator, Applied Computational Geometry: Toward s Geometric Engineering , Lecture Notes in Computer Science 1148, Springer-Verlag , 1996. [34] Stoer, J. , Num erische Mathematik 1, Springer Verlag, Berlin , 8. neubearb. und erw. Auflage, 1999. [35] Stoer, J., Bulirsch , R , Num erische Mathematik 2, Springer Verlag , Berlin , 4. neub earb. und erw. Auflage, 2000. [36] Trottenberg , U., Oost erlee, C., Schuller, A., Multig rid, Academic Press, London , 2001. [37] Varga , R S., Mat rix iterative analysis, Springer, Berlin , 2nd edition, 2000. 138] Wirz enius, L., Oja , J., Th e Linux system administrators' Guide, 1999. Erhaltlich von: http://www .linuxdoc .org [39] Zhu, J., Solving partial differential equations on parallel computers, World Scientific, Singapore, 1994.
Stichwortverzeichnis 5-Punkt-Differenzenstern, 19 ADI-Verfahren , 32 Parallelisierung, 44 sequentielles, 35 Adjazenzmatrix, 54 alternating direction implicit method, siehe ADI-Verfahren Amdahl - Gesetz von, 10 Amdahl, Gesetz von, 9 Anfangsbedingung, 17 Approxmiation der Zeitableitung, 35 Bandbreite, 149 Benachbarte Knoten, 51 Bisektionsverfahren, 130 Blockkomponenten-Aufteilung, 156 Blockspalten-Aufteilung, 153, 155 Blockzeilen-Aufteilung, 154, 155 Boundary Volume Effect, 113 CG- Verfahren, 61 Algorithmus, 66 Algorithmus, paralleler, 89 Algorithmus, vorkonditionierter, 73 Konjugierte Suchrichtungen, 64 Minimierung eines Funktionals, 61 Parallelisierung, 87 Praktikumsaufgabe, 182 Vorkonditionierung, 69 Zusammenhang zum Caus-SeidelVerfahren, 63 Cluster, 197 coarse grid correction, siehe Grobgitterkorrektur compressed column storage (CCS), 51
Datenparallelitat, 12
Deflation, 137 Differentialgleichung, 17 Differenzenstern, 19 Differenzenverfahren, explizites, 35 Dirichlet-Randbedingungen, 18 distributed memory, 2 Divide-and-Conquer-Verfahren, 131 DNS,204 domain decomposition methods, siehe Gebietszerlegungsmethoden Ebenen der Parallelitat, 11 Effizienz, 8 Eigenwert-Problem, symmetrisches, 117 Eigenwertberechnung durch Reduktion auf Tridiagonalgestalt, 126 mit Divide-and-ConquerVerfahren, 131 mit Jacobi-Verfahren zur Berechnung von Eigenwerten, 118 Einzelschritt-Verfahren, siehe GaulbSeidel-Verfahren Erzeugung von Prozessen, 13 Explizite Parallelitat, 13 explizites Differenzenverfahren, 35 Fan-In-Methode, 7 Fiedler- Vektor, 55 Finite Differenzen, 18 Fork-Join-Konstrukt, 14 Fredholmsche Alternative, 140 Fredholmsche Integralgleichung zweiter Art, 139 Fredholmscher Integraloperator, 140 Frobeniusnorm, 118 Full-Weighting-Operator, 105, 109
244
Funktional, Minimi erung eines, 61 Oaus-Algorithmus, 143 Parallelisierung, 145 Pivotstrategien, 145 Spaltenpivotsuche, 145 Zeilenpivotsuche, 145 zyklische Matrixspeicherung, 146 Gaus-Seidel-Verfahren, 22 als Clatter , 110 Parallelisierung, 26 Zusammenhang zum CGVerfahren, 63 GauiS-Transformierte, 93 Gebietszerlegungsmethoden, 89 Geisterpunkte, 25 Gemeinsamer Speicher, 2 gemeinsamer Speicher, 2 Gerichteter Graph, 50 Gesamtschritt-Verfahren, siehe J acobi- Verfahren zur L6sung von Gleichungssystemen Gitter Ubergang zwischen, 103 fein, 99 grab,99 Glatter, 102 GauiS-Seidel-Verfahr en als, 110 Gaus-Seidel-Verfahren in Wavefront-Form als, III J acobi-Verfahren als, 110 Glatte Komponenten, 101 Glatter Fehler, 102 gleichabstandiges Gitter, 18 Grad eines Knoten , 51 Granularitat, 3, 11 Graph , 49 einer Matrix, 50 gerichteter, 50 induzierter, 51 Kanten , 49 Kantenm enge, 49 Knoten,49 Knotenmenge, 49 ungerichteter, 50
STICHWORTVERZEICHNIS
Graphparti tionierung, 49, 51 Heuristiken, 59 Partitionierungsphase, 179 Praktikumsaufgabe, 173, 175 Riickverfeinerungsphase, 181 Vergroberungsphase, 179 Greedy-Graph-Heuristik, 59 Grabgitterkorrektur, 103, 105 H-Matrix, 86 Hadamard-Matrix, 86 Half-Weighting-Operator, 109 Hauptminor, 129 Heuristiken zur Graphpartitionierung, 59 high performance swit ch, 5 Housholder-Matrix, 128 Housholder-Transformation , 128 IBM SP2 , 6 Implizite Parallelitat , 13 Indexpaar , 122 Induzierter Graph, 51 Inkrementeller Speed-up, 9, 147 Integralgleichung Kern , 139 rechte Seite , 139 Interpolatin, 107 Interpolation, 103 Irreduzible Mat rix, 52 Iterationsfahige Gestalt, 21 Iterationsmatrix, 21 Jacobi-Matrix, 118 Jacobi-Verfahren als Gliitter, 110 Jacobi-Verfahren zur Bercchnung von Eigenwerten, 118 Ind expaar , 122 Karu ssell-Algorithmus, 122 klassische Wahl der Indexpaare, 121 Laufzeitmessungen, 192 Parallelisierung, 122, 124 Praktikumsaufgabe, 190 Treshhold-Verfahren, 121 Vertragliches Indexpaar, 122
STICHWORTVERZEICHNIS
Zyklische Wahl der Indexpaare, 121 Jacobi-Verfahren zur Losung von Gleichungssystemen, 21 Parallelisierung, 24 Kahan, Satz von, 23 Kanten,49 Kantenmenge, 49 Kernighan-Lin-Algorithmus, 60, 181 Knoten,49 benachbarte, 51 Grad eines, 51 Knotenmenge, 49 Kollektive Kommunikation, 227 Kommunikationsbandbreit e, 149 komp akt, 140 Komponent en gla tt, 101 oszillierend , 101 Konditionszahl , 70 Kongruenztransformation, 70 Konjugierte Suchrichtungen, 64 Konvergenzgeschwindigkeit , 23 lamboot , 219 lamwipe, 219 Laplace-Matrix, 53 lexikographische Gitt ernummerierung, 20 Linux-Clust er, 197 LU-Zerlegun g, 144 M-Matrix, 86 Maschenweit e, 18 Matrix-Vektor-Multiplikation, 153 Laufzeitmessungen, 157 mit einer Bandmatrix, 185 mit einer Bandmatrix, Dat enaustausch, 187 Median, 56 Mehrg ittervefahren Parallelisierung, 109 Mehrgitterverfahren, 99 Full-Weighting-Operator, 105, 109 Gliitter, 102
245
Grobgitterkorrektur, 103, 105 Half-Weighting-Operator, 109 Interpolation, 103, 107 Nested Iteration, 102 Prolongation, 103, 107, 115 Prolongationsoperator , 103, 108 Restriktion , 104, 107, 114 Restriktionsop era tor, 104, 107 V-Zyklus , 106 W-Zyklus, 106 message passing, 2, 3, 15, 213 Methode des steilsten Abstiegs, 64 Metis , 178 MIMD-R echner , 6 Minkowski-Matrix,86 MPI_Abort , 221 MPI_ Addr ess, 232 MPI_ Allgather, 228 MPI_Allreduce, 230 MPI_Alltoall, 229 MPI_ANY_ SOURCE, 223 MPI_ANY_TAG, 223 MPI_BAND, 235 MPI_Barrier, 227 MPI _ Beast , 227 MPI_BOR, 235 MPI _ Bsend , 222 MPI _ Buffer_ at tach, 224 MPI _ Buffer _ detach, 224 MP I_ BXOR, 235 MP I_ BYT E, 231 MPI _ CHAR, 230 MPI_ CHARACTER, 231 MPI _ Comm _ free, 236 MPI_ Comm_rank, 221 MPI_ Comm _ size, 221 MPI_ Comm_ split , 236 MPI _ COMPLEX, 231 MP I_ Datatyp e, 230 MPI_BYTE, 231 MPI _ CHAR, 230 MPI_ CHARACTER, 231 MPI_ COMPLEX, 231 MPI_DOUBLE, 230
246
MPI_DOUBLE_PRECISION, 231 MPI_FLOAT, 230 MPI _ INT, 230 MPI _INTEGER, 231 MPI_LOGICAL, 231 MPI_LONG, 230 MPI_LONG_DOUBLE,230 MPI_PACKED, 231 MPI_REAL, 231 MPI_SHORT, 230 MPI_ UNSIGNED , 230 MPI_ UNSIGNED _ CHAR, 230 MPI_ UNSIGNED _LONG, 230 MPI_ UNSIGNED _SHORT, 230 MPI_DOUBLE,230 MPI_DOUBLE_PRECISION,231 MPI _ Error_ strin g, 236 MPI_ Finalize, 221 MPI_ FLOAT , 230 MPI_ Gather, 228 MPI _ Get _ count, 237 MPI_Init, 221 MPI_Initialized, 221 MPI_INT, 230 MPI_INTEGER, 231 MPI_ Irecv, 225 MPI_ Isend , 224 MPI_ LAND, 235 MPI_ LOGICAL, 231 MPI_LONG, 230 MPI_LONG_DOUBLE,230 MPI_LOR,235 MPI_LXOR,235 MPI _ MAX, 234 MPI_MAX_ERROR_STRING , 236 MPI_ MAXLOC, 234 MPI_ MIN, 234 MPI_ MINLOC , 234 MPI_ Op, 234 MPI_BAND, 235 MPI_BOR, 235 MPI_BXOR,235 MPI_LAND, 235 MPI_LOR, 235
STICHWORTVERZEICHNIS
MPI_ LXOR, 235 MPI_ MAX, 234 MPI_MAXLOC,234 MPI _ MIN, 234 MPI _ MINLOC, 234 MPI_PROD, 235 MPI_SUM, 234 MPI _ op_ create, 235 MPI _ op_ free, 235 MPI_ Pack, 231 MPI _ Pack_ size, 232 MPI_PACKED, 231 MPI _ Pcontrol, 237 MPI_PROD, 235 MPI_REAL,231 MPI_Recv, 223 MPI_Reduce, 229 MPI_ Rsend, 223 MPI_ Scatter, 228 MPI_ Send, 222 MPI_Se ndrecv, 223 MPI _ Sendrecv_ replace, 224 MPI _SHORT, 230 MPI _Ssend, 222 MPI_Statu s, 237 MPI_ SUCCESS, 236 MPI _SUM,234 MPI_ Test , 226 MPI _ Testall , 226 MPI _ Test any, 226 MPI_ Testsome, 227 MPI _ Type_ commit, 234 MPI _ Type_ contiguous, 233 MPI _ Typ e_ free, 234 MPI _ Type_indexed, 234 MPI _ Type_ size, 232 MPI_ Type _ struct , 232 MPI_ Type _ vector, 233 MPI_ Unpack, 231 MPI_ UNSIGNED, 230 MPI_ UNSIGNED_ CHAR, 230 MPI_UNSIGNED_LONG,230 MPI_ UNSIGNED _SHORT, 230 MPI_Wait, 225 MPI_Wait all, 225
STICHWORTVERZEICHNIS
MPI_Waitany, 225 MPI_ Waitsome, 226 MPI_Wtick, 237 MPI_Wtime, 236 mpicc, 218 mpif77,218 mpirun, 219 Multi-Grid Method, siehe Mehrgitterverfahren Multisektionsverfahren, 131 Multitasking, 13 Nameservices, 203 Nested Iteration, 102 Network File System, 206 Network Information Service, 204 NFS, 206 NIS, 204 Nystrom-Gleichung, 142 Nystrom-Operator, 141 Nystrom-Verfahren, 141, 142 Laufzeitmessungen, 195 Parallelisierung, 143 Praktikumsaufgabe, 193 Oszillierende Komponenten, 101 Parallele Programmiermodelle, 10 Parallelisierung Jacobi-Verfahren zur Berechnung von Eigenwerten, 122 Losen von Gleichungssystemen mit Tridiagonalmatrix, 41 ADI- Verfahren, 44 CG-Verfahren, 87 Gauf-Algorithmus, 145 Gaus-Seidel-Verfahren, 26 Jacobi-Verfahren zur Losung von Glei chungssystemen, 24 Mehrgitterverfahren, 109 Nystrom-Verfahren , 143 SOR-Verfahren, 26 Parallelisierungsgrad, 7 PC-Cluster, 3, 197 Permutationsmatrix, 52 Perron-Frobenius, Satz von, 53
247
Pfeil(kopf)matrix, 91 Poisson-Gleichung, 18 Diskretisierung im ]R2, 18 Diskretisierung im ]R3, 31 Praktikumsaufgaben CG- Verfahen, 182 Graphpartitionierung, 173, 175 Jacobi-Verfahren zur Berechnung von Eigenwerten, 190 Losen von Glei chungssystemen mit Tridiagonalmatrizen, 164 Matrix-Vektor-Multiplikation, 153 Nystromverfahren, 193 SOR-Verfahren, 158 Programmiermodelle, parallele, 10 Prolongation, 103, 107, 115 Prolongationsoperator, 103, 108 Prozessortopologie, 3 2D-Gitter, 4 3D-Gitter, 4
Binarbaum, 3 Crossbar, 5 Frames, 5 Hypercube, 3 Ring, 3 Torus, 4
Punkt-zu-Punkt-Kommunikation, 221 Riickwartsdifferenzenapproximation, 35 Randbedingung, 17 Red- Black- Nummerierung, 28 Reduktion auf Tridiagonalgestalt, 126 Reduzible Matrix, 52 Restriktion, 104, 107, 114 Restriktionsoperator, 104, 107 Rotations-Matrix, 118 rsh, 209 Schachbrett-Nummerierung, 28 Schur-Komplement, 93 Semaphor, 15 Serieller Rechner, 1 shared memory, 2 SIMD-Rechner, 6 Smoother, siehe Glatter
248
SMP , 201 SOR- Verfahren, 23 Parallelisierung, 26 Praktikumsaufgabe, 158 Red-Black-Nummerierung,28 Schachbrett-Nummerierung, 28 Wavefront-Nummerierung, 26 Wellenfront-Nummerierung, 26 Speed-up, 8, 10, 147 Spektralradius, 53 Spiegelungs-Matrix, 128 SPMD,14 ssh, 209 SSOR- Verfahren, 75 Start-up-Zeit, 149 successive over-relaxation method, siehe SOR- Verfahren Suchrichtung, 62 konjugi erte, 64 Symmetric Multi Processing , 201 Symmetrisches Eigenwertproblem, 117 Symmetrisches SOR-Verfahren, siehe SSOR- Verfahren Taylor-Formel , 19 Teile-und-Herrsche-Verfahr en, 131 Treshhold-Verfahren, 121 triangle, 176 Tridiagonalmatrizen, Losen von Gleichungssystemen mit, 39 Laufzeitmessungen, 172 Parallelisierung, 41 Praktikumsaufgabe, 164 Ungerichteter Graph, 50 Unvollstiindige Cholesky-Zerlegung , 85 Unzerlegbare Matrix, 52 V-Zyklus, 106 Verfahren der konjugierten Gradi ente n, 61 Verteilter Speicher, 2 Vertragliches Indexpaar, 122 virtual shared memory, 3 VLIW-Prozessor , 12
STICHWORTVERZEICHNIS
Vorkondi tioniertes CG- Verfahren , 69 Vorkonditionierung durch Gebietszerlegung , 89 mit Fixpunktiteration, 74 W-Zyklu s, 106 Wiirmele itungsgleichung , 32 Wavefront-Nummerierung, 26 Wellenfront-Nummerierung, 26 Yellow Pages, 204 YP,204 Zerlegbare Matrix, 52 Zerlegung, 21 zyklische Matrixspeicherung, 146