Westfälische Wilhelms-Universität Münster Ausarbeitung im Rahmen des Seminars Parallele Programmierung Verbindungsnetzwerke, Einbettungen, Routing- und Switchingstrategien Gunnar Thies Themensteller: Prof. Dr. Herbert Kuchen Betreuer: Dipl.-Wirt.Inform. Roger A. Müller Institut für Wirtschaftsinformatik Praktische Informatik in der Wirtschaft Inhaltsverzeichnis 1 Einleitung ...................................................................................................................1 2 Grundbegriffe.............................................................................................................1 3 2.1 Verbindungsnetzwerk .......................................................................................1 2.2 Einbettung .........................................................................................................2 2.3 Routingtechnik ..................................................................................................2 Arten von Verbindungsnetzwerken ...........................................................................3 3.1 3.1.1 3.1.2 3.1.3 4 Statische Verbindungsnetzwerke ......................................................................3 Einordnung statischer Verbindungsnetzwerke..............................................3 Anforderungen an ein Verbindungsnetzwerk ...............................................5 Topologien statischer Verbindungsnetzwerke ..............................................5 3.2 Einbettung statischer Verbindungsnetzwerke ...................................................8 3.3 Dynamische Verbindungsnetzwerke...............................................................10 3.3.1 Einordnung dynamischer Verbindungsnetzwerke ......................................10 3.3.2 Topologien dynamischer Verbindungsnetzwerke.......................................10 Routingtechnik .........................................................................................................13 4.1 4.1.1 4.1.2 4.1.3 4.2 Routingalgorithmen.........................................................................................13 Einordnung von Routingalgorithmen..........................................................13 Deterministische Routingalgorithmen ........................................................14 Adaptive Routingalgorithmen.....................................................................16 Switching-Strategien .......................................................................................17 5 4.2.1 Einordnung von Switching-Strategien ........................................................17 4.2.2 Arten von Switching-Strategien ..................................................................18 Fazit..........................................................................................................................20 6 Literaturverzeichnis .................................................................................................21 II Kapitel 1: Einleitung 1 Einleitung Komplexe Probleme, die hohen Rechenaufwand benötigen, werden heutzutage mit Computern gelöst. So werden beispielsweise Wettervorhersagen, WindkanalSimulationen für Fahrzeuge oder computergraphische Algorithmen in der Filmindustrie durch parallele Programmierung bearbeitet. Sie erlaubt es, eine Aufgabe auf mehrere Verarbeitungseinheiten (Prozessoren) aufzuteilen, um die Rechenkapazität (bzw. Speicherkapazität) zu erhöhen. Dabei sind die einzelnen Verarbeitungseinheiten und Speichereinheiten in einem Verbindungsnetzwerk angeordnet, in dem Bearbeitungsbefehle sowie Daten- und Speicheranforderungen verschickt werden können. Durch die Nutzung von mehreren Verarbeitungseinheiten lässt sich die Simulationsgenauigkeit, die Ausfallsicherheit und die Rechen- und Speicherkapazität um ein vielfaches erhöhen. In dieser Arbeit sollen die Grundlagen von Verbindungsnetzwerken und mögliche Wege der Versendung von Nachrichten geklärt werden. Dazu werden im 2. Kapitel erst einmal grundlegende Begriffe im Bereich von Verbindungsnetzwerken erläutert, um anschließend verschiedene Arten von Netzwerken und ihre Einbettung in Kapitel 3 vorzustellen. In Kapitel 4 schließlich wird die Routingtechnik solcher Verbindungsnetzwerke näher erklärt. 2 Grundbegriffe 2.1 Verbindungsnetzwerk Ein Verbindungsnetzwerk verknüpft Prozessoren (bzw. Verarbeitungseinheiten) und Speichereinheiten auf physikalischer Ebene miteinander. Es wird zur Koordination von Aufgaben (Speicherverwaltung, Kontroll-, Datenfluss) und zur Klassifikation des zugrundeliegenden Parallelrechners benutzt. Die Prozessoren und Speichereinheiten werden als Knoten bezeichnet, die Verbindungen zwischen diesen als Kanten. Die Hauptaufgabe eines Verbindungsnetzwerkes besteht in der Übertragung von Nachrichten von einem gegebenen Knoten zu einem Ziel-Knoten. Der wichtigste Aspekt ist dabei die fehlerfreie und möglichst schnelle Übertragung der Nachricht durch das Netzwerk. Ein Verbindungsnetzwerk lässt sich anhand von zwei Grundaspekten beschreiben: 1 Kapitel 2: Grundbegriffe • Topologie: beschreibt die Form der Verschachtelung der Knoten untereinander. Die verschiedenen Arten von Verbindungsnetzwerk-Topologien werden in den folgenden Kapiteln näher erläutert. • Routingtechnik: berechnet Pfade übers Netzwerk und realisiert die Nachrichtenübertragung zwischen den einzelnen Knoten. 2.2 Einbettung Die Einbettung ist ein Maß für die Flexibilität des Verbindungsnetzwerkes. Man untersucht die Graphen zweier statischer Netzwerke N = (V , E ) mit Knotenmenge V und Kantenmenge E und N’ analog N ' = (V ' , E ' ) auf Gemeinsamkeiten und versucht N’ so auf N abzubilden, dass unterschiedliche Knoten von N’ auf unterschiedliche Knoten von N zu liegen kommen. Eine Einbettung von N’ in N wird beschrieben durch die Funktion σ : V ' → V , für die gilt: • Wenn u ≠ v für u , v ∈ V ' gilt, dann folgt σ (u ) ≠ σ (v) • Wenn (u , v) ∈ E ' gilt, dann folgt (σ (u ), σ (v)) ∈ E . Wenn dies möglich ist, so ist das Verbindungsnetzwerk N mindestens so flexibel wie N’. Somit können (Routing-) Algorithmen, die in N’ Nachbarschaftsbeziehungen ausnutzen, auch auf N angewendet werden. Bei der Abbildung der Verbindungsnetzwerke aufeinander können verschiedene Grade der Streckung („Dilation“) bei der Einbettung auftreten. Ein Grad mit Wert 1 bedeutet, dass die maximale Distanz eines Knotens a zu einem Knoten b aus N im Netzwerk N’ die gleiche ist wie in N. Ist ein Pfad durch die Einbettung in N länger geworden, so erhöht sich der Grad um diese Distanz. Je höher der Grad der Streckung, desto länger die Distanzen, die Kommunikationslast und die Zeitdauer, die für das Routing benötigt wird. 2.3 Routingtechnik Die Routingtechnik beschreibt wie und entlang welchen Pfades eine Nachricht im Verbindungsnetzwerk verschickt wird. Sie setzt sich aus Routingalgorithmen und Switching-Strategien zusammen. 2 Kapitel 3: Arten von Verbindungsnetzwerken • Routingalgorithmen bestimmen den Pfad durch das Netzwerk. Meistens wird dabei ein Pfad gewählt, bei dem die Nachricht so kurz wie möglich im Netz verbleibt und somit die geringsten Kosten verursacht. • Switching-Strategien legen unter anderem fest, ob und wie eine Nachricht in Teile zerlegt wird und regeln die Allokation von Verbindungskanten vom Ausgangs- zum Zielknoten. Die Kombination aus Routingalgorithmen, Switching-Strategien und der Topologie des Verbindungsnetzwerkes beeinflusst wesentlich seine Geschwindigkeit. 3 Arten von Verbindungsnetzwerken 3.1 Statische Verbindungsnetzwerke 3.1.1 Einordnung statischer Verbindungsnetzwerke Bei statischen (direkten) Verbindungsnetzwerken sind die Prozessoren, Speichereinheiten, Schalter (als Knoten bezeichnet) und Verbindungen zwischen diesen (als Kanten bezeichnet) fest miteinander verbunden. Dabei wird die Anordnung der Komponenten als ungerichteter Kommunikationsgraph G = (V , E ) bezeichnet, der die Kommunikation zwischen Knoten (Menge V) in beiden Richtungen über die Verbindungen (Menge E) erlaubt. Um statische Verbindungsnetzwerke untereinander vergleichen und einordnen zu können, werden verschiedene Bewertungskriterien auf Netzwerke angewandt. Durchmesser Der Durchmesser δ (G ) beschreibt die maximale Distanz zwischen zwei beliebigen Knoten des Verbindungsnetzwerkes G. Dieser wird als Maß für die maximal mögliche Dauer des Transports einer Nachricht von einem Start-Knoten u zu einem Ziel-Knoten v verwendet. δ (G ) = max u ,v∈V { min { k | k ist Länge des Pfades ϕ von u nach v } } 3 Kapitel 3: Arten von Verbindungsnetzwerken Grad Der Grad g(G) eines Verbindungsnetzwerks G entspricht dem größten Grad eines Knotens dieses Netzwerks. Der Grad eines Knotens ergibt sich aus der Anzahl adjazenter (ein-/ausgehender) Kanten. g (G ) = max{g (v) | g (v) Grad von v ∈ V } Je größer der Grad eines Knotens (bzw. eines Netzwerkes), desto komplexer wird die Berechnung von Pfaden durch das Netzwerk, da die Anzahl der möglichen Wege zunimmt. Bisektionsbandbreite / Bisektionsbreite Dieses Maß nennt die minimale Anzahl an Kanten, die dem Verbindungsnetzwerk entnommen werden müssen, um dieses in zwei gleichgroße Teilnetzwerke mit bis auf 1 identischer Anzahl an Knoten zu zerlegen. B(G ) = min U 1 − U 2 ≤1 {(u, v) ∈ E | u ∈ U 1 , v ∈ U 2 } mit U 1 ,U 2 Partition von V Dadurch wird das Maß an Belastbarkeit des Netzwerkes bei gleichzeitiger Übertragung von Nachrichten zum Ausdruck gebracht. Je höher die Bisektionsbandbreite, desto belastbarer ist das Verbindungsnetzwerk. Knotenkonnektivität Die Knotenkonnektivität nc (G ) beschreibt den Grad des Zusammenhangs im Verbindungsnetzwerk. Ein hohes Maß an Konnektivität bedeutet hohe Ausfallsicherheit und hohe Zuverlässigkeit im Verbindungsnetzwerk. Anhand der Anzahl der Knoten, die entfernt werden müssen um das Netzwerk in zwei Teilnetzwerke zu zerlegen, lässt sich dieser Grad bestimmen. Er gibt auch die maximale Anzahl direkter Verbindungen eines Knotens des vorliegenden Netzwerks zu anderen Knoten des Netzwerks an. Zur Definition der Knotenkonnektivität bezeichnet man mit GV \ M den Restgraphen, der bei Löschen von Knoten und aller zugehöriger Kanten entsteht. M bezeichnet hierbei die Anzahl gelöschter Knoten. nc(G ) = min { M | es existieren u , v ∈ V \ M, so dass es in GV \ M keinen Pfad M ⊂V von u nach v gibt } 4 Kapitel 3: Arten von Verbindungsnetzwerken Muss nur ein Knoten entfernt werden, um die Weiterleitung zu unterbrechen, ist der Weg über diesen Knoten der einzige Weg zum Ziel-Knoten. 3.1.2 Anforderungen an ein Verbindungsnetzwerk Ein optimales Verbindungsnetzwerk sollte einige spezifische Merkmale besitzen. Als erstes sollte der Durchmesser des Netzwerks gering sein, um geringe Distanzen bei der Nachrichtenübertragung zurücklegen zu müssen. Ein kleiner Grad der Knoten im Netzwerk reduziert zusätzlich noch den Hardware-Rechenaufwand. Durch hohe Bisektionsbandbreite und hohe Konnektivität des Netzwerks wird ein hoher Datendurchsatz bei Gewährleistung der Zuverlässigkeit erreicht. Ein letztes Merkmal ist noch die Möglichkeit des Netzwerks eine größere Anzahl an Prozessoren zu integrieren (Skalierbarkeit). 3.1.3 Topologien statischer Verbindungsnetzwerke Um den Rahmen nicht zu sprengen, werden hier nur einige wichtige Verbindungsnetzwerke vorgestellt. Statische Netzwerke wie das linearen Feld, das Cube-Connected-Cycle-Netzwerk (eine Erweiterung des k-dimensionalen Hyperwürfels), das Pyramiden-Netzwerk und weitere sind in [RR98] nachzulesen. Vollständiger Graph Im vollständigen Graph ist jeder Knoten direkt mit jedem anderen Knoten des Netzwerks verbunden. Dadurch ergibt sich bei n Knoten der Durchmesser δ (G ) = 1 , der Grad g (G ) = n − 1 und die Konnektivität nc (G ) = n − 1 . Abb. 1: vollständiger Graph mit n = 5 Knoten Die Besonderheit des vollständigen Graphen ist die Möglichkeit, jedes beliebige Netzwerk hierin einzubetten. Dieses Netzwerk zu realisieren, ist durch den hohen Knotengrad, nur für wenige Prozessoren möglich. 5 Kapitel 3: Arten von Verbindungsnetzwerken Ring In einem Ring sind die Knoten sequentiell nacheinander mit jeweils einem Vorgänger und einem Nachfolger angeordnet. Der letzte Knoten ist mit dem ersten Knoten durch eine bidirektionale Kante verbunden – somit ist der Kreis geschlossen. Abb. 2: Ring-Netzwerk n Der Durchmesser beträgt in diesem Netzwerk δ (G ) = . Der Grad ist g (G ) = 2 , die 2 Konnektivität nc(G ) = 2 und die Bisektionsbandbreite B(G ) = 2 . Ring-Netzwerke werden bei kleinen Prozessoranzahlen auch heute noch häufig in der Praxis verwendet. d-dimensionales Gitter (Feld) Dieses Netzwerk besteht aus n = n1 ⋅ n2 ⋅ ... ⋅ nd Knoten, die in Form eines d- dimensionalen Gitters angeordnet werden. Dabei bezeichnet nd die Ausdehnung des Gitters in der Dimension d. Der Durchmesser des Gitters beträgt somit δ (G ) = d ⋅ ( d n − 1) . Die Konnektivität ist nc(G ) = d , da beispielweise zur Abtrennung eines Eckknotens vom Netzwerk nur die d Nachbarknoten (bzw. d Verbindungskanten) entfernt werden müssen. Der Grad ist g (G ) = 2d . Abb. 3: 2-dimensionales Gitter k-dimensionaler Würfel (Hyperwürfel) Der Hyperwürfel besteht aus n = 2 k Knoten und wird rekursiv aus den Würfeln tieferer Dimensionen aufgebaut. Um in diesem Verbindungsnetzwerk auch bei höheren Dimensionen die Pfadlängen zwischen einzelnen Knoten komfortabel bestimmen zu können, wird jedem Knoten ein Bitwort der Länge k zugeordnet. 6 Kapitel 3: Arten von Verbindungsnetzwerken Abb. 4: 3-dimensionaler Hyperwürfel Die Benennung der Knoten erfolgt nach dem (gespiegelten) Gray-Code-Verfahren. Bei einem Dimensionssprung verdoppelt sich entsprechend der Formel die Anzahl der Knoten im Verbindungsnetzwerk. Die Bit-Wörter der vorhandenen Knoten bekommen eine 0 vorangestellt, die neu hinzugekommenen Knoten behalten die ursprüngliche Bezeichnung und bekommen eine 1 vorangestellt. So tragen beispielsweise die Knoten eines Verbindungsnetzwerkes in der ersten Dimension die Bitworte 0 und 1. In der zweiten Dimension 00,01,11,10. Das Besondere am Gray-Code-Verfahren ist, dass Knoten, die direkt miteinander verbunden sind, sich in nur einem Bit ihres Wortes unterscheiden; die Anzahl der Bit-Unterschiede damit die Länge des kürzesten Pfades zwischen zwei Knoten im Hyperwürfel ergibt. Dieser Unterschied in den Stellen zweier gleichlanger Bitwörter wird als Hamming-Distanz bezeichnet. Der Durchmesser eines Hyperwürfels beträgt δ (G ) = k , da die Bitunterschiede zweier Bitwörter eines k-dimensionalen Hyperwürfels höchstens in k Stellen auftreten können. Der Grad beträgt g (G ) = k und die Konnektivität nc(G ) = k . Vollständiger binärer Baum Mit diesem Netzwerk wird ein kompletter binärer Baum dargestellt. Die Knotenanzahl beläuft sich auf n = 2 k − 1 Knoten. Der Grad aller Knoten innerhalb des Baumes beträgt g (G ) = 3 , da ein Wurzelelement und zwei Nachfolger bestehen. Durch die Wegnahme einer einzelnen Kante wird das Netzwerk zerteilt, somit ist die Konnektivität nc(G ) = 1 . Der Durchmesser des binären Baums berechnet sich aus δ (G ) = 2 log n +1 . 2 Abb. 5: binärer Baum 7 Kapitel 3: Arten von Verbindungsnetzwerken 3.2 Einbettung statischer Verbindungsnetzwerke In der Literatur werden Einbettungen in 2-dimensionale Gitter wie auch in kdimensionale Würfel vorgestellt. Die wichtigsten Verbindungsnetzwerke die sich zur Einbettung anbieten, stellen das Ring-, das Gitter-Netzwerk, sowie eingeschränkt der vollständige binäre Baum dar. Bei der Einbettung von Gitter und Ring wird eine höhere Belastung des Ziel-Verbindungsnetzwerkes durch den Streckungsgrad von 1 vermieden. 2-dimensionalen Netzwerke wie Ring und Gitter in gleich-dimensionale Netzwerke einzubetten, ist relativ einfach und daher weniger interessant und kann in [Qu94] nachgelesen werden. Daher wird hier die Einbettung dieser Netzwerke in einen kdimensionalen Würfel vorgestellt. Der vollständige binäre Baum kann, unter der Voraussetzung des Streckungsgrades von 1, in ein 2-dimensionales Gitter-Netzwerk nur bis zu einer Tiefe von 3 Ebenen eingebettet werden. Bei der Einbettung in einen k-dimensionalen Würfel muss schon ab einer Tiefe von 2 Ebenen die 4. Dimension herangezogen werden, was dann zu komplexeren Modellen führt. Daher wird die Einbettung des vollständigen binären Baums hier nicht erläutert. Vergleiche hierzu [Qu94]. Einbettung eines Rings in einen k-dimensionalen Würfel Um einen Ring mit n = 2 k Knoten in einen k-dimensionalen Würfel einzubetten, müssen alle Knoten des Rings V ' = {1,..., n} auf die Knotenmenge V = {0,1}k abgebildet werden. Die Kanten (i, j ) ∈ E ' des Rings sollen dabei auf den Kanten E des Würfels liegen. Die Knoten eines Hyperwürfels sind nach dem Gray-Code-Verfahren benannt, wobei benachbarte Knoten sich jeweils nur in einem Bit voneinander unterscheiden; diese also mit einer Kante verbunden sind. Da die Benennung der Knoten in einem Ring einer Zahlenfolge von 1 bis n entspricht, kann die Einbettung eines Rings in einen k-dimensionalen Würfel durch folgende Abbildung ausgedrückt werden: σ : {1,..., n} → {0,1}k mit σ (i ) := RGC k (i) ( RGC k (i ) meint das i-te Element der Gray-Code-Folge RGC k (i ) ). 8 Kapitel 3: Arten von Verbindungsnetzwerken Abb. 6: Einbettung eines Ringes(8 Knoten) in einen 3-dim. Hyperwürfel Einbettung eines 2-dimensionalen Gitters in einen k-dimensionalen Würfel Die Einbettung eines zweidimensionalen Gitters mit n = n1 ⋅ n2 Knoten in einen kdimensionalen Würfel mit n = 2 k Knoten ist eine Verallgemeinerung der Einbettung des Ringes. Hierzu wird die Knoten-Menge n des Gitters in zwei Mengen aufgeteilt: n1 = 2 k1 und n2 = 2 k 2 wobei gilt: Dimension des Würfels k = k1 + k 2 . Für jede dieser Mengen wird eine Gray-Code-Folge RGC k1 = (a1 ,..., a n1 ) und RGC k 2 = (b1 ,..., bn2 ) erzeugt. Aus den beiden Folgen wird eine n1 × n2 Matrix M nach folgendem Schema erstellt: M (i, j ) = {ai b j } mit i = 1,..., n1 und j = 1,..., n2 . a1b1 a b 2 1 M = Μ a n1 b1 a1b2 Λ Μ Μ a n1 b2 Λ a1bn2 Μ Μ a n1 bn2 Alle Elemente der Matrix M sind Bitwörter der Länge k, die sich jeweils vom benachbarten Element nur in einem Bit unterscheiden. Somit sind alle Knotennamen eines k-dimensionalen Würfels in der Matrix enthalten. Die folgende mathematische Abbildung ist die Einbettung eines k-dimensionalen Gitters in einen k-dimensionalen Würfel: σ : {1,..., n1 } × {1,..., n2 } → {0,1}k mit σ ((i, j )) = M (i, j ) Abb. 7: Einbettung eines 2-dimensionalen 2x4-Gitters in einen 3-dimensionalen Hyperwürfel 9 Kapitel 3: Arten von Verbindungsnetzwerken Zur Einbettung eines d-dimensionalen Gitters in einen k-dimensionalen Hyperwürfel ist die Darstellung der n = n1 ⋅ n2 ... ⋅ nd Gitterpunkte als Tupel ( x1 ,..., x d ) in der Matrix erforderlich. Nähere Informationen sind nachzulesen in [RR98]. 3.3 Dynamische Verbindungsnetzwerke 3.3.1 Einordnung dynamischer Verbindungsnetzwerke Im Gegensatz zu statischen Verbindungsnetzwerken besitzen die dynamischen Verbindungsnetzwerke keine festen Punkt-zu-Punkt-Verbindungen. Das Netzwerk ist aus physikalischen Leitungen und dazwischenliegenden Schaltern aufgebaut, die bei Bedarf Knoten indirekt miteinander verbinden können. Daher werden dynamische Verbindungsnetzwerke auch als indirekte Netzwerke bezeichnet. Meistens finden dynamische Netzwerke in Rechnern mit gemeinsamem Speicher Verwendung. Besteht der gemeinsame Speicher aus mehreren Speichermodulen, so ist das Verbindungsnetzwerk für die Weiterleitung von Speicherzugriffen der Prozessoren zum richtigen Speichermodul zuständig. Um eine Unterscheidung und Einordnung der Netzwerke zu erreichen, werden auch bei dynamischen Netzwerken topologische Merkmale herangezogen. Die Leistung und die Hardware-Kosten nehmen mit der Komplexität der Netzwerke zu. Hier werden nur die leistungsstärksten Netzwerke, die Crossbar-Netzwerke und dynamische Netzwerke, die mit Crossbar-Schaltern realisiert werden, behandelt. 3.3.2 Topologien dynamischer Verbindungsnetzwerke Crossbar-Netzwerk Dieses Netzwerk stellt die höchste Verbindungskapazität zwischen Knoten zur Verfügung. Ein n × m - Crossbar-Netzwerk hat n Eingänge (P), m Ausgänge (M) und n ⋅ m Schalter. Die Schalter können die Anfragen der Knoten (Prozessoren) entweder geradeaus, oder nach unter weiterleite. Wichtig ist dabei, dass bei einer Speicheranfrage eines Prozessors in jeder Spalte des Netzwerks maximal ein Schalter auf umleiten gesetzt werden darf, da sonst die Speicheranfrage nicht den kürzesten Weg durch das Netzwerk nimmt. 10 Kapitel 3: Arten von Verbindungsnetzwerken Abb. 8: n x m Crossbar-Netzwerk Die im folgenden vorgestellten Verbindungsnetzwerke werden in der Praxis häufig benutzt und verwenden meist mehrere 2 × 2 -Crossbar-Schalter, die folgende Schalterstellungen realisieren können: Abb. 9: Schalterstellungen eines 2 × 2 -Crossbars-Schalters Omega-Netzwerk Ein n × n -Omega-Netzwerk besteht aus 2 × 2 -Crossbar-Schalter, die in log n Stufen angeordnet sind. Jede Stufe hat n/2 Schalter und jeder Schalter hat vier Schaltmöglichkeiten und jeweils zwei Ein- und Ausgänge. Ein Schalter ist mit einem (log n − 1) -Bitwort α und der Stufenzahl β bezeichnet. Die festen Verbindungen zwischen den einzelnen Stufen folgen im Omega-Netzwerk unabhängig von der Nummer der Stufe einer Regel: Es gibt eine Kante von Schalter (α , i ) in Stufe i zu den beiden Schaltern ( β , i + 1) in Stufe i + 1 , die dadurch definiert sind, dass 1. entweder β durch einen zyklischen Linksshift aus α hervorgeht oder 2. β dadurch entsteht, dass nach einem zyklischen Linksshift von α das letzte Bit invertiert wird. 11 Kapitel 3: Arten von Verbindungsnetzwerken Abb. 10: 9x9-Omega-Netzwerk Ein solches n × n -Omega-Netzwerk besitzt die Dimension k, die sich aus der Stufenanzahl-1 errechnet (in Abb.10 ein 2-dimensionales Omega-Netzwerk). Butterfly(Banyan)-Netzwerk Das k-dimensionale Butterfly-Netzwerk entspricht in der Anzahl der Schalter, Kanten und Stufen der Topologie eines k-dimensionalen Omega-Netzwerks. Nur die Regel der festen Verbindungen unterscheidet sich: Es gibt eine Kante von Schalter (α , i ) in Stufe i zu den beiden Schaltern ( β , i + 1) in Stufe i + 1 , die dadurch definiert sind, dass 1. α und β identisch sind (direkte Kante – straight edge) oder 2. α und β sich nur im (i + 1) -ten Bit von links unterscheiden (Kreuzkante – cross edge) Abb. 11: 9x9-Butterfly-Netzwerk (2-dimensional) Benes-Netzwerk Das k-dimensionale Benes-Netzwerk wird aus zwei k-dimensionalen ButterflyNetzwerken zusammengesetzt. Dabei bilden die ersten k+1 Stufen ein reguläres Butterfly-Netzwerk und die letzten k+1 Stufen ein umgekehrtes Butterfly-Netzwerk. Die letzte Stufe des regulären Netzes fällt auf die erste Stufe des umgedrehten Netzes. 12 Kapitel 4: Routingtechnik Abb. 12: 2-dimensionales Benes-Netzwerk 4 Routingtechnik 4.1 Routingalgorithmen 4.1.1 Einordnung von Routingalgorithmen Um Verbindungen durch das Netzwerk möglichst optimal zu wählen, müssen Routingalgorithmen bei der Bestimmung eines Pfades auf drei Punkte besonders achten: 1. Topologie: Verbindungs-Pfade von Knoten a zu Knoten b werden von dem Aufbau des Verbindungsnetzwerkes vorgegeben und müssen darauf ausgerichtet werden. 2. Contention (=Auseinandersetzung): tritt auf, wenn zwei oder mehrere Nachrichten über die selbe Verbindungskante wandern möchten. Da immer nur eine Nachricht gleichzeitig gesendet werden kann, treten Wartezeiten auf. 3. Congestion (=Stau): tritt auf, sobald viele Nachrichten die selbe Verbindungskante benutzen wollen, und der Pufferspeicher des Knotens in dem die Wartezeiten auftreten zu voll wird. In diesem Fall werden Nachrichten verworfen. Im schlimmsten Fall kann es in einem Verbindungsnetzwerk zu einem Deadlock kommen. Dieser tritt auf, wenn jede Verbindungskante die von einer Nachricht einer Menge genutzt werden soll, von einer Nachricht aus dieser Menge schon belegt ist. Dann kann keine Nachricht dieser Menge weitergeschickt werden und die Kommunikation fällt aus. Deshalb sollten Wartezeiten, Staus und Deadlocks von Routingalgorithmen weitgehend vermieden werden. Um die Deadlockfreiheit eines Routingalgorithmus zu beweisen, werden mögliche Abhängigkeiten zwischen Verbindungskanälen bei beliebiger Nachrichtenübertragung betrachtet. Kann durch den 13 Kapitel 4: Routingtechnik Routingalgorithmus eine Nachricht über Kante k1 und direkt danach über Kante k 2 geschickt werden, besteht eine Abhängigkeit zwischen diesen Kanten, die in den Kanalabhängigkeitsgraph eingetragen wird. In diesem werden Verbindungskanäle als Knoten und Abhängigkeiten als Kanten dargestellt. Enthält dieser Graph keine Zyklen, so ist der Routingalgorithmus deadlockfrei; bestehen Zyklen, können Deadlocks auftreten. Man kann Routingalgorithmen in zwei verschiedene Klassen einteilen. Einerseits der deterministische Ansatz, der einen Pfad im Netzwerk nur abhängig von Quell- und Zielknoten der Nachricht auswählt, und andererseits den adaptiven Ansatz, der mehrere Pfade unter Berücksichtigung von Auslastungsinformationen berechnet (Dadurch können Staus vermieden werden). Jeweils gibt es bei beiden Ansätzen minimale Algorithmen, die unter allen Umständen den kürzesten Weg im Netzwerk ermitteln und nichtminimale Algorithmen, die auch Umwege erlauben, um Staus zu vermeiden. 4.1.2 Deterministische Routingalgorithmen Dimensionsgeordnetes Routing Es gibt zwei interessante Algorithmen die hier vorgestellt werden. Zum einen das einfache XY-Routing in einem 2 dimensionalen Gitter, und zum zweiten das E-Cube Routing für den k-dimensionalen Hyperwürfel. Beim XY-Routing werden die Knoten des zugrundegelegten Gitters mit X-YKoordinaten beschrieben. Ein Nachrichtenpfad von Knoten A mit Position ( x1 , y1 ) zu Knoten B mit Position ( x 2 , y 2 ) läuft erst nach links oder rechts in horizontaler(x-) Richtung, bis die x 2 -Koordinate von B erreicht ist, dann läuft er vertikal hoch oder runter bis zur y 2 -Koordinate von B. Die Länge des Pfades ist dabei x1 − x 2 + y1 − y 2 . Durch Aufzeichnen des Kanalabhängigkeitsgraphen für ein 2-dimensionales Gitter, lässt sich die Deadlockfreiheit erkennen, da keine Zyklen auftreten. Für nähere Informationen und mathematische Beweise für Deadlockfreiheit siehe [RR98]. Das E-Cube-Routing benutzt die k-Bitworte eines Hyperwürfels, um einen Verbindungspfad zu finden. Durch das Invertieren jeder einzelnen Stelle eines kBitwortes können alle direkt verbundenen Knoten ermittelt werden. Soll eine Nachricht von Knoten A mit Bitnamen α = α ... α k −1 zu Knoten B mit Bitnamen 14 Kapitel 4: Routingtechnik β = β 0 ...β k −1 verschickt werden, und ist Ai mit Bitdarstellung δ = δ 0 ...δ k −1 ein Knoten auf dem Pfad nach B, so wir bei jedem Knoten Ai auf dem Weg dies berechnet: • Ai berechnet das k-Bitwort δ ⊕ β (bitweise ausschließendes ODER) • und schickt die Nachricht in Richtung der Dimension d, wobei d die am weitesten rechts liegende Position von δ ⊕ β mit dem Wert 1 ist. Den zugehörigen Knoten Ai +1 auf dem Routingpfad erhält man durch Invertierung des d-ten Bits in δ . Ist δ ⊕ β = 0 (also gleich) ist der Zielknoten erreicht. Auch für E-Cube-Routing lässt sich Deadlockfreiheit beweisen. Quellenbasiertes Routing Hierbei wählt der Sender den kompletten Pfad selbst aus, und hängt die nacheinander auszuwählenden Ausgabekanäle a 0 ..a n −1 als Header der Nachricht an. Auf dem Pfad wird bei jedem Knoten der Header überprüft und der gerade passierte Ausgabekanal aus dem Header entfernt. Tabellenorientiertes Routing Beim tabellenorientierten Routing enthält jeder Knoten des Netzwerks eine Routingtabelle. Darin sind Informationen des zu wählende Knoten bzw. Ausgabekanal für eine gegebene Zieladresse, an den die Nachricht verschickt werden soll, gespeichert. Turn-Modell In diesem Modell wird versucht, Deadlocks durch die geschickte Wahl von Richtungswechseln beim versenden von Nachrichten über das Verbindungsnetzwerk zu vermeiden. Deadlocks können vermieden werden, indem bestimmte Richtungswechsel nicht erlaub sind. So ist beim XY-Routing nur ein einziger Richtungwechsel erlaubt [s.o.]. West-First Routing ist ein Turn-Modell für zweidimensionale Gitter. Von den möglichen 8 Richtungswechseln ist der Richtungswechsel nach Westen nicht erlaubt. Abb. 13: mögliche Richtungswechsel beim West-First Routing 15 Kapitel 4: Routingtechnik Das Versenden erfolgt daher immer zuerst in westlicher Richtung (wenn nötig) bis mindestens die benötigte x-Koordinate erreicht ist. Danach je nach Möglichkeit nach Norden, Osten oder Süden. Dieser Algorithmus ist deadlockfrei und bei nichtminimalen Routingpfaden adaptiv. Bei Verwendung minimaler Pfade ist er nur bei Zielknoten die östlich (rechts) vom Quellknoten liegen adaptiv. Das Turn-Modell für den kdimensionalen Hyperwürfel nennt sich P-Cube-Routing. Vgl. [RR98]. 4.1.3 Adaptive Routingalgorithmen Virtuelle Kanäle Das Konzept der virtuellen Kanälen verfolgt die Bereitstellung mehrere Kanäle zwischen benachbarten Knoten. Dabei wird eine vorhandene physikalische Verbindung in mehrere gleichberechtigte virtuelle Kanäle unterteilt. Für jeden Kanal existieren Pufferspeicher, die eingehende Nachrichten zwischenspeichern bis der Kanal genutzt werden darf. Als Beispiel sei der minimal adaptive Routingalgorithmus genannt, der virtuelle Kanäle benutzt und das gegeben Netzwerk in zwei logische Teilnetzwerke +X und –X aufteilt. Der Unterschied in den Teilnetzwerken besteht in den vertikalen Verbindungen. Das Teilnetzwerk +X besitzt nur positive vertikale Verbindungen (nach rechst führende) und –X besitzt nur negative vertikale Verbindungen (nach links führende). Durch diese Aufteilung kann je nach Auslastung des Netzwerks und Richtung des Pfades eines der beiden Teilnetze verwendet werden. Dieser Algorithmus ist für ein 2-dimensionales Gitter deadlockfrei. Routing im Omega-Netzwerk In einem Omega-Netzwerk werden Nachrichten anhand eines verteilten Kontrollschemas übertragen. Jeder Schalter kann hierzu ohne Koordination mit anderen Schaltern eine Nachricht weiterleiten. Die n Ein- und Ausgangskanäle haben Bitnamen der Länge log n wobei der Eingangskanal den Bitnamen α und der Ausgangskanal den Namen β trägt. Um eine Nachricht weiterzuleiten, muss der Schalter auf Stufe k , k = 0,..., log n − 1 , das k-te Bit β k (von links) des Ausgangskanals β untersuchen und folgende Schritte unternehmen: • Ist das k-te Bit β k = 0 , so wird die Nachricht auf den oberen Ausgang des Schalters gelegt. 16 Kapitel 4: Routingtechnik Ist das k-te Bit β k = 1 , so wird die Nachricht auf den unteren Ausgang des • Schalters gelegt. Maximal können in diesem Netzwerk n Nachrichten parallel geschickt werden, wobei nur n n 2 Nachrichten gleichzeitig ohne Blockierung des Netzwerkes gesendet werden können. Blockierung des Netzwerks bedeutet, dass nur eine mögliche Verbindung für eine Nachricht besteht, diese aber belegt ist. Solche blockierende Netzwerke sind auch das Butterfly-, das Banyan und das Baseline-Netzwerk. Ein nicht blockierendes Netzwerk ist beispielsweise das Benes-Netzwerk, dort können n Nachrichten parallel verschickt werden. 4.2 Switching-Strategien 4.2.1 Einordnung von Switching-Strategien Die Übertragung von Nachrichten zwischen zwei benachbarten Prozessoren wird durch die Software der Prozessoren (einem Protokoll folgend : ähnlich TCP/IP) übernommen. Die dazu erforderlichen Schritte sind in [RR98] nachzulesen und dauern eine gewisse Zeitspanne. Diese Zeitspanne, die in den Prozessoren zur Bearbeitung benötigt wird zuzüglich der Zeitspanne, die die Nachricht unterwegs ist, nennt man Latenzzeit. Zur Beschreibung der Latenz und damit der Effizienz der Switching-Strategie, werden folgende Merkmale verwendet: • Bandbreite: ist die maximale Frequenz, mit der Daten über eine Verbindungsleitung geschickt werden können (Bytes/Sekunde). • Bytetransferzeit: beschreibt die Zeit, die nötig ist um ein Byte über die Verbindungsleitung zu schicken: Bytetransferzeit = • 1 Bandbreite Übetragunszeit: ist die benötigte Zeit, um eine Nachricht über eine Verbindungsleitung zu schicken: Übertragungszeit = • Nachrichtengröße Bandbreite Signalverzögerungszeit: berechnet die Zeitverzögerung vom Abschicken bis zum Ankommen des ersten Bits beim Empfänger. 17 Kapitel 4: Routingtechnik • Transportlatenz: bezeichnet die Verweildauer der Nachricht im Verbindungsnetzwerk. Transportlatenz = Signalverzögerungszeit + Übertragunszeit • Senderoverhead oder Startupzeit: ist die benötigte Zeit, um die Nachricht auf das Senden vorzubereiten. • Empfängeroverhead: ist die benötigte Zeit, die der Empfänger benötigt, um die Nachricht zu empfangen (Softwareschritte). • Durchsatz: bezeichnet die Netzwerkbandbreite bei einer bestimmten Komponenten zusammen: Anwendung. Die gesamte Latenz setzt sich somit aus vier Nachrichtengröße + Empfängeroverhead Bandbreite Unter Voraussetzung eines konstanten Overheads und einer Punkt-zu-PunktLatenz = Senderoverhead + Signalverzögerung + Verbindung zwischen zwei Prozessoren, lässt sich folgende Laufzeitformel für die Latenz herleiten: T ( m) = t S + t B ⋅ m (mit t S = Startupzeit , t B = Bytetransferzeit und m = Nachrichtengröße ). Wird eine Nachricht über mehrere Verbindungsleitungen verschickt, so kann dies durch die folgenden Switching-Strategien erfolgen. 4.2.2 Arten von Switching-Strategien Als Grundformen des Switching-Strategien sind das Circuit-Switching und das PaketSwitching anzusehen: Circuit-Switching Beim Circuit-Switching wird der gesamte Pfad vom Quell- bis zum Zielknoten der Nachrichtenübertragung zur Verfügung gestellt, und erst wieder freigegeben, wenn die komplette Nachricht beim Zielknoten angekommen ist. Intern kann die Nachricht zerteilt werden, wobei die Teilstücke (phits:physical units) die Datenmenge bezeichnen, die pro Takt über eine Verbindungsleitung geschickt wird. Die Größe der phits hängt von der gleichzeitig übertragbaren Anzahl von Bits über eine Leitung des Netzwerkes ab; meist zwischen 1 und 64 Bits. Der Übertragungspfad wird durch das versenden 18 Kapitel 4: Routingtechnik einer kurzen Nachricht (probe) aufgebaut, danach folgen alle phits der Nachricht. Nach dem letzten phits der Nachricht wird der Pfad, gegebenenfalls mit Senden einer Empfangsbestätigung an den Quellknoten, sofort freigegeben. Die Kosten der Kontrollnachricht zum Aufbau des Pfades der Länge l beträgt: t C ⋅ l , wobei t C = t B ⋅ mC die Kosten zum Versenden der Kontrollnachricht je Verbindung bezeichnet, und sich aus der Größe des Kontrollpakets mC und der Bytetransferzeit t B zusammensetzt. Die Kosten zur Versendung der eigentlichen Nachricht der Größe m betragen somit: TCS (m, l ) = t S + t C ⋅ l + t B ⋅ m Paket-Switching Beim Paket-Switching wird die Nachricht ebenfalls in Teilstücke zerlegt, aber die einzelnen Pakete werden unabhängig voneinander versendet (Man beachte, dass auch die Pakete wieder in phits unterteilt sind!). Bei Verwendung von adaptiven Routingalgorithmen werden somit unterschiedliche Pfade für das Versenden benutzt. Jedes Paket besteht hierbei aus drei Teilen. Dem Header, der Routing- und Kontrollinformationen beinhaltet, dem reinen Datenteil, und dem Endstück, das Fehlerkontrollcodes beinhaltet. Eine Variante des Paket-Switching ist das Store-and-Forward-Routing bei dem jeder Zwischenempfänger (Knoten) auf dem Pfad das gesamte Paket speichert bevor es weitergeschickt wird. Die Freigabe de Kante erfolgt, wenn das Paket vollständig im Knoten zwischengespeichert ist. Diese Zwischenspeicherung erfordert hohe Speicherkapazitäten im Puffer der einzelnen Knoten, verringert aber die Gefahr von Deadlocks durch die schnelle Freigabe von Verbindungskanten. Die Kosten zum Versenden eines Paketes setzten sich aus der konstanten Zeit t h im Knoten (zum Kontrollieren des Headers und Wählen des nächsten Ausgabekanals) und der Zeit der Versendung des Pakets der Größe m zusammen: t h + t B ⋅ m . Die Gesamtkosten des Transfer eines Paketes auf einem Pfad der Länge l betragen somit: TSF (m, l ) = t S + l (t h + t B ⋅ m) Wenn hier alle Pakete einer Nachricht den gleichen Übertragungspfad verwenden können, so kann mit Pipelining die Kommunikationszeit verringert werden. Pipelining 19 Kapitel 5: Fazit ermöglicht die überlappende Nutzung von Verbindungen im Netzwerk, bei der Versendung von Paketen. Diese Technik wird beispielsweise bei Paketübertragung im Internet benutzt. Cut-Trough Routing : eine Variante von Paket Switching Diese Switching-Strategie erweitert das Paket-Switching noch weiter. Die Nachricht wird, wie auch beim Store-And-Forward-Switching in Pakete eingeteilt, und dessen phits über verschiedene Pfade pipelinartig an den Zielknoten befördert. Hierbei betrachtet der erste auf dem Pfad liegende Schalter die ankommenden phits und trifft anhand der enthaltenen Routinginformationen die Entscheidung über die Weiterleitung. Somit wird der Verbindungspfad vom Header eines Paketes aufgebaut. Alle phits eines Paketes werden auf dem selben Pfad hinterhergeschickt. Die Verbindungskante wird freigegeben, sobald alle phits eines Paketes übertragen worden sind. Die Kosten für die Übertragung des Headers sind: t H = t B ⋅ m H (mit m H = Größe des Heades) Die Gesamtkosten betragen somit bei Pfadlänge l : TCT (m, l ) = t S + l ⋅ t H + t B ⋅ (m − m H ) Wenn außer dieser Nachricht noch andere Nachrichten im Verbindungsnetzwerk übertragen werden, so wird beim virtuellen Cut-Through-Routing die Menge an phits eines Paketes im letzten erreichten Knoten zwischengepuffert, bis die nächste Verbindung wieder frei ist. Im schlimmsten Fall degeneriert diese Switching-Strategie zur Store-and-Foreward-Strategie. (Bei partiellem Cut-Through können phits auch weitergeleitet werden, wenn nicht alle des Paketes schon zwischengespeichert sind!) 5 Fazit Die hier vorgestellten Verbindungsnetzwerke und Arten der Nachrichtenübertragung sollten einen kleinen Überblick über die Struktur von Parallelrechnern geben. Dafür wurden einige der wichtigsten Netzwerke die heutzutage Verwendung finden, erläutert. Natürlich gibt es viele weitere Verbindungsnetzwerke und Routingstrategien, die hier nicht erwähnt werden konnten, diese sind aber mit dem hier vermittelten Wissen leichter zu verstehen. 20 6 Literaturverzeichnis [RR98] Rauber, T. und G. Rünger: Parallele und verteilte Programierung. Springer 1998. [Qu94] Quinn, M.J.: Parallel Computing Theory and Practise. McGraw-Hill 1994.