6. Parallele Algorithmen 6.1 Vorbemerkungen Bisher: Instruktionen von Programmen werden durch einen einzigen Prozessor sequentiell ausgeführt. Eine Beschleunigung von Algorithmen ist dabei nur möglich, wenn die Arbeitsgeschwindigkeit der einzelnen Komponenten (Prozessor, Speicher, Datenübertragung) erhöht wird. Eine weitere Geschwindigkeitssteigerung kann generell erreicht werden, wenn man die vonneumann Architektur verlässt und Algorithmen parallel auf mehreren Prozessoren implementiert oder in mehrere unabhängige Teilaufgaben zerlegt und diese auf mehrere Rechner verteilt. nicht vonneumann Architekturen Parallelrechner Verteilte Systeme MIMD SIMD Cluster LANs WANs etc. Array (Feld)Rechner Systolische Systeme Parallelrechner: viele Prozessoren, jeder ist mit "privatem" Speicher ausgestattet. Alternativ oder zusätzlich kann ein globaler (common) Speicher vorliegen. Arbeitsweise: Verbindungsnetz: zwischen Prozessoren und Speichermodulen, oder zwischen Prozessoren untereinander Ein/Ausgabeeinrichtungen, etc. eine oder mehrere Aufgaben [Programme] werden auf die Prozessoren verteilt. I.a. arbeiten mehrere Prozessoren an einem Programm ("parallele Programme") SIMDTyp: alle Prozessoren führen zur selben Zeit dieselbe Operation aus MIMDTyp: die zur selben Zeit ausgeführten Operationen können unterschiedlich sein, die Prozessoren arbeiten unabhängiger Prozessoren kommunizieren direkt miteinander über das Verbindungsnetz oder über den gemeinsamen Speicher Als Modell für eine von Neumann Maschine dient z. B. die Random Access Maschine (RAM). Analog zur RAM kann man auch ein idealisiertes Modell von Parallelrechnern konzipieren: ein Beispiel dafür ist die Parallel RandomAccess Maschine (PRAM). Eine PRAM besteht aus p > 1 Prozessoren P 1,..., P p, die auf einen gemeinsamen Speicher (common oder shared memory) zugreifen können. Zusätzlich kann jeder Prozessor über einen privaten (lokalen) Arbeitsspeicher verfügen. Die Prozessoren sind synchronisiert, d.h. sie führen die Rechenschritte gleichzeitig und taktweise aus. Ein Rechenschritt besteht aus drei Phasen: ein Prozessor liest Daten aus dem gemeinsamen Speicher, führt dann die Operation aus, und schreibt schließlich das Ergebnis in den gemeinsamen Speicher. Die Kommunikation zwischen den Prozessoren erfolgt über den gemeinsamen Speicher. Beim Datenzugriff euf eine Speicherzelle unterscheidet man den EREW (exclusive read exclusive write), CREW (concurrent read exclusive write), und CRCW (concurrent read concurrent write). Gleichzeitiges Lesen und Schreiben dsb. Speicherzelle führt zu Konflikten, außer die schreibenden Prozessoren wollen denselben Datenwert in die Speicherzelle eintragen. Andere Parallelrechnermodelle benutzen statt eines gemeinsamen Speichers ein Verbindungsnetz, über das diese miteinander kommunizieren können. Hier tritt die Frage auf, welche Struktur das Verbindungsnetz haben soll. Dessen Struktur bestimmt nämlich weitgehend, für welche Aufgaben der Rechner besonders geeignet ist. Untersuchungen gehen auch in die Richtung, welche Verbindungstrukturen insbesondere für universell einsetzbare Parallelrechner in Frage kommen. Beispiele sind Hypercubes und shuffleexchangegraphen. 2001 K. Ecker Angewandte und praktische Informatik, Kap. 6: Parallele Algorithmen 61
6.2 Einige einfache Beispiele für parallele Algorithmen 6.2.1 Minimumsbestimmung Gegeben eine Menge von Zahlen z 1,..., z n ; bestimme den kleinsten Wert. Sei n eine Potenz von 2. Auf einer EREW PRAM mit n/2 Prozessoren könnte das so implementiert werden: Im ersten Durchgang bestimmt man z 1 ' = min{z 1, z 2 }, z 2 ' = min{z 3, z 4 }, z 3 ' = min{z 5, z 6 },..., parallel auf n/2 Prozessoren, im zweiten Durchgang z 1 " = min{z 1 ', z 2 '}, z 2 " = min{z 3 ', z 4 '},..., parallel auf n/4 Prozessoren, usw. Das Minimum wird nach log 2 n Schritten erhalten. Wenn n keine Potenz von 2 ist, muss das Verfahren geringfügig modifiziert werden. Der Zeitaufwand ist O(log 2 n). 6.2.2 Summe von n Zahlen Dies kann auf einer EREW PRAM mit n/2 Prozessoren in log 2 n = O(log 2 n) Schritten berechnet werden (ein Schritt besteht dabei jeweils aus zwei SpeicherZugriffen zum Holen der Operanden, der Addition, und schließlich dem Zurückspeichern des Resultats in den gemeinsamen Speicher). "Fanin" Technik: z 1 z 2 z 3 z 4 z 5 z 6 z 7 z 8 6.2.3 Skalarprodukt zweier Vektoren Seien Vektoren v = (v 1,..., v n ) und w = (w 1,..., w n ) gegeben. Das Skalarprodukt s = i=1 Σ vi w i kann auf einer EREW PRAM mit n Prozessoren in 1 log 2 n = O(log 2 n) Schritten berechnet werden. Im ersten Schritt werden die Multiplikationen ausgeführt, einschließlich der dazu erforderlichen Zugriffe auf den gemeinsamen Speicher. Danach werden die n Produktwerte addiert. 6.2.4 Produkt von Matrizen Seien Matrizen A, B der Dimension n n im gemeinsamen Speicher einer EREW PRAM abgelegt. Das Produkt C = A B kann in O(log 2 n) Schritten berechnet werden, indem man zur Bestimmung jedes einzelnen Skalarprodukts n c ij = Σ k=1 aik b kj n Prozessoren verwendet, insgesamt also n 3 Prozessoren. Bei Verwendung von weniger Prozessoren erhält man entsprechend größere Laufzeiten; z.b. bei n Prozessoren kann man die Skalarprodukte nur hintereinander ausführen; der Zeitaufwand steigt dann auf O(n 2 log 2 n). 6.2.5 Potenzen einer Matrix Sei A eine n n Matrix und k IN. Zunächst sei nur A k zu berechnen: Wenn k eine Potenz von 2 ist, müssen hintereinander A 2, A 4,... A k, also k 1 Produkte von Matrizen berechnet werden. Dafür sind insgesamt (log 2 k)( log 2 n 1) Schritte bei n 3 Prozessoren erforderlich. Wenn k keine Potenz von 2 ist, ergibt sich ein in der Größenordnung ähnlicher Zeitaufwand. Als nächstes sollen alle Potenzen A 2, A 3,..., A k bestimmt werden. Probleme dieser Art treten etwa bei Wegeproblemen in Graphen mit n Ecken auf. Der Zeitaufwand ergibt sich zu O(log 2 n) bei n 4 /2 Prozessoren. A A 2 A 4 A 8 n A 3 A 7 A 6 A 5 2001 K. Ecker Angewandte und praktische Informatik, Kap. 6: Parallele Algorithmen 62
6.3 Paralleles Mischen und Sortieren Oddeven transposition sort (vgl. Kap. 3) lässt sich auf einer PRAM mit n/2 Prozessoren bei einem Zeitaufwand von O(n) realisieren. Ein schnelleres Verfahren zur Sortierung von einer gegebenen Menge von Zahlen, das zudem mit weniger Prozessoren auskommt, wird nun besprochen. 6.3.1 Theoretische Grundlage Bitonische Zahlenfolgen Eine Zahlenfolge heißt, wenn sie durch Aneinanderhängen einer absteigend en Zahlenfolge und einer aufsteigend en Folge, oder durch eine zyklische Vertauschung daraus entsteht. Beispiele: 1 3 5 7 8 6 4 2 0 7 8 6 4 2 0 1 3 5 Bitonische Zahlenfolgen haben eine Eigenschaft, die man zum Sortieren ausnutzen kann: Lemma. Sei a = (,..., a n 1 ). Sei b i = min{a i, a in/2 } und c i = max{a i, a in/2 } für 0 i < n/2. Dann gilt: (i) Die Folgen b = (,..., b n 1 ) und c = (c 0,..., c n 1 ) sind. (ii) b i c j für alle i und j. Beweis. Zunächst sei angenommen, dass... a n/2 1 und a n/2... a n 1. In diesem Fall ist es klar, dass die Behauptung gilt. Den Fall, dass die auf und absteigende Teilfolge in a ungleiche Länge haben, oder zyklisch vertauscht sind, überlegt man sich ebenfalls leicht.? Folge a Folge c Folge a Folge c Folge b Folge b 0 n/2 n 0 n/2 1 0 n/2 n 0 n/2 1 Wenn man nun eine e Folge von Zahlen, hat, dann kann man durch rekursive Anwendung des Lemmas eine Sortierung erhalten. Im folgenden wird gezeigt, wie ein Sortiernetz, das auf dem Prinzip der en Folgen operiert, realisiert werden kann. 6.3.2 Bitonischer Sortierer Basis des Verfahrens sind Vertauschungselemente der Form: a b min{a,b} a max{a,b} a a max{a,b} b min{a,b} b b Funktion Funktion Durchschalten Mit diesen werden Sortiernetzwerke aufgebaut. Ein ner bekommt als Eingabe eine e Folge mit n Elementen, und gibt diese in er Reihenfolge (ansteigend mit wachsendem Index) aus. Man kann leicht nachvollziehen, dass der 4e () diese Aufgabe erfüllt. Der 4Sortierer () wird dann erhalten, indem man zuerst die eingegebenen Zahlen reiht, was durch die beiden Vergleichselemente erreicht wird, und anschließend den en () anwendet. Der 4Sortierer () beliebige 4 Zahlen aufsteigend. 4er 4Sortierer 4er 2001 K. Ecker Angewandte und praktische Informatik, Kap. 6: Parallele Algorithmen 63
Analog der 4e ( ) und der 4Sortierer ( ) : 4er 4Sortierer 4er un Ein 8er () und 8Sortierer () sehen dann entsprechend so aus: 8er 8Sortierer a 4 a 5 a 6 a 7 c 0 c 1 c 2 c 3 c 4 c 5 c 6 c 7 b 4 b 5 b 6 b 7 a 4 a 5 a 6 a 7 4Sortierer 4Sortierer 8er b 4 b 5 b 6 b 7 un Sei im folgenden n = 2 k. Ein ner enthält eine Spalte von Vergleichselementen, gefolgt von zwei parallelen n/2en n. Insgesamt hat ein ner daher k Spalten von Vergleichselementen. Das rekursive Konstruktionsprinzip kann nun leicht erkannt werden: Ein nsortierer besteht aus zwei n/2sortierern, gefolgt von einem nen. Die Anzahl der Vergleichsspalten s(k) beim Sortierer ergibt sich somit aus der Rekursion 1 für k = 1 s(k) = s(k 1) k für k > 1, also s(k) = k(k1)/2 = O(log 2 n) 6.3.3 ShuffleexchangeNetz... n/2 Sortierer n/2... Sortierer nsortierer ner Bitonische Sortierer können systematisch mittels sog. shuffleexchangenetze aufgebaut werden. Ein shuffleexchangenetz der Größe n = 2 k ist ein Netz, deren Eingänge so mit Ausgängen verbunden, dass deren Binärwerte zyklische Vertauschungen sind: Eingang i ist mit Ausgang j verbunden, falls der Binärwert von j durch ein Ringshift links aus dem Binärwert von i erhalten wird. Für n = 8 sieht das so aus:... 000 001 010 100 011 101 110 111 Shuffleexchange Netz 000 000 001 100 010 001 011 101 100 010 101 110 110 011 111 111 Das Shuffle exchangenetz definiert also eine Permutation auf der Menge der Eingänge; diese ist zyklisch mit der Zyklenlänge log(n) = k. 2001 K. Ecker Angewandte und praktische Informatik, Kap. 6: Parallele Algorithmen 64
Es liegt nahe, ein Sortiernetz aus einer einzigen Spalte von Vergleichselementen aufzubauen, und die Eingänge mit Hilfe des Shuffle exchange Netzes zu permutieren. Die Vergleichselemente müssen dabei über Steuerleitungen so gesteuert werden, dass sie jeweils die richtige Funktion (,, Durchschalten) ausführen. Insgesamt braucht man daher für einen n = 2 k Sortierer n/2 Vergleichselemente. Satz. Mit Hilfe eines aus n/2 Vergleichselementen nach dem Shuffle exchange Prinzip aufgebauten Sortiernetzes können n Zahlen in der Zeit O(log 3 n) werden. Beweis. Insgesamt werden bei O(log 2 n) Durchläufen des Sortiernetzes oder Vergleiche durchgeführt. Dazwischen müssen die Eingänge vor dem nächsten Durchlauf geeignet permutiert werden; dazu sind jeweils bis zu k 1 = O(log n) Durchläufe erforderlich, bei denen die Vergleichselemente lediglich durchschalten. 8Sortiernetz 6.4 Systolische Algorithmen Prinzipien: wenige unterschiedliche Typen von Prozessoren, die i.a. in einem regelmäßigen Netz von nur lokalen Verbindungen angeordnet sind. Die Verarbeitung erfolgt pipelineartig nach dem SIMDPrinzip. Als Beispiel wird die MatrixVektor Multiplikation y = A x betrachtet. Bei gegebener Matrix A = (a ij ) (Dimension n) und Vektor x = (x 1,..., x n ) T kann das Produkt (y 1,..., y n ) T = A (x 1,..., x n ) T wie folgt berechnet werden: y i (1) = 0 y i (k1) = y i (k) a ik x k y i = y i (n1) Die Matrix A sei eine Bandmatrix mit Bandweite w = q p 1 mit festen Werten p und q n. Z. B. für p = 2 und q = 3: 1 2 1 2 3 1 2 3 4 a 42 a 43 a 44 a 45 Bandweite w a 53...... 0 0 Berechnung von y = A x : die Elemente von A, x und y (anfangs 0) werden durch ein systolisches Array hindurchgeschoben. Das systolische Array besteht aus w Prozessoren, die jeweils einen Schritt zur Berechnung von A x ausführen. Die Werte von A werden von oben nach unten, die Werte von x von links nach rechts, und die Werte von y von rechts nach links geschoben: die Elemente von A bei jedem Takt, die Werte von x bei jedem ungeraden Takt, und die Werte von y bei jedem geraden Takt.. x 1 x 2 x 3 x 4. = y 1 y 2 y 3 y 4. 2001 K. Ecker Angewandte und praktische Informatik, Kap. 6: Parallele Algorithmen 65
4 a 43 3 a 42 3 2 1 2 2 1 x 1 x 2 y 1 y 2 = 0 1 Takt 1 x 1 y 1 = 0 2 x 1, 1 ; y 1 y 2 3 x 2, 2 ; y 1 x 1, 1 ; y 2 4 x 2, 2 ; y 2 x 1, 1 ; y 3......... Benachbarte Prozessoren sind abwechselnd aktiv. Wenn (z.b.) w = p q 1 gerade: nach w Takten wird das erste Element von y, und nach jeweils zwei weiteren Takten das nächste Element von y ausgegeben. Damit benötigt das Netz insgesamt 2n w Takte zur Bestimmung von y = A x. Ende Kapitel 6 2001 K. Ecker Angewandte und praktische Informatik, Kap. 6: Parallele Algorithmen 66