Parallele Algorithmen in der Strömungsmechanik

                    Marcus Hutter  9.9.1990





                     0. Inhaltsverzeichnis




0. Inhaltsverzeichnis ......................................  1

1. Einleitung...............................................  1

2. Parallele Rechnerarchitekturen...........................  2

3. Existierende & geplante Parallelrechner..................  2

4. Der Multigrid-Algorithmus................................  2

5. Parallelisierung des Multigrid-Aglorithmus...............  2

6. Aufteilung des Gitters auf die Prozessoren...............  2

7. Literaturverzeichnis...................................... 2





                         1. Einleitung


Heutige Comupter  sind,  entgegen  allen  Prophezeiungen,  noch
überwiegend seriell  arbeitende von Neumann-Rechner. Dies liegt
nicht etwa  daran, daß Parallelrechner eine Fehlentwicklung wä-
ren, oder  sich unüberwindbare Probleme bei der hardwaretechni-
schen Realisierung ergäben, sondern ist überwiegend ein Softwa-
reproblem,da die  automatische Parallelisierung von Algorithmen
durch Compiler  nur sehr bedingt möglich ist. Da aber die Simu-
lation physikalischer  Systeme in  natürlicher Weise ein paral-
leles Problem  ist (jedem  Teilchen/Raumpunkt sein eigener Pro-
zessor) ist  es nicht  verwunderlich, daß sich viele numerische
Algorithmen leicht  (relativ zu  Programmen aus  anderen Berei-
chen) parallelisieren lassen. Andererseits haben es bei der ge-
waltigen Anzahl  von Rechenoperationen  gerade die  numerischen
Programme nötig parallelisiert zu werden.












                             - 1 -


               2. Parallele Rechnerarchitekturen


Klassifizierung:
Rechner können grob in 4 Klassen eingeteilt werden:
SISD (Single  Instruction Single  Data) Rechner sind klassische
seriell arbeitende von Neumann-Rechner.
MISD (Multiple  Instruction Single Data) Rechner bezeichnet man
Systeme, bei  denen mehrere  Prozessoren an einem BUS auf einen
gemeinsamen Speicher zugreifen.
SIMD (Single Instruction Multiple Data) Rechner sind vor allem
Vektorrechner, die  im engeren Sinn keine Parallelrechner sind.
Die Arithmetikeinheit  (ALU) besitzt  zusätzliche  Befehle  zur
Vektormanipulation, speziell wird die Berechnung des Skalarpro-
dukts unterstützt  (mit dem sich dann Vektor- & Matrixmultipli-
kation programmieren  lassen). In (oft) einem Taktzyklus werden
zwei der  ALU übergebene reelle Zahlen multipliziert und zu ei-
nem internen  Register hinzuaddiert.  Setzt man das Register am
Anfang auf  Null und  übergibt dann  seriell beide Vektoren, so
enthält das  Register nach n Taktzyklen (n = Länge des Vektors)
das Skalarprodukt beider Vektoren.
Bild1
                               
+-------------------------------------------------------------+
                               
           +--------------------------------------+   
           |  +----+  +-------+                   |   
        -----¯|Reg1|-¯|       |                   |   
           |  +----+  |   *   |    +-------+      |   
           |  +----+  |       |---¯|       |      |   
        -----¯|Reg2|-¯|       |    |   +   |      |   
           |  +----+  +-------+    |       |---------¯
           |                     +¯|       |   |  |   
           |                     | +-------+   |  |   
           |                     |             |  |   
           |                     |   +----+    |  |   
           |                     +---|Reg3|®---+  |   
           |                         +----+       |   
           +--------------------------------------+   
                               
            Bild 1: Skalarprodukt im Vektorrechner
+-------------------------------------------------------------+
                               
Realisiert wird dies durch eine Pipeline, die nicht nur in Vek-
torrechnern Anwendung  findet. Schon  einfache Anweisungen, wie
die Addition  zweier reeller  Zahlen, werden häufig in mehreren
Phasen (Schritten,  Taktzyklen) von  je einem dafür ausgelegten
Teil der  Hardware bearbeitet. Um die anderen Teile nicht Brach
liegen zu  lassen kann  man schon  bevor die Anweisung komplett
bearbeitet wurde,  die nächste in Angriff nehmen und so die Be-
fehle überlappt abarbeiten.
Bild2
Echt parallelarbeitende SIMD-Rechner werden gerne in der paral-
lelen Komplexitätstheorie  (eingeschränkte  Klasse  von  PRAMs)
verwendet und  wären für viele parallelisierte numerische Algo-
rithmen ausreichend  (ein Algorithmus angewendet auf viele ver-
schiedenen Daten).





                             - 2 -
                              

+-------------------------------------------------------------+
|                                                             |
|   +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+   |
|   |     | |     | |     | |     | |     | |     | |     |   |
|   |sign-| |Exp.-| |Align| |     | |Norma| |Norma| |End- |   |
|--¯|con- |¯|com- |¯|ment-|¯| Add |¯|lize-|¯|lize-|¯|case |--¯|
|   |trol | |pare | |shift| |     | |count| |shift| |det. |   |
|   |     | |     | |     | |     | |     | |     | |     |   |
|   +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+   |
|                                                             |
|                   Bild 2: Pipeline                          |
+-------------------------------------------------------------+
                               
Da aber in der Numerik wesentlich mehr Daten, als Programmmcode
zu speichern  sind, kann man es sich leisten notfalls auf allen
Prozessoren Duplikate  des gleichen Programms zu speichern. Man
gelangt so  zur allgemeinsten  Klasse, die  MIMD (Multiple Data
Multiple Instruction) Rechner, die aus mehreren Prozessoren be-
stehen mit eigenem lokalem Speicher für Programme und Daten. Im
folgenden werden nur noch MIMD-Rechner betrachtet.
Weiterhin  können  die  einzelnen  Prozessoren  synchron  (d.h.
gleichgetaktet) oder  asynchron arbeiten.  Da synchrone Rechner
zwar gerne Modelle theoretischer Untersuchungen sind, aber kein
reelles Abbild  besitzen, werden  im folgenden  nur noch  asyn-
chrone Rechner betrachtet.
Wenn mehrere  Prozessoren an einem Problem arbeiten, müssen sie
von Zeit  zu Zeit  Daten austauschen. Geschieht dies über einen
gemeinsamen (d.h.  allen Prozessoren  verfügbaren) Speicher, so
spricht man  von einem  speichergekoppelten System (Prozessoren
hängen an  gemeinsamen BUS).  Da aber (aus technischen Gründen)
immer nur  eine beschränkte Zahl von Prozessoren (meist nur ei-
ner) gleichzeitig  auf den  globalen  Speicher  zugreifen  kann
(auch wenn  diese auf  verschiedene  Zellen  zugreifen)  stellt
diese Kopplung für wachsende Prozessorzahl eine zunehmende Eng-
stelle dar.  Für beliebig  viele Prozessoren  tauglich ist eine
Verbindung der Prozessoren durch (serielle) Schnittstellen, auf
denen     Nachrichten      ausgetauscht      werden      können
(Botschaftorientiert). Da  aber nicht  jeder Knoten  mit  jedem
verbunden werden kann, und eine flexible Verschaltung per Soft-
ware nur  bedingt möglich ist, ist die Frage der Verbindungsto-
pologie entscheidend.
Bild3
+-------------------------------------------------------------+
  +-------+    +-------+                                     
  | local | .. | local |            +-------+       +-------+
  | Mem 1 |    | Mem n |            | CPU 1 |-------| CPU 2 |
  +-------+    +-------+ +-------+  +-------+   |   +-------+
  +-------+    +-------+ | global|          +-------+   |    
  | CPU 1 | .. | CPU n | |  Mem  |      +---| CPU 3 |---|    
  +-------+    +-------+ +-------+      |   +-------+   |    
  +------------------------------+  +-------+       +-------+
  |              B U S           |  | CPU 4 |       | CPU 5 |
  +------------------------------+  +-------+       +-------+
                               
  Bild 3: Speichergekoppeltes / Botschaftsorientiertes System
+-------------------------------------------------------------+
                               
Verbindungsstruktur:
Als Verbindungsstruktur  hat sich  vor allem  der Hypercube be-
währt. Hier  werden 2ü  Prozessoren mit n-stelligen Binärzahlen



                             - 3 -


durchnummeriert. Zwei  Prozessoren sind  genau dann miteinander
verbunden, wenn deren binäre Nummer sich in höchstens einem Bit
unterscheidet (Hammingabstand 1). Die Vorteile dieser Topologie
sind:

1. einfach (zu verstehende) Verbindungsstruktur.
2. Verbindungszahl proportional n2ü, wächst also nur leicht
   überllinear mit der Prozessoranzahl.
3. Die größte Entfernung zwischen 2 Prozessoren ist proportio-
   nal n, wächst also nur logarithmisch mit der Prozessorzahl.
4. Die wichtigsten Strukturen wie k-dimensionale Netze und
   Bäume sind als Substrukturen enthalten.
Bild4
+-------------------------------------------------------------+
                               
                               
                                       100-----101
             00+-------+01              |       | 
               |       |           000--+--001  | 
               |       |            |   |   |   | 
               |       |            |  110--+--111
             01+-------+11          |       |     
                                   010-----011    
                               
                                             +-------------+
               +-----+     +-----------+     | +---------+ |
     +-----+   |     |     |   |   |   |     | | +-----+ | |
     |     | +-+---+ |     |---+---+---|     | | | +-+ | | |
   +-+---+ | | +---+-+  =  |   |   |   |  =  | | | +-+ | | |
   | +---+-+ |     |       |---+---+---|     | | +-----+ | |
   |     |   +-----+       |   |   |   |     | +---------+ |
   +-----+                 +-----------+     +-------------+
                               
          Bild 4: Hypercubes der Dimension 2, 3 und 4
+-------------------------------------------------------------+

Für lineare Netze, d.h. eine lineare Durchnummerierung der Kno-
ten, verwende  man einen  2ü-Gray-Code. Dieser  ordnet jeder n-
stelligen Binärzahl  (also jedem Prozessor) eine (Dezimal)-Zahl
in  der   Weise  zu,   daß   Prozessoren   aufeinanderfolgender
(Dezimal)-Zahlen miteinander verbunden sind. Für k-dimensionale
Netze mit  Kantenlängen 2   x .. x 2   verwende man k-Tupel von
2   -Graycodes (1óiók),   die als n-stellige Binärzahlen inter-
pretiert werden  können. Durch zyklische Gray-Codes erhält man,
falls geschünscht,  eine  Wrapped-Around-Verbindung,  d.h.  daß
Prozessoren auf  gegenüberliegenden Seiten  verbunden sind. Man
erhält so k-dimensionale Tori.
Bild5
Einen Baum  der Tiefe n und maximalem Verzweigungsgrad n erhält
man, indem  man zwei  Knoten genau  dann miteinander verbindet,
wenn die  Binärnummer des  einen Knoten  (Vater) aus der Nummer
des anderen (Sohn) durch löschen des letzten 1-Bits hervorgeht.












                             - 4 -


+-------------------------------------------------------------+
                               
              +-----+     +--------------------------------+
              | 000 |     | 000.00  000.01  000.11  000.10 |
   +----+     | 001 |     | 001.00  001.01  001.11  001.10 |
   | 00 |     | 011 |     | 011.00  011.01  011.11  011.10 |
   | 01 |     | 010 |     | 010.00  010.01  010.11  010.10 |
   | 11 |  x  | 110 |  =  | 110.00  110.01  110.11  110.10 |
   | 10 |     | 111 |     | 111.00  111.01  111.11  111.10 |
   +----+     | 101 |     | 101.00  101.01  101.11  101.10 |
              | 100 |     | 100.00  100.01  100.11  100.10 |
              +-----+     +--------------------------------+
              Bild 5: 2ý,2  und (2ý,2 )-Gray-Code
+-------------------------------------------------------------+
                               
Bild6
                               
+-------------------------------------------------------------+
                               
                                         +------+
                                         |      |
                                     +---+--+   |
                                     |   |  |   |
                                     |      |    
                 +------+            |      |    
                 |      |                        
             +---+--+   |                        
             |   |  |   |                        
             |      |                            
             |      |                            
                               
                 Bild 6: Baum in einem 4-Cube
+-------------------------------------------------------------+
                               
Laufzeit paralleler Algorithmen:
Arbeitet man mit P Prozessoren statt mit einem, so kann man ma-
ximal eine  Geschwindigkeitssteigerung (Speedup)  um den Faktor
S=T(1)/T(P) =  'Zeit die  ein Prozessor  zum Lösen des Problems
benötigt' /  'Zeit die P Prozessoeren dazu benötigen' erwarten.
In der  Praxis wird dieser Wert aus folgenden Gründen nicht er-
reicht. Zum  einen müssen  die Prozesse durch einen Master-Pro-
zess erzeugt und auf die verschiedenen Prozessoren verteilt und
die Ergebnisse  wieder abgeholt  werden; hier  spricht man  von
statischem Overhead,  zum anderen kostet der Datentransfer wäh-
rend der  Laufzeit oft  erhebliche Zeit,  da die  Transferraten
(Byte/sec =  Baud) um den Faktor 100-1000 niedriger als die Be-
fehlszykluszeit (in der Numerik im wesentlichen die Fließkomma-
operationen/sec =  Flops) sind. Hinzu kommen noch Totzeiten der
Prozessoren, in  denen sie  nur auf die Ergebnisse anderer Pro-
zessoren warten;  hier spricht  man von  dynamischem  Overhead.
Diese sogenannte Wasted Time ergibt sich aus W=T*T(P)-T(1). Die
Effizienz eines  parallelen Algorithmus ist gegeben durch E=S/P
die im  besten Fall (ohne Overhead) 1 ist. Manchmal passiert es
auch, daß  ein (vielleicht optimaler) serieller Algorithmus un-
geeignet zur Parallelisierung ist so, daß auf einen (vielleicht
sogar Ornungsmäßig) langsameren zurückgegriffen werden muß, der
sich parallelisieren läßt.

Level der Parallelisierung:




                             - 5 -


Algorithmen lassen  sich  auf  verschiedenen  Programmierebenen
parallelisieren. Auf  oberster Ebene befindet sich die Paralle-
lisierung mittels  Tasks (Task=Prozesse). Die Tasks entsprechen
auf der Softwareseite den nebeneinander arbeitenden Prozessoren
auf Hardwareseite.  Ein Taskmanager verteilt die Prozesse auto-
matisch auf  die Prozessoren.  Der Vorteil dieser Methode liegt
darin, daß  Änderungen in  der Hardwarekonfiguration  den Soft-
warehersteller nicht berühren; Werden mehr Prozessoren zur Ver-
fügung gestellt so wird das Programm (ohne irgendeine Modifika-
tion), solange  es genügend  viele Tasks  enthält, entsprechend
schneller. Da bei sehr vernetzten Problemen die geschickte Auf-
teilung der  Tasks auf die Prozessoren wesentlich zur Effizienz
beiträgt, ist diese Methode ungeeignt.
Die Aufteilung auf unterster Ebene, auf Instruction-Level zielt
in Richtung Datenflußrechner und ist heute noch eher Gegenstand
theoretischer Untersuchungen.
Für uns  am interessantesten ist die Parallelisierung auf Loop-
Level, da  Numerikprogramme von  Loops ziemlich  übersät  sind.
Oftmals sind die Berechnungen in den einzelnen Loop-durchläufen
unabhängig voneinander (oder können auf einfache Weise unabhän-
gig gemacht  werden), d.h.  daß die  Reihenfolge der Berechnung
keine Rolle  spielt. Ist  dies der  Fall, so  können  sämtliche
Durchläufe auch parallel berechnet werden.
Der Einfachheit halber geht man in der Weise vor, daß man einen
Algorithmus zuerst  vollständig parallelisiert  (oder zumindest
weitgehend), um  ihn dann  auf die zur Verfügung stehenden Pro-
zessoren so  zu verteilen,  daß die Kommunikation zwischen ver-
schiedenen Prozessoren  auf ein Minimum reduziert wird, da jene
(zeitlich) teuer sind.


          3. Existierende & geplante Parallelrechner


Cray:
Die Cray 2  ist ein Vektorrechner mit 4 Background-CPUs in ECL-
Logik mit  4,1 ns  Zykluszeit und 64KByte lokalem Speicher. Sie
besitzt einen  64Bit-Foreground-Prozessor mit  2GByte  RAM  und
zählt mit  2GFlops zu  einem der  schnellsten heutigen  Rechner
(trotz geringer Parallelisierung). Sie hat die Form einer Tonne
um die  internen Kabellängen  kurz halten  zu können und ist im
Gegensatz zu  ihrem Vorgänger  Flüssigkeitsgekühlt. Wartungsex-
perten bedauern  sehr, daß  das Konzept der 'integrierten Sitz-
bank' der Cray 1 (aus Kostengründen ??) nicht übernommen wurde.

Transputer:
Transputer sind RISC-Prozessoren von der Firma INMOS die spezi-
ell für  Parallelrechner entwickelt wurden. Die Prozessoren be-
sitzen je  4 Links  (Serielle Schnittstellen)  mit denen sie zu
beliebigen Topologien (natürlich mit maximalem Verzweigungsgrad
4) verbunden  werden können. Da Links & Coprozessor im T818 be-
reits integriert sind, kann ein Rechnerknoten mit relativ weni-
gen Bauteilen  aufgebaut werden.  Erweiterungskarten mit  je  4
Transputern gibt es schon für PCs.

Alliant:
Alliant entwickelt  auf der Basis des Vektorprozessors i860 von
Intel einen Parallelrechner. Allein ein i860 (64Bit-Prozessor +
Coprozessor) weist schon die Leistung einer Cray1 auf. Der i860
soll auf dem Gebiet der Großrechner der Standardprozessor (PAX-
Standard) werden, so wie die 80x86 im PC-Bereich



                             - 6 -


Suprenum:
Der Suprenum-Rechner ist eine Entwicklung der GMD (Gesellschaft
für Mathematik  und Datenverarbeitung).  Er besteht aus 16 Clu-
stern, die  in einer Hypercube-Topologie (der Dimension 4) ver-
bunden sind.  Jeder Cluster  besteht aus  16 32-Bit Prozessoren
von Motorola  (68020) plus  Coprozessor (68882) plus je 8 MByte
lokalem Speicher,  die über einen Bus miteinander und verschie-
denen anderen  Komponenten verbunden  sind. Die  Verwendung von
Standardchips soll  dieses System  relativ  billig  machen.  Es
wurde versucht durch eine heterogene Struktur die Nachteile von
BUS- bzw. botschaftsorientierten Systemen zu vermeiden. Entwic-
kelt wurde der Rechner vor allem für Mehrgitterverfahren.
Bild7
                               
+-------------------------------------------------------------+
                               
                               
                               
                               
                               
             aus ct 88 Heft 8 80% & Nebeneinander
                               
                               
                               
                               
                               
                               
                               
                               
                               
                               
                               
                               
                               
                               
                               
                               
                               
                               
              Bild 7: Suprenum-Rechnerarchitektur
+-------------------------------------------------------------+
                               

                 4. Der Multigrid-Algorithmus


Als Beispiel zur Parallelisierung soll auch hier das Modellpro-
blem, die Laplace-Differenzialgleichung

                           è  +è  =0
                           xý  yý   
 auf  einem Rechteckgebiet mit è(x,y)=è (x,y) als Randbedingung
betrachtet werden.  Diskretisiert man  die Dgl auf N*N Punkten,
so geht die Dgl in eine Differenzengleichung der Form
                               
            è  +è  +è  +è  -4è  =0 mit 0<i,j<n und
                               
        è   è   è   è   gegeben durch die Randbedingung
                               
        über. Daraus läßt sich die Iterationsvorschrift



                             - 7 -


                    è  :=(è  +è  +è  +è  )/4
                               
                           gewinnen.
Dies ist  das Jakobi-Verfahren. Ersetzt man den  alten Wert von
è   nicht  ganz durch  den neuen, sondern gewichtet ihn mit dem
alten, so läßt sich die Konvergenz erheblich beschleunigen.

               è  :=w(è  +è  +è  +è  )/4+(1-w)è
                               
Doch auch  dieses Verfahren  konvergiert relativ schlecht gegen
die Lösung  O(N logN), da  (bildet man  das Fourierspektrum) je
nach Wahl  von w  entweder die  hochfrequenten Anteile oder die
Niederfrequenten schlecht  konvergieren. Die  Idee ist  nun ein
paar Schritte  mit für  die hochfrequenten  Anteile optimalem w
(÷0.7) zu  iterieren und  dann die  niederfrequenten Anteile zu
verbessern. Dazu  kann auf  ein gröberes  Gitter  (Restriktion)
übergegangen werden,  bzgl dessen  die niederfrequenten Anteile
aufgrund des  gröberen Gitters  wieder hochfreuent  sind und so
das Verfahren  iteriert werden  kann. Durch  Interpolation  und
nochmalige Anwendung  ein paar  Jakobi-Schritte erhält  man nun
eine verbesserte  Lösung auf  dem feinen  Gitter. Dies  ist der
Mehrgittter-V-Zyklus.
Um einen  Startwert für den V-Zyklus zu erhalten zieht man sich
nahezu am eigenen Kopf auf dem Sumpf. Man wählt ein sehr grobes
Gitter mit  Startwert èð0.  Wendet man  nun den V-Zyklus an und
interpoliert auf  ein nächst  feineres Gitter,  so  erhält  man
einen Startwert  für dieses  feinere Gitter.  So kann successiv
durch V-Zyklen  die Lösung auf dem feinsten Gitter approximiert
werden.
Details können  in [2]  nachgelesen werden.  Trotz dieses recht
aufwendig anmutenden Verfahren hat es nur die Ordnung O(Ný) und
ist somit eines der schnellsten.


         5. Parallelisierung des Multigrid-Algorithmus


Einen (allein aus physikalischen Gründen) geeigneten Ansatz zur
Parallelisierung des Multigrid-Algorithmus bietet die Parallel-
verarbeitung der  einzelnen Gitterpunkte. Dazu werden parallele
Varianten des  Jakobi-Verfahrens (mit Relaxation), der Interpo-
lation, der  Restriktion und eventuell einer globalen Fehlerbe-
stimmung benötigt.

Paralleler Gauß-Seidel-Algorithmus:
Das Jakobi-Verfahren ist direkt geeignet jeden Gitterpunkt par-
allel zu  berechnen, falls man die neu berechneten Werte zuerst
in einem  weiteren Array zwischenspeichert. Würde man die Werte
direkt überschreiben,  so kann  es passieren,  daß ein Nachbar-
punkt nicht  den alten,  sondern den  neuen Wert zur Berechnung
verwendet. Wie  sich zeigen  läßt ist  dies aber sogar von Vor-
teil, wenn  teilweise zur Berechnung schon die neuen Werte ver-
wendet werden. Die Iterationsformel

              è  :=w(è  +è  +è  +è  )/4+(1-w)è  

von Gauß  & Seidel konvergiert doppelt so schnell wie das Jako-
biverfahren,läßt sich  nur leider nicht mehr vollständig paral-
lelisieren.




                             - 8 -


Die gebräuchlichte Variante ist die Red-Black-Färbung. Das Git-
ter wird  Schachbrettmusterartig eingefärbt  (man beachte: rot,
nicht weiß) und zuerst alle roten Punkte iteriert

            è  :=(è  +è  +è  +è  )/4 mit i+j gerade

                    und dann alle schwarzen

          è  :=(è  +è  +è  +è  )/4 mit i+j ungerade,

         wobei die neuen roten Werte verwendet werden.

Parallele Restriktion und Interpolation:
Restriktion und  Interpolation bereiten  keine  Schwierigkeiten
bei der  Parallelisierung. Man verfeinert das Gitter meist, in-
dem man die Zeilenzahl gleichzeitig mit der Spaltenzahl verdop-
pelt und somit in jedem Schritt die vierfache Punktzahl erhält.
Manchmal erhöht  man Zeilen-  und Spaltenzahl  alternierend so,
daß die  Netzgröße um  den Faktor 2 zunimmt. Die einfachste Art
der Interpolation im ersten Fall ist die lineare Interpolation

    è  :=è                       è   :=(è  +è  +è  +è  )/4
                               
    è  :=(è  +è  )/2                      è  :=(è  +è  )/2

Restriktion erfolgt am einfachsten durch Weglassen der nicht-
benötigten Punkte
                           è  :=è  
                               
                   oder durch Mittelbildung.
Bild8
+-------------------------------------------------------------+
                               
   +---------------+   +---------------+   +---------------+
   |       |       |   |   |   |   |   |   |-+-+-+-+-+-+-+-|
   |       |       |   |---+---+---+---|   |-+-+-+-+-+-+-+-|
   |       |       |   |   |   |   |   |   |-+-+-+-+-+-+-+-|
   |-------+-------|®-¯|---+---+---+---|®-¯|-+-+-+-+-+-+-+-|
   |       |       |   |   |   |   |   |   |-+-+-+-+-+-+-+-|
   |       |       |   |---+---+---+---|   |-+-+-+-+-+-+-+-|
   |       |       |   |   |   |   |   |   |-+-+-+-+-+-+-+-|
   +---------------+   +---------------+   +---------------+
                               
          Bild 8: Gitterverfeinerung / -vergröberung
+-------------------------------------------------------------+


         6. Aufteilung des Gitters auf die Prozessoren


Da i.a.  wesentlich weniger  als Ný  Prozessoren zur  Verfügung
stehen muß das N*N-Gitter in P < Ný Teile zerschnitten werden.
Dabei sollte auf folgendes geachtet werden:

1. Ähnliche Gitterverteilung für die verschiedenen Verfeine-
   rungsstufen.
2. Geringe Kommunikation zwischen den Prozessoren.
3. Gleichmäßige Arbeitsverteilung.

In unserem  Fall sind  die Bedingungen  leicht zu erfüllen. Man
teilt das Gitter in P Quadrate, wobei P Quadratzahl sei. Da der



                             - 9 -


Rechenaufwand pro  Prozessorknoten porportional  zur Anzahl der
Gitterknoten und der Kommunikationsaufwand zwischen den Prozes-
soren proportional  zur Zahl der Randknoten ist bieten Quadrate
(Kreise gehen leider nicht) die beste Effizienz.
Um einen  einheitlichen Algorithmus  auch für Randpunkte zu ge-
währen, ist  es von Vorteil zusätzlich die Randpunkte der Nach-
barprozessoren (da  diese zur  Berechnung benötigt  werden) als
Kopie zu  speichern und nach einem Iterationsschritt durch Aus-
tausch die Konsistenz wieder herzustellen.
Bild9
+-------------------------------------------------------------+
                               
        . ------- . . ------- . . ------- . . ----- . 
        | +-----+ | | +-----+ | | +-----+ | | +---+ | 
        | |-+-+-| | | |-+-+-| | | |-+-+-| | | |-+-| | 
        | |-+-+-| | | |-+-+-| | | |-+-+-| | | |-+-| | 
        | +-----+ | | +-----+ | | +-----+ | | +---+ | 
        . ------- . . ------- . . ------- . . ----- . 
        . ------- . . ------- . . ------- . . ----- . 
        | +-----+ | | +-----+ | | +-----+ | | +---+ | 
        | |-+-+-| | | |-+-+-| | | |-+-+-| | | |-+-| | 
        | |-+-+-| | | |-+-+-| | | |-+-+-| | | |-+-| | 
        | +-----+ | | +-----+ | | +-----+ | | +---+ | 
        . ------- . . ------- . . ------- . . ----- . 
        . ------- . . ------- . . ------- . . ----- . 
        | +-----+ | | +-----+ | | +-----+ | | +---+ | 
        | |-+-+-| | | |-+-+-| | | |-+-+-| | | |-+-| | 
        | |-+-+-| | | |-+-+-| | | |-+-+-| | | |-+-| | 
        | +-----+ | | +-----+ | | +-----+ | | +---+ | 
        . ------- . . ------- . . ------- . . ----- . 
        . ------- . . ------- . . ------- . . ----- . 
        | +-----+ | | +-----+ | | +-----+ | | +---+ | 
        | |-+-+-| | | |-+-+-| | | |-+-+-| | | |-+-| | 
        | +-----+ | | +-----+ | | +-----+ | | +---+ | 
        . ------- . . ------- . . ------- . . ----- . 
                               
              Bild 9: Aufteilung der Prozessoren
+-------------------------------------------------------------+
                               
Eine eventuell  benötigte  globale  Fehlerbestimmung  kann  wie
folgt unter Verwendung der Baum-Sub-Struktur bestimmt werden:

1. Berechne Fehlersumme der eigenen Gitterpunkte
2. Lese Fehlersumme aller Söhne und addiere sie hinzu
3. Schicke Summe an Vater-Knoten falls Vater existiert
4. Lese Summe von Vater-Knoten falls Vater existiert
5. Schicke Summe an alle Söhne

Nach O((logP)ý) Zeit enthält 'Summe' die globale Fehlersumme.

Da der  Multigridalgorithmus nur  eine mehmalige  Anwendung von
Vergröberung, Verfeinerung,  Relaxation, Transfer  und ev. Feh-
lerbestimmung ist, ist damit auch dieser parallelisiert.


                    7. Literaturverzeichnis


[1] Stoer Bulirsch: Numerische Mathematik 2 Kap. 8 3.Aufl.:
Springer-Verlag,1990




                            - 10 -


[2] Hackbush, W., Trottenberg, U. (eds.): Multigrid Methods.
Lecture Notes in Mathematics. Vol. 960. Berlin-Heidelberg-New
York: Springer-Verlag 1982
[3] O.McBryan und E.F. Van de Velde: The Multigrid Method on
parallel Processors, in Lecture Notes in Mathematics 1228: Mul-
tigrid Methods II, Proceedings of the Conference Held at Colo-
gne, October 1-4,1985
[4] D.J.Evans: Parallel S.O.R. Iterative Methods, Parallel Com-
puting, vol. 1,pp.3-18,1984























































                            - 11 -


                          1. Einleitung

o- Numerische Algorithmen zur parrallelierung geeignet

                2. Parallele Rechnerarchitekturen

o- SISD,SIMD,MISD,MIMD-Rechner
o- Vektorrechner: Skalarprodukt,2 Ops parallel, sonst  seriell
o- Synchrone / Asynchrone Parallelrechner
o- Echte Parallelrechner
o- Pipeline: Bedienzeit, Durchsatz, Assembler schwierig.
o- Kommunikation: speichergekoppelt / Botschaftsorientiert
o- Verbindungsstrukturen: BUS,gem Speicher, ser. Schnittstelle
o- Hypercube -> Netze (Gray-Code), Baum,
o- Speedup, Effizienz, Stischer/dyn. Overhead,Wasted Time
o- Task- /Loop-/ Instructionlevel-Parallelisierung
o- Totale Parallelisierung, dann Verteilen aus Rechnerknoten
- Semaphore Prozesse

            3. Existierende & geplante Parallelrechner

o- Cray
o- Alliant
o- Suprenum
o- Transputer

                   4. Der Multigrid-Algorithmus

o- Modellproblem, Herleitung
o- Jakobi-Verfahren, Gauß-Seidel
o- Restriktion, Interpolation, Datentransfer

          5. Parallelisierung des Multigrid-Algorithmus

o- parallele Varianten von Gauß-Seidel
 - Red-Black- Diagonal-Färbung
o- parallelisierung von Interpol., Restr.,Gauß-Seidel

          6. Aufteilung des Gitters auf die Prozessoren

o- Minimale Grenzen,  Gleiche Rechenlast
- (2ü+1)ý Gitterpunkte
o- Verdoppelung der Grenzen
o- Berechnung des globalen Fehlers
 - gröbstes Gitter = Prozessorgitter
o- Lowlevel Blocking
o- Simulationsergebnisse aus Artikel