1 Konventionelle Kopplungen

1 Konventionelle Kopplungen 1.1 Einleitung In der Technik werden Verbindungsnetzwerke im wesentlichen auf vier verschiedenen Gebieten eingesetzt: Bei...
14 downloads 1 Views 2MB Size
1 Konventionelle Kopplungen 1.1 Einleitung In der Technik werden Verbindungsnetzwerke im wesentlichen auf vier verschiedenen Gebieten eingesetzt: Bei Parallelrechnern [Giloi93], räumlich verteilten Rechensystemen bzw. Client Server-Architekturen [Langen94], Rechnernetzen wie das Internet [Mezza94] und in der Telekommunikation [Schwartz87]. In der Parallelverarbeitung sind Verbindungsnetzwerke ein wichtiger Bestandteil der Rechnerarchitektur, die vom Aufbau der Rechenknoten und deren Verschaltung untereinander festgelegt wird [Regen87]. Die Rechenknoten bzw. Rechner und deren Kopplung beeinflussen zusammen mit der Programmierung die Leistungsfähigkeit des Gesamtsystems. Programme werden mit Hilfe von Kommunikationsmodellen wie (verteiltem) gemeinsamem Speicher bzw. Botschaftenaustausch erstellt, die die Interprozessorkommunikation aus der Sicht des Benutzers regeln. Die Kommunikation wird implementierungstechnisch über Verbindungsnetzwerke realisiert, um die Kopplung von Rechenknoten untereinander, mit Speichermoduln und mit der Peripherie zu bewerkstelligen. Verteilte Systeme bestehen aus Arbeitsplatzrechnern oder PCs, die über ein lokales Netz (LAN) wie Ethernet oder ATM [Mezza94] miteinander verbunden sind. Die Netze bestehen aus einzelnen Strängen, die ketten- oder sternartig über Switche gekoppelt sind. Die parallele Programmierung erfolgt mit Hilfe von Kommunikationsbibliotheken wie PVM oder MPI in Standardprogrammiersprachen. Aufgrund der großen Verbreitung dieser Systeme werden die sie verbindenden lokalen Netze, ihr Aufbau und ihre Betriebsarten immer wichtiger. Die Switche, die die einzelnen Subnetze zusammenschalten, verwenden intern Verbindungsnetzwerke, wie sie bei Parallelrechnern eingesetzt werden. Weitreichende Rechnernetze (MANs, WANs) wie das Internet basieren auf einer Vielzahl von Gateway- und Name Server-Rechnern, die über Switche und Subnetze gekoppelt sind. Sie werden als Basis für die Realisierung neuer Dienste wie Multimedia und Video-on-Demand angesehen. Notwendige Voraussetzung für diese Dienste sind Kommunikationspfade mit hoher Bandbreite und garantierter Latenzzeit; Eigenschaften, wie sie bei Verbindungsnetzwerken für räumlich konzentrierte Systeme bereits realisiert wurden, so daß auch hier Parallelrechnernetze Einfluß ausüben. In der Telekommunikation spielen Koppelnetze für die Vermittlung von Telefongesprächen und sonstigen analogen oder digitalen Daten eine wichtige Rolle. Sie sind zusammen mit Übertragungseinrichtungen für den Transport und die gezielte Vermittlung von Information notwendig. Die Kopplung von Schaltern oder Routern, aus denen Netze im wesentlichen bestehen, mit Übertragungseinrichtungen wie Glasfasern erlaubt, große Entfernungen zwischen beliebig wählbaren Teilnehmern überbrücken zu können. 1

Verbindungsnetzwerke, die Informationen wie Sprache, Bild oder Daten übermitteln, können auf zwei alternativen physikalischen Prinzipien basieren. Entweder arbeiten sie nach der Methode der räumlichen Verteilung oder nach dem Prinzip der zeitlichen Staffelung (Multiplex). Bei räumlicher Verteilung spricht man von Verbindungsnetzwerken im eigentlichen Sinne, bei zeitlicher Staffelung von Bussen. Die entsprechenden Bezeichnungen aus der Telekommunikation lauten Raumlagen- bzw. Zeitlagenkoppelvielfach (space-division1 switching bzw. time-division-switching ). Bei der Zeitmultiplexmethode wird dergestalt Information übertragen, daß ein gemeinsames Medium wie Bus, Kabel oder Glasfaser zeitlich nacheinander Daten verschiedenster Herkunft, Dichte und Bestimmung übermittelt. Beim Raumlagenvielfach wird für jedes Sender/Empfängerpaar ein physikalischer Pfad zur Informationsübermittlung etabliert. Die räumliche Verteilung ist ein paralleles Verfahren, bei dem verschiedene Informationen gleichzeitig übertragen werden, während das Zeitmultiplexen rein sequentiell arbeitet. In diesem Buch liegt der Schwerpunkt auf den Verbindungsnetzwerken, wie sie für Parallelrechner eingesetzt werden. Verbindungsnetzwerke für Parallelrechner Historisch gesehen leiten sich Verbindungsnetzwerke für Parallelrechner von den Koppelnetzen der Telefonvermittlungstechnik ab. Die Arbeiten, die die Grundlagen für Parallelrechnernetze bilden, wurden von Ingenieuren und Mathematikern geleistet, die für Forschungseinrichtungen von Telefongesellschaften, wie z.B. den amerikanischen Bell Labs (AT&T) tätig waren. C. Clos und V. Benes sind die bekanntesten Vertreter dieser Generation. Der Vermittlungstechnik entstammt nicht nur der Kreuzschienenverteiler, der vor mehr als 50 Jahren für handvermittelte Telefongespräche verwendet wurde, sondern auch das Clos- und das Benes-Netz aus dem Jahre 1953 bzw. 1965, die heute noch bei Parallelrechnern Verwendung finden. Umgekehrt beeinflussen die Parallelrechnernetze seit einiger Zeit die Telefon- und Datenvermittlung, insbesondere hinsichtlich der Topologie und des Routings. Ein ATM-Switch beispielsweise kann auf einer Butterfly- oder Baseline-Topologie [Regensp87] beruhen, die als mehrstufige Verbindungsstruktur für Multiprozessoren erfunden wurde. In Zukunft werden Verbindungsnetzwerke durch das Zusammenwachsen von Rechnertechnik und Übertragungstechnik in ihrer Bedeutung weiter zunehmen, da Kommunikation und intelligente Verarbeitung von Daten Schlüsseltechnologien für das 21. Jahrhundert sind. Die Vereinigung der Verarbeitung von Daten mit der Übertragung von Information zu einem neuen funktionalen Ganzen ist ein expansiver Markt der Zukunft. Internet, Multimedia und Datenautobahnen kennzeichnen den Weg dorthin. 1.

siehe dazu z.B. M. Schwartz, "Telecommunication Networks, Protocols, Modelling and Analysis", Addison-Wesley, 1988.

2

Parallele Rechentechnik Die parallele Rechentechnik ist ein Forschungsgebiet, mit dem sich Ingenieure, Mathematiker und Informatiker seit Jahrzehnten auseinandersetzen. Bislang sind deren Entwicklungen in der Praxis hauptsächlich auf Anwendungen konzentriert, bei denen hohe Rechenleistung oder hohe Zuverlässigkeit gefordert ist oder bei denen viele Ein- und Ausgabesignale gleichzeitig zu verarbeiten sind, wie es z.B. bei Steuerungen und Regelungen der Fall ist. Seit langem ist bekannt, daß sequentielle Rechner aufgrund der endlichen Ausbreitungsgeschwindigkeit elektrischer Signale, die in einem Kabel bei ca. 20 cm/ns liegt, an ihre physikalischen Grenzen stoßen werden. Rechner müssen deshalb mit zunehmender Rechenleistung immer kleiner gebaut werden, was mit der Grund dafür ist, daß konventionelle Großrechner den Mikroprozessorbasierten Systemen unterlegen sind und (fast) vom Markt verschwinden. Die Architekturen von Parallelrechnern [Bode80, Bode83, Hwang85, Hwang93, Erhard95, Waldsch95] und deren Programmierung [Bemmerl92] wurden in den letzten 20 Jahren erheblich weiterentwickelt. Neben wissenschaftlichen und kommerziellen Interessen waren dafür auch militärische Gründe maßgebend. Beispielsweise haben das U.S. Verteidigungs- und Energieministerium die parallele Rechentechnik aus strategischen Gründen massiv unterstützt. Nach dem Ende des kalten Krieges war diese Geldquelle jedoch erloschen und namhafte Parallelrechnerhersteller, die den Umstieg auf zivile Kunden nicht rechtzeitig geschafft haben, mußten den großen, auf dem Markt etablierten Unternehmen weichen, die das Geschäftsfeld der Parallelrechner zur Abrundung ihrer Produktpalette betreiben, ihr Geld aber mit Massenprodukten wie PCs, Arbeitsplatzrechnern und Servern verdienen. Bei Mikroprozessoren, den Herzstücken der oben genannten Produkte, ist der interne Aufbau mittlerweile so gestaltet, daß möglichst viele Vorgänge parallel ablaufen (Superpipelining und superskalare RISC-Architekturen). Dadurch werden die von der CMOS-Technologie vorgegebenen Grenzen der Taktrate durch architektonische Maßnahmen überwunden, und es ist möglich, mehr als einen Befehl pro Zeiteinheit auszuführen [Bode90, Flik94, Ungerer95]. Darüber hinaus sind Prozessor-Chips wie beispielsweise der Intel PentiumPro so konstruiert, daß die zur Kopplung von Prozessoren notwendigen Einrichtungen auf dem Chip bereits integriert sind (Symmetric Multiprocessing [Hwang93]). Die parallele Rechentechnik wird deshalb in Zukunft auch bei Massenprodukten eine immer größere Rolle spielen und damit auch die Verbindungsnetzwerke für Parallelrechner.

1.2 Einführung in Verbindungsnetzwerke Seit mehr als 30 Jahren wird das Problem untersucht, wie Prozessoren am besten sowohl untereinander als auch mit Speichern und der Peripherie gekoppelt werden können. Ein frühes Zeugnis solcher Projekte ist z.B. in [Squire63] zu finden, das aus dem Jahre 1963 datiert. Zahlreiche Fortschritte wurden seitdem 3

in den letzten 3 Dekaden bei der Lösung des Kopplungsproblems erzielt. Allerdings hat sich die Verschaltung von Prozessoren als äußerst vielschichtige und nicht in jeder Hinsicht optimal lösbare Angelegenheit erwiesen. Wie bei allen technischen Systemen gibt es auch bei den Verbindungsnetzwerken eine Kluft zwischen dem Kostenfaktor einerseits und den gewünschten Leistungsdaten andererseits. Insbesondere ist es schwierig, gleichzeitig hohe Bandbreite, geringe Latenzzeit, gute Skalierbarkeit und hohe Zuverlässigkeit in einer preisgünstigen Technologie zu erzielen. Darüber hinaus lassen sich selbst für stark einschränkende Randbedingungen, wie z.B. vorgegebenes Kommunikationsverhalten der parallelen Anwendung, feststehendes Programmiermodell, konstante Zahl von Prozessoren, usw. verschiedene, gleich gute Lösungen angeben. Das läßt den Schluß zu, daß es "das Verbindungsnetzwerk" genausowenig gibt, wie auch "das Automobil" nicht existiert, das zugleich schnell und sparsam, sicher und leicht, kompakt und komfortabel ist. Das Ziel der Kopplung mehrerer Prozessoren, Rechenknoten oder ganzer Rechner ist es, die Leistungsfähigkeit eines einzelnen Rechenknotens dadurch zu erhöhen, daß alle Einheiten des Systems im Sinne einer Aufgabenteilung kooperativ zusammenarbeiten. Die Schwierigkeit, die sich dabei stellt, resultiert aus der wechselseitigen Abhängigkeit der funktionalen Einheiten untereinander, die bewirkt, daß das gekoppelte System viel mehr ist als die Summe seiner Teile. Daß gekoppelte System sehr komplex werden können, selbst wenn sie aus einfachen, deterministischen Komponenten aufgebaut sind, ist nicht ungewöhnlich: Ein einzelnes schwingendes Pendel beispielsweise läßt sich leicht berechnen; zwei Pendel jedoch, von denen eines an der Schwungmasse des anderen aufgehängt ist, sind relativ kompliziert. Die Interprozessorkommunikation, die Voraussetzung für das Zusammenspiel der funktionalen Einheiten von Prozessoren/Rechner, Speicher und Peripherie ist, wird implementierungstechnisch mit Hilfe von Verbindungsnetzwerken realisiert, die sich auf viele verschiedene Arten realisieren lassen. Allen ist gemeinsam, daß sie Daten zwischen Erzeugern und Verbrauchern von Information transportieren.

1.2.1 Definition eines Netzwerks Sowohl bei Parallelrechnern als auch bei Rechnernetzen und in der Telekommunikation hat man die grundlegende Aufgabe, daß Information von einem Ort A zu einem Ort B übertragen werden soll, wobei die Entfernung zwischen A und B zwischen einigen Metern (Parallelrechnern) und einigen Tausend Kilometern (Telekommunikation) schwanken kann. Dabei ergibt sich zusätzlich das Problem, daß der Informationstransport zwischen wechselnden Orten Ai, Bj (i, j = 1, 2, ... ) erfolgen soll, also zeitabhängige Richtungen aufweist. Dadurch beinhaltet die Aufgabenstellung der Informationsübertragung neben ihrer räumlichen noch eine zeitliche Komponente.

4

Zur Lösung des zeitabhängigen Verbindungsproblems existieren verschiedene Möglichkeiten. In jedem Fall wird der Datentransport von einer funktionalen Einheit, dem Verbindungsnetzwerk, ausgeführt. Bei Parallelrechnern sind Verbindungsnetzwerke, wie z.B. ein Bus oder ein Kreuzschienenverteiler, dafür zuständig, Daten innerhalb eines integrierten Schaltkreises, einer gedruckten Platine, einer Baugruppe oder zwischen Baugruppen zu übertragen. In der Telekommunikation und bei Rechnernetzen müssen große Entfernungen überbrückt werden, wozu geeignete Übertragungseinrichtungen wie Kupfer- oder Glasfaserkabel und Verstärker notwendig sind. Diese können im Falle eines lokalen Netzes ein Ethernet darstellen oder bei Weitverkehrsnetzen als ATM- oder ISDN2-Leitungen ausgelegt sein. Digitale Vermittlungseinrichtungen wie z.B. EWS/D3 oder Gateways in Rechnernetzen sorgen für die Verbindung aller Teilnehmer zu einem weltumspannenden System, wie es das Telefonsystem oder das Internet darstellen. Aus der Zusammenfassung von einzelnen Informationstransporten zu einer mathematischen Funktion erhält man eine formale Definition von Verbindungsnetzwerken V, die sich mit Hilfe der Abbildungsfunktion ft von Orten Ai auf Bj (i, j = 1, 2, ... ) spezifizieren lassen: Def. 1.1:

V: {Ai }

ft

⎯⎯⎯⎯⎯ ⎯→

{B j }, i =1,2,...,n, j = 1,2,...,m, t = 1,2..., p

Der Parameter t der Abbildung ft kennzeichnet diejenige Funktion f, die zur Zeit t die Menge aller Orte Ai auf Bj abbildet. Die Zusammenfassung aller Abbildungen definiert das Verbindungsnetzwerk V. Die Orte Ai, Bj heißen die Ein- bzw. Ausgänge des Netzes, deren Zahl durch m bzw. n spezifiziert wird; p bezeichnet die Gesamtzahl aller Abbildungen von Eingängen auf Ausgängen, die vom Netz V realisiert werden können. Für den Spezialfall m = n wird ft zu einer Permutationsfunktion, die für p = n! alle prinzipiell möglichen Permutationen von Punkt-zu-Punkt-Verbindungen realisieren kann. Eine graphische Repräsentation von V zeigt Bild 1.1.

A1 A2 A3 ... An

Verbindungsnetzwerk V

B1 B2 B3 ... Bm

Bild 1.1: Graphische Repräsentation eines allgemeinen Verbindungsnetzwerkes.

2. 3.

Integrated Services in Digital Nets Elektronisches Wählsystem/Digital

5

Die formale Behandlung von Verbindungsnetzwerken bietet den Vorteil, daß wesentliche Eigenschaften wie Topologie, Übertragungskapazität, Latenz und Fehlertoleranz präzise quantifiziert werden können, was einen Vergleich verschiedener Netztypen erlaubt. Weiterhin kann man durch Modellierung und/oder Simulation Voraussagen über Eigenschaften zukünftiger Netze machen, ohne sie vorher aufzubauen. Die Prognose der Kenndaten von Netzen erfordert ebenfalls die Anwendung mathematischer Hilfsmittel.

1.2.2 Beispiel eines Netzwerks Ein Beispiel eines einfachen Verbindungsnetzwerks ist ein parallel lad- und lesbares Schieberegister, das man für den Fall von m = n in Bild 1.2 für den Informationstransport von A nach B einsetzen kann, sofern A und B nur wenige Millimeter auseinander liegen (Bild 1.2). A1

D Q

B1

A2

D Q

B2

...

...

...

An

D Q

Bn

Bild 1.2: Ein Schieberegister als einfaches Verbindungsnetzwerk.

Die Funktion des Schieberegisters ist dabei die folgende: Ist das Schieberegister geladen, kann es mit jedem von außen angelegten Takt die Information entlang der Kette weiterreichen und z.B. nach unten weiterschieben. Liegt das zu erreichende Ziel unterhalb des Startpunkts, wird die Differenz k zwischen Ziel und Herkunft: k = B j – A i ≥ k ( 0 ) . Mit jedem Takt wird die an einem bestimmten Eingang anliegende Informationseinheit, z.B. ein Bit oder ein Byte, einen Schritt näher zum Ausgang hingeschoben. Dazu sind k Schritte nötig. Für Bj < Ai muß die Schieberichtung umgekehrt werden. Das Funktionsprinzip des Schieberegisters ist dem eines Aufzugs in einem Gebäude vergleichbar, der nur nach unten bzw. oben fahren kann. Um den Transport in Gegenrichtung bewerkstelligen zu können, kann man die Schieberegisterkette zu einem Kreis schließen. Die Differenz Bj - Ai = k (k < 0) wird dann im Sinne einer Modulo-N-Arithmetik gemäß k mod N = N + k gebildet. Dies entspricht im Aufzugmodell einem Paternoster.

1.2.3 Grundlegende Eigenschaften von Netzwerken Der Schieberegisterring weist trotz seiner Einfachheit vier typische Eigenschaften auf, die allen Verbindungsnetzwerken gemeinsam sind, sich aber 6

leichter an diesem überschaubaren Beispiel beobachten und verifizieren lassen. Die exemplarischen Eigenschaften sind: • In diesem "Netz" wird eine Informationseinheit, wie z.B. ein Bit oder ein Datenpaket, in mehreren Schritten, d.h. iterativ, von einem Sender zu einem Empfänger transportiert. Die Art des Informationstransports und die Wegeauswahl wird als Routing bezeichnet. • Es lassen sich häufig nicht alle an den Sendern (Eingängen Ai) anliegenden Informationseinheiten gleichzeitig zu ihren Empfängern (Ausgängen Bj) transportieren, sondern es können Wartezeiten auftreten. Man spricht in einem solchen Fall von transienter Blockierung. • In diesem "Netz" existiert mindestens ein Weg von Ai zu Bj. Im Schieberegisterring ist es möglich, einen eventuell längeren Weg in entgegengesetzter Ringrichtung zu wählen. Die Entscheidung über den "richtigen Weg" wird als adaptive Wegewahl bezeichnet. • Netzwerke lassen sich formal als Graph und als Relation darstellen. Aus diesem Grunde spielt bei Verbindungsnetzwerken die Graphen- und Gruppentheorie eine gewisse Rolle. Diese vier Eigenschaften haben, ausgehend vom Beispiel des Schieberegisterrings, allgemeine Bedeutung und bedürfen weiterer Erläuterung: • Routing: Die iterative Annäherung einer Informationseinheit vom Sender zum Empfänger unterliegt gewissen Regeln und ist i.a. von der Netztopologie vorgegeben. Für die Geschwindigkeit des Routings während des Informationstransports ist neben der Routingmethode die Zahl der Schritte zwischen Sender und Empfänger maßgebend. • Blockierung: Im Schieberegisterfall gibt es stets Paare (Ai, Ak) mit entgegengesetzten Transportwünschen (beispielsweise nach oben und nach unten), die nicht gleichzeitig erfüllt werden können. Bei nicht-blockierungsfreien Netzen wird eine auftretende Konkurrenzsituation zweier Informationseinheiten (Datenpakete) durch kurzzeitiges Sperren eines oder mehrerer Netzeingänge oder Netzzwischenstufen gelöst, d.h. es wird eine Steuerung des Informationsflusses (Flow Control) vorgenommen. Die gestoppte Informationseinheit verbringt eine gewisse Zeit wartend, bis sie an die Reihe zum Weitertransport kommt. Das bedeutet, daß es bei den Verbindungsnetzwerken Warteschlangen geben muß und damit auch Verfahren, diese zu bedienen (Scheduling). • Adaptive Wegewahl: Das Vorhandensein alternativer Pfade durch das Netz erlaubt, eine adaptive Wegewahl vorzunehmen. Die Redundanz im Netz kann entweder zur Fehlertoleranz genutzt werden oder einen höheren Netzdurchsatz ermöglichen, sofern ein geeignetes Routing-Schema verwendet wird, das den Netzstatus bzw. die Verkehrssituation an den Knoten berücksichtigt. • Graphentheorie: Die Graphentheorie hat sich zusammen mit der Gruppentheorie als ein nützliches Instrument zur Beschreibung von Netzen erwiesen. 7

Der Graph des Schieberegisters ist in Bild 1.3 dargestellt. (Da sowohl Graphen- als auch Gruppentheorie nicht zum aktiven Wissen von Ingenieuren und technisch orientierten Informatikern gehört, erfolgt an den Stellen, wo darauf Bezug genommen wird, eine Erläuterung der verwendeten Mathematik.)

1 2 ... n

Bild 1.3: Der Schieberegisterring als Graph.

Für die formale Darstellung von (m=n)-Netzen nach Def 1.1 werden verschiedene Schreibweisen von Permutationsfunktionen verwendet, wie z. B. die Mengen- oder Matrizenschreibweise sowie die Darstellung als Zyklen- oder Zweierzyklen. Diese Notationen sind in Bild 1.4 für das Beispiel des Schieberegisterrings gezeigt, der mit jedem Takt die Daten 1 bis n an seinen Eingängen im Gegenuhrzeigersinn weiterschiebt. Für Verbindungsnetzwerke sind hauptsächlich die Matrix- und die Zyklenschreibweise bedeutsam. Die letztere läßt sich noch kompakter darstellen als in Bild 1.4 angegeben. Dazu wird die Matrizenschreibweise dahingehend modifiziert, daß die erste Zeile der Matrix weggelassen und die zweite Zeile 1 2 3 4⎞ ohne Klammern geschrieben wird. Aus p = ⎛ bei⎝4 1 2 3⎠ spielsweise wird so 4123. Diese Schreibweise ist sehr ähnlich der Vektorschreibweise, nur unterliegt sie nicht deren Einschränkungen bzgl. der Verknüpfung von Vektoren.

1.3 Die Bus/Speicher-Kopplung Ein zweites einfaches Beispiel eines Verbindungsnetzwerks stellt der Bus dar, der auf Entfernungen bis ca. 0,5 m die daran angeschlossenen Einheiten im Zeitmultiplex miteinander verbinden kann. Bei Parallelrechnern wird in der Regel neben einem Bus noch ein gemeinsamer Speicher zur Kopplung der Rechenknoten verwendet. Daraus resultiert das Konzept des Symmetric Multiprocessing (SMP) [Hwang93].

8

Mengenschreibweise:

(

)

⎧⎪ Ai , A j mit i, j = 1,2,..., n V =⎨ ⎩⎪( A1 A2 A3... An −1 An ) → ( An A1 A2 ... An − 2 An −1 )

⎫⎪ ⎬ ⎭⎪

Matrixschreibweise: ⎛ 1 ⎜ ⎝ n

2

3

...

1

2

...

n ⎞ ⎟ n − 1⎠

Zyklenschreibweise:

(1 n

n -1 n - 2 ... 2)

Zweierzyklenschreibweise:

(n

n − 1) ( n n − 2) ( n n − 3)

.. .. .

( n 1)

Bild 1.4: Der Schieberegisterring in Mengen-, Matrix-, Zyklen- und Zweierzyklenschreibweise.

1.3.1 Symmetrische Multiprozessoren Die Bus/Speicherkopplung mehrerer gleichartiger Prozessoren oder Rechenknoten ist der einfachste Fall einer konventionellen Koppelmethode, die bei SMPs in verschiedenen Varianten realisiert sein kann. Die einfachste und zugleich leistungsschwächste Möglichkeit ist in Bild 1.5 dargestellt. Die Prozessoren tauschen während der Programmausführung über den gemeinsamen Bus und Speicher Daten aus. Zugriffskonflikte, die bei gleichzeitigem Zugriff von zwei oder mehr Knoten auf dieselbe Speicherzelle entstehen, werden durch den Bus aufgelöst, indem eine Sequentialisierung der Zugriffe gemäß eines Prioritätsschemas vorgenommen wird. Prozessoren

P1

P2 .. .. .. Pn Bus

M1 gemeinsamer Speicher

Bild 1.5: Einfache Bus/Speicherkopplung in einem Multiprozessorsystem.

9

Als technisch geeignete Bussysteme haben sich in der Vergangenheit z.B. der VMEbus und der MULTIBUS II erwiesen. Bussysteme für SMP-Rechner müssen über eine Multimaster-Betriebsweise verfügen, die für einen kontrollierten Buszugang durch Arbitrierung und damit für einen wechselseitigen Ausschluß gleichzeitig zugreifender Rechner sorgt. Obwohl dieses sehr einfache SMP-Konzept bereits vom Ansatz her in seiner Leistungsfähigkeit begrenzt ist, gibt es doch kommerzielle Beispiele von Parallelrechnern, die so gebaut wurden. Bild 1.6 zeigt den Multimax-Rechner der Fa. Encore [Encore87], der in der Vergangenheit, trotz seiner Einfachheit, oder vielleicht gerade deswegen, eine gewisse Verbreitung und Popularität erreichen konnte. Heutige SMP-Server sind dagegen bedeutend aufwendiger, um die der Bus-/Speicher-Kopplung innewohnenden Nachteile zu kompensieren.

Ethernet SCSI

APC APC oder oder XPC XPC

APC

... oder

EMC

MSC

XPC

APC: Advanced Processor Card XPC: Dual Processor Card EMC: Ethernet/Mass Storage Controller MSC: Mass Storage Controller SCC: System Control Card SMC: Shared Memory Card

Nanobus Front

SCC

SMC

Panel Multimax 320/520 System Cabinet

Bild 1.6: Das Multimax System der Encore Computer Corp. nach [Encore87].

Bei der Bus/Speicherkopplung kommunizieren die Prozessoren P1 bis Pn über den Speicher M1 durch das Schreiben und Lesen gemeinsamer Daten. Der Nachteil der Bus/Speicher Kopplung ist, daß die Interprozessorkommunikation durch die Verwendung des gemeinsamen Busses und (einzigen) Speichermoduls M1 zeitlich nacheinander ablaufen muß, was die Effizienz des Gesamtsystems erheblich beeinträchtigt. Simulationen und Messungen an dieser Variante der Bus/Speicherkopplung haben gezeigt, daß sich die beiden wichtigen Maße Durchsatz und Effizienz häufig wie in Bild 1.7 dargestellt verhalten. Die Idee der Parallelverarbeitung wird durch die rasche Sättigung des Kommunikationssystems auf den Kopf gestellt, da von einer kritischen Prozessorzahl an, die relativ niedrig liegt, Durchsatz und Effizienz unter die Werte des Einzelprozessorsystems absinken. Zur Lösung des Sättigungsproblems bei der Bus/Speicherkopplung müssen an zwei Stellen Maßnahmen getroffen werden: Zum einen muß die Busbandbreite so gewählt werden, daß sie ungefähr der additiven Bandbreite der Spei-

10

relativer Durchsatz

Effizienz 1 x

x

x x

x

x 1

x

x

x x x

1

x x

x 1

Zahl der Prozessoren

x

Zahl der Prozessoren

Bild 1.7: Durchsatz und Effizienz der klassischen Bus/Speicherkopplung.

cherschnittstellen der Rechenknoten entspricht. Diese Forderung kann leicht die Grenzen des technisch Machbaren der Bustechnologie erreichen bzw. überschreiten, ist also i.a. nicht ohne weiteres erfüllbar. Zum anderen muß die Speicherbandbreite auf denselben Wert wie die Busbandbreite gesteigert werden, um Engpässe zu vermeiden. Für das letztere gibt es mehrere Möglichkeiten, die allesamt auf direkter oder indirekter Nebenläufigkeit im Speichersubsystem beruhen. Im wesentlichen wird dabei die limitierte Bandbreite durch Verwendung mehrfacher Speichermodule erhöht (Bild 1.8). Prozessoren

P1

P2 ...... Pn Bus

M1 M2 . . . Mm gemeinsame Speicher

Bild 1.8: Bandbreiteerhöhung der Bus/Speicherkopplung durch multiple Speicher.

Besteht ein Speichersubsystem aus mehreren parallelen Modulen, können folgende Maßnahmen einzeln oder als Ganzes implementiert werden, um die Bus/ Speicherkopplung attraktiv zu machen: 1. Wortbreiteerhöhung: Eine Erhöhung der Wortbreite des Speichersubsystems auf das n-fache (n>1) der Prozessorwortbreite bewirkt, daß bei jedem Speicherzugriff mehr Worte als vom Prozessor benötigt gelesen werden, wodurch Zugriffe auf nachfolgende Adressen wegfallen. Die Speicherbandbreite steigt um den Faktor n. 2. Adreßverschränkung: Addreßmäßig nachfolgende Worte werden auf voneinander unabhängige Speichermodule (Bänke) verteilt, die zeitlich leicht 11

versetzt adressiert werden. Die Summe aller Zeitversetzungen bei n Bänken ist gleich der Zykluszeit T eines einzelnen Speichermoduls. Dadurch kann erreicht werden, daß alle T/n Zeiteinheiten ein neues Wort aus dem Speicher zur Verfügung steht. Voraussetzung bei dieser und der ersten Maßnahme ist, daß der Prozessor möglichst lange linear auf- oder absteigende Adressen an den Adreßbus anlegt. 3. Geteilter Buszyklus (Split Transaction): Beim Split Transaction-Betrieb kann ein noch nicht abgeschlossener Speicherzyklus auf der Busseite unterbrochen werden, sobald die Speicheradresse vom Bus ausgegeben wurde und der Prozessor eine neue Adresse lesen oder schreiben möchte. In der Zwischenzeit, die der Speicher benötigt, um auf die zuerst gewünschte Variable zuzugreifen, liegen am Bus eine oder mehrere neue Adressen an. Nach Ablauf der Speicheraddressierungszeit, die in diesem Fall größer als die Buszykluszeit ist, werden die nach Ablauf der Zugriffszeit zur Verfügung stehenden Daten auf den Bus gegeben bzw. ihm entnommen, so daß der zuvor unterbrochene Schreib- oder Lesezyklus abgeschlossen ist. Die Überlappung mehrerer Speicherzyklen steigert die Bandbreite des Speichersubsystems. 4. Pipelining: Beim Pipelining wird ein Speicherzugriff der Zeitdauer T in eine Reihe von n elementaren Operationen wie "Adresse anlegen", "Chip Enable-Leitung aktivieren", "Speicherzugriffsszeit abwarten", "Datum lesen" usw., untergliedert, die jeweils die Zeit T/n benötigen. Diese elementaren Operationen werden fließbandmäßig verkettet ausgeführt. Bei n gleich langen Unterteilungen können neue Speicheradressen n-fach schneller angelegt werden. Durch die Betriebsmöglichkeiten 1 - 4 des Speichersubsystems wird die kritische Prozessorzahl, von der ab die Latenzzeit der Interprozessorkommunikation nichtlinear ansteigt, erheblich gesteigert (Bild 1.9). Insgesamt können die beschriebenen Maßnahmen die Sättigungsgrenze des Speichersubsystems nur verschieben, aber nicht vermeiden. Man geht davon aus, daß unter Ausnutzung aller technischen Möglichkeiten nicht mehr als 32 RISC-Prozessoren sinnvoll über Bus und gemeinsamen Speicher gekoppelt werden können. Voll skalierbar sind dagegen die ein- und mehrstufigen Verbindungsnetzwerke. Die Maßnahmen 1-4 zur Verbesserung der Bus/Speicherkopplung bei Parallelrechnern lassen sich bzgl. ihres Kosten/Nutzen-Verhältnisses folgendermaßen bewerten: • Wortbreiteerhöhung und/oder Adreßverschränkung: Diese Methoden werden seit ca. 2 Jahrzehnten bei Speichersubsystemen von Vektor-Superrechnern erfolgreich eingesetzt. Die Maßnahmen erfordern sehr breite Busse im Subsystem, was einen erheblichen Kostenfaktor darstellt (ca. 70% der Gesamtkosten eines Vektor-Supercomputers liegen im Speichersubsystem). Deshalb ist diese Technik nur bedingt bei Parallelrechnern einsetzbar. • Gemeinsame Speichermodule mit geteiltem Buszyklus (Split Transaction): Der geteilte Buszyklus erlaubt, mehrere Speicheranforderungen überlappend 12

1

Latenzzeit pro Speicherzugriff x o o x o x x o x o o xo xo o x o x x o 1

Band= breite= limits

Durchsatz

o

o

o o

o

o

xo

xo

x

x x x x x x

xo xo o x

1

Zahl der Prozessoren

Zahl der Prozessoren

Bild 1.9: Speichersättigung mit (o) und ohne (x) Maßnahmen 1 - 4.

zu bearbeiten, ohne daß die Prozessoren durch die im Vergleich zum Bus relativ lange Speicherzykluszeit blockiert werden (asynchrones Schreiben und Lesen). Dies ist insbesondere zusammen mit einer mehrfädigen Programmausführung (Multi Threading), bei der extrem schnell von einem Prozeßfaden zum nächsten umgeschaltet wird, von großem Vorteil, da die Zugriffszeit auf Variable im Speicher für andere Prozeßfäden genutzt wird (Latency Hiding). Diese Methode bietet bei Parallelrechnern ein großes Anwendungspotential und ist relativ preisgünstig zu realisieren. • Pipelining: Gemeinsame Speichermodule mit Pipelining bedeutet, daß der Speicherzugriff in atomare Einheiten, wie 'Adresse anlegen', 'Buspuffer umschalten' etc., zerlegt wird, die dann in einer Pipeline verkettet werden können. Die Speicherzugriffszeiten für voneinander unabhängige Zugriffe reduzieren sich in diesem Fall auf die Bearbeitungszeit der langsamsten Pipelinestufe. Speicher-Pipelining wird seit 2 Jahrzehnten bei den VektorSupercomputern angewandt und ist auch bei Parallelrechnern sinnvoll. Zwei kommerzielle Beispiele der Bus/Speicherkopplung mit multiplen Kommunikationsspeichern sind der Sequent und der ELXSI Rechner, die in Bild 1.10 und Bild 1.11 dargestellt sind. Eine weitere wesentliche Verbesserung von Durchsatz und Latenzzeit des Kommunikationssystems kann durch zusätzliche Lokalspeicher erzielt werden, die den Zugriff auf gemeinsame Module M1 - Mm nur für das Lesen und Schreiben auch gemeinsam genutzter Variablen erforderlich machen (Bild 1.12). Alle nicht gemeinsamen Daten werden in den Lokalspeichern L1 - Ln gehalten. Diese sind nicht über den Systembus zugänglich, sondern über lokale Speicherbusse, und können deshalb parallel adressiert werden, so daß die Sequentialisierung der Kommunikation aufgehoben wird, die einen prinzipiellen Engpaß der Bus/Speicherkopplung darstellt. Der zweite Vorteil dieser Archi-

13

tektur besteht darin, daß die kleinen, lokalen Busse aus Anpassungs- und Laufzeitgründen breitbandiger ausgelegt werden können als der Systembus. Dual CPU Processor Boards

Memory Controller Boards

Memory Expansion Boards

... 80 MB/s System Bus MULTIBUS

User Devices

T A P E

SCSI, Ethernet Controller

Multibus Adapter Board

Bild 1.10: Bus/Speicherkopplung beim Sequent Symmetry Rechner (Sequent Corp.)

CPU

.MEM ..

CPU

MEM

Gigabus I/O Process or

I/O Proc essor

I/O Sub Bus ses

I/O Sub Bus ses

Service Proc essor

Bild 1.11: Bus/Speicherkopplung beim ELXSI System 6400 von ELXSI Corp.

Zusätzliche Geschwindigkeit sowie Wegfall der manchmal nicht effizient genutzten gemeinsamen Speicher sowie eine Entlastung des Systembusses ergeben sich durch den Einbau von Cache-Speichern (Bild 1.13). Die Cache-Speicher erlauben, lokale Kopien von gemeinsamen Variablen anzulegen, die von den Prozessoren auch lokal gelesen und geschrieben werden können. Die Cache-Steuerungen sind u.a. dafür zuständig, daß das Konsistenzproblem, das bei gleichzeitigem Schreiben mehrerer Kopien einer gemeinsamen Variablen entsteht, gelöst wird. Eine automatische Konsistenzsicherung sorgt dafür, daß gemeinsame Variable und ihre Kopien systemweit denselben Wert haben. Dies wird von den Cache-Steuerungen durch Beobachten der 14

Lokale Busse und Speicher

P1

P2

L1

L2

...

Pn

...

. . . Ln Systembus

M1 M2 . . . Mm gemeinsame Speicher

Bild 1.12: Bus/Speicherkopplung mit Lokalspeicher.

P1

P2

C1

C2

Pn ...

Cn

Bus M1

M2

Mn

Bild 1.13: Bus/Speicherkopplung mit Caches und Bus Snooping.

Schreib-/Leseaktivitäten auf dem Systembus (Bus Snooping) sowie durch Abwicklung eines komplexen "Update"-Protokolls wie z.B. MESI [Giloi93] erreicht. Bei der Architektur nach Bild 1.13 bestehen keinerlei geschwindigkeitsmäßige Unterschiede beim Zugriff der Prozessoren auf Daten in den einzelnen Modulen M1-Mn, weil alle Zugriffe, die nicht von den Caches befriedigt werden können, gleich schnell bzw. langsam abgewickelt werden können. Diese Eigenschaft einer symmetrischen Rechnerarchitektur wird als Uniform Memory Access (UMA) bezeichnet. UMA-Architekturen sind relativ einfach zu programmieren, weil die Allozierung von Variablen zu Speichern nicht beachtet werden muß. Andererseits nützen UMA-Rechner die häufig vorhandene Datenlokalität paralleler Anwendung nicht zur Gänze aus, weil keine lokalen Speicher existieren. Um einen Effizienzverlust zu vermeiden und um die Cache-Speicher nicht zu groß und damit zu teuer werden zu lassen, kann man in einer weiteren Optimierungsstufe der Bus/Speicherkopplung die gemeinsamen Speichermodule lokal zu den Prozessoren anbringen, wodurch das Konzept der globalen und der lokalen Speicher vereinigt wird. Dadurch wird der Systembus ebenso entlastet wie der Durchsatz erhöht. Eine Adreßdekodierung an jedem Speichermodul sorgt dafür, daß eine Speicheranforderung des lokalen Prozessors auch lokal abgewickelt wird, also schneller als der Zugriff auf einen entfernten Speicher

15

abläuft. Aufgrund der geschwindigkeitsmäßigen Unterschiede der Speicherzugriffe spricht man in diesem Fall von einer Non Uniform Memory Access-Architektur (NUMA). Parallele Anwendungen, die Datenlokalität aufweisen, werden in der Effizienz der Ausführung wesentlich davon beeinflußt, ob lokale Daten des Programm auch lokal abgespeichert werden. Gute parallele Programmierung bedeutet deshalb bei einer NUMA-Architektur die richtige Allozierung von Programmvariablen zu Speichern. P1 M1

C1

Pn

P2 M2

C2

. . . Mn

Cn

Systembus Bild 1.14: Bus/Speicherkopplung mit unsymmetrischen Zugriffszeiten (NUMA).

Die Bus/Speicherkopplung gemäß Bild 1.13 (UMA) oder Bild 1.14 (NUMA) mit Busbeobachtung zur Konsistenzsicherung ist für Multiprozessoren mit kleinerer Prozessorzahl (≤ 8) aus Kosten- und Leistungsgründen sehr gebräuchlich. Sie wurde und wird bei einer Reihe kommerzieller Systeme angewandt. Ein Beispiel dafür ist der Alliant FX/8-Rechner (Bild 1.15), der dem UMA-Schema entspricht. Zusammenfassend kann gesagt werden, daß das Symmetric Multiprocessing (Bus/Speicherkopplung) in vielen parallelen Rechensystemen zu finden ist. Speziell bei Servern mit 2-4 Prozessoren existieren Rechner von Compaq, DEC, IBM, Sequent, SNI, SUN und anderer Hersteller mit solcher Architektur. In Zukunft werden es die Fortschritte in der Silizium-Höchstintegration erlauben, ca. 4 Prozessoren sowie die dazugehörigen Caches mit Bus und Konsistenzsicherung auf einem einzigen Silizium-Chip zu integrieren. Dadurch wird die Bedeutung der Bus/Speicherkopplung weiter zunehmen. Diese Entwicklung ist bei den sog. Quad-Prozessor Boards bereits vorweggenommen.

1.3.2 Mehrtorspeicherkopplung Die zweite klassische Kopplungsmethode neben der Bus/Speicherkopplung besteht darin, Prozessoren über einen Mehrtorspeicher (Multiport Memory) zu verbinden. Mehrtorspeicher unterscheiden sich von üblichen (Eintor)-Speichern dadurch, daß sie gleichzeitige Schreib-/Lesezugriffe auf identische oder unterschiedliche Adressen auf der Ebene des Speichersubsystems erlauben. Der interne Aufbau der Mehrtorspeicher unterstützt hardwaremäßig einfaches Schreiben und mehrfaches Lesen (Exclusive Write Multiple Read) oder gleichzeitiges mehrfaches Schreiben und Lesen von Variablen (Multiple Write, Mu-

16

MEM

MEM

...

MEM

Memory Bus Cache

Cache

...

Cache

IP1

IP2

...

IP12

Bild 1.15: Bus/Speicherkopplung mit Caches (Alliant FX/8-Rechner).

tiple Read). Selbstverständlich ist auch beim Multiport-Speicher der Wert einer Variablen nicht determiniert, wenn von mehreren Prozessoren gleichzeitig dieselbe Variable beschrieben wird. Dieser Fall kann bei bestimmten Programmiermodellen wie dem der weak consistency [Hwang93] und geeigneten Rechenalgorithmen erlaubt sein, in den meisten Fällen wird jedoch das gleichzeitige mehrfache Schreiben einer Variablen durch eine Synchronisation verhindert, um deterministische Programmergebnisse zu erzielen. Mehrtorspeicher werden traditionell zur Kopplung weniger (4-16) Prozessoren verwendet, wie sie bei einem Vektor-Superrechner wie z.B. einer Cray YMP, J 90, C 90, CONVEX C4 oder NEC SX-4 gegeben sind. In diesen Fällen werden die multiplen Anschlüsse eines Mehrtorspeichers durch einen sehr schnellen Eintorspeicher, bestehend aus einer Vielzahl von Speicherbänken und einem Verbindungsnetzwerk wie z.B. ein Kreuzschienenverteiler emuliert. Das Verbindungsnetzwerk weitet den Speicheranschluß so auf, daß alle Prozessoren daran angeschlossen werden können. Die Zahl der Speicherbänke muß groß genug gewählt werden, um die Prozessoren bandbreitemäßig zufriedenzustellen. Das Prinzip das Mehrtorspeichers ist in Bild 1.16 dargestellt, eine konkrete Implementierung sieht man in Bild 1.17. Mehrtorspeicher ermöglichen einen gleichzeitigen Zugriff der Prozessoren durch eine Adreßverschränkung der Speicherbänke. Bei Parallelrechnern haben Mehrtorspeicher im Vergleich zur Bus-/Speicher-Kopplung keine besondere Bedeutung erlangt, u.a. deswegen, weil sie sehr viel teurer in der Realisierung sind. Technisch betrachtet gibt es zwei Möglichkeiten, Mehrtorspeicher zu implementieren: • Über spezielle Multiport SRAM- oder DRAM-Speicherbausteine, wie sie z.B. von AMD oder Cypress angeboten werden. Diese integrierten Schaltkreise weisen 2-4 Speicheranschlüsse auf, die simultan gelesen oder geschrieben werden können. Sie haben den Nachteil, daß sie aufgrund komplexer interner Verdrahtung nicht hoch integrierbar sind und daß sie wegen der Vielzahl benötigter Anschlußstifte erheblich teurer in der Herstellung sind als konventionelle RAM-Speicher.

17

P2

P1

...

Pn

Verbindungs= netzwerk M Bild 1.16: Prinzip der Mehrtorspeicherkopplung über Eintorspeicher und Netzwerk.

P1

P2

P3

P4

P5

P6

P7

P8

4x4

4x4

4x4

4x4

4x4

4x4

4x4

4x4

8x64

8x64

8x64

8x64

256 Speicherbänke

Bild 1.17: Implementierung der Mehrtorspeicherkopplung bei der Cray YMP-816.

• Über konventionelle SRAM- oder DRAM-Bausteine in Verbindung mit einem vorgeschalteten Netzwerk, das den Speicheranschluß aufweitet. Als Verbindungsnetzwerke werden ein oder mehrstufige Netze oder bei konventionellen Architekturen auch Busse verwendet. Die Kosten dieser Lösung sind geringer als bei der Kopplung über integrierte Multiport-Schaltkreise, die additive Speicherbandbreite allerdings auch, sofern nur eine Speicherbank verwendet wird. Parallelrechner in Forschungsprojekten, die auf Multiport-Speicherkopplung beruhen, wie z.B. der DIRMU-Rechner [Händler85], ermöglichen die Kopplung einer kleineren Zahl von Prozessoren. Beim DIRMU-Rechner fungiert jeder Multiport-Speicher als ein Kommunikationselement mit sieben Kanälen und einem achten Anschluß für den lokalen Prozessor. Bis zu acht Rechenknoten mit Multiport-Speicher können so in einer vollständig vermaschten Topologie miteinander verbunden werden. Bei größeren DIRMU-Systemen sind entfernte Rechenknoten indirekt verbunden, indem einer oder mehrere Multiport-Speicher als Zwischenstation für die Daten der Interprozessorkommunikation dienen. 18

1.3.3 Die Grenzen der Bus/Speicherkopplung Parallelrechner, die auf Buskopplungen mit gemeinsamen Speichern oder auf Mehrtorspeichern beruhen, sind aus zwei physikalischen Gründen in ihrer Leistungsfähigkeit prinzipiell begrenzt, d.h. nicht skalierbar. Busse eignen sich nur innerhalb kleiner Entfernungen (≤ 1 m) zum schnellen Datentransport, da die zu treibenden kapazitiven Lasten mit zunehmender Buslänge ebenfalls ansteigen, während der die Kapazitäten umladende Bustreiberstrom nicht beliebig groß gemacht werden kann. Busgekoppelte Systeme sind deshalb i.a. auf einen Gehäuserahmen (Crate) begrenzt. Busse haben eine endliche Bandbreite, die von den nicht anpaßbaren Übertragungsleitungen zwischen Bussender und -empfänger herrührt, für die alle Busstecker als störende Impedanzen wirken. Die Zahl der Steckplätze, und damit die Zahl der Prozessoren, ist deshalb für einen Bus mit hoher Bandbreite möglichst klein zu machen. Dies ist eine der Parallelverarbeitung widersprechende Forderung, die möglichst viele Rechnerknoten zu koppeln versucht. Zu diesen beiden "harten" Grenzen, die die Natur vorgibt, kommt eine "weiche" Grenze, die aus der zunehmenden Unbalanziertheit der Geschwindigkeiten von Prozessoren auf der einen Seite und Speichern auf der anderen Seite resultiert: Die schnellsten, technisch realisierbaren Bussysteme wie FASTBus oder Futurebus+ [IEEE91] erreichen maximal ca. 3 Gbyte/s an Datentransferrate und sind damit so schnell wie die Speicherschnittstelle eines einzigen RISC-Prozessors. Nur durch Zwischenschalten von großen und mehrfach gestuften Caches zwischen Prozessoren und Systembus lassen sich deshalb, ausreichende Datenlokalität vorausgesetzt, mehrere RISC-Prozessoren über einen gemeinsamen Bus koppeln. Aufgrund der prinzipiell nicht gegebenen Skalierbarkeit von Bus/Speichergekoppelten Architekturen, sind sehr schnelle Parallelrechner bzw. Parallelrechner mit großen Prozessorzahlen (> 16-32) auf einer Bustechnologie nicht aufbaubar. Glücklicherweise lassen sich die von der Physik gezogenen Grenzen der konventionellen Prozessorkopplungen durch andere Konzepte, wie parallele und/oder hierarchische Busse, sowie durch die Verwendung ein- oder mehrstufiger Verbindungsnetze umgehen. Unterhalb der vorgegebenen physikalischen Grenzen ist die Buskopplung mit gemeinsamem Speicher für kleine Prozessorzahlen kostengünstiger als alle anderen Technologien und übertrifft im Preis/Leistungsverhältnis auch die einund mehrstufigen Verbindungsnetzwerke. Multiprozessoren mit kleineren Prozessorzahlen (≤ 8-16) basieren deshalb fast ausschließlich auf diesem Konzept. Kommerzielle Beispiele für Symmetric Multiprocessing sind die Knotenarchitekturen des PowerChallenge Rechner von SGI, der Symmetric Multiprocessor von IBM sowie einige andere.

19

1.4 Parallele Bussysteme Die Busbandbreite ist proportional zur Taktrate des Busses, zu seiner Wortbreite und zur Zahl parallelgeschalteter Busse pro Prozessor. Weil die Taktrate moderner Busse aus physikalischen Gründen nur noch wenig gesteigert werden kann und die Wortbreite für doppelt-genaue Gleitkommazahlen auf 64 Bit festgelegt ist, kann zur Bandbreiteerhöhung des Busses die Parallelschaltung mehrerer Busse herangezogen werden. Mehrbussysteme sind sowohl aus Geschwindigkeits- als auch aus Zuverlässigkeitsgründen sinnvoll und werden in Forschung und Industrie entworfen und eingesetzt. Ein typisches Mehrbussystem zeigt Bild 1.18. P1

P2

...

Pn M1 M2

... Mm Bild 1.18: Mehrbussystem mit parallelen Bussen.

Eine evolutionäre Weiterentwicklung des Mehrbuskonzepts entsteht durch Ersetzen der Bus-Ports durch Zugriffsbusse und durch Hinzufügen von Busbrükken, wie es in Bild 1.19 gezeigt wird. Diese Methode hat den Vorteil, daß ein Busanschluß pro Prozessor ausreicht. Da die Bandbreite für den Prozessor auf die des Zugriffsbusses beschränkt bleibt, sind Caches unabdingbar, um die Speicheranforderungen moderner RISC-Prozessoren erfüllen zu können. Durch die Kombination von Zugriffsbussen und parallelen Speicherbussen entsteht eine 2-dimensionale Busmatrix. Beim Busmatrixkonzept hat jeder Prozessor einen exklusiven Buszugang (vertikale Richtung), der über Busbrücken zu den Speicherbussen (horizontale Richtung) die Verbindung mit den Speichermodulen herstellt. Die Busbrücken arbeiten adreßgesteuert und blenden für bestimmte Adreßbereiche Daten eines horizontalen Busses in den eigenen vertikalen Bus ein. Sie haben somit eine Schalterfunktion. Dies macht das Busmatrixkonzept identisch mit einem Kreuzschienenverteiler. Deshalb kann diese Kopplungsmethode nicht mehr als Buskopplung im eigentlichen Sinne bezeichnet werden, sondern zählt bereits zu den dynamischen Verbindungsnetzwerken, da Busleitungen umgeschaltet werden. Umgekehrt werden Kreuzschienenverteiler häufig als Busmatrix implementiert.

20

P1

P2

...

Pn

C1

C2

...

Cn M1 M2

... Mm

Bild 1.19: Mehrbussystem mit vertikalen und horizontalen Bussen.

1.5 Hierarchische Bussysteme Die Umgehung der von der Physik gezogenen Grenzen bei der Bus/Speicherkopplung kann entweder durch die Verwendung mehrerer paralleler Busse oder durch den Einsatz von hierarchisch gegliederten Bussen erfolgen. In Bild 1.20 ist ein hierarchisches Bussystem zur Prozessorkopplung für den Fall von zwei Hierarchieebenen dargestellt. Auf der unteren Hierarchieebene gibt es vier einzelne Multiprozessorsysteme, die auf der nächsthöheren Ebene miteinander verbunden sind. Hierarchische Bussystem werden u.a. in [Wilson87] untersucht. Hierarchische Bussysteme benötigen Datenlokalität in den parallelen Anwendungen, die bei der Interprozessorkommunikation benachbarte Prozessoren den entfernten Prozessoren vorzieht. Das heißt, daß bei Datenlokalität jeder Rechner einen Satz von Prozessoren oder Rechnern hat, mit denen er besonders häufig kommuniziert. Dieser Communication Set, der vergleichbar mit dem Working Set im Cache eines Einzelprozessors ist, erlaubt, häufig kommunizierende Rechner auch physikalisch benachbart zu gruppieren. Bei hierarchischen Bussystemen werden die Prozessoren oder Rechner in Untergruppen gegliedert, die wiederum zu Hauptgruppen zussammengefaßt werden. Der Vorteil der Gruppenbildung (Clustering) liegt darin, daß die Interprozessorkommunikation innerhalb einer Gruppe aus technischen Gründen schneller abgewickelt werden kann als zwischen den Gruppen, da sich Daten über kurze Entfernungen schneller transportieren lassen als über lange Distanzen. Nach einer Arbeit von A. Agarwal [Agarwal91] weist die Datenlokalität zwei Eigenschaften auf. Die erste Eigenschaft bewirkt, daß die Latenzzeit für Interprozessorkommunikation durch geschickte Allozierung von Prozessen zu Prozessoren reduziert werden kann. Die zweite Eigenschaft bewirkt, daß bei rich21

Pn

P1

P2

Cn

C1

C2

M2

Mn

M1

M2

Mn

P1

P2

Pn

P1

P2

Pn

C1

C2

Cn

C1

C2

M1

M2

Mn

M1

M2

P1

P2

C1

C2

M1

...

...

Pn ...

...

Cn

Cn

Mn

Bild 1.20: Hierarchisches Bussystem.

tiger Zuordnung von Prozessen zu Prozessoren die Kommunikation zwischen entfernten Prozessoren nicht nur relativ selten stattfindet, sondern auch weniger Bandbreite benötigt als der Datenaustausch zwischen benachbarten Prozessoren, die in der Regel mit hoher Datenrate erfolgt. Das bedeutet, daß bei Datenlokalität entfernte Prozessoren ohne Leistungsverlust mit geringerer Bandbreite gekoppelt werden können, als benachbarte, was zu erheblichen Kosteneinsparungen führt. Auf diesem Prinzip fußen hierarchische Bussysteme, da sie Cluster von Prozessoren mit geringerer Bandbreite koppeln als die Prozessoren innerhalb eines Clusters. Moderne Bussysteme wie der Futurebus+ erlauben explizit hierarchische Buskopplungen zur skalierbaren Einstellung der Rechnerleistung eines Multiprozessorsystems gegenüber einem Einzelprozessorsystem. Neben den Multiprozessoren und Multicomputern mit parallelen Bussen ist die hierarchische Buskopplung die einzige Möglichkeit, den sequentiellen Charakter eines Bustransfers über die von der Physik gezogene Bandbreitegrenze hinaus zu beschleunigen. Der Flaschenhals der Kommunikation kann im Prinzip durch Verwendung eines ein- oder mehrstufigen Verbindungsnetzwerkes vermieden werden, da ein statisches oder dynamisches Netz nicht auf dem Zeitmultiplexprinzip eines Busses beruht, sondern einen exklusiven Netzzugang für jeden einzelnen Rechner zur Verfügung stellt. Die räumliche Parallelität erfordert jedoch einen erheblich größeren schaltungstechnischen Aufwand als ein Zeitmultiplex-Bussystem.

22

1.6 Skalierbarkeit von Verbindungsstrukturen Unter Skalierbarkeit versteht man die Eignung einer vorgegebenen Verbindungsstruktur sowohl für kleine (einige Dutzend) Teilnehmerzahlen als auch nach einer entsprechenden Erweiterung für sehr große (einige Tausend bis Zehntausend) Teilnehmerzahlen. Dies setzt einen modularen Aufbau des gegebenen Netzwerkes voraus. Am Beispiel der Buskopplung wurde das Problem der Skalierbarkeit von Verbindungsstrukturen sichtbar. Beim Bus ist Skalierbarkeit aufgrund der maximal vorgegebenen Bandbreiten nicht möglich. Bei ein- und mehrstufigen Verbindungsnetzwerken treten ebenfalls gewisse Probleme auf, die eine beliebige Skalierbarkeit manchmal erschweren bzw. unmöglich machen. Zwar läßt sich hier die Teilnehmerzahl durch das Raummultiplexprinzip "unendlich" vergrößern, doch gibt es auch bei solchen Netzwerken Nebeneffekte, die der Skalierbarkeit Schranken auferlegen. Eine solche Schranke stellt die inhomogene Verkehrsverteilung in einem Netz dar, die bewirkt, daß einzelne Kanäle stärker belastetet werden als andere. Die Sättigung belasteter Kanäle wird mit zunehmender Teilnehmerzahl und steigender Datentransferrate immer wahrscheinlicher, da die Datendichte zunimmt. Die Stellen im Netz, an denen Sättigungseffekte auftreten, werden als Hot Spots bezeichnet. Sie bewirken, daß sich Rückstaus von Datenpaketen ähnlich wie auf einer überlasteten Autobahn bilden, wodurch einzelne Netzstufen kurzzeitig unpassierbar werden. Diese transienten Effekte bewirken zu nicht vorhersagbaren Zeitpunkten ein nichtlineares Ansteigen der Latenzzeit, was eine unbegrenzte Skalierbarkeit verhindert. Durch zusätzliche Maßnahmen im Netz wie adaptives Routing und Combining [Pfister85b] lassen sich allerdings solche hochbelasteten Kanäle umgehen bzw. vermeiden. Als weiterer Problempunkt bei mehrstufigen Netzen gilt die Tatsache, daß Netze häufig so organisiert sind, daß die Zahl der Anschlüsse nur in Zweierpotenzen erhöht werden kann, was ab einer gewissen Zahl von Verdopplungen ein zu grobes Raster an Anschlüssen bedeutet. Die Verdopplung der Anschlüsse läßt sich von einer bestimmten Netzgröße an nicht mehr bezahlen, da zu viele Anschlüsse ungenutzt bleiben - außer die Zahl der Prozessoren wird ebenfalls verdoppelt. Durch Cluster-Bildung in hierarchische Strukturen kann man hier Abhilfe schaffen. Schließlich ist die Durchlaufverzögerung (Latenz) eines Signals durch ein mehrstufiges Netz i.a. vom Logarithmus der Zahl der Netzeingänge abhängig, so daß große Netze auch große Latenz bedeuten. Allerdings wächst der Logarithmus immer langsamer mit zunehmender Netzgröße, so daß sich diese Schranke in der Praxis nicht stark bemerkbar macht. Zusammenfassend kann gesagt werden, daß trotz der genannten Probleme mehrstufige Netze, wie z.B. das Omega- [Lawrie75] oder Baseline-Netz [Wu80a], als im Prinzip unbegrenzt skalierbar gelten, da die Skalierbarkeit durch zusätzliche Maßnahmen erhalten bleibt.

23

1.7 Programmiermodelle und physikalische Kopplung Aus der Sicht des Benutzers gibt es zwei Standardmodelle für parallele Programmierung, die auf gemeinsamen Variablen (Shared Variables) oder auf Botschaftenaustausch (Message Passing) beruhen. Aus rechnerarchitektonischer Sicht basieren Parallelrechner entweder auf Kanalkopplung (Channels) oder auf Speicherkopplung (Shared Memory). Beide Programmiermodelle lassen sich über die zwei Kopplungsarten realisieren. Je nach Programmier- und Koppelmodell resultieren verschiedene Rechnerarchitekturen bzw. Verbindungsnetzwerke. Programmiermodelle Message Passing hat durch die Portierung der Message Passing-Bibliotheken PVM, PARMACS, MPI u.a. auf nahezu alle Rechnerplattformen eine hohe Verbreitung gewonnen. Die Message Passing-Bibliothek PVM stellt einen De Facto-Standard für parallele Programmierung mit Botschaftenaustausch dar. Andererseits werden ingenieurwissenschaftliche Codes traditionell in FORTRAN geschrieben, das vom Sprachkonzept her gemeinsame Variable favorisiert, die z.B. durch FORTRAN Common Blocks sowie durch spezielle Compiler-Direktiven ausgedrückt werden. Durch die Weiterentwicklungen von FORTRAN 77 in die Nachfolger FORTRAN 90 und High Performance FORTRAN (HPF) sowie andere Sprachen mit Array-Datentypen gewinnt das Programmiermodell der gemeinsamen Variablen in den technisch-wissenschaftlichen Anwendungsbereichen an Verbreitung. Den gemeinsamen Variablen eilt der Ruf voraus, bereits nach relativ kurzer Zeit der Codierung ein lauffähiges paralleles Programm zu ermöglichen, d.h. eine effiziente Programmerstellung zu erhalten, während Botschaftenaustausch, besonders bei größeren Prozessorzahlen, als effizienter in der Programmausführung gilt. Physikalische Kopplung Die beiden Standardprogrammiermodelle werden oftmals mit den physikalischen Arten der Kopplung gleichgesetzt. Insbesondere das Modell der aus Benutzersicht gemeinsamen Variablen suggeriert gemeinsamen Speicher als Kopplungsmethode. Dies ist in der Praxis keineswegs der Fall. Beispielsweise beruhen die Shared Variable-Rechner Cray T3D und Convex Exemplar auf kanalgekoppelten Rechenknoten, weil dies aufgrund deren räumlicher Ausdehnung aus technischen Gründen notwendig ist. Bei großen Parallelrechnern, die mehr als einen Gehäuserahmen (Crate) umfassen, müssen die aus Benutzersicht gemeinsamen Variablen über Kommunikationskanäle realisiert werden, da größere Entfernungen anderweitig nicht zu überbrücken sind. 24

Korrespondierend zu der Tatsache, daß Programmiermodell und Koppelmodell voneinander unabhängig sind, gibt es von den japanischen Herstellern NEC und Fujitsu in deren Rechnern, die auf physikalisch gemeinsamem Speicher beruhen, Kommunikation über die Message Passing-Bibliothek PVM. Zwar bevorzugt das Programmiermodell der gemeinsamen Variablen aus historischen und praktischen Gründen die Buskopplung mit gemeinsamen Speicher, während Botschaftenaustausch oft auf kanalgekoppelten Prozessoren basiert, jedoch sind beide Programmiermodelle nicht notwendigerweise an das von ihnen favorisierte Kopplungskonzept gebunden, sondern lassen sich auf jeder Hardware-Plattform implementieren. In Vergangenheit und Gegenwart gab und gibt es Beispiele kommerzieller und wissenschaftlicher Rechner, die gemeinsame Variable auf kanalgekoppelten Prozessoren realisieren bzw. Botschaften auf gemeinsamen Speicher abbilden. Um einen Unterschied zwischen der physikalischen Kopplung einerseits und der logischen Sicht andererseits zu machen, wird im folgenden der Begriff des gemeinsamen Speichers auf die physikalische Ebene bezogen. Auf der logischen Ebene wird statt dessen der Begriff der gemeinsamen Variablen verwendet, der den Bezug zur Programmierung des Parallelrechners herstellt. Entsprechend werden Kanäle als das technische Übertragungsmedium bezeichnet und Botschaftenaustausch als die Art der Programmierung. Um die Nomenklatur zu vervollständigen, muß an dieser Stelle der wichtige Spezialfall vorweggenommen werden, bei dem auf der physikalischen Ebene ein gemeinsamer Speicher existiert, der nicht räumlich konzentriert, sondern verteilt ist. Aufgrund der physikalischen Ausdehnung von Parallelrechnern, die einige Meter und mehr betragen kann, scheidet die Buskopplung (Symmetric Multiprocessing) als Verbindung aus, statt dessen wird der gemeinsame Speicher über Kanäle emuliert. Auf den Kanälen wiederum werden die Adressen und Inhalte des gemeinsamen Speichers in Form von Datenpaketen zwischen den Speichermodulen übertragen. Diese Architektur, die als verteilter gemeinsamer Speicher (Distributed Shared Memory) bezeichnet wird, stellt die beiden physikalischen Kopplungsmodelle gemeinsamer Speicher und Kanalkopplung nicht als zwei Alternativen dar, die sich gegenseitig ausschließen, sondern vereinigt sie zu einem neuen Ganzen. Fortschritte in der Hardware-Technologie, wie Caches mit automatischem Konsistenzabgleich bereits auf dem Prozessor-Chip, fördern die Verbreitung von Bussen mit gemeinsamem Speicher, während standardisierte Kanalkopplungsmethoden wie SCI [IEEE92] die Kanalkopplung favorisieren, da sie die Zusammenschaltung von inhomogenen Systemen verschiedener Hersteller ermöglichen. Aufgrund dieser Entwicklungen werden beide Methoden auch in Zukunft ihre Bedeutung haben. Der Trend geht dahin, daß kleine "Cluster" busgekoppelt und größere Cluster kanalgekoppelt sind.

25

1.8 Klassifikation nach physikalischer und logischer Kopplung Man kann parallele und verteilte Systeme hinsichtlich ihrer physikalischen und logischen Kopplung klassifizieren. Es entsteht dann ein Ordnungsschema, in dem die Programmiermodelle von Botschaftenaustausch und gemeinsamen Variablen mit den Koppelmodellen von gemeinsamen Speicher und Kanalkopplung kombiniert werden. In Tabelle 1.1 werden gebräuchliche Parallelrechner hinsichtlich dieser Kriterien klassifiziert. Die Klassifikation erlaubt, die Rechner bzgl. ihrer Kommunikationseigenschaften vergleichen zu können. Dabei kann man folgende Punkte feststellen: • Maschinen mit gemeinsamem Speicher werden häufiger mit dem Programmiermodell der gemeinsamen Variablen als mit dem der Botschaftenkopplung auf dem Markt angeboten. Ähnliches gilt für Kanalkopplung und Botschaftenaustausch im Vergleich zu Kanalkopplung und gemeinsamen Variablen. • Einige Hersteller wie CONVEX und Fujitsu ermöglichen bzw. erfordern aufgrund ihrer hybriden Bauweise beide Programmiermodelle. Dabei werden stets gemeinsame Variable innerhalb eines Rechenknotens und Botschaftenaustausch zwischen den Knoten eingesetzt. • Vier der fünf großen Parallelrechnerhersteller Cray, Convex, DEC, IBM und Intel bieten die innovative Kanalkopplung zusammen mit dem Programmiermodell der gemeinsamen Variablen an. Convex ermöglicht darüber hinaus als einziger Hersteller auf dem Markt systemweite Cache-Konsistenz für Kopien gemeinsamer Variablen. Offenbar favorisieren die Kostenvorteile der klassischen Bus/Speicherkopplung bei kleinen Prozessorzahlen das Programmiermodell der gemeinsamen Variablen, während große Parallelrechner auf der physikalischen Ebene durchweg kanalgekoppelt sind. Diese stellen auf der Programmierebene Botschaftenaustausch zur Verfügung. In einigen Fällen werden auch gemeinsame Variable als Programmiermodell hardwaremäßig mitunterstützt bzw. sind das primäre Programmiermodell (Exemplar, T3D/E). Der Trend bei Parallelrechnern geht zu einer Kombination von gemeinsamem Speicher und Variablen innerhalb eines Knotens und Kanälen mit Botschaften zwischen den Knoten, wie man anhand der CONVEX Exemplar, IBM SP2 (und Nachfolger), Intel Paragon, NEC SX-3/4, sehen kann. Dadurch lassen sich die spezifischen Vorteile beider Kopplungsarten, nämlich geringe Kosten plus Skalierbarkeit, vereinigen. Bei (lose) gekoppelten Rechnergruppen, wie einem DEC Workstation Cluster 8400, einem SGI Power Challenge Array oder einer NEC SX-4 Anordnung, sind hybride Kopplungen und Programmiermodelle üblich. In Tabelle 1.2 sind früher gebräuchliche Parallelrechensysteme zum Vergleich aufgelistet. Es fällt auf, daß die Zahl der Hersteller von kanalgekoppelten, Botschaften austauschenden Systemen sowie von Systemen mit gemeinsa26

Programmiermodell gemeinsame Variable

g e m.

K o p p e l m o d e l l

S p e i c h e r

K a n ä l e

Botschaftenaustausch

o CONVEX Exemplar (gem. Speicher im Knoten) o Cray J90 o Cray T90 o Fujitsu VPP 300/500 o NEC SX-4 (gem. Speicher im Knoten)

o CONVEX Exemplar (gem Speicher im Knoten) o Dressler GIGAmachine o Fujitsu VPP 300/500 o Intel Paragon (gem. Speicher im Knoten) o SGI Power Challenge

reine SMP- Maschinen: o DEC AlphaServer o SGI Power Challenge o sowie die Modelle von - Compaq - IBM - Sequent - SNI - SUN o CONVEX Exemplar (Kanäle zw. Knoten) o Cray T3D/E o DEC Memory Channel Cluster o Intel Paragon (Shared Virtual Memory Implementierung) o Meiko CS-2

o CONVEX Exemplar (Kanäle zw. Knoten) o Cray T3D/E o DEC AdvantageCluster o Hitachi SR 2001 o IBM SP2 o Intel Paragon (Kanäle zw. Knoten) o Maspar MP 2 o NCUBE 3 o NEC SX-4 Cluster (Kanäle zw. Knoten) o PARSYS SN9000 o PARSYS TransAlpha9000 o Parsytec Explorer o Parsytec GC, CC o SGI Power Challenge Array (Kanäle zw. Knoten) o SNI RM 1000

Tabelle 1.1: Physikalische und logische Kopplung gebräuchlicher Parallelrechner.

mem Speicher und gemeinsamen Variablen zugenommen hat. Letzteres ist insbesondere dem Symmetric Multiprocessing zuzuschreiben, das zunehmend verbreitet ist. Ein Grund für die Zunahme dieser Art von Systemen liegt in der Verbreitung von PVM, MPI, PARMACS, Linda und anderen Bibliotheken bzw. Sprachen als "standardisierte" Programmierschnittstellen auf Botschaftenbasis, die die Portierbarkeit einer parallelen Anwendung auf verschiedenste Plattformen erlaubt und damit Investitionen in der Software-Entwicklung bewahrt. Bei den hybriden Lösungen haben die botschaftenorientierten Rechner basierend auf gemeinsamen Speicher ebenfalls zugenommen. Hier ist das Argu-

27

Programmiermodell (Benutzersicht) gemeinsame Variable

K o p p e l m o d e l l

g e m. S p e i.

K a n ä l e

o Alliant FX/8 o Balance 21000 o Convex C-1 XP o CRAY 2, 3, X/YMP o ETA 10 o Encore Multimax o IBM 3090/400/VF o Sequent Symmetry o Tandem NonStop o Univac 1194/ISPx2 o BBN Butterfly o Denelcor HEP 1 o KSR 1, 2

Botschaftenaustausch o ELXSI 6400 o Flexible /32

o CDC Cyberplus o FPS T o Intel iPSC, Delta o Meiko CS-1 o NCUBE 2 o Parsytec o Transtech o TMC CM2, CM5

Tabelle 1.2: Physikalische und logische Kopplung früherer Parallelrechner.

ment eines effizienten Programmierstandards (PVM) zusammen mit den geringen Kosten (Bus!) maßgebend. Im Vergleich zu früheren Systemen werden heutzutage von verschiedenen Herstellern beide Programmiermodelle für dieselbe Hardware-Plattform angeboten (z.B. CONVEX, Fujitsu etc.). Dieser Trend wird sich in Zukunft fortsetzen, da es dem Parallelrechneranwender maximale Flexibilität ermöglicht. Tabelle 1.3 klassifiziert einige Forschungsparallelrechner hinsichtlich deren Kopplungsweise. In dieser Liste dominieren bei den Forschungsparallelrechnern die kanalgekoppelten Systeme mit gemeinsamen Variablen als Programmiermodell. Auf diesem Gebiet ist die meiste Entwicklungsarbeit sowohl auf dem Architektursektor als auch bei den Programmiermodellen zu leisten. Verbindungstechniken wie der DEC Memory Channel oder das Scalable Coherent Interface [IEEE92], die diese Kopplungsart unterstützen, haben neuere Forschungsprojekte auf diesem Sektor beeinflußt. Für SCI beispielsweise existieren verschiedene Implementierungen in GaAs und Silizium seit dem Jahre 1994.

28

Programmiermodell (Benutzersicht) gemeinsame Variable g e m. K o p p e l m o d e l l

S p e i.

K a n ä l e

Botschaftenaustausch

o C.mmp (S.H.Fuller) o C.mmp o DIRMU (W. Händler) o Polyp (R. Männer) o NYU Ultracomputer (A. Gottlieb) o Cedar o Cenju 3 o DASH o FLASH o GF 11 o IBM RP3 o PASM o MIT *T o MIT Alewife

(D.J. Kuck) (NEC) (D. Lenoski) (J. Kuskin) (J. Beetem) (G.F. Pfister) (H.J. Siegel) (D.E. Arvind (A. Agarval)

o Cenju 3 o Cosmic Cube o MULTITOP o IBM RP3 o GMD Manna o MIT J-Machin o Mosaic C

(S.H.Fuller)

(NEC) (C. Seitz) (H. Richter) (G.F. Pfister) (W. Giloi) (W. Dally) (C. Seitz)

Tabelle 1.3: Physikalische/logische Kopplung bei einigen Forschungsparallelrechnern.

29

2 Grundlagen statischer und dynamischer Netze 2.1 Definition Das Kennzeichen statischer Netze ist, daß jeder Kommunikationsknoten im Netz, der ein Prozessor, ein Rechner oder in der Telekommunikation ein Gesprächsteilnehmer sein kann, fest mit einer kleineren Zahl anderer Kommunikationsknoten (Prozessoren, Rechner oder Teilnehmer) verbunden ist, die als Nachbarknoten bezeichnet werden. Der Netzwerkzugang erfolgt über spezielle Anschlüsse (Netzwerkadapter), die über Leitungen zu den Anschlüssen der Nachbarknoten führen. In einem statischen Netz kann deshalb von jedem Knoten in einem Schritt mindestens ein Nachbarknoten erreicht werden, weil alle Knoten einen zusammenhängenden Netzgraphen bilden. Ein statisches Netzwerk existiert nicht als physikalisch separierbare Einheit, sondern in Form der Netzwerkanschlüsse und deren Verkabelung. Da die Verdrahtung zwischen zwei miteinander verbundenen Kommunikationsknoten keine zusätzlichen Schaltelemente enthält, gilt für statische Netze auch die synonyme Bezeichnung einstufiges oder direktes Netz. Wenn in einem statischen Netz ein Datensender und der dazu gehörende Empfänger nicht benachbart sind, erfolgt der Datenaustausch über Zwischenknoten, die im einfachsten Fall auf dem kürzesten Weg zwischen Sender und Empfänger liegen. Typische einstufige Netze sind Ring-, Gitter- oder Hypercube-Topologien, wie sie in Bild 2.1. zu sehen sind.

Bild 2.1: Ring, Gitter und Hypercube als Beispiele statischer Netze.

Dynamische Netze (auch als mehrstufige oder indirekte Netze bezeichnet) bestehen aus mindestens einem Schaltelement, an dessen Ein- und Ausgänge die Kommunikationsknoten angeschlossen sind. Zählt man den Weg durch das Schaltelement als einen Transferschritt, dann ist in einem dynamischen Netz jeder Knoten von jedem anderen aus direkt erreichbar. Das bedeutet, daß in einem mehrstufigen Netz keine Nachbarschaften existieren, weil alle Prozessoren 30

(Knoten, Teilnehmer) gleich weit voneinander entfernt sind. Die Schaltstufen sind aus sog. nxn-Schaltern (lies "n-Kreuz-n-Schalter") für n = 2, 3, ... und deren Verdrahtung aufgebaut. Die nxn-Schalter werden als Kreuzschalter bezeichnet, wenn n = 2 ist und sie sowohl parallel ("=") als auch gekreuzt ("x") gesetzt werden können (Bild 2.2). Bei dynamischen Netzen sind Kreuzschalter die am häufigsten verwendeten Schaltertypen.

Bild 2.2: Ein 2x2-Kreuzschalter und seine beiden Schaltmöglichkeiten.

Beispiele für dynamische Netze sind der Kreuzschienenverteiler sowie das Clos- und das Benes-Netz [Clos53, Benes65], die in Bild 2.3 (von oben nach unten) dargestellt sind. Der Kreuzschienenverteiler besteht aus einer einzigen Schaltstufe zwischen Sender und Empfänger, das Clos-Netz aus drei Schaltstufen, und das Benes-Netz hat bei N Ein- und Ausgängen insgesamt (2log2 N-1) Stufen. In Bild 2.3 sind keine Prozessorknoten eingezeichnet; vielmehr geht man bei der Darstellung dynamischer Netze implizit davon aus, daß die Knoten mit den Ein- und Ausgängen der Netze verbunden werden. Die Datenerzeuger und -verbraucher sind bei den dynamischen Netzen im Gegensatz zu den statischen Topologien an der Übermittlung der Informationen nur indirekt beteiligt.

2.2 Parallelrechnernetze Im einfachsten Fall eines Parallelrechnernetzes ersetzt man die Bus/Speicherkopplung der Rechenknoten durch ein statisches oder dynamisches Verbindungsnetzwerk und behält die Knotenarchitektur bis auf die Busschnittstelle bei. In der Regel werden jedoch zusätzliche architektonische Maßnahmen bei den Speichern und den Netzwerkanschlüssen vorgenommen, die bei einer Bus/ Speicherkopplung nicht notwendig sind. Durch den Übergang vom Bus zum Verbindungsnetz ergeben sich neue architektonische Möglichkeiten für Parallelrechner, die im folgenden dargestellt werden. Ein Beispiel einer auf einem Verbindungsnetzwerk beruhenden Parallelrechnerarchitektur zeigt Bild 2.4. Jeder Prozessor Pi (i = 1,2,...,n) kann gleichzeitig mit anderen Prozessoren auf je ein Speichermodul Mj, (j = 1,2,...,n) zugreifen. Kein Prozessor hat jedoch einen eigenen Lokalspeicher. Diese Architektur wird als eng gekoppeltes Multiprozessorsystem bezeichnet, weil aus der Sicht jedes Prozessors die Speichermodule wie ein großer, monolithischer Speicher aussehen. Werden die Prozessoren durch einfache Rechenwerke ohne Leitwerk ersetzt und die Steuerung der Befehlsausführung einer zentralen Instanz übertragen, 31

. . .

...

Bild 2.3: Kreuzschienverteiler, Clos- und Benes-Netz als Beispiele für dynamische Netze.

P1

P2 . . . Pn

Verbindungs= netzwerk M1

M2 . . . Mn

Bild 2.4: Verbindungsnetzwerk für ein eng gekoppeltes Multiprozessorsystem.

hat man einen Single Instruction Multiple Data-Rechner (SIMD) vorliegen. Die in Bild 2.4 gezeigte Architektur wird häufig bei SIMD-Rechnern verwendet. Ein Vertreter der SIMD-Kategorie ist z.B. der GF11-Rechner von IBM [Beetem85]. Speziellere SIMD-Rechner stellen die CM2 [Hillis85] von Thinking Maschines Corporation und die MasPar MP1 [MasPar91] dar, die in ihrer Rechnerarchitektur ein statisches mit einem dynamischen Netz kombinieren. Ist jedes Rechenwerk mit einem Leitwerk ausgerüstet, so daß mehrere Befehlsströme gleichzeitig verarbeiten werden können, spricht man von Multiple Instruction Multiple Data-Rechnern (MIMD). Historische Beispiele für MIMD-Maschinen nach Bild 2.4 sind der NYU Ultracomputer [Gottlieb83] 32

und der IBM RP3-Rechner [Pfister85]. Modernere MIMDs wie die Cray T3D [Oed94], IBM SP2 [IBM95], Convex Exemplar [Convex93] oder die SNI RM1000 sind im Vergleich dazu bedeutend komplexer aufgebaut. Die Programmiermodelle dieser Maschinen sind entweder gemeinsame Variable, (NYU Ultracomputer, IBM GF11) oder Botschaftenaustausch (TMC CM2, Maspar MP1, IBM SP2, SNI RM1000) oder beides (IBM RP3, Cray T3D/E, Convex Exemplar).

2.2.1 Netze für gemeinsamen Speicher Die Weiterentwicklung der Architektur eng gekoppelter Multiprozessorsysteme nach Bild 2.4 zielt auf die bessere Handhabbarkeit und Unterstützung des gemeinsamen Speichers ab. Wie bei der Bus/Speicherkopplung kann man durch den Einbau von Lokalspeichern die gemeinsamen Kommunikationsspeicher entlasten und den Durchsatz erhöhen. Daraus ergibt sich eine Architektur nach Bild 2.5. L1

L2 . . . Ln

P1

P2 . . . Pn

Verbindungs= netzwerk M1

M2 . . . Mm

Bild 2.5: Verbindungsnetzwerk für eng gekoppelten Multiprozessor mit Lokalspeichern.

Ein Beispiel dieser Architektur ist der Cedar-Rechner [Kuck86], der sowohl einen lokalen als auch einen globalen Speicher hat. Beim Cedar-Rechner werden gemeinsame Variable als Programmiermodell verwendet. Ein weiterer Evolutionsschritt für eng gekoppelte Multiprozessorsysteme mit Lokalspeichern und gemeinsamen Variablen besteht darin, die globalen Speichermodule wegzulassen und die Lokalspeicher zusätzlich anderen Prozessoren zugreifbar zu machen. Diese Architekturen benötigen spezielle Netzwerkanschlüsse, sog. Ports Ai (i = 1,...,n), die den Zugriff auf fremde Lokalspeicher abwickeln. Das Architekturprinzip ist in Bild 2.6 dargestellt. Ein Beispiel für ein System, das ein mehrstufiges Netz und gemeinsam benutzbaren Speicher verwendet, ist der Bolt Beranek &Newman TC2000 [BBN89]. Bei gemeinsamen Variablen hat jede Speicherzelle der Lokalspeicher eine rechnerweit eindeutige Adresse, so daß aus der Sicht des Benutzers ein gemeinsamer Adreßraum entsteht. Der Adreßraum wird so implementiert, daß die niedrigerwertigen Adreßbits innerhalb eines Lokalspeichers gelten und die hö-

33

herwertigen Bits zur Unterscheidung der verschiedenen Lokalspeicher dienen. Aufgrund der Tatsache, daß jedem Prozessor ein räumlich dicht benachbarter Speicher als Lokalspeicher zugeordnet ist und daß ein gemeinsamer Adreßraum existiert, spricht man von einem verteilten gemeinsamen Speicher (Distributed Shared Memory).

P1 P 1

P n P1

M 1 M1

P P1 2 ... B M 2 M1

M n M1

A 1 M1

AM1 2

AM1 n

u s

Kanal

Verbindungs= netzwerk Bild 2.6: Verbindungsnetzwerk für verteilten gemeinsamen Speicher.

Bei Rechnern mit verteiltem gemeinsamen Speicher kommt den Netzwerkanschlüssen eine wichtige Rolle zu. Sie sind dafür zuständig, selbständig einen entfernten Speicherzugriff über das Netz durchzuführen, sobald vom Prozessor eine Adresse ausgegeben wird, die nicht im Lokalspeicher existiert. Dazu schickt ein Port Ai eine Nachricht über das Netz zu einem anderen Port Aj, der lokal zum benötigten Speichermodul ist. Diese Nachricht enthält die Adresse des gewünschten Elements sowie die Zahl der zu übertragenden Bytes, sofern es sich um ein Feld von Elementen handelt und ein Blocktransfer angefordert wurde. In dem Zusammenspiel zweier Netzwerkanschlüsse führt der angesprochene Port einen von seiner CPU autonomen Speicherzugriff durch und schickt das gewünschte Datum in einer Botschaft verpackt zurück (Bild 2.7). Die geschilderten Vorgänge laufen für beide Prozessoren transparent ab. Durch die autonom agierenden Ports ist eine Entkopplung von Kommunikation und Rechnung erreicht, da die Rechenknoten währenddessen, daß ein Datum gelesen oder geschrieben wird, an anderer Stelle im Programm weiter rechnen oder eine neue Speicherzelle adressieren können. Das letztere wird als offenstehende Lade/Speichere-Operation (Outstanding Load/Store) bezeichnet und dient dazu, den Durchsatz zu erhöhen. Ein Beispiel der Architektur des verteilten gemeinsamen Speichers ist der T3D-Rechner [Oed94] der Fa. CRAY. Die Implementierung von verteiltem gemeinsamen Speicher über Kanäle, auf denen Datenpakete übertragen werden, erlaubt ohne Mehraufwand, daß Benutzer die Botschaften austauschenden Systemmechanismen für ihre Applikationen mitverwenden und ebenfalls Botschaften versenden. Dadurch erhält der Anwender eines Parallelrechners, der auf verteiltem gemeinsamen Speicher basiert, die Möglichkeit, sowohl Botschaften auszutauschen als auch gemeinsame Variable zu verwenden. 34

Pi

Ai

Kanal

Netz

Kanal

Aj

Pj

Bus-

Bus-

beobachtung

beobachtung

a)

Leseanforderung + Adresse Speicherinhalt als Antwort

b)

Schreibanforderung + Adresse+Datum Bestätigung als Antwort

Bild 2.7: Lesen (a) und Schreiben (b) über das Verbindungsnetzwerk.

Der Nachteil, der dem Konzept des verteilten gemeinsamen Speichers anhaftet, ist, daß im Vergleich zum räumlich konzentrierten Speicher mehr Daten über das Verbindungsnetzwerk transportiert werden, weil Speicheradressen und -inhalte in Pakete verpackt werden müssen, was einen Mehraufwand (Overhead) bedeutet. Zusätzlich sind die Netzwerkanschlüsse aufwendiger auszulegen als bei Architekturen ohne verteiltem gemeinsamen Speicher, da sie DMA-Transfers durchführen müssen. In einigen Forschungsprojekten wurde das Konzept des verteilten gemeinsamen Speichers weiterentwickelt. Eine Verbesserung erhält man dadurch, daß man den gemeinsamen Adreßraum nicht über physikalische, sondern über virtuelle (logische) Adressen bildet. Voraussetzung dafür ist, daß die Prozessoren der Rechenknoten Speicherverwaltungen (MMUs) besitzen, die logische CPUAdressen in physikalische Adressen umwandeln. Werden zusätzlich die Netzwerkanschlüsse durch Kommunikationsprozessoren ersetzt (in Bild 2.8 mit Ki bezeichnet), spricht man von einem verteilten gemeinsamen Speicher mit virtuellen Adressen (Distributed Virtual Shared Memory). Die Verwendung virtueller Adressen zur Etablierung eines gemeinsamen Adreßraums geht auf Kai Li [Li86] und einigen anderen zurück und wurde im Jahre 1986 erstmalig formuliert. In der Originalarbeit von Li wird das Konzept der virtuellen Adressen mit dem Seitenkonzept verknüpft, das man von der Seitenmigration (Paging) bei Großrechnern oder Arbeitsplatzrechnern gewohnt ist. Li ging von der Vorstellung aus, daß die entfernten Speichermodule analog zu einem Festplatten-Hintergrundspeicher anzusehen sind. Entsprechend wird der virtuelle Adreßraum in Seiten (Pages) eingeteilt und bei einem Seitenfehlen (Page Fault) der benötigte Adreßbereich von einem entfernten Speicher in den eigenen Lokalspeicher transportiert (Seitenmigration). Nach der Migration kann die Seite vom entfernten Prozessor nicht mehr modifiziert werden, da sie

35

dort nicht mehr zur Verfügung steht, außer es sind Zusatzmechanismen wie Seitenduplizierung vorhanden. Bus

P1 P 1

P n P1

M 1 M1

P P1 2 ... M 2 M1

M n M1

K1 M1

K 2 M1

K n M1

Kanal

Verbindungs= netzwerk Bild 2.8: Verbindungsnetzwerk für virtuellen gemeinsamen Speicher.

Die dargestellte Lösung der Koppelung der Rechnerknoten über einen verteilten gemeinsamen Speicher ist aus Benutzersicht elegant, hat jedoch für das Verbindungsnetzwerk Nachteile: • Für jede benötigte Variable, die nicht lokal vorhanden ist, muß ein Blocktransfer von einigen KB Größe (üblich sind 4KB) in Form einer Seitenmigration angestoßen werden, was das Netz belastet. • Falls zwei oder mehr Prozessoren dieselbe Variable mehr als einmal lesen oder schreiben wollen, kommt es zur periodischen Migration der Seite, in der die Variable alloziert ist. Dies ist von virtuellen Speichersystemen auf sequentiellen Rechnern als Seitenflattern (Page Thrashing) bekannt. Durch Seitenflattern wird das Verbindungsnetzwerk schnell bis zur Kapazitätsgrenze belastet. Um dieses Problem zu lösen, kann man anstelle der Migration eine Replizierung der Seite durchführen, was zusätzlich eine Konsistenzsicherung der Kopie erfordert. • Falls Variablen verschiedener Prozessoren in derselben Seite alloziert sind, aber nicht gemeinsam benutzt werden, kommt es zu einer unnötigen Seitenmigration (False Sharing) ähnlich dem Seitenflattern, die dadurch verhindert werden kann, daß man nicht zusammengehörende Variablen verschiedenen Seiten zuordnet. Die Verhinderung von False Sharing obliegt entweder dem Compiler oder dem Benutzer, indem eine korrekte Zuordnung von Variablen zu Lokalspeichern vorgenommen wird. Um die dargestellten Probleme zu lösen oder zumindest zu mildern, wurde in weiteren Forschungsprojekten, wie dem MANNA-Rechner der GMD [Mon92] und den Stanford DASH- und FLASH-Maschinen [Lenoski92, Kuskin94], als kleinste Transfereinheit nicht eine Seite von 4 KB Größe, sondern eine CacheZeile von 128 Byte gewählt. Dadurch sind die Transportzeiten verkürzt und so die "Kosten" für ein Seitenfehlen reduziert. Zusätzlich werden lokale Caches verwendet, die Kopien der Zeilen in Form von 128 Byte großen Cache-Zeilen enthalten. Hiermit werden Engpässe (Hot Spots), die bei gleichzeitigem Zugriff 36

mehrerer Prozessoren auf dieselbe Variable entstehen, vermieden, weil jeder Prozessor beim ersten Zugriff auf eine entfernte Variable eine lokale Kopie bekommt. Allerdings ist dann das Konsistenzproblem verschärft, da jetzt viele Kopien von Zeilen in den lokalen Caches existieren können. Für die Netzwerkanschlüsse bedeutet dies eine weitere Steigerung der Komplexität, da Konsistenzlisten über den Zustand der Cache-Zeilen geführt werden müssen. Deshalb reichen einfache Netzwerkanschlüsse wie beim Speicher mit physikalischen Adressen nicht mehr aus, sondern müssen durch spezielle Kommunikationsprozessoren Ki ersetzt werden, die entweder mikroprogrammiert oder fest verdrahtet sind. Diese führen ein komplexes Protokoll aus, das eine auf alle Ki-Prozessoren verteilte Liste für das Schreiben und Lesen von Seiten oder Cache-Zeilen aufbaut. Eine zentral gehaltene Liste ist nicht möglich, weil dies einen Engpaß in der Skalierbarkeit des Rechners darstellen würde. Zusammenfassend kann gesagt werden, daß es für das Verbindungsnetzwerk einen Unterschied macht, ob es sich um einen verteilten gemeinsamen Speicher mit physikalischen oder mit logischen Adressen handelt. Bei physikalischen Adressen ist der Verwaltungsaufwand und damit der Datentransfer durch das Netz kleiner und das Netzwerk-Interface einfacher. Bei logischen Adressen ist der Hardware-Aufwand größer; dafür kann sich im "eingeschwungenen Zustand" eines Programms ein "Working Set" häufig benötigter Seiten oder Zeilen im Lokalspeicher oder Cache bilden, so daß der durch den Benutzer verursachte Netzverkehr auf einer längeren Zeitskala abnimmt. In beiden Fällen ist der Benutzerverkehr, der von der parallelen Anwendung herrührt, von zusätzlichem Datenaustausch überlagert, der von den Kommunikationsprozessoren durch die Abwicklung ihres Protokolls verursacht wird. Abschließend ist noch festzustellen, daß das Architekturkonzept des verteilten gemeinsamen Speichers in die Kategorie der NUMA-Architekturen einzuordnen ist.

2.2.2 Netze und Caches Für die Leistungsfähigkeit eines Verbindungsnetzwerks, das einen verteilten gemeinsamen Speicher mit virtuellen Adressen und Zeilenmigration unterstützt, sind Größe und Art der Caches entscheidend. Im Bewußtsein dieser Tatsache wurde von der amerikanischen Firma Kendall Square Research eine Rechnerarchitektur entwickelt, die nur noch aus Caches besteht. Dies wird als Cache Only Architecture (COMA) bezeichnet. COMA ist eine spezielle Realisierung einer Virtual Shared Memory NUMA-Maschine. Die Firma KSR hat diese Idee in die Produkte KSR 1 [KSR92] und KSR 2 umgesetzt. Eine typische COMA-Architektur zeigt Bild 2.9. Eine ernsthafte Schwierigkeit bei Virtual Shared Memory NUMA- bzw. COMA-Architekturen stellt die Aufrechterhaltung der systemweiten CacheKonsistenz dar. Diese ist im Falle einer Bus/Speicherkopplung kein Problem, da sie dort bei vertretbarem Aufwand durch Mitverfolgen des Busverkehrs (Bus Snooping) realisiert werden kann. Bei einem Rechner mit ein- oder mehrstufi-

37

P1 P 1

P P1 2

...

P n P1

C 1 M1

CM1 2

...

CM1 n

K 1 M1

K 2 M1

...

K n M1

Verbindungs= netzwerk Bild 2.9: Verbindungsnetzwerk für COMA-Architektur.

gem Verbindungsnetzwerk kann diese Methode nicht mehr angewandt werden, da es physikalisch viele verschiedene Pfade gibt, so daß eine dezentrale Überwachung aller Kommunikationskanäle zu aufwendig wird. Ein zentrales Abhören des Datenverkehrs ist aus Skalierungsgründen ebenfalls nicht möglich. Der Konsistenzabgleich muß deshalb über verteilte Listen (Directories) realisiert werden, die in den Kommunikationsprozessoren implementiert sind. Deren Transportmedium ist das Verbindungsnetzwerk, dessen Eigenschaften für die Übertragung von Seiten oder Cache-Zeilen optimiert sein sollten. Dies bedeutet, daß im Netz Puffer entsprechender Größe (4 -8 KB bzw. 128-256 Byte) vorhanden sein müssen, falls eine Netzstufe oder der Datenempfänger einer Seite oder Cache-Zeile vorübergehend nicht aufnahmebereit ist, da sonst Daten verloren gehen.

2.2.3 Netze für Botschaftenaustausch Botschaftenorientierte, kanalgekoppelte Parallelrechner sind aus rechnerarchitektonischer Sicht ähnlich den Systemen mit verteiltem gemeinsamen Speicher. Der Unterschied besteht darin, daß bei Botschaften als Programmiermodell die Adressierung fremder Lokalspeicher entfällt, weshalb die Netzwerkanschlüsse Di im Vergleich zu den Adaptern Ai und den Kommunikationsprozessoren Ki eine andere Funktionalität aufweisen. Botschaftenorientierte, kanalgekoppelte Parallelrechner werden auch als lose gekoppelte Multiprozessorsysteme bezeichnet. Ein typisches System dieser Art zeigt Bild 2.10. Beispiele für lose gekoppelte Multiprozessorsysteme stellen alle transputerbasierten Parallelrechner von Firmen wie z.B. Parsytec, Meiko, Transtech und Parsys dar, aber auch eine Reihe anderer Systeme wie beispielsweise die IBM SP2. Im Falle der Transputerrechner sind auf dem Transputerchip (Typ T9000 oder T805) vier serielle Kommunikationskanäle mit 100 Mb/s Datenrate pro Kanal und Richtung (20 Mb/s bei T805) integriert, die simultan und autonom zum Rechenwerk Daten transferieren können, um überlappende Kommunikation zu ermöglichen. Darüberhinaus werden Netze für Botschaftenaustausch zur Kopplung von Rechnern eingesetzt, die ein Cluster bilden, wie z.B. das Server Cluster Modell 8400 von DEC, das den sog. Memory Channel 38

P1 P 1

P P1 2

M 1 M1

M 2 M1

D 1 M1

D 2 M1

... B u s

P n P1 M n M1 D n M1

Kanal

Verbindungs= netzwerk Bild 2.10: Verbindungsnetzwerke für ein lose gekoppeltes Multiprozessorsystem.

verwendet, die NEC SX-4 Cluster, die über einen glasfasergekoppelten Kreuzschienenverteiler verbunden sind, sowie das Power Challenge Array von SGI.

2.2.4 Netzwerkanschlüsse für Botschaftenaustausch Die Hauptunterschiede zwischen den Netzanschlüssen Ai der eng gekoppelten Systeme und den DMA-Adaptern Di der lose gekoppelten Maschinen liegen in der Art und Weise, wie ein Transfer initiiert wird, wie die Kommunikation zwischen zwei Anschlüssen Di und Dj abläuft und wie sich die Prozessoren während des Transfers und danach verhalten. Transfer initiieren Während Ai-Ports selbständig und transparent für den Prozessor den lokalen Adreßbus beobachten und nicht-lokale Daten lesen bzw. schreiben, werden DiPorts explizit vom Benutzer programmiert. Dies geschieht auf Hochsprachenniveau durch SEND/RECEIVE-Funktionen, die entweder über Prozeduraufrufe von Kommunikationsbibliotheken oder über spezielle Sprachkonstrukte abgewickelt werden. Ein Beispiel für letzteres sind die Kommunikationsmittel der Sprachen Ada und occam [Pount88]. Kommunikation zwischen Di-Anschlüssen im Vergleich zu Ai-Ports Ein Ai-Port einer Rechnerarchitektur mit gemeinsamen Speicher übermittelt an einen korrespondierenden Port Aj die Art der Kommunikationsanforderung (Lesen oder Schreiben) und die Speicheradresse der Variablen sowie einen Variablenwert, falls geschrieben werden soll. Der Ai-Port erhält im lesenden Fall vom Aj-Port den gewünschten Wert bzw. im schreibenden Fall eine Bestätigung, daß geschrieben wurde, als Antwort zurück. Ein Di-Port einer Architektur für Botschaftenaustausch schickt im schreibenden Fall einen Kanalnamen, der als ein Adreßäquivalent aufgefaßt werden kann, sowie einen oder mehrere Variablenwerte an den korrespondierenden Anschluß Dj und erhält für jedes Datum eine Bestätigung (Acknowledge) in 39

Form eines Flußsteuerungssignal zurück. Im lesenden Fall sind die Rollen von Di und Dj vertauscht. Ein Netzwerkanschluß Di benötigt in der Regel drei Parameter von der lokalen CPU, um ein oder mehrere Bytes vom eigenen Lokalspeicher als Botschaft zu einem korrespondierenden Anschluß Dj zu senden: • einen Zeiger auf den zu übertragenden Speicherbereich bzw. die zu sendende Variable, • die Länge des DMA Transfers und • einen Zeiger auf den Prozeß, der den Transfer angestoßen hat, um diesem eine Rückmeldung nach erfolgtem Transfer zu schicken oder ihn erneut der CPU zur weiteren Bearbeitung zuzuführen. Entsprechend benötigt der empfangende Anschluß Dj einen Zeiger auf den Puffer, in dem die Botschaft gespeichert werden soll, inklusive einer Längenangabe sowie einen Zeiger auf den Empfangsprozeß. Zum Botschaftenaustausch wird ein gemeinsamer Kanalname vereinbart, der für beide Prozesse gilt. Dies kann entweder zur Kompilierungszeit in Form einer Konstanten oder zur Laufzeit mit Hilfe einer vom jeweiligen Betriebssystem bereitgestellten SocketAdresse erfolgen. Verhalten der Prozessoren Bei eng gekoppelten Systemen macht sich, wenn man vom Spezialfall offenstehender Lade/Speichere-Operationen absieht, der Zugriff auf nicht-lokale Speicher nur durch eine größere Zugriffszeit bemerkbar. Bei lose gekoppelten Systemen wird in der Regel den kommunizierenden Prozessen während des Transfers die CPU entzogen und anderen Prozessen zugeteilt, weil der eigentliche Transfer CPU-autark abläuft. Man geht davon aus, daß die Kommunikation im Vergleich zum Scheduling "teuer" ist, d.h. lang dauert, so daß es sich lohnt, einem Prozeß die CPU zu entziehen und nach erfolgtem Transfer wieder zuzuteilen. Ein weiterer Unterschied zwischen Di- und Ai-Ports besteht darin, daß die Netzwerkzugänge nicht für die Übertragung von Speicheradressen ausgelegt sein müssen, also 16 - 64 Bit breit sind, sondern daß auch bitserielle Kanäle (Links) zur Übertragung von Botschaften ausreichen. Schließlich weisen die Di- gegenüber den Ai-Ports die Eigenschaft des Multiplexens bzw. Demultiplexens von logischen auf physikalische Kanäle auf. Das Multiplexen mehrerer logischer Kanäle auf einen physikalischen Kanal wird immer dann notwendig, wenn mehr gleichzeitig kommunizierende Prozesse oder Prozeßfäden (Threads) auf einem Prozessor existieren, als dieser an Netzanschlüssen aufweist. Für diesen Fall werden die Botschaften von und zu den Prozessen im Zeitscheibenverfahren auf dem Kanal übertragen (Bild 2.11).

40

Prozessor i Prozeß a

logischer Kanal 1

Adapter log. Kan. 2 Di

Prozeß b Prozeß c

logischer Kanal 1 gemultiplexter Adapter physikalischer Dj Kanal i->j

logischer Kanal 3

Prozessor j Prozeß d

log. Kan. 2

logischer Kanal 3

Prozeß e Prozeß f

Bild 2.11: Die Netzwerkanschlüsse Di als Multiplexer/Demultiplexer von logischen Kanälen.

2.2.5 Synchrone und asynchrone Kommunikation Bei botschaftenorientierten Parallelrechnern kann die Interprozessorkommunikation entweder synchron oder asynchron zwischen Sender und Empfänger ablaufen. Beim synchronen Verfahren müssen die beiden korrespondierenden Prozesse, die auf den Prozessoren die Kommunikation ausführen, gleichzeitig zum Datenaustausch bereit sein. Dies wird als Rendezvous-Verfahren bezeichnet, da die austauschenden Partner bei der Byteübergabe zeitgleich aktiv sein müssen, d.h. sie "treffen" zusammen. Ein Datenaustausch entspricht somit zugleich einer Prozeßsynchronisation. Bei asynchroner Kommunikation gibt es zwei Fälle. Im ersten Fall kann der Sender unabhängig vom Empfänger seine Daten in einem Systempuffer des Empfängers ablegen, aus dem dieser zu einem späteren Zeitpunkt liest. Im zweiten Fall kann ebenfalls zu einem beliebigen Zeitpunkt gesendet werden, der Empfangsprozeß wird allerdings mit Hilfe eines Interrupts zum sofortigen Einlesen und Bearbeiten gezwungen. In beiden Fällen wird von den Prozessen nicht explizit auf das Schreiben oder Lesen einer Nachricht gewartet. Dementsprechend kann asynchrones Lesen nur dann erfolgreich sein, wenn der Sender seine Datenübertragung zuvor durchgeführt hat. Man kann zeigen, daß zwei asynchrone Kommunikationen mit wechselnder Kommunikationsrichtung eine synchrone Kommunikation funktional ersetzen können.

2.3 Allgemeine Konstruktionsprinzipien von Netzwerken Für Verbindungsnetzwerke gibt es neben den Möglichkeiten, die in späteren Kapiteln noch erläutert werden, vier allgemeine Entwurfsprinzipien, die grundlegend und unabhängig von technischen Implementierungen sind. Diese Prinzipien sind Parallelität, Hierarchie, Modularität und Rekursion. Bei Buskopplungen wurden diese Prinzipien an Einzelbeispielen bereits erläutert, sie lassen sich jedoch auf alle Netzwerke übertragen. Die Prinzipien sind sowohl vom theoretischen wie vom praktischen Standpunkt aus interessant, da sie einerseits die Erzeugung neuer Netzstrukturen er41

lauben und andererseits die technische Realisierung und die Eigenschaften eines Netzes beeinflussen: • Parallelgeschaltete Netze bedeuten eine Erhöhung der Bandbreite und der Zuverlässigkeit gegenüber einem Einzelnetz und können bei gleichen technischen Daten die Kosten senken, da sich die Stückzahl erhöht. • Hierarchisch gekoppelte Netze erlauben, einen Top-Down- oder Bottom-UpEntwurf bei der Netzkonstruktion zu machen und ermöglichen einen schichtweisen Aufbau und Test, sofern die Hierarchieebenen voneinander separierbar sind. • Rekursion bedeutet, daß das Netz hierarchisch gegliedert ist und, daß es nach stets derselben Regel aufgebaut ist, was die Beschreibung des Netzes vereinfacht. • Modularität heißt, daß es im Netz eine (kleine) Anzahl verschiedener Modultypen gibt, die in Stückzahl produziert werden und so die Kosten senken. Darüber hinaus machen Module ein Netz skalierbar, wenn sie beliebig anreihbar sind.

2.3.1 Parallelität In Bild 2.12 ist die Parallelschaltung mehrerer Netzwerke, die im Allgemeinfall auch inhomogen sein können, dargestellt. Dabei ist jedes Netz über bestimmte Ports an die Rechenknoten gemäß dem Schema "verbinde Port i am Knoten j mit Netz i" angeschlossen.

P1

P2 .. .. .. Pn

Verbindungs= netzwerke Bild 2.12: Parallelschaltung mehrerer Verbindungsnetzwerke.

Genau wie bei Bussen bewirkt eine Parallelschaltung von m voneinander unabhängigen Netzen sowohl eine Bandbreiteerhöhung um das m-fache als auch eine erhöhte Fehlertoleranz. Bis zu (m-1) defekte Netze können von den Prozessorknoten toleriert werden. Darüber hinaus ist die Parallelschaltung von Netzen für den Fall die kostengünstigste Lösung, daß jeder Rechenknoten über mehr als einen Port an ein Netz angeschlossen werden soll. Wenn z.B. n Knoten gegeben sind, von denen jeder m Ports aufweist, die alle an ein (großes) Netz anzuschließen sind, müssen für ein Netz logarithmischer Komplexität von mn Eingängen O(mn*log(mn)) Schalter aufgewendet werden, während für m klei-

42

nere Netze mit je n Eingängen nur O(m*nlogn) Schalter nötig sind. Die erzielte Einsparung kann beträchtlich sein und resultiert letztlich daraus, daß bei dem mn-Netz die m Ports eines Knotens mit sich selbst verbunden werden können, was in der Regel unnötig ist. Ein Beispiel für Parallelität zeigt Bild 2.13. Hier ist die Verbindungsstruktur eines 3-dimensionalen Gitters aus parallelgeschalteten 2-dimensionalen Gittern aufgebaut, wobei der Übergang von einer Gitterebene zur nächsten in den Knoten stattfindet. Weitere Beispiele sind parallelgeschaltete Kreuzschienenverteiler oder parallelgeschaltete Kanäle innerhalb eines ein- oder mehrstufigen Netzes. Letztere werden auch als dilatierte Netze bezeichnet [Upfal89].

Bild 2.13: Parallelschaltung von 2-D Gittern zu einem 3-D Gitter.

2.3.2 Hierarchie Hierarchische Netze findet man überall dort, wo die Kommunikation der Netzteilnehmer einer gewissen Lokalität gehorcht. Dies ist z.B. bei allen Telefonsystemen der Welt der Fall, da Ortsgespräche häufiger als Ferngespräche geführt werden. Auch parallele Programme weisen häufig eine Datenlokalität auf, die sich in einer hierarchischen Architektur des Parallelrechners, der diese Programme ausführt, widerspiegeln kann. Netzteilnehmer (Knoten) sind dann benachbart, wenn sie in derselben Hierarchieebene angeschlossen sind. Die Überquerung einer oder mehrerer Hierarchieebenen kostet Zeit, so daß der Zugriff auf Nachbarn derselben Hierachiestufe schneller abgewickelt werden kann als die Kommunikation mit entfernten Knoten, was genau der Datenlokalität entspricht. Die CM5 von Thinking Machines Corp. oder der MANNA-Rechner der GMD [Mon92] sind Implementierungen von Parallelrechnern mit hierarchischen Netzen. Ein Beispiel einer Netzhierarchie ist in Bild 2.14 für den Fall von 2 Hierarchieebenen gezeigt. Von einem Hauptnetz ausgehend verzweigen sich baumartig vier Subnetze. Das Prinzip läßt sich auf beliebig viele Ebenen ausdehnen Ein anderes Beispiel zeigt das Verbindungsnetzwerk eines MANNA-Rechners mit 192 Prozessoren (Bild 2.15), dessen Hierarchieebenen nicht baumartig, sondern voll vermascht miteinander verbunden sind. In der Ebene 2 der Manna-Archiektur werden 4 von den 16 Ein-/Ausgängen jedes Kreuzschienenverteilers für die Verbindung zu Ebene 1 verwendet, die verbleibenden 12 dienen zur Ankopplung der Rechenknoten. Insgesamt kann man aus einer vielstufigen Netzhierarchie ein fein abgestuftes System verschiedener Zugriffsgeschwindigkeiten erhalten, das eine fle-

43

P1

P2

. . . Pn H a u p t n e t z

Subnetz

P2 . . . Pn

P1

P2 . . . Pn

P1

Subnetz

Subnetz

P2 . . . Pn

P1

Subnetz

Bild 2.14: Baumartige Hierarchie von Netzen. 1

2

16x16

16x16

16x16

... 1 2

3

1 2

1

1 2

... 12

3

Ebene 2 aus Kreuzschienenverteilern

16x16

... 12

2

Ebene 1 aus Kreuzschienenverteilern

16x16

...

16x16

... 12

4

16x16

16x16

...

1 2

Rechenknoten 12

16

Bild 2.15: Vermaschte Hierarchie aus Kreuzschienenverteilern.

xible Zuordnung von Prozessen zu Prozessoren gemäß den Bandbreiteanforderungen der Anwendung ermöglicht.

2.3.3 Rekursion Rekursiv aufgebaute Netze bestehen aus einer gegebenen Grundstruktur wie z.B. einem Ring oder einem Stern, die vielfach ineinandergeschachtelt im Sinne einer Selbstähnlichkeit repliziert wird. In Bild 2.16 sind Beispiele rekursiver Netze gezeigt, die jeweils zwei Rekursionsstufen umfassen.

2.3.4 Modularität Ein modularer Aufbau ist grundsätzlich in allen Gebieten der Technik wünschenswert, weil dadurch der Entwurf, die Realisierung und der Test von Systemen vereinfacht wird. Bei Verbindungsnetzwerken genügt es oft, ein einziges Modul, das wiederum ein Netz sein kann, vielfach zu replizieren, um daraus ein Netzwerk "nach Maß" zu erhalten. Modularität wird oftmals gleichzeitig mit den Konstruktionsprinzipien Rekursion und/oder Hierarchie eingesetzt. In Bild 2.17 ist beispielsweise ein 2-di44

a)

b)

Bild 2.16: Rekursiv aufgebauter Ring (a) bzw. Stern (b).

mensionaler Kreuzschienenverteiler gezeigt, der aus mehreren typgleichen Modulen aufgebaut ist. Jedes Modul kann wiederum ein 2-dimensionaler Kreuzschienenverteiler sein oder auch ein anderes Netz z.B. vom Benes- [Benes62] oder Clos-Typ [Clos53], so daß sich optional ein rekursiver bzw. hierarchischer Aufbau ergibt. Weiterhin ist es möglich, daß in einem Netz mehrere Modultypen in verschiedener Zahl existieren, die ihrerseits parallelgeschaltet und/oder rekursiv oder hierarchisch gegliedert sein können, wodurch sich eine außerordentliche Vielfalt von Konfigurationsmöglichkeiten ergibt. Dies spiegelt die gleichzeitigen Anwendung aller vier Konstruktionsprinzipen wider. P1 P2

...

Pm Pn Po ...

Pz Bild 2.17: Kreuzschienenverteiler aus Subnetzen.

Ein gutes Beispiel der potentiellen Mannigfaltigkeit, die Netzen innewohnt, ist das Internet, das aus vielen lokalen Netzen (WANs, MANs und LANs) aufgebaut ist, die ihrerseits modular, parallel, hierarchisch, rekursiv oder unstrukturiert sein können. Eine graphische Darstellung eines solchen allgemeinen Netzes ist exemplarisch in Bild 2.18 wiedergegeben. In diesem Bild sind die Elemente P1-P5 keine Rechenknoten, sondern Cluster von Prozessoren, zwischen denen Subnetze verschiedener Topologie aufgespannt werden. Irreguläre Strukturen werden i.a. nicht als Verbindungsnetzwerke für Parallelrechner verwendet, da sie aufgrund ihrer amorphen Gestalt eine hohe RoutingKomplexität aufweisen. Bei lokalen und globalen Netzen der Telekommunika-

45

P5

P1

P2

P4

P3 Bild 2.18: Allgemeines Netz bestehend aus Subnetzen und Prozessor-Clustern P1-P4.

tion und bei Rechnernetzen sind amorphe Strukturen dagegen die Regel. Deshalb kann in diesen Fällen kein fester Routing-Algorithmus für die Wegewahl existieren. Vielmehr beruht der Informationstransfer auf Routing-Tabellen, deren Einträge die Vernetzung mit den jeweiligen Nachbarknoten eines Routers oder Gateways dokumentieren.

2.4 Verbindungstypen Neben der formalen Darstellung von Verbindungsnetzwerken und ihren grundlegenden Konstruktionsmöglichkeiten ist die Unterscheidung der in einem Netz auftretenden Verbindungstypen und die Berechnung ihrer Anzahl von Bedeutung. Im folgenden soll deshalb ein allgemeines Netz hinsichtlich dieser Kriterien untersucht werden. Gegeben sei ein Verbindungsnetzwerk V gemäß Bild 2.19 mit n∈N daran angeschlossenen Teilnehmern T1 - Tn, die Rechner oder Knoten eines Rechners sein können, wie sie in lokalen Netzen oder in Netzen für Parallelrechner eingesetzt werden.

T1

Tn

V

T2

Tn-1 T3

...

Bild 2.19: Allgemeines Verbindungsnetzwerk zwischen Teilnehmern.

In V lassen sich verschiedene Verbindungstypen für die n gegebenen Netzzugänge (Ports) unterscheiden. Die bekanntesten Verbindungstypen sind die Punkt-zu-Punkt-, Broadcast- und Multicast-Verbindung, bei denen entweder einer an einen, einer an alle oder einer an viele Daten sendet. Die Multi-/Broadcast-Funktionen dienen nicht nur dem reinen Datenaustausch, sondern erlauben 46

auch Prozeßsynchronisation, z.B. um den Start einer parallelen Schleife, die dezentral abgearbeitet wird, von einer zentralen Stelle aus anzustoßen. Daneben gibt es eine Reihe weiterer Kommunikationsformen, die in der Reihenfolge ihres Auftretens weniger häufig sind. Dazu zählen der allgemeine Multi-/Broadcast, der personalisierte Multi-/Broadcast, die Kombination aus beiden sowie deren Inversionen, die hauptsächlich bei der parallelen Programmierung Bedeutung haben und in Kommunikationsbibliotheken wie PVM und MPI Berücksichtigung finden. Allgemeiner Multi-/Broadcast Beim allgemeinen Broadcast schicken alle an das Netz angeschlossenen Sender ihre Daten gleichzeitig an alle Empfänger, so daß am Ende jeder über die Daten der anderen verfügt. Bei der Verallgemeinerung, dem allgemeinen Multicast (viele an viele), kann der Teilnehmerkreis gezielt ausgewählt werden. Die allgemeinen Multi-/Broadcast-Funktionen sind wie der normale Broad-/Multicast zum globalen Datenaustausch und zur Prozeßsynchronisation geeignet, beispielsweise, um am Ende einer Iterationsschleife die Ergebnisse aller Prozessoren schnell und ohne Zuhilfenahme einer zentralen Instanz auszutauschen. Personalisierter Multi-/Broadcast Bei diesem Verbindungstyp wird von einem Sender nicht ein Skalar, sondern ein Vektor von Daten an die übrigen Rechenknoten bzw. einer Teilmenge davon übermittelt, wobei jeder Empfänger ein bestimmtes Vektorelement erhält (einer an viele oder einer an alle). Anwendungen dieses Typs treten u.a. bei parallelisierten numerischen Verfahren der linearen Algebra auf. Allgemeiner personalisierter Multi-/Broadcast Die Kombination der beiden zuvor erläuterten Verbindungstypen entspricht der gleichzeitigen Verbreitung von Datenvektoren nach dem alle an alle- bzw. viele an viele-Schema. Wiederum ist es so, daß dezentral jeder mit Information von jedem anderen versorgt wird, wobei die Datentransfers überlappend ausgeführt werden können, so daß nicht mehr Zeit als in der einer an viele-Variante verbraucht wird. Die aufgeführten Verbindungstypen erlauben, den Informationsfluß umzukehren. Dabei bedeutet eine Richtungsumkehr im Falle der Punkt-zu-PunktVerbindung, daß bidirektional Daten ausgetauscht werden, während beim inversen Multi-/Broadcast Datenreduktionsoperationen ausgeführt werden. Die inversen Operationen der speziellen Verbindungstypen sind folgendermaßen definiert:

47

Inverser Multi-/Broadcast Damit bezeichnet man eine Kommunikationsform, bei der viele oder alle Sender gleichzeitig ihre Daten an einen einzigen Empfänger schicken, der die Daten seinerseits z.B. zu Protokollzwecken sammelt oder eine Datenreduktion damit durchführt. Reduktionsoperationen treten in der Parallelverarbeitung beispielsweise dann auf, wenn eine globale Summe oder das Maximum oder Minimum aus einer Reihe von Werten berechnet werden soll, die auf mehreren Rechnern oder Rechenknoten verteilt sind. Der inverse Multi-/Broadcast kann auch zur Prozeß- oder Rechnersynchronisation verwendet werden, um z.B. das Ende einer parallelen Schleife oder sonstigen verteilten Operation einem übergeordneten Prozessor mitzuteilen. Dazu schickt jeder Teilnehmer sein ReadyBit an den Master, der anhand einer UND-Verknüpfung erkennt, wann alle Prozesse terminiert haben. Inverser allgemeiner Multi-/Broadcast Dies ist die Vereinigung eines inversen Multi-/Broadcasts und eines daran anschließenden (normalen) Multi-/Broadcasts zu einer einzigen Operation. Sein Sinn liegt darin, durch Überlappung der einzelnen Transfers Zeit im Vergleich zur sequentiellen Ausführung zu sparen. Eine Anwendung der Operation ist wiederum bei der Prozeßsynchronisation gegeben, um beispielsweise die Terminierung einer verteilten Operation zentral zu erkennen und allen Prozessoren in einem Schritt mitzuteilen. Wenn in einem anderen Beispiel ein Prozessor beim parallelen Durchsuchen einer Datenbank den benötigten Eintrag gefunden hat, müssen alle anderen Prozessoren/Prozesse davon unterrichtet werden und ihre Suche stoppen. Diese Funktion kann ebenfalls mit dem inversen, allgemeinen Multi-/Broadcast effizient implementiert werden. Inverser personalisierter Multi-/Broadcast Beim inversen personalisierten Multi-/Broadcast werden die Daten, die die Rechenknoten an einen Master schicken, in den Elementen eines Vektors abgespeichert. Der Resultatvektor kann anschließend z.B. mit Hilfe eines Vektorrechenwerks weiterverarbeitet werden. Der inverse, personalisierte Multi-/ Broadcast ist eine Verallgemeinerung des inversen Multi-/Broadcast, weil nicht ein Skalar, sondern ein Vektor erzeugt wird. Inverser allgemeiner und personalisierter Multi-/Broadcast Hier werden gleichzeitig von allen Sendern Vektorelemente zu allen Empfängern geschickt, um einen globalen Datenaustausch durchzuführen. Dies stellt die Zusammenfassung eines inversen, personalisierten Multi-/Broadcasts und

48

eines normalen Multi-/Broadcasts zu einer einzigen Operation dar, die gegenüber einer Ausführung in zwei Einzeloperationen Zeit spart. Schließlich ist der Spezialfall der sog. Konferenzschaltung zu erwähnen, bei dem innerhalb eines festgelegten Teilnehmerkreises nacheinander Multicasts in der Art "einer-an-viele, einer-an-viele, ..." usw. stattfinden, wobei die Zahl der Multicasts von vorneherein nicht feststeht. Die Konferenzschaltung ist dem allgemeinen Multicast vergleichbar, wobei hier die Multicast-Verbindungen nacheinander ausgeführt werden. Konferenzschaltungen haben weniger in der parallelen Programmierung als in der Telekommunikation eine Bedeutung. Sowohl dort als auch bei lokalen und globalen Datennetzen sind Konferenzschaltungen notwendige Voraussetzung für die sog. Telekooperation, bei der räumlich getrennte Mitglieder eines Teams gemeinsam ein Projekt bearbeiten. Im Bild 2.20 sind anhand des Datums a bzw. b, das einem Prozessor 1 bzw. 2 zugeordnet ist, die Wirkungen der wichtigsten Verbindungstypen aufgelistet. Die Darstellung unterscheidet die beiden Zustände "vorher" und "nachher" und im inversen Multi/Broadcast-Fall zusätzlich die Datenfeldelemente a,b,...z, um die Funktionsweise der Verbindungstypen zu erläutern. R(a, b,...,z) stellt einen Reduktionsoperator dar. In Bild 2.21 sind die Funktionen der anderen Verbindungstypen dargestellt. Wiederum wird zur Erläuterung die Wirkung auf ein auf mehrere Prozesssoren verteiltes Datenfeld gezeigt. Im Zustand "vorher" ist je ein Datenelement einem Prozessor zugeordnet. V(a,b,...,z) ist ein Datenvektor für Prozessor 1. Bild 2.22 schließlich zeigt den Fall des personalisierten Multi/Broadcast sowie dessen Umkehrung, die beide zum gleichzeitigen Austausch von Vektoren dienen.

2.4.1 Zahl der Verbindungen Die gezeigten Verbindungstypen sind eine qualitative Darstellung aller in einem Netz möglichen Kommunikationsformen. Im nächsten Schritt geht es um deren quantitativer Erfassung. Die Zahl der Verbindungen, die in einem Netzwerk realisiert werden können, gibt Auskunft über die Blockierungsfreiheit des Netzes. Ein blockierungsfreies Netz kann bei n Ein- und Ausgängen alle potentiell möglichen n! Verbindungen realisieren. Bei der Berechnung der Zahl der Verbindungen muß man unterscheiden, ob jede Verbindung für sich betrachtet werden soll oder ob die Kombinationen der Verbindungen von Interesse ist. Im letzteren Fall muß berücksichtigt werden, wer mit wem kommuniziert, während im ersten Fall nur die Zahl der Möglichkeiten wichtig ist, die sich pro Einzelverbindung ergeben. Im folgenden werden für die am häufigsten vorkommenden Kommunikationsformen von Punkt-zu-Punkt, Multicast- und inverser Multicast-Verbindung die Maximalzahl von Verbindungen berechnet, die in einem Netz vorkommen können. Die Berechnung erfolgt sowohl durch Summation als auch durch Multiplikation der Verbindungen, um die Zahl der Einzelmöglichkeiten und deren Kombinationen angeben zu können.

49

Bezeichnung

Vorher

Typ

Nachher

lokale Daten Punkt-zu-Punkt 1

2

Verbindung

Prozessor 1 a Prozessor 2 Prozessor 3 ... Prozessor n

Inverse Punkt-zu-Punkt

...

...

b b

b 1

a a

2 ...

...

Verbindung

Multi/Broadcast Verbindung

Inverse Multi/Broadcast Verbindung

1 2 3 ... n

1 2 3 ... n

1 2 3 ... n

1 2 3 ... n

a ...

a a a

...

a

a b c z

...

R =Reduktion R (a,b,c,...,z) b c ... z

Bild 2.20: Die Wirkung von Punkt-zu-Punkt-, Multi-/Broadcast-Verbindungen und ihre inversen Funktionen.

Punkt-zu-Punkt-Verbindungen Hierbei ist jeder Sender mit genau einem Empfänger verbunden, so daß eine umkehrbar eindeutige Zuordnung von Sendern zu Empfängern besteht. Für den Sender, der als erstes in das Netz Daten einspeist, hat man potentiell e = s Empfänger zur Auswahl, für den zweiten Sender verbleiben noch e = (s-1) Empfänger, für den 3. Sender noch e = (s-2) Empfänger usw., so daß bei s gleichzeitig aktiven Verbindungen K Kombinationen von Verbindungen möglich sind. Die Zahl K berechnet sich zu: Gl. 2.1:

K = s ⋅ ( s – 1 ) ⋅ … ⋅ 1 = s! = e! , (s=e Verb. gleichzeitig).

Möchte man nur die Summe S der Möglichkeiten der Einzelverbindungen wissen, hat man:

50

Bezeichnung

allgemeine Multi/Broadcast Verbindung

Inverse, allgemeine Multi/Broadcast Verbindung

Vorher

Typ

Nachher

1 2 3 ... n

1 2 3 ... n

a b c z

a b c

1 2 3 ... n

1 2 3 ... n

a b c

R1(a,b,...,z) R2(a,b,...,z) R3(a,b,...,z) ...

...

...

a b c a b c a b c

...

z z z z

Rn(a,b,...,z)

z

R=Reduktion

Personalisierte Multi/Broadcast Verbindung

1 2 3 ... n

1 2 3 ... n

V(a,b,c,...,z) ...

a b c

...

z V=Vektor

Inverse, personalisierte Multi/Broadcast Verbindung

1 2 3 ... n

1 2 3 ... n

a b c

...

V(a,b,c,...,z) b c ... z

z

Bild 2.21: Wirkung der allgemeinen Multi-/Broadcast-, personalisierten Multi-/BroadcastVerbindung und ihrer inversen Abbildungen.

Bezeichnung

Vorher

Nachher

V(a,b,c,...,z) V(a',b',c',...,z') V(a'',b'',c'',...,z'') ...

a a' a'' ... a(n) b b' b'' ... b(n) c c' c'' ... c(n)

V(a(n),b(n),...,z (n))

z z' z'' ... z(n)

Typ

Allgemeine, personalisierte Multi/Broadcast Verbindung

1 2 3 ... n

1 2 3 ... n

Inverse, allgemeine, personalisierte Multi/Broadcast Verbindung

1 2 3 ... n

1 2 3 ... n

a b c z

...

V (a,b,...,z) V (a,b,...,z) V (a,b,...,z) ... V (a,b,...,z) V=Vektor

Bild 2.22: Die allgemeine personalisierte Multi-/Broadcast-Verbindung und ihre inverse Abbildung.

51

Gl. 2.2:

1 1 S = s + ( s – 1 ) + … + 1 = --- s ⋅ ( s + 1 ) = --- e ⋅ ( e + 1 ) 2 2

Wiederum können gleichzeitig s = e Verbindungen gleichzeitig aktiv sein. Normaler Multicast In diesem Fall ist jeder der gegebenen s aktiven Sender mit einem der e Empfänger ( s, e ≤ n ) verbunden, wobei ein Empfänger genau einem Sender, jeder Sender aber mehreren Empfänger zugeordnet sein kann. Das heißt, daß nur bei der Abbildung von Empfängern zu Sendern eine eindeutige Beziehung gegeben ist. Da jeder Empfänger maximal s Sender zur Auswahl hat, mit denen er potentiell verbunden sein kann, gibt es höchstens se Kombinationen von Verbindungen, von denen e in einem Netz gleichzeitig existieren können. Die tatsächliche Zahl von Verbindungen ist kleiner als se, weil nicht berücksichtigt wurde, daß je zwei Empfänger nur dann denselben Sender haben, wenn sie zum selben Multicast gehören. Die Auswahl an Sendern ist deshalb für jeden Empfänger kleiner als s, sobald mehr als ein Multicast im Netz existiert (s>1). Die Berechnung der exakten Zahl von Kombinationsmöglichkeiten ist aufwendig und wird erst im nächsten Kapitel vorgenommen. An dieser Stelle beschränken wir uns auf die Angabe der Obergrenzen für die Zahl K der Kombinationen. K beträgt höchstens: K < se , (s>1 bei e>1 gleichzeitigen Verb.)

Gl. 2.3:

Die Obergrenze für die Summe S der Einzelmöglichkeiten berechnet sich zu:

Gl. 2.4:

S =

⎫ ⎪ ⎪ ⎬ ⎪ ⎪ ⎭

e-mal s+s+…+s

= e ⋅ s , ( s>1,e>1 gleichzeitige Verb.)

Inverser Multicast Beim inversen Multicast ist eine eindeutige Zuordnung bei der Abbildung von Sendern zu Empfängern gegeben, weil jeder Sender genau einem Empfänger zugeordnet ist, während ein Empfänger mit mehreren Sendern verbunden sein kann. Die Obergrenze für die Zahl der Kombinationen berechnet sich gemäß Gl. 2.5 in analoger Weise wie beim Multicast-Fall. Für die Summe der Einzelmöglichkeiten gilt Gl. 2.6. Man erhält diese Gleichungen alternativ dadurch, daß man in Gl. 2.3 und Gl. 2.4 die Rollen von Sender und Empfänger vertauscht. Gl. 2.5:

K < es, (e>1, s>1 gleichzeitige Verb.) 52

Gl. 2.6:

⎫ ⎪ ⎪ ⎬ ⎪ ⎪ ⎭

s – mal S< e+e+…+e

= s⋅e

2.4.2 Gesamtzahl der Verbindungen In vielen Fällen möchte man die Gesamtzahl der Verbindungen wissen, die ein Netz realisieren kann, und nicht nur die Zahl der Punkt-zu-Punkt-, Multicastund inversen Multicast-Verbindungen. Dazu muß man alle existierenden Verbindungstypen bei der Abbildung von Sendern auf Empfängern, d.h. von Netzeingängen auf -ausgängen, berücksichtigen. Um die Gesamtzahl der Verbindungen zu bestimmen, betrachtet man die Verbindungen zwischen Sendern und Empfängern als die Abbildung eines Sendevektors S auf einen Empfangsvektor E . Die Vektoren S und E repräsentieren dabei die geordnete Folge von Sendern und Empfängern, die an den Ein-/Ausgängen des Netzes angeschlossen sind. Die Gesamtzahl der Verbindungen wird durch die Menge aller Abbildungen E = V ⋅ S bestimmt, wobei V das Verbindungsnetzwerk darstellt. Der entscheidende Schritt ist, daß V als eine nxn-Matrix angesehen wird, deren Elemente die Boolschen Werte "verbunden" oder "nicht verbunden" annehmen können. Aus der Variation der Elemente von V ergibt sich die Menge aller Abbildungen. n

2

Bei n2 Boolschen Elementen, aus denen V besteht, gibt es 2 verschiedene Zustände der Art "verbunden/nicht verbunden", so daß die Gesamtzahl der n

2

Kombinationen von Verbindungen ebenfalls gleich 2 wird. Dieser Wert erfaßt alle Fälle, so daß in einem Netz bei n gleichzeitig aktiven Sendern und Empfängern maximal Gl. 2.7:

K = 2

n

2

Kombinationen von Verbindungen verschiedener Verbindungstypen auftreten können. Die Berechnung der Gesamtzahl der Kombinationen nach Gl. 2.7 unterscheidet nicht nach einzelnen Teilnehmern oder Teilnehmergruppen, sondern betrachtet das Netz als Ganzes. Eine genauere Differenzierung des Netzwerkverkehrs ist manchmal wünschenswert. Eine Differenzierung nach Teilnehmergruppen erlaubt beispielsweise eine exakte Berechnung der Zahl der Mulitcast und inversen MulticastKombinationen, von denen im vorigen Kapitel nur die Obergrenzen angegeben wurden. Die Unterscheidung nach Teilnehmergruppen erlaubt weiterhin, qualitative Aussagen über den Verkehr auf dem Netz zu machen und optimierte Rou-

53

ting-Strategien anzugeben, sofern man zusätzlich weiß, welche Teilnehmer mit welchen häufig kommunizieren.

2.4.3 Nach Teilnehmergruppen differenzierte Verbindungen Man kann die Verbindungen, die in einem Netz vorhanden sind, dergestalt differenzieren, daß man einzelne Teilnehmergruppen bildet, in denen jeweils ein bestimmter Verbindungstyp existiert. Dabei sind als Verbindungstypen die Punkt-zu-Punkt-Verbindung, der normale Multicast, der personalisierte Multicast, der allgemeine Multicast, der allgemeine, personalisierte Multicast und deren Umkehrungen von besonderem Interesse, weil diese in einem Netz gleichzeitig auftreten können. Dasselbe gilt für die Punkt-zu-Punkt-Verbindungen, die ebenfalls zur selben Zeit in einem Netz vielfach existieren können und die als Spezialfall im Multicast enthalten sind, wenn man auf jeden Sender genau einen Empfänger schaltet. Der Verkehr in einem Netz besteht entweder aus mehreren, simultan existierenden Verbindungen der genannten Typen oder es gibt genau eine Broadcast-Verbindung, die definitionsgemäß das ganze Netz umfaßt. Der BroadcastVerbindungstyp erlaubt keine Differenzierung nach Teilnehmergruppen, weil zu einem Zeitpunkt nur ein Broadcast-Typ (normaler Broadcast, allgemeiner Broadcast, personalisierter Broadcast, allgemeiner, personalisierter Broadcast und deren Umkehrungen) auftreten kann. Innerhalb eines Broadcast-Typs gibt es jedoch entsprechend den n Netzeingängen, an die man den Broadcast-Sender anlegen kann, n Broadcast-Möglichkeiten. Im folgenden soll die Zahl der Kombinationen für ein Netz berechnet werden, in dem als Verbindungstypen die Punkt-zu-Punkt-Verbindung sowie der normale und der personalisierte Multicast und deren Umkehrungen erlaubt sind. Dabei soll berücksichtigt werden, wer mit wem verbunden ist und wer zu welcher Teilnehmergruppe gehört. Dies ist ein für die Praxis besonders interessanter Fall. Zur Berechnung der Kombinationszahl zerlegt man die Menge A der sendenden und empfangenden Netzwerkanschlüsse in einzelne Teilmengen, die jeweils einer Teilnehmergruppe entsprechen. (Bei der Zerlegung handelt es sich nicht um eine Klassenzerlegung von A im mathematischen Sinne, weil es erlaubt ist, daß verschiedene Teilnehmergruppen denselben Verbindungstyp, d.h. dieselbe Klasse haben können.) Nach der erfolgten Zerlegung in Teilnehmergruppen (Teilmengen) kann man eine Reihe von Aussagen machen. In einem Netz mit n bidirektionalen Netzwerkanschlüssen gilt für die Zahl der Elemente (=Sender oder Empfänger), die in A enthalten sind: Gl. 2.8:

A = 2n .

Bezeichnet man die Teilmengen, die einer Teilnehmergruppe eines bestimmten Verbindungstyps zugeordnet sind, mit U i ⊆ A , dann läßt sich über Ui folgendes feststellen: 54

Ist die i. Teilmenge vom Punkt-zu-Punkt-Typ, dann gilt Gl. 2.9, da sie genau einen Sender und einen Empfänger enthält. Ui = 2 ,

Gl. 2.9:

Besteht die i. Teilmenge aus einem inaktiven Teilnehmer, dann hat man Gl. 2.10:

Ui = 1 ,

da der inaktive Teilnehmer mit niemandem anderen Daten austauscht. Umfaßt die i. Teilmenge alle Empfänger, erhält man einen Broadcast von einem Sender auf n Empfänger: Gl. 2.11:

Ui = n + 1

Die Zahl u der nichtleeren Teilmengen Ui, in die A zerlegt werden kann, ist gleich n, wenn alle Ports inaktiv sind. Andererseits kann die Zahl der Elemente, die in einem speziellen U i enthalten sind, ebenfalls höchstens gleich n werden. Daraus ergibt sich insgesamt : 1 ≤ U i ≤ n . für n ≥ u ≥ i ≥ 1

Gl. 2.12:

Faßt man alle Teilmengen, die nur ein Element enthalten, zur Menge NA (NA= "nicht angeschlossen") der inaktiven Teilnehmer zusammen, wird die ursprüngliche Menge A der Netzwerkanschlüsse zu einem bestimmten Zeitpunkt t so in verschiedene Teilmengen zerlegt, daß gilt: Gl. 2.13:

A = U 1 ∪ U 2 ∪ U 3 ∪ … ∪ U u ∪ NA ,

wobei alle U i mindestens zwei Elemente (1 Sender und 1 Empfänger) enthalten müssen. Gl. 2.13 ist eine vollständige Zerlegung von A in disjunkte Teilmengen, so daß die Teilmengen überschneidungsfrei sind: u

∧ i, j = 0

Ui ∩ Uj = ∅

i≠j

Das bedeutet, daß kein Sender oder Empfänger gleichzeitig in mehr als einer Teilmenge (Teilnehmergruppe) enthalten ist. Die Zahl der Kombinationen von Verbindungen, die in einem Netz auftreten können, ist identisch mit der Anzahl der Arten, in die sich A zerlegen läßt. Jede Teilmenge U i ⊆ A repräsentiert dabei eine der genannten Verbindungstypen 55

Punkt-zu-Punkt, Multicast, personalisierter Multicast oder deren Umkehrungen. Die Zahl der Zerlegungen (Kombinationsanzahl) kann sehr groß werden. Beschränkt man sich z.B. nur auf die Punkt-zu-Punkt-Verbindungen, erhält man bei n gleichzeitig aktiven Teilnehmern n! Permutationen [Vogel74] potentieller Verbindungen. Im Falle des Parallelrechners CM-5 [Leiserson92] z.B. haben wir im Vollausbau ein Verbindungsnetzwerk, das 16 K Prozessoren miteinander koppelt. Dieses Netz muß deshalb 16 K! (≈10160000 verschiedene Punkt-zuPunkt-Verbindungen schalten können. (Zum Vergleich: Die Zahl der Atome im Universum beträgt "nur" ca. 1065.) Die Realisierung aller Punkt-zu-Punkt-Verbindungen stellt also hohe Anforderungen an das Verbindungsnetzwerk. Bei Realisierung aller Verbindungstypen ist die Zahl der Kombinationen noch wesentlich größer.

2.4.4 Berechnung der Zahl der Teilnehmergruppen Um die Zahl verschiedener Teilnehmergruppen, die gleichzeitig in einem Netz existieren können, zu bestimmen, muß die Anzahl der Zerlegungen von A berechnet werden. Für eine anschauliche Herleitung der Zerlegung gehen wir zunächst davon aus, daß in jeder Teilmenge Ui derselbe Multicast-Verbindungstyp existiert. Als Typ wählen wir den einfachsten Fall, den normalen Multicast, der den Punkt-zu-Punkt-Typ als Spezialfall enthält, wenn man die Zahl der Empfänger, die an jeden Sender angeschlossen sind, gleich Eins setzt. Zur Berechnung der Zahl von Zerlegungen in normale Multicasts geht man von folgender Überlegung aus: Der erste Sender, der Daten in ein gegebenes Netz einspeist, kann potentiell aus einem Vorrat von n Empfängern einen bestimmten Empfänger (sich selbst eingeschlossen) auswählen. Für die Auswahl des 2. Empfängers, der zum Multicast gehört, verbleiben für den 1. Sender noch (n-1) Empfänger, für den 3. Empfänger noch (n-2) Empfänger usw. Am Ende der Empfängerauswahl des 1. Senders sollen i1 Empfänger vom 1. Sender ausgewählt worden sein. (i1 stellt also die Zahl der an den 1. Sender angeschlossenen Empfänger dar, mit 0 ≤ i1 ≤ n). Entsprechend verbleiben für den 2. Sender, der gleichzeitig zum 1. Sender Daten in ein Netz einspeist, noch (n-i1) Empfänger für seinen Multicast. Der zweite Sender wählt aus den verbliebenen (n-i1) Empfängern „seine" i2 Empfänger aus, danach folgt der 3. gleichzeitig aktive Sender usw. Am Ende des Auswahlprozesses sind alle n maximal möglichen Sender mit ihren i1 bis in Multicast-Empfängern verbunden, und es gilt für die Summe aller Empfänger: Gl. 2.14:

i1 + i2 + … + in ≤ n .

Durch die Zerlegung nach Gl. 2.14 wird für jede Teilmenge Ui die Zahl ihrer Elemente gemäß U 1 = i 1 + 1, U 2 = i 2 + 1, …, U n = i n + 1 , festgelegt, da zur j-ten Teilnehmergruppe ij Empfänger sowie ein Sender gehören. Somit gilt: 56

n



Gl. 2.15:

Uj = ij + 1 .

j=1

An dieser Stelle ist zu beachten, daß Gl. 2.15 die Menge NA der inaktiven Anschlüsse, die im vorigen Kapitel definiert worden ist, mit enthält, da in Gl. 2.14 auch ij = 0 zugelassen ist. Es gilt in diesem Fall: U j = 1, ( i j = 0 ) . Die Teilmenge Uj besteht also aus einem inaktiven Sender j als einzigem Element. In Gl. 2.14 ist die Zahl aller Punkt-zu-Punkt-Verbindungen ebenso mit berücksichtigt, wenn man für einen beliebigen Sender j die Zahl seiner Empfänger gleich 1 setzt. Dann hat man U j = 2 , da die Teilmenge aus zwei Teilnehmern (Sender und Empfänger) besteht (ij = 1). Schließlich berücksichtigt Gl. 2.14 auch den Broadcast-Fall, wenn für U j = n, ( i j = n ) gilt und alle anderen Indizes i k = 0 ( k ≠ j ) sind. Zusammengefaßt kann man sagen, daß sich bei n Sendern mit Multicast höchstens n Gruppen von Empfängern bilden können, wobei in jeder Gruppe zwischen 0 und n Empfänger erlaubt sind. Insgesamt darf die Summe aller Empfänger aus allen Gruppen die Zahl n der Netzanschlüsse nicht übersteigen. Empfängerauswahl Für die Wahl der i1 Empfänger der 1. Empfängergruppe, die vom 1. Sender ausn gewählt werden, gibt es ⎛ ⎞ Möglichkeiten [Hockney85], da die Reihenfolge ⎝ i 1⎠ innerhalb einer Multicast-Gruppe keine Rolle spielt. Entsprechend gibt es für ⎛ n – i 1⎞ die Wahl der i2 Mitglieder der 2. Empfängergruppe noch ⎜ ⎟ Mög⎝ i2 ⎠ lichkeiten, usw., so daß für den letzten, d.h. n. Sender schließlich ⎛ n – i 1 – i 2 – … – i n – 1⎞ ⎜ ⎟ Möglichkeiten der Empfängerauswahl übrigbleiben. in ⎝ ⎠ Da sich die Gesamtzahl der Möglichkeiten aus dem Produkt der Einzelmöglichkeiten ergibt, erhält man in einem allgemeinen Verbindungsnetzwerk insgen ⎛ n – i 1⎞ ⎛ n – i 1 – i 2 – … – i n – 1⎞ samt K = ⎛ ⎞ ⎜ … ⎟ Multicast-Kombinationen. ⎝ i 1⎠ ⎝ i ⎟⎠ ⎜⎝ i ⎠ 2

n

Dies läßt sich auch schreiben als [Richter95b]:

57

n

Gl. 2.16:

j–1

F K = ∏ ⎛ j⎞ mit F = n – ⎝ ij ⎠ j=1

∑ il l=1

Die Randbedingungen, die dabei beachtet werden müssen, sind: j–1

Gl. 2.17:

0 ≤ i j ≤ F j , bei

∑ il ≤ n für j > 1 . l=1

In Gl. 2.16 stellt K die Zahl der Multicast-Kombinationen zwischen Sendern und Empfängern dar, die in einem beliebigen Netz bei n Sendern und deren Empfängergruppen zu höchstens n Empfängern möglich ist. K ist eine Funktion der Variablen i1 bis in, die die Anzahl der Empfänger je Gruppe festlegen. Die Zahl n der Netzwerkanschlüsse ist ein freier Parameter. Wenn man in Gl. 2.16 die Variablen für "Sender" mit denen für "Empfänger" vertauscht, gilt Gl. 2.16 auch für die Berechnung der Zahl der inversen Multicasts, die gleichzeitig in einem allgemeinen Netz auftreten können. Dieselbe Dualität (d.h. Austauschbarkeit von Sender durch Empfänger) gilt ebenfalls für die anderen beschriebenen Resultate. Man kann sich Gl. 2.16 folgendermaßen veranschaulichen: K kann als das Volumen eines n-dimensionalen Quaders gedeutet werden, der aus n aufein⎛ F j⎞ ander senkrechten Achsen der Länge ⎜ ⎟ besteht. Die Längen der Koordina⎝ ij ⎠ tenachsen entsprechen der Zahl der Möglichkeiten, die es gibt, um die Zusammensetzung der max. n Empfängergruppen festzulegen. Spezialfälle Gl. 2.16 enthält drei bekannte Beispiele als Spezialfälle. Den ersten Spezialfall erhält man für i1 = i2 =...= in = 1. Dann gilt: Gl. 2.18:

n n – 1⎞ ⎛ n – 2⎞ n – ( n – 1 )⎞ K = ⎛ ⎞ ⋅⎛ ⋅ ⋅…⋅⎛ = n! , ⎝ 1⎠ ⎝ 1 ⎠ ⎝ 1 ⎠ ⎝ ⎠ 1

Man erhält also alle Punkt-zu-Punkt-Abbildungen, die bei n Ein-/Ausgängen in einem Netz möglich sind. Der zweite Spezialfall ergibt sich für i1= n und i2 = i3=...= in= 0. Die Zahl K der Kombinationen läßt sich berechnen zu: n n n – n⎞ ⎛ n – n⎞ n – n⎞ 0 ⋅ ⋅…⋅⎛ = ⎛ ⎞ = 1 , mit ⎛ ⎞ = 1 . Gl. 2.19: K = ⎛ ⎞ ⋅ ⎛ ⎝ n⎠ ⎝ 0 ⎠ ⎝ 0 ⎠ ⎝ 0 ⎠ ⎝ n⎠ ⎝ 0⎠

58

Dies stellt den Broadcast vom 1. Sender zu allen Empfängern dar, wofür es selbstverständlich genau eine Kombinationsmöglichkeit gibt. Der dritte Spezialfall von Gl. 2.16 ist dann gegeben, wenn jeder der möglichen n Empfänger mit einem Sender verbunden ist, d.h. die Zerlegung von A in disjunkte Gruppen vollständig aus aktiven Ports besteht, NA also gleich Null ist. Dann gilt: n

∑ ij = n, ( 0 ≤ ij ≤ n ) , für

Gl. 2.20:

NA = 0 .

j=1

Mit Gl. 2.20 als Zusatzbedingung läßt sich Gl. 2.16 vereinfachen in [Bronstein83]: n! K = ------------------------i 1!i 2!…i n!

Gl. 2.21:

Der Fall der Aufteilung von empfangenden Netzwerkanschlüssen auf Empfängergruppen gemäß Gl. 2.20 stellt eine vollständige Zerlegung ohne Rest der Menge A der Netzwerkanschlüsse dar. Schließlich kann man noch eine Abschätzung über die Zahl der Kombinationen angeben: n 2

Gl. 2.22:

2

(n )

n! » n » n! ≥ ------------------------- ≥ i 1!i 2!…i n! n

Fj

∏ ⎛⎝ ij ⎞⎠ .

j=1

2.4.5 Zusammenfassung Die Resultate der Betrachtungen über die Verbindungskombinationen sind in Tabelle 2.1 zusammengefaßt.

2.5 Datentransport in Netzen 2.5.1 Einleitung Die Aufgabe eines Verbindungsnetzwerks ist es, in einem Parallelrechner oder Rechnernetz effizient Information zwischen kommunizierenden Teilnehmern bzw. Rechenknoten zu übertragen. Der Informationstransport mit Hilfe eines statischen oder dynamischen Verbindungsnetzwerks erfordert die Festlegung einer Reihe technischer Parameter. Dazu zählen beispielsweise die Frage, ob die Daten formatiert übertragen werden sollen, ob die Verbindungen zwischen

59

Gesamtzahl der Verbindungskombinationen in einem Netzwerk mit n bidirektionalen Ports:

K = 2

n

2

Zahl der Verbindungskombinationen, wenn nur Punkt-zu-Punkt-, Multicast- oder personalisierte Multicast-Verbindungen sowie deren Umkehrungen auftreten (mit Aufschlüsselung nach Teilnehmergruppen der Stärke ): n

K =



j=1

⎛ F j⎞ j–1 ⎜ ⎟ , mit F j = n – ∑ il ⎝ ij ⎠ l=1

und

0 ≤ ij ≤ Fj

j–1 (

∑ il ≤ n für j>1).

l=1

Vereinfachung, wenn alle Netzwerkanschlüsse gleichzeitig senden und/oder empfangen:

n! K = ------------------------i 1!i 2!…i n!

Tabelle 2.1: Zahl der Verbindungskombinationen in einem Netzwerk.

Sender und Empfänger permanent oder transient sind, ob Wege zentral oder dezentral ausgewählt werden und ob bzw. wie eine Flußsteuerung (Flow Control) vorgenommen werden soll. Entsprechend kann man den Datentransport in die Aspekte Verbindungsart, Verbindungsaufbau und -steuerung, sowie Paketformat und Routing untergliedern. Eine graphische Darstellung dieser Gliederung ist in Bild 2.23 gezeigt. Datentransport

Verbindungsart

Verbindungsaufbau

LeitungsPaket-

Verbindungssteuerung Paketformat Routing

statisch

zentral

dynamisch

dezentral

Nachrichtenvermittlung

Kopf

Adreßdekodierung

Daten

Wegewahl

Ende

Flußsteuerung

Bild 2.23: Klassifikation des Datentransports.

In den folgenden Kapiteln wird jeder der in Bild 2.23 dargestellten Parameter näher erläutert.

60

2.5.2 Verbindungsart Grundsätzlich gibt es in einem Netz drei Möglichkeiten, eine Verbindung zwischen einem Sender und einem Empfänger aufzubauen, die als Leitungsvermittlung, Paketvermittlung und Nachrichtenvermittlung bezeichnet werden. Die ersten beiden Arten sind sehr unterschiedlich in ihren Eigenschaften, während die dritte eine Kombination aus beiden darstellt. Im einzelnen gilt: Leitungsvermittlung wurde ursprünglich auf dem Gebiet der Telefonvermittlungstechnik eingesetzt und danach auf Parallelrechnernetze übertragen. Bei Leitungsvermittlung wird eine physikalische Verbindung zwischen den Teilnehmern (Rechenknoten) hergestellt, die auf der Koppelung aller Teilstrecken, die zwischen Sender und Empfänger liegen, beruht. Wesentlich dabei ist, daß der durch das Zusammenschalten von Leitungen etablierte Pfad für die gesamte Dauer der Informationsübermittlung physikalisch bestehen bleibt. Die Daten werden auf dem Pfad durch das Netz unformatiert übertragen; insbesondere ist keine Adresse und kein Paketendezeichen erforderlich, so daß nach der Aufbauphase der Verbindung eine hohe Nettodatenrate möglich ist. Weiterer Verwaltungsaufwand fällt bis zum Abbau der Verbindung nicht mehr an. Der Nachteil von Leitungsvermittlung liegt darin, daß die Kommunikationskanäle, die den Datenpfad bilden, während der Verbindung für andere Kommunikationszwecke nicht zur Verfügung stehen, da sie fest alloziert zur aufgebauten Verbindung sind. Dies bewirkt häufig eine schlechte Ausnutzung der im Netz vorhandenen Kanäle. Aus diesem Grunde wird Leitungsvermittlung bei Netzen für Parallelrechner nur noch selten angewandt. Paketvermittlung vermeidet den Nachteil der Ressourcen-Blockierung, indem sie die Nutzinformation in einzelne physikalische Abschnitte (Pakete) unterteilt, die nur für die Dauer der Übertragung von einem Knoten zu seinem Nachbarknoten den dazwischen liegenden Kanal belegen. Die Interprozessorkommunikation besteht in diesem Fall aus dem Austausch einzelner Datenpakete. Gehören mehrere Pakete logisch zueinander, werden sie zu einer Nachricht zusammengefaßt, die als übergeordnete Verwaltungseinheit dient. Die einzelnen Bytes, aus denen ein Paket besteht, können mit den Waggons eines Zuges verglichen werden. Dieser benötigt zur freien Fahrt nur den Strekkenabschnitt, auf dem er sich gerade befindet. Wenn er einen Gleisabschnitt passiert hat, steht die Teilstrecke für andere Züge (Pakete) wieder zur Verfügung. Das bedeutet, daß an einem physikalischen Kanal mehrere logische Datenströme im Zeitmultiplex-Verfahren übertragen werden können. Diese werden als virtuelle Kanäle bezeichnet. Bei Parallelrechnernetzen mit Paketvermittlung erfordert die Mehrfachausnutzung der Kanäle einen erhöhten Verwaltungsaufwand, da jedes Paket mit einer Zieladresse versehen werden muß, weil sonst unklar ist, wer der Empfänger ist. Zusätzlich sind für das Multiplexen unterschiedlicher Nachrichten auf demselben physikalischen Kanal eine Herkunftsadresse sowie weitere Verwaltungsinformation wie Nachrichtenanfang, Nachrichtenende und Paketnummer

61

erforderlich, um eine ungestörte Durchmischung der Pakete verschiedener Nachrichten zu gewährleisten. Der beschriebene Verwaltungsaufwand, der bei Paketvermittlung anfällt, bewirkt, daß die Nettodatenrate kleiner als bei der Leitungsvermittlung ausfällt. Insbesondere bei langen Nachrichten, die am Stück übertragen werden, ist Leitungsvermittlung effizienter; auch, weil keine zusätzlichen Zeiten zur Inspektion der Zieladressen in den einzelnen Zwischenknoten anfallen. Trotzdem wird bei Parallelrechnernetzen Paketvermittlung bevorzugt, da eine gute Ausnutzung der Kommunikationskanäle die Effizienz der Programmausführung und damit des Parallelrechners erhöht. Schließlich ist es zur Übertragung jedes Pakets erforderlich zu wissen, welcher Weg durch das Netz der beste, d.h. schnellste oder kürzeste, ist. Diese Frage stellt sich bei der Leitungsvermittlung nur einmal, nämlich am Anfang einer Interprozessorkommunikation zum Aufbau des Pfades. Nachrichtenvermittlung ist eine Mischung aus Paket- und Leitungsvermittlung. Sie versucht, die Vorteile beider Vermittlungsarten zu kombinieren, indem sie Nachrichten nicht in kleine Pakete unterteilt, sondern am Stück als ein großes Paket überträgt. Ein Durchmischen der Nachrichten auf Paketbasis entfällt dadurch ebenso wie der damit verbundene Verwaltungsaufwand, was sich positiv auf die Übertragungsbandbreite auswirkt. Die genannten Vorteile werden allerdings damit erkauft, daß sich die durchschnittliche Latenzzeit der Interprozessorkommunikation bei langen Nachrichten deutlich erhöht, was wiederum die Effizienz einer parallelen Anwendung senkt. Zusammenfassend kann gesagt werden, daß Paketvermittlung sich besonders für kurze Botschaften eignet, während Leitungsvermittlung bei sehr langen Nachrichten günstiger ist. Botschaften mittlerer Länge können am besten mit Nachrichtenvermittlung übertragen werden. Da die drei Vermittlungsarten in einem Verbindungsnetzwerk unterschiedliche technische Einrichtungen und Abläufe erfordern, ist es nicht möglich, abhängig von der Nachrichtenlänge eine der drei Arten dynamisch auszuwählen. Vielmehr muß man sich von Anfang an festlegen. Bei Paketvermittlung kann man durch die Wahl kleiner bis mittlerer Paketlängen eine ausreichende Bandbreite bei gleichzeitig niedriger Latenz und guter Ressourcen-Auslastung erreichen, und deshalb wird Paketvermittlung bevorzugt.

2.5.3 Verbindungsaufbau Der Aufbau einer Verbindung kann entweder statisch oder dynamisch erfolgen. Bei statischem Aufbau wird zur Übersetzungszeit des Programms festgestellt, welche Interprozessorkommunikationen durchgeführt werden sollen, und diese werden als ein Teil des Programmladens im Verbindungsnetzwerk hergestellt. Jede Verbindung bleibt während der gesamten Ausführung der parallelen Anwendung bestehen. Neue Verbindungen können nicht realisiert werden. Ein statischer Verbindungsaufbau ist für diejenigen parallelen Anwendungen ausreichend, bei denen gemäß einfacher Muster (Regeln) kommuniziert wird.

62

Dies ist z.B. bei allen systolischen Algorithmen der Fall, aber auch bei Verfahren aus der Bildverarbeitung und bei Matrizenarithmetik. Ein dynamischer Verbindungsaufbau kann Datenabhängigkeiten, die erst zur Laufzeit bekannt werden, berücksichtigen und nicht mehr benötigte Verbindungen ab- und neue aufbauen. Der dynamische Verbindungsaufbau ist flexibler, aber er erfordert eine schnelle Rekonfigurierbarkeit des Netzes sowie einen erhöhten Betriebssystemaufwand, um die Verbindungswünsche effizient und sicher herstellen zu können. Üblicherweise wird bei Parallelrechnernetzen ein dynamischer Verbindungsaufbau gewählt.

2.5.4 Verbindungssteuerung Die Entscheidung, über welche Zwischenknoten ein Datenpaket zum Ziel gelangt, bzw. über welche Streckenabschnitte ein unformatiertes Datum zum Empfänger transportiert wird, kann entweder von einer einzigen zentralen Instanz, die ein besonderer Knoten oder ein Host-Rechner sein kann, getroffen werden oder sie wird von vielen lokalen Knoten in dezentraler Art und Weise vorgenommen. Man spricht deshalb entweder von zentraler oder von lokaler Verbindungssteuerung. Eine zentrale Steuerung des Verbindungsaufbaus hat den Vorteil, daß die Verbindungswünsche, die von den Rechenknoten an sie herangetragen werden, so realisiert werden können, daß ein globales Optimum bzgl. des Datendurchsatzes und der Latenzzeit entsteht, vorausgesetzt, das Netzwerk bietet verschiedene Alternativen in der Wegewahl. Zentrale Steuerungen haben deshalb das Potential, ein Netz besonders effizient nutzen zu können. Leider sind mit einer zentralen Instanz auch mehrere Nachteile verbunden: Um Wartezeiten bei einem für alle Knoten gemeinsamen Verbindungs-Server zu vermeiden, muß dieser erheblich schneller als die Wünsche seiner Klienten sein, was sich nur für eine kleine Kundenzahl realisieren läßt. Große Parallelrechnersysteme können deshalb nicht auf einer gemeinsamen Verbindungssteuerung beruhen, da diese einen Engpaß darstellen würde. Darüberhinaus hat eine zentrale Instanz den Nachteil, daß das ganze System bei deren Ausfall blockiert würde. Deshalb ist bei fehlertoleranten und/oder massiv parallelen Rechnern eine auf mehrere oder alle Knoten verteilte Verbindungssteuerung das Mittel der Wahl. Allerdings ist nicht bei allen Netztypen eine Dezentralisierung machbar. Die Kategorie der mehrstufigen Netze z.B., die nur durch Umordnen interner Wege blockierungsfrei ist (rearrangable non blocking networks), erfordern eine zentrale Vergabe aller Teilstrecken im Netz, da sonst nicht alle Verbindungswünsche realisiert werden können. Die mit diesen Netzen verbundenen Wegesuchalgorithmen werden auf einem einzigen Verbindungs-Server sequentiell ausgeführt. Eine Parallelisierung der Algorithmen und deren verteilte Ausführung auf einer beliebigen Zahl von Knoten, z.B. entsprechend der Zahl der Prozessoren im System, ist oft nicht möglich oder wünschenswert. Beispiele für Netze, bei denen eine Dezentralisierung schwierig ist, sind das Benes-

63

und das Clos-Netz, die beide leitungs- oder paketvermittelnd betrieben werden können. Dezentrale Verbindungssteuerungen werden überwiegend in statischen Verbindungsnetzwerken, aber auch in Banyan-Netzen eingesetzt, die zur Kategorie der dynamischen Netze gehören. Bei diesen Netztypen existieren eine Reihe von Verfahren, wie Datenpakete lokal, d.h. von den einzelnen Rechen- oder Schaltknoten durch das Netz gelotst werden können. Dezentrale Verbindungssteuerungen bieten Vorteile bzgl. Fehlertoleranz und Skalierbarkeit. Allerdings gibt es auch Nachteile: Zum einen sind die spezifischen Algorithmen zur Wegewahl primär auf paketvermittelnde Netze beschränkt. Ein Anwendung auf Leitungsvermittlung ist schwierig, weil die Kopplung verschiedener Teilstrecken zu einem gemeinsamen Pfad vom Charakter her zentralistisch ist. Zum anderen erfordert die Erzielung eines globalen Optimums von Netzdurchsatz und Latenzzeit, daß die einzelnen Knoten Kenntnis über die Wegeentscheidungen der Nachbarknoten haben. Insbesondere muß jeder Knoten bei seiner Routingentscheidung für eine effiziente Netzauslastung die momentane Verkehrsbelastung der anderen Knoten berücksichtigen. Ist die Information über die Verkehrssituation anderer Knoten nicht vorhanden, können nur lokale, aber keine globalen Optimierungen getroffen werden. Leider kann auch bei gegenseitigem Austausch der Verkehrsbelastung ein globales Optimum deshalb nicht erreicht werden, weil die Daten entfernter Knoten aufgrund der endlichen Signalausbreitungsgeschwindigkeit in der Regel erst dann zur Routing-Entscheidung eintreffen, wenn sie bereits veraltet sind, da sich die Verbindungsanforderungen schnell ändern können. In der Praxis sind dezentrale Verbindungssteuerungen mit gegenseitigen Austausch der Verkehrsbelastungen trotzdem vorteilhaft, da sie aufgrund ihrer Adaptivität der Wegewahl zur Leistungssteigerung der Rechnersystems beitragen. Bei Parallelrechnernetzen und lokalen Netzwerken ist deshalb Paketvermittlung mit dezentraler Verbindungssteuerung die häufigste Betriebsart.

2.5.5 Paketformate Bei paketvermittelnden Netzen müssen die Daten, bevor sie ins Netz eingespeist werden, formatiert, d.h. in Pakete verpackt werden. Für die Nachrichtenformatierung läßt sich ein genereller Aufbau angeben, der in drei Hierarchieebenen gegliedert ist, die wiederum aus einzelnen Abschnitten bestehen. Das Prinzip des Nachrichtenaufbaus ist in Bild 2.24 gezeigt. Auf der obersten Hierarchieebene bestehen Nachrichten aus einer Reihe von Datenpaketen, die von einem Kopf- und einem Endepaket eingerahmt sind, um so Beginn und Ende der Nachricht zu kennzeichnen. Einzelne abgesendete Pakete werden vom Empfangsprozeß zwischengespeichert und dort zur ganzen Nachricht wieder zusammengesetzt. Auf der mittleren Hierarchieebene ist jedes Paket in Nutzdaten und Verwaltungsinformation gegliedert, die wiederum aus einzelnen Abschnitten wie

64

Ziel- und Herkunftsadresse bestehen. Verwaltungsinformationen werden von den Vermittlungseinrichtungen des Verbindungsnetzwerkes, Nutzdaten von den Rechenknoten ausgewertet. Eine laufende Paketnummmer wird für die Fälle mit übertragen, wo Pakete in anderer Reihenfolge, als sie abgeschickt werden, empfangen werden können, um so die korrekte Sequenz der Pakete nach dem Empfang wiederherzustellen. Eine Herkunftsadresse wird vom Empfänger für den Fall benötigt, daß virtuelle Kanäle vorhanden sind, um das Paket anhand dieser Angabe dem richtigen logischen Empfangskanal zuordnen zu können (Paket-Demultiplexen).

Nachricht (Botschaft)

Kopfpaket (Header)

Datenpaket 1

Herkunfts- Paket Zieladresse adresse Nr.

Daten- . . . Datenpaket 2 paket n

Datenblock

Endepaket (Trailer)

Paket- Nachrichtenendeendezeichen zeichen

Flit Flit . . . Flit (Phit) (Phit) (Phit)

Bild 2.24: Hierarchischer Aufbau einer Nachricht.

Auf der untersten Ebene (Transportschicht) sind die Daten in elementare Transporteinheiten, den Physical Transfer Units (Phits), zerlegt und diese werden bitseriell, byteparallel oder wortparallel übertragen. Wird auf dieser Ebene eine Flußsteuerung vorgenommen, um eine Datenüberflutung des Netzes oder des Empfängers zu vermeiden, heißen die Phits Flow Control Digits (Flits). Eine Cray T3D beispielsweise verwendet 16 Bit breite Flits zur Informationsübertragung. Die IBM SP2 arbeitet mit 8 Bit breiten Flits. Der geschilderte, dreifach gegliederte und mehrfach in Abschnitte unterteilte Nachrichtenaufbau ist bei den meisten Formaten nicht vollständig implementiert; z.B. wird ein Kopf- und Endepaket nur dann übertragen, wenn eine Verbindung explizit auf- und wieder abgebaut werden muß (Connection Oriented Protocol). Dementsprechend können Pakete je nach Format eine feste Länge aufweisen oder variabel lang sein, und sie können alle Abschnitte der Ebenen 2 und 3 enthalten oder nur Teile davon. Beispiel: Der Kopfteil eines Transputer T9000 Pakets enthält nur die Zieladresse (Bild 65

2.25a), während beim ATM- und SCI-Format eine Reihe weiterer Informationen im Kopfteil enthalten sind, wie die Priorität und die Herkunftsadresse (SCIFormat). T9000 Zieladressen variieren je nach Netzgröße, ebenso kann dort das letzte Paket der Nachricht kürzer als die vorangehenden sein, während SCIAdressen auf 8 Byte und SCI-Daten auf 64 bzw. 256 Bytegrenzen festgelegt sind (Block-Write Request). Die ATM-Zelle hat ebenfalls einen Kopf- und Datenteil konstanter Länge (Bild 2.25 b und c). 1. Paket Ziel

32 Byte Daten

Paketende

32 Byte Daten

Paketende

2. Paket a)

Ziel

...

n. Paket Ziel

≤ 32 Byte Daten

Nachrichtenende

1 Phit = 1 Byte

1.- n. Paket b)

5 Byte Kopf

48 Byte Daten

1.- n. Paket (Block-Write Request) c)

16 Byte Kopf

64/256 Byte Daten

Bild 2.25: Beispiele für Paketformate, a) Transputer T9000, b) ATM-Zelle, c) SCI-Block.

2.5.6 Routing Ein wichtiger Teil beim Transport von Information durch ein paketvermittelndes Netz ist das Routing. Bei Leitungsvermittlung tritt Routing nur in der Phase des Verbindungsaufbaus auf. Während der eigentlichen Datenübertragung wird Routing nicht benötigt. In umfassenderen Sinne wird unter Routing der Vorgang verstanden, wie Information von einem Datenerzeuger durch ein Verbindungsnetzwerk zu einem Datenverbraucher transportiert wird. Dabei spielen verschiedene, voneinander unabhängige Mechanismen ineinander und tragen zum Datentransport bei. Im engeren Sinne zählen zum Routing der Verbindungsaufbau, der die Wahl eines geeigneten Pfades durch das Netz beinhaltet, die Dekodierung von Paketadressen, eine optionale alternative Wegelenkung zur Leistungsoptimierung sowie eine geeignete Flußsteuerung zur Verhinderung von Datenüberlauf. Adreßdekodierung, Wegewahl und Flußsteuerung werden üblicherweise unter dem gemeinsamen Oberbegriff des Routings zusammengefaßt. Traditionell wird in Rechnernetzen wie LANs, MANs und WANs seit mehr als 2 Dekaden das sog. Store-and-Forward Routing eingesetzt, das eine bestimmte Art des Pakettransports und der Flußsteuerung beinhaltet. In Parallel66

rechnernetzen wird ebenfalls Store-and-Forward Routing verwendet, jedoch werden hier auch neuere Methoden wie Virtual-Cut-Trough und Wormhole Routing eingesetzt, die beim Informationstransport für eine besonders kleine Latenzzeit sorgen. Aktuelle Entwicklungen bei Rechnernetzen greifen auf Virtual-Cut-Through und Wormhole Routing zurück, da sie sich zur Echtzeitübertragung von Sprach-, Video- und anderen Multimediadaten eignen, so daß an dieser Stelle Wechselwirkungen bei der Entwicklung von Rechnernetzen einerseits und Netzen für Multiprozessorsysteme andererseits erkennbar sind. Trotz einiger Gemeinsamkeiten von Rechnernetzen und Parallelrechnernetzen gibt es prinzipielle Unterschiede. Bei einem Parallelrechner beispielsweise verkürzt eine geringe Latenz die Wartezeiten sowohl bei der Interprozessorkommunikation als auch bei der Prozeßsynchronisation und ist deshalb für die Effizienz des Systems von großer Bedeutung. Bei Rechnernetzen dagegen spielt, außer für Echtzeitanwendungen, mehr der Datendurchsatz als die Verweildauer eines Datenpakets im Netz die wesentliche Rolle. Ein zweiter Unterschied zwischen beiden Netztypen liegt in den spezifischen Routing-Aspekten von Wegewahl bzw. alternativer Wegelenkung. Bei Weitverkehrsnetzen (WANs) sind diese Aufgaben so komplex, daß etliche Rechner darin involviert sind. Dies liegt u.a. daran, daß die Topologien von Weitverkehrsnetzen irregulär und ständigen Veränderungen unterworfen sind, so daß Tabellen zur Lösung der Routing-Aufgaben eingesetzt werden müssen, die sich nicht wie bei Parallelrechnernetzen durch einfache, in Hardware implementierte Algorithmen ersetzen lassen. Tabellen sind flexibler in der Anpassung und können leichter als Algorithmen modifiziert werden. Parallelrechnernetze weisen fast immer eine Art von Symmetrie auf, so daß Wegewahl und Wegelenkung implizit über festverdrahtete Algorithmen oder über Mikroprogrammierung realisiert werden können. Darüberhinaus ändert sich das Netz eines gegebenen Parallelrechners in der Regel nur hinsichtlich seiner Größe, aber nicht hinsichtlich der Topologie. Algorithmische (implizite) Wegewahl und -lenkung haben gegenüber tabebellengesteuertem (expliziten) Routing den Vorteil, schneller und platzsparender zu sein, da Suchvorgänge und Tabellenhaltung entfallen. Alogrithmisches Routing wird deshalb bei Netzen für Parallelrechner bevorzugt.

2.6 Routingmethoden in Netzen 2.6.1 Einleitung Für die Leistungsfähigkeit eines Weitverkehrs- oder Parallelrechnernetzes spielen effiziente Routingmethoden eine wichtige Rolle. Wie bereits erwähnt, tragen Adreßdekodierung, Wegewahl und Transportart, bzw. Flußsteuerung der Pakete wesentlich zur Effizienz bei. In Bild 2.26 ist graphisch dargestellt, welche Methoden üblicherweise für diese drei Routing-Aufgaben eingesetzt werden. 67

Routing

Adreßdekodierung

Quellenbasiert

Wegewahl

Transportart/Flußsteuerung Store-and-Forward

deterministisch

adaptiv Virtual-Cut-Trough

Zielbasiert x-y-z Routing

Wormhole

e-cube Routing ...

Bild 2.26: Gliederung des Routing-Begriffs.

2.6.2 Adreßdekodierung Grundsätzlich gibt es zwei Möglichkeiten, Paketadressen zu spezifizieren. Bei der ersten Methode wird der Kopfteil (Header) eines Pakets mit einer systemweit eindeutigen, d.h. absoluten Empfängeradresse versehen. Beim Routing wird diese Adresse von jedem Zwischenknoten auf dem Weg zum Empfänger inspiziert und anhand dieser Information derjenige Übertragungskanal (Ausgang) ausgewählt, der zum nächsten geeigneten Zwischenknoten bzw. Empfänger führt. Diese Methode wird als Destination-Based Routing bezeichnet. Beim Destination-Based Routing muß jeder Zwischenknoten "wissen", in welcher Richtung das jeweilige Ziel von der eigenen Knotenposition aus zu erreichen ist. Der Absender des Pakets, der die absolute Zieladresse generiert hat, braucht sich dagegen nicht um die korrekte Dekodierung und Interpretation der Adreßinformation zu kümmern. Destination-Based Routing erfordert deshalb in den Zwischenknoten eine komplexere Logik als im Absender. Bei Rechnernetzen wie z.B. dem Internet wird durchweg diese Methode angewandt; jeder Rechner hat hier eine weltweit eindeutige, absolute Adresse, die in 4 Bytes kodiert ist. Bei Netzen für Multiprozessorsystemen ist Destination-Based Routing ebenfalls weit verbreitet. Die zweite Methode der Adreßspezifikation ist das Source-Based Routing. Hier wird das Paket, abhängig von der Position des Absenders im Netz, mit allen Informationen versehen, die es benötigt, um ohne Zusatzinformation von den Zwischenknoten zum Empfänger zu gelangen. In diesem Fall wird nicht eine absolute, sondern eine relative Empfängeradresse verwendet, die aussagt, welche Abzweigungen an welchem Zwischenknoten zu nehmen sind. In einem statischen oder dynamischen Verbindungsnetz kann das Source-Based Routing mit der Art und Weise verglichen werden, wie einem Menschen in einer fremden Stadt der Weg zu einer bestimmen Straße erklärt wird: „Zuerst geradeaus, dann nach 50 m rechts, dann die dritte Abzweigung links, usw.". Destination-Based Routing würde in dieser Analogie, bei der die Straßen den Ver68

bindungskanälen und die Passanten den Kreuzungen an den Zwischenknoten entsprechen, bedeuten, daß der Fremde an jeder Straßenkreuzung einem Passanten sein Ziel nennt und ihn dieser bis zur nächsten Kreuzung weiterschickt. Source-Based Routing erfordert im Sender eine komplexere Logik als in den Zwischenknoten. Ein Beispiel für die Anwendung dieser Methode ist beim Netz der IBM SP-2 Maschine gegeben.

2.6.3 Wegewahl In nahezu allen statischen Verbindungsnetzwerken sowie allen dynamischen Netzen, die aus mindestens zwei hintereinandergeschalteten Banyans bestehen, existiert mehr als ein Weg von jedem Sender zu jedem Empfänger. Daraus ergibt sich das Problem der Wegewahl, um für einen bestimmten Datentransfer den jeweils besten Weg festzulegen. Die nicht adaptive Lösung des Wegewahlproblems besteht darin, aus den potentiellen Wegen einen bestimmten Weg anhand eines fest vorgegebenen Algorithmus auszuwählen. Werden dabei als Eingabeparameter nur die Quell- und die Zieladresse des Datenpakets herangezogen, insbesondere resultieren unterschiedliche Netztopologien in unterschiedlichen Algorithmen. Diese Methode wird als deterministisches Routing bezeichnet. Eine andere Lösung des Wegewahlproblems besteht darin, den momentanen Zustand des Netzes hinsichtlich Komponentenausfälle oder Kanalüberlastungen in die Wegewahlentscheidung mit einzubeziehen. Solche Verfahren sind a priori nicht deterministisch, weil Ausfälle oder Überlastungen von Kanälen oder Knoten nicht vorhergesagt werden können. Sie werden als adaptives Routing bezeichnet. Adaptive Algorithmen haben den Vorteil, daß sie durch alternative Wegewahl den Datendurchsatz durch ein Verbindungsnetzwerk potentiell erhöhen, weil hochbelastete Strecken und Knoten umgangen werden können. Als Nachteil weisen sie im Vergleich zu den deterministischen Verfahren eine höhere Komplexität auf und sind deshalb häufig langsamer in der Abarbeitung. Für den Allgemeinfall kann nicht vorausgesagt werden, ob deterministisches oder adaptives Routing günstiger für Durchsatz und Latenz ist. Das jeweils geeignetere Verfahren hängt von der Netztopologie, der Verkehrsverteilung und den Ansprüchen an die Fehlertoleranz ab.

2.6.4 Flußsteuerung Statische oder dynamische, paketvermittelnde Netze mit dezentraler Verbindungssteuerung haben den unerwünschten Freiheitsgrad, daß es vorkommen kann, daß zur selben Zeit zwei oder mehr Datenpakete denselben Knotenausgang oder Kanal an einem Zwischenknoten benutzen wollen, weil sie unabhängig voneinander den gleichen Weg gewählt haben und/oder denselben Zielknoten anstreben. Da Kanäle physikalisch nur nacheinander Daten übertragen können, müssen in den Zwischenknoten Puffer installiert sein, um Pakete so69

lange zwischenzuspeichern, bis die benötigte Ressource (Kanal, Ausgang etc.) wieder frei ist. Beim Zwischenspeichern muß der betreffende Knoten dafür sorgen, daß seine Puffer nicht überlaufen, weil sonst Pakete verloren gehen. Die Gefahr eines Pufferüberlaufs ist immer dann gegeben, wenn die Verkehrsdichte inhomogen verteilt ist und sich die Datenpakete an wenigen Knoten häufen oder wenn man aus Kosten- oder Latenzzeitgründen darauf verzichtet hat, ein blockierungsfreies Netz zu verwenden. (Blockierungsfreie, dynamische Netze sind immer aufwendiger in der Konstruktion als nicht blockierungsfreie und haben eine größere Latenz). Andererseits können Ressourcenkonflikte auch von der parallelen Anwendung selbst herrühren, die auf dem Multiprozessor ausgeführt wird, sofern diese bestimmte Empfänger bevorzugt und auch dann anspricht, wenn sie momentan mit einer anderen Interprozessorkommunikation beschäftigt sind. Schließlich kann ein Pufferüberlauf vom Netz verursacht sein, wenn z.B. in einer unidirektionalen, statischen Netztopologie mehr Kanäle auf einen Knoten zulaufen als von ihm abgehen, so daß zwangsläufig Konzentrationseffekte auftreten, oder wenn ein dezentrales Routingverfahren mangels Kenntnis über die Routingentscheidung eines Nachbarknotens einem Datenpaket denselben Zwischenknoten wie der Nachbar zuweist, so daß dort mehrere Pakete zusammentreffen. All diese Fälle treten in der Praxis auf und müssen beachtet werden. Zur Lösung des Pufferüberlaufproblems kann entweder Leitungsvermittlung verwendet werden, weil diese durch stationäre Ressourcenallokation einen Ressourcenkonflikt vermeidet, oder man kann bei Verwendung von Paketvermittlung bei drohendem Überlauf den Zufluß neuer Daten durch eine zusätzliche Flußsteuerung (Flow Control) stoppen. Ein paketvermittelndes Netz mit Flußsteuerung erfordert, daß zwischen allen benachbarten Knoten für jedes übertragene Paket ein Flußsteuerungssignal in der Gegenrichtung übermittelt wird (Bild 2.27).

Daten= paket Knoten i

Knoten i+1

Fluß= steuerung

Bild 2.27: Verbindungsnetzwerk mit Flußsteuerung auf Paketbasis.

Die Flußsteuerung kann entweder über eine spezielle Leitung (Strobe oder Data Acknowledge) oder bei bidirektionalen Netzen über ein spezielles Flußsteuerungspaket vorgenommen werden. Prinzipiell gibt es die drei Möglichkeiten des Store-and-Forward-, Virtual-Cut-Trough- und Wormhole-Routings, um Datentransport mit Flußsteuerung durchzuführen.

70

2.6.5 Store-and-Forward Routing Beim Store-and-Forward Routing erfolgt die Flußsteuerung auf Paketbasis, d.h. Pakete können beim Durchgang durch das Netz gestoppt und nach Freiwerden belegter Ressourcen weitergeschickt werden. Das bedeutet, daß in jedem Schalt- oder Rechenknoten Pufferplatz für mindestens ein Paket vorhanden sein muß, um im Falle, daß der Nachbarknoten nicht datenaufnahmebereit ist, dieses zwischenzuspeichern. Da die Empfängerknoten in einem Netzwerk i.a. nicht direkt mit den Sendeknoten verbunden sind, das Ziel es aber ist, die Entstehung neuer Daten direkt an der Quelle zu beeinflussen, muß die Flußkontrolle, ebenso wie der Datentransport, indirekt über Zwischenknoten bzw. Schaltstufen im Netz abgewickelt werden. Ein negatives Acknowledge-Signal beispielsweise, das vom Knoten (i+1), der zugleich Empfänger einer Nachricht sein kann, an den Vorgängerknoten i ausgegeben wird, bewirkt, daß dieser die Pakete für den Empfängerknoten solange speichern muß, bis der Empfänger wieder aufnahmebereit ist. Sobald der Puffer von Knoten i überzulaufen droht, wird von diesem seinerseits ein Flußsteuerungssignal an dessen Vorgängerknoten (i-1) ausgegeben, worauf jener die Pakete für (i+1) speichern muß, usf. Dieser sog. Backpressure-Vorgang bewirkt schließlich, daß der Datensender nach einer gewissen Zeitverzögerung über eine Kette von Zwischenknoten ein negatives Acknowledge-Signal erhält und die Erzeugung neuer Pakete aussetzt, bis das Flußsteuerungssignal verschwindet. Dadurch wird die Paketentstehung an der Datenquelle bei Bedarf gestoppt. Vor und während der Ausbreitung des Flußsteuerungssignals vom Empfänger zum Sender können Datenpakete in der Gegenrichtung wandern und müssen nötigenfalls auf der Strecke dazwischen gepuffert werden. Der Wiederanlauf des Datentransports erfolgt in derselben Richtung wie das Stoppen, indem vom Datenempfänger das negative Acknowledge-Signal weggenommen wird. Durch eine Kette von Zwischenknoten wird dies dem Datensender mitgeteilt. Store-and-Forward Routing arbeitet im nicht blockierten Fall so, daß das Datenpaket von jedem Zwischenknoten erst komplett eingelesen (=store), bevor der Adreßteil des Pakets dekodiert wird. Danach wird, vorausgesetzt, daß das Acknowledge-Signal positiv ist und der Nachbarknoten nicht bereits der Empfänger der Nachricht darstellt, das Paket an einen geeigneten Nachbarknoten oder eine weitere Schaltstufe weitergegeben (=forward). Store-and-Forward gleicht dem Transportvorgang, wie er von einer Eimerkette durchgeführt wird (Bild 2.28), bei der Wassereimer zum Löschen eines Brandes von Person zu Person weitergereicht werden. Store-and-Forward darf jedoch nicht mit einer Pipeline-Übertragung verwechselt werden, die mit kleineren Elementen als mit Paketen arbeitet, so wie dies bei Wormhole-Routing beipielsweise der Fall ist. Bei der Datenübertragung ist die Latenzzeit sowohl proportional zur Paketlänge als auch zur Zahl der Zwischenstufen. Die Datenrate (Bandbreite) ist der Proportionalitätsfaktor. Die Bandbreite spiegelt sich in der Geradensteigung des korrespondierenden Raum-/Zeitdiagramms wieder (Bild 2.29).

71

Daten= paket forward

Sender

store

Acknowledge

i-1

forward

store

i

Acknowledge

forward

Acknowledge

store

Empfän= ger

Bild 2.28: Store-and-Forward Routing. Datenrate Header Paket

Paket= position Empfänger Knoten i Knoten i-1 Sender

0

1

2

3

4 Zeit

Bild 2.29: Datenübertragung bei Store-and-Forward Routing.

Store-and-Forward Routing ist relativ einfach zu implementieren, da nur jeweils zwei Knoten bzw. Schaltstufen für das Weiterreichen des Pakets erforderlich sind. Allerdings ist das Ein- und Ausspeichern der Pakete unnötig zeitraubend und trägt zur hohen Latenzzeit dieses Verfahrens bei. Darüberhinaus muß in jedem Knoten ausreichend Pufferplatz für den Fall eines negativen Acknowledge vorhanden sein. In Verbindungsnetzwerken für Parallelrechner wird Store-and-Forward selten eingesetzt, weil große und schnelle Pufferspeicher so teuer sind wie die Cache-Speicher von RISC-Prozessoren.

2.6.6 Virtual-Cut-Through Routing Virtual-Cut-Through Routing [Kermani79] stellt hinsichtlich der Latenzzeit eine deutliche Verbesserung gegenüber Store-and-Forward dar. Bei VirtualCut-Through Routing wird auf die temporäre Ein- und Ausspeicherung des Datenpakets verzichtet und unmittelbar nach dem Eintreffen der Paketadresse mit der Dekodierung und Wegeauswahl begonnen. Bei unbelegtem Ausgangskanal und positivem Acknowledge des Folgeknotens wird das einlaufende Paket "on-the-fly", d.h. schritthaltend mit dem Einlesen zum entsprechenden Ausgang befördert. Die Latenz ist dadurch proportional zur Headerlänge und zur Knotenzahl und fällt geringer als bei Storeand-Forward Routing aus, was man an dem steileren Geradenanstieg im Raum/Zeitdiagramm nach Bild 2.30 sehen kann. 72

Paket= position

Datenrate Nutzdaten Header

Empfänger Knoten i Knoten i-1 Sender 0

1

2

3

4 Zeit

Bild 2.30: Datenübertragung bei Virtual-Cut-Through Routing.

Virtual-Cut-Through Routing erfordert in den Zwischenknoten bzw. Schaltstufen eine schnelle Adreßdekodier- und Wegewahllogik, um mit der Datenrate der Verbindungskanäle Schritt halten zu können. Bei belegten Ressourcen (Blockierungsfall) verhält sich Virtual-Cut-Through genauso wie Store-and-Forward, entsprechend muß auch hier ausreichend Pufferplatz im Knoten vorhanden sein. Ein Beispiel für die Verwendung von Virtual-Cut-Through Routing stellt der T3D-Rechner der Firma Cray dar, bei dem auf der Ebene des physikalischen Transports die Pakete in Einheiten von 16 Bit unterteilt werden. Diese Einheiten heißen Physical Transfer Units.

2.6.7 Wormhole Routing Wormhole-Routing [Dally87] ist bei nicht belegten Kommunikationsressourcen identisch mit Virtual-Cut-Through Routing: Sobald der Adreßteil eines Datenpakets im Knoten eingetroffen ist, wird das einlaufende Paket am entsprechenden Kanal wieder ausgegeben. Ebenso werden die Paketdaten in elementare Quanten von üblicherweise 1 oder 2 Byte für den Transport auf den Kanälen zerlegt. Der entscheidende Vorteil dieses Verfahrens liegt jedoch darin, daß im Blockadefall (fast) keine Pufferspeicher für die temporäre Datenhaltung erforderlich sind, weil die Flußsteuerung nicht auf Paketbasis, sondern auf Basis der wesentlich kleineren physikalischen Transporteinheiten (Phits) erfolgt, die man deshalb als flow control digits (Flits) bezeichnet. Bei Wormhole-Routing verteilt sich bei belegten Übertragungskanälen oder kurzzeitig nicht empfangsbereiten Knoten ein Datenpaket aufgrund eines Backpressure-Mechanismus auf alle Knoten, die auf dem Weg vom Sender zum Empfänger liegen. In jedem Knoten wird je ein Flit des Pakets gespeichert. Sobald der Knoten oder der Kanal, der den Stau verursacht hat, wieder frei ist, beginnen die vorderen Flits des Pakets sich ähnlich einer Ziehharmonika auseinanderzuziehen, während die hinteren Flits des Pakets noch darauf warten, daß der Stau sich auflöst. Das Zusammen- und Auseinanderziehen der Flits eines Datenpakets erinnert an die Art und Weise, wie sich ein Wurm fortbewegt, daher auch die Namensgebung Wormhole Routing.

73

Da Flits aus nur ein oder zwei Bytes bestehen und keine Zieladresse enthalten, können Flits verschiedener Pakete nicht gemischt werden, so daß ein Flit, das in einem Knoten zwischengespeichert ist, den daran angeschlossenen Kommunikationskanal solange blockiert, bis es von diesem abtransportiert werden kann. Aus demselben Grund ist die Implementierung virtueller Kanäle nur auf Paketbasis möglich. Ein einziges Datenpaket, das aus mehreren Flits besteht, kann somit eine Vielzahl von Kommunikationskanälen für längere Zeit besetzt halten, was einen Nachteil von Wormhole-Routing darstellt. Das gravierendste Problem bei Wormhole Routing ist, daß durch die exklusive Belegung der Kanäle, wenn sie von mehreren gleichzeitig stattfindenden Interprozessorkommunikationen vorgenommen wird, unter bestimmten Bedingungen eine Blockadesituation (Deadlock) entstehen kann, die in letzter Konsequenz den ganzen Parallelrechner zum Stillstand bringt. Deshalb sind zusätzliche Maßnahmen zur Deadlock-Vermeidung unbedingt erforderlich. Eine Deadlock-Situation kann auch bei den zuvor beschriebenen Verfahren von Store-and-Forward- und Virtual-Cut-Through-Routing auftreten, weil hier gegenseitige Pufferblockaden möglich sind. Deshalb ist bei der Anwendung jedes Routing-Verfahrens unbedingt die Deadlock-Problematik zu beachten. Dazu wurden eine Reihe spezieller Methoden entwickelt [Gopal85, Dally87], die im Kapitel über Routing-Verfahren für statische Netze erläutert werden. Insgesamt kann gesagt werden, daß bei Parallelrechnernetzen WormholeRouting aus Kosten- und Geschwindigkeitsgründen häufig eingesetzt wird.

74

3 Statische Verbindungsnetzwerke 3.1 Einleitung Verbindungsnetzwerke werden in die zwei großen Kategorien der statischen und der dynamischen Netze eingeteilt. Bei statischen Netzen handelt es sich um Verbindungsstrukturen, die aus beliebigen mathematischen Graphen abgeleitet werden können und bei denen die Knoten Prozessoren oder Rechner darstellen und die Kanten die Verbindungen zwischen den Prozessoren bzw. Rechenknoten symbolisieren. Statische Netze werden auch als einstufig oder direkt bezeichnet, weil die Prozessoren ohne dazwischenliegende Schalter direkt miteinander verbunden sind. Aufgrund ihrer Herkunft von mathematischen Graphen gibt es, im Gegensatz zu den dynamischen Netzen, eine praktisch unbegrenzte Zahl möglicher statischer Verbindungsstrukturen.

3.2 Übersicht Ein wichtiges Kennzeichen fast aller Graphen, die als statische Verbindungsstrukturen in Multiprozessoren oder Multirechnern verwendet werden, ist, daß sie auf wenigen, sehr einfachen Konstruktionsregeln basieren und bestimmte Symmetrieeigenschaften aufweisen. Die Gründe, warum regelmäßige und insbesondere symmetrische Topologien gegenüber irregulären und amorphen Strukturen bevorzugt werden, liegen darin, daß sich aus der Symmetrie eine Reihe von Vorteilen wie einfacheres Routing im Netz und leichtere Programmierbarkeit der Parallelrechner ergeben. Trotz der Vorteile symmetrischer Netze gibt es eine große Zahl von Topologien wie z.B. Gitter oder Bäume, die nicht im (graphentheoretischen Sinne) symmetrisch sind, aber dennoch Bedeutung erlangt haben, weil sie andere Vorzüge, wie z.B. eine leichte Überschaubarkeit oder einfache Erweiterbarkeit aufweisen. Diese mehr praktischen Aspekte haben in jüngster Zeit zunehmend an Bedeutung gewonnen. Generell werden bei statischen Netzen modulare Strukturen bevorzugt, weil durch Modularität auch große Netze durch Replikation vieler einfacher GrundElemente aufgebaut werden können. Bekannte Beispiele dafür sind das Gitter und der binäre Hypercubus, die aus Zeilen und Spalten bzw. aus kleineren Hypercube-Moduln aufgebaut werden können. Bei Gitter und Hypercube kommt zur Modularität noch die Rekursion als zweite Konstruktionsregel hinzu, die erst bei mehr als 3 Dimensionen wichtig wird. Ein (n+1)-dimensionaler Hypercubus beispielsweise entsteht durch Verdoppeln eines vorhandenen n-dimensionalen Moduls, wobei die korrespondierenden Knoten beider Module miteinander verbunden werden. Analog entsteht ein (n+1)-dimensionales Gitter durch Vervielfachen eines n-dimensionalen Gittermoduls, wobei die korrespondierenden Knoten der Replikate auf Geraden liegend verbunden werden. 75

3.3 Typische statische Netze Das heutzutage am häufigsten verwendete statische Netz ist das zwei- oder dreidimensionale Gitter in der Variation mit oder ohne wrap-around-Enden, während früher der Hypercube [z.B. Harary88] eine dominierende Rolle spielte. Ein Gitter mit wrap-around-Enden wird auch als Torus bezeichnet. Die Intel Paragon- und die Cray T3D/E-Rechner beispielsweise enthalten eine Gittertopologie. Neben Gitter und Hypercube werden eine Vielzahl weiterer Topologien wie Ring, Sehnenring [Arden81], Baum, Cube-Connected-Cycles [Preparata79] oder systolische Felder [Chen90] in kommerziellen und Forschungs-Parallelrechnern eingesetzt. Die bekanntesten dieser Strukturen sind in Bild 3.1 dargestellt. Überblicksartig zusammengefaßt läßt sich folgendes über diese Topologien sagen: • Ringe sind ähnlich wie Busse topologisch einfache Strukturen. Sie sind jedoch nur für kleine Prozessorzahlen (≤32) geeignet. Eine Erweiterung der normalen Ringstruktur, die sowohl die Bandbreite als auch die Fehlertoleranz erhöht, ist die Sehnenringtopologie. • 3-dimensionale Gitter mit und ohne wrap-around Enden erfreuen sich u.a. wegen ihrer einfachen technischen Implementierung und guten Überschaubarkeit durch den Programmierer zunehmender Beliebtheit. • Für die Hypercube-Topologie wurden weltweit bereits viele parallele Algorithmen entwickelt. Einer ihrer Vorteile, neben ihrem relativ einfachen Aufbau und den kurzen mittleren Knotenabständen, ist, daß sie fast alle statischen Topologien mit hoher Effizienz nachbilden können. • Cube-Connected-Cycles haben gegenüber Hypercuben den Vorteil, daß der Verzweigungsgrad pro Knoten unabhängig von der Dimension, d.h. der Anzahl der Rechenknoten im System ist. • Eine Stern-Topologie ist überall dort vorteilhaft, wo ein Broad-/Multicast, ein inverser Multicast oder eine Prozeßsynchronisation durchzuführen ist. • Bäume sind für viele Algorithmen und Datenstrukturen in speziellen Anwendungen wie z.B. verteilten Datenbanken günstig. • Systolische Felder haben ihre eigene Bedeutung bei SIMD-Programmen der Muster- und Bildverarbeitung bzw. des Bildverstehens. Neben diesen populären Topologien existieren weitere wichtige statische Verbindungsstrukturen, die entweder aus theoretischen Gründen besonders interessant sind, wie der de Bruijn-Graph [Samatham91] und Star-Graph [Akers89], oder solche, die große praktische Bedeutung erlangt haben, weil sie in technischen Systemen in größerer Stückzahl eingesetzt wurden, wie z.B. die Fat TreeTopologie [Leiserson85] in der TMC CM-5. Ein zur Fat-Tree-Topologie ähnliches Konzept wird übrigens seit langem in der hierarchisch organisierten Verkabelung der Telefonvermittlungstechnik verwendet. 76

Sehnenring

Ring

. ..

. ..

2D-Gitter

. .. . .. ..

.

3D-Torus

vollständiger Baum

4D-Hypercube

Broadcast-Stern

3D-Cube Connected Cycles

Systolisches Feld

Bild 3.1: Einige der bekanntesten statischen Topologien.

Weiterhin gibt es eine Reihe von Verbindungsstrukturen, die entwickelt wurden, um die Mängel beliebter Netze wie Bäume (rel. großer Durchmesser) und Hyperwürfel (schwierige Skalierbarkeit) zu beheben bzw. abzumildern. Alle verbesserten Strukturen beruhen darauf, zusätzliche Verbindungen zwischen den Knoten einzufügen, die aber ihrerseits die Routing-Komplexität erhöhen. Zu diesen Strukturen zählen neben dem bereits erwähnten Fat Tree der Hypertree [Goodmann81] und der X-Tree [Despain78], die auf die Optimierung der Baumtopologie zielen sowie der Bridged Cube [Amawy90], Twisted Cube [Esfahania91] und Crossed Cube [Efe92], die der Verbesserung von Hyperwürfeln dienen. Eine Auswahl aus diesen verbesserten Topologien ist in Bild 3.2 gezeigt. Schließlich sind aus der Graphentheorie verschiedene Gruppen von Graphen bekannt, wie z.B. die Moore-Graphen [Hoffman60, Delorme84], die KneserGraphen [Boll78] bzw. reduzierte Kneser-Graphen [Sied92], die Cayley-Graphen [Akers89] sowie die Balanced Incomplete Block Designs [Opatrny86], die Eingang in die Parallelrechnerarchitektur gefunden haben. Diese Topologien 77

Star-Graph

De Brujin-Graph

Fat Tree

X-Tree

Twisted Cube

Hypertree

Bild 3.2: Fortgeschrittenere statische Topologien.

weisen erheblich bessere graphentheoretische Eigenschaften auf als die üblichen Verbindungsstrukturen, werden jedoch bei kommerziellen Parallelrechnern bislang nicht eingesetzt. Teilweise sind sie noch Gegenstand der Forschung. Die reduzierten Kneser-Graphen haben beispielsweise den technischen Vorteil, daß die beiden Parameter Knotenzahl und Verzweigungsgrad unabhängig voneinander gewählt werden können. Einige Beispiele dieser "modernen" Verbindungsstrukturen zeigt Bild 3.3. Zu beachten ist, daß die aufgelisteten Graphengruppen keine Klassifikation im eigentlichen Sinne darstellen, da sie nicht orthogonal zueinander sind, sondern sich gegenseitig überlappen. So kann man beispielsweise zeigen, daß alle statischen Netze, die knotensymmetrisch sind, auch als Cayley-Graphen dargestellt werden können [Akers89]. Den Cayley-Graphen ist aufgrund ihrer übergreifenden theoretischen Bedeutung ein eigenes Kapitel gewidmet, in dem Eigenschaften und Konstruktion 78

Moore-Graph für N=10 (= Petersen-Graph)

Cayley-Graph (N=8)

Reduzierter Kneser-Graph (N=15)

Balanced Incomplete Block Design (N=9)

Bild 3.3: Beispiele von Topologien mit besonderen graphentheorischen Eigenschaften.

von Cayley-Graphen ausführlich erörtert werden. Auch die für fehlertolerante Systeme besonders interessanten Balanced Incomplete Block Designs werden in einem kurzen Kapitel näher erläutert, ebenso wie der Aufbau und die Eigenschaften der de Bruijn und Star-Graphen. Trotz der großen Fülle an Topologien, die für statische Verbindungsnetzwerke in Frage kommen, sollte man nicht übersehen, daß sich alle Graphen von einer einzigen Topologie, nämlich dem vollständig vermaschten Graphen ableiten lassen, woraus sie durch Weglassen von Verbindungen entstanden sind. Bild 3.4 zeigt Beispiele für die Konstruktion einiger Topologien aus dem vollständig vermaschten Graphen, wie Ring, Gitter, Torus, Würfel, Barrel Shifter sowie verschiedene Variationen der Baumstruktur. Die alles enthaltende, voll vermaschte Struktur stellt zugleich den teuersten aller Graphen dar.

3.4 Symmetrie bei statischen Netzen Es gibt viele Beispiele für Netzwerke, die im graphentheoretischen Sinne symmetrisch sind, wie z.B. die Torus- oder die Hypercube-Topologie, aber auch einige, die nicht dazu gehören, wie das zwei- oder mehrdimensionale Gitter beispielsweise. Genau betrachtet, existieren zwei verschiedene Arten von Symmetrie, nämlich die Kanten- und die Knotensymmetrie. Wird ein Graph als symmetrisch bezeichnet, meint man damit i.a. die Knotensymmetrie. Eng ver-

79

vollständig vermaschter Graph

Ring

2 D-Matrix (2x4)

2 D-Torus (2x4)

Baum

X-Tree

Hypertree

3 D-Würfel

Barrel Shifter

Bild 3.4: Beispiele für die Ableitung von Topologien aus dem vollständig vermaschten Graphen.

wandt mit der Symmetrie ist die Regelmäßigkeit (Regularität) eines Graphen. Beide Begriffe sind besonders wichtig und müssen daher definiert werden: Def. 3.1: Ein Graph heißt regelmäßig (regulär), wenn von jedem Knoten gleich viele Kanten ausgehen. Die Zahl der Kanten pro Knoten wird als Grad d des Graphen bezeichnet. Bei einem regelmäßigen Graphen ist der Grad konstant. Def. 3.2: Ein Graph heißt kantensymmetrisch, wenn es eine Abbildung f gibt, die angewandt auf jede Kante eines Graphen G einen Graphen G' liefert, der identisch zu G ist. Für diesen Fall heißt f eine Abbildung von G auf sich selbst oder Automorphismus von G und G' ist automorph zu G. Das bedeutet, daß die Topologie eines kantensymmetrischen Graphen von jeder Kante aus betrachtet gleich aussieht. Ein Beispiel für einen Automorphismus ist die Drehung jeder Kante um 90° nach rechts. Eine zur Kantensymmetrie analoge Definition existiert für den Begriff der Knotensymmetrie, bei dem die Knoten eines Graphen auf (andere) Knoten desselben Graphen abgebildet werden.

80

Def. 3.3: Ein Graph heißt knotensymmetrisch, wenn es eine Abbildung g gibt, die angewandt auf jeden Knoten eines Graphen G einen identischen Graphen G' liefert; g ist ein Automorphismus von G. Beide Symmetrieformen treten unabhängig voneinander auf, so daß ein kantensymmetrischer Graph nicht knotensymmetrisch zu sein braucht und umgekehrt. Bild 3.5 zeigt zwei Beispiele für dieses Verhalten. In der Sechseck-Topologie von Bild 3.5a) wird jeder Knoten durch eine Drehung um 60° auf einen Nachbarknoten abgebildet. Für die Kanten dieses Graphen dagegen gibt es keinen solchen Automorphismus. Ebenfalls eine Drehung um 60° bildet im Stern von Bild 3.5b) jede Kante in ihre Nachbarkante ab. Diesmal haben die Knoten keine entsprechende Abbildung f, weil der zentrale Knoten in der Mitte des Sterns invariant bzgl. der Drehung ist. Die Figur b) kann auch deshalb nicht knotensymetrisch sein, weil der zentrale Knoten einen anderen Knotengrad hat als die äußeren Knoten.

a)

b)

Bild 3.5: Zwei regelmäßige Graphen, die knotensymmetrisch, aber nicht kantensymmetrisch (a), bzw. kantensymmetrisch, aber nicht knotensymmetrisch sind (b).

Wichtig ist noch festzustellen, daß aus der Symmetrie die Regelmäßigkeit des Graphen folgt. Dies ist eine für viele praktische Belange bedeutsame Tatsache (Satz 3.1). Satz 3.1: Ein knotensymmetrischer Graph ist zugleich regelmäßig, aber nicht umgekehrt. Eine notwendige, aber nicht hinreichende Bedingung für Knotensymmetrie ist, daß von allen Knoten gleich viele Kanten abgehen, d.h., daß der Grad des Graphen konstant ist. Knotensymmetrische Graphen haben eine Reihe günstiger Eigenschaften, wie z.B.: • Der Graph sieht aus der Sicht jedes Knoten gleich aus. Dies erleichtert die Programmierung der darauf basierenden Parallelrechner. • Der Verkehr wird (im Prinzip jedenfalls) gleichmäßig verteilt, weil es keine ausgezeichneten Knoten gibt.

81

• Das Routing ist für jeden Prozessor gleich. Spezialfälle, wie z.B. Prozessoren am Rand eines Gitters etc., gibt es nicht. Dadurch entfallen Routing-Tabellen. • Auf jedem Prozessor kann derselbe parallele Algorithmus ausgeführt werden, weshalb Anwendungen einfacher und übersichtlicher gestaltet werden können als im irregulären Fall. • Die Leistungsanalyse der Rechnerarchitektur und die Herstellbarkeit und Erweiterbarkeit des Netzwerks werden erleichtert. • Operationen wie Broadcast, Multicast und inverser Multicast, die in Hardware durch das Netzwerk ausgeführt werden, sind in einem einfach strukturierten Netz leichter zu implementieren.

3.5 Metriken bei statischen Netzen Aufgrund ihrer Herkunft aus allgemeinen Graphen spielt die Graphentheorie bei statischen Verbindungsnetzwerken eine wichtige Rolle. Insbesondere werden die dort gebräuchlichen Maße (Metriken), wie Durchmesser, mittlerer Knotenabstand, Knotenzusammenhang usw., auch auf statische Verbindungsnetzwerke angewandt, um dadurch deren Eigenschaften besser voraussagen bzw. quantifizieren zu können. Neben den erwähnten Metriken sind noch die Maße mittlere Nachrichtendichte, Halbierungsbreite und Konnektivität für die Beurteilung statischer Netze wichtig. In einem statischen Netz erfolgt die Kommunikation zwischen zwei beliebigen Knoten über Zwischenknoten, wenn Sender und Empfänger einer Nachricht keine direkten Nachbarn sind. Der Weg der Nachricht durch das Netz wird als Pfad bezeichnet. Ein Pfad ist, mathematisch ausgedrückt, eine Folge von Kanten im Graphen des Netzes. Die Zahl der Kanten des Pfades ist ein Maß für die Entfernung der kommunizierenden Knoten. Da es zwischen zwei Knoten in einem statischen Netz i.a. mehrere Pfade gibt, die auch verschieden lang sein können, verwendet man für die Definition des Abstandes a zwischen zwei Knoten das Minimum aller Pfadlängen zwischen dem betrachteten Knotenpaar. Der Knotenabstand wird auch als Distanz bezeichnet. Man geht davon aus, daß der Knotenabstand wesentlich die Latenzzeit der Kommunikation beeinflußt, d.h. daß mit zunehmender Distanz die Latenz ebenfalls zunimmt. Eine Obergrenze für die Latenz in einem Netz stellt die größtmögliche Distanz im Graphen dar, die als das Maximum aller kleinsten Pfadlängen zwischen zwei Knoten definiert ist. Diese Größe wird als Durchmesser k des Graphen bezeichnet. Der Durchmesser gibt an, wieviele Kanten eine Nachricht maximal passieren muß, um von einem Sender zum Empfänger zu gelangen, vorausgesetzt, es wird der jeweils kürzeste Weg gewählt. Die Zahl der Knoten, die bei Distanz k zwischen Sender und Empfänger höchstens liegen können, ist dabei gleich k-1. Da die maximale Distanz k nur eine Obergrenze für die Latenz L darstellt, gemäß der Beziehung L100 Prozessoren) benötigen ein nicht unerhebliches räumliches Volumen und sind in mehreren Modulgehäusen untergebracht.

85

Netzwerk

Grad d

Durchmesser k

mittlerer Knotenabstand

Konnek.

kleinste Erweiterung

Stern (N>2)

1 bzw. N-1

2

2 ---- ( N – 1 ) ≈ 2 N

1

1

2

1

2

N -------------------4(N – 1) (für N gerade), Ring (N>2)

2

N ---2

N+1N -------------≈---4 4 (für N unger.)

2-D Gitter ohne wraparound 2-D Gitter mit wraparound

Binärer Hyperkubus (N=2n) de Bruijn Graph (N = dk) CubeConnectedCycles (N=nlog2n)

2 N–1 4

4

2( N – 1 )



N–1

2

Zeilen und Spaltenerw.

2 N–1

N 2 ------2

N⁄2



4

Zeilen und Spaltenerw.

n–1

n

n2 –1 -----------------------n 2 –1

n

n

N

2d

(d+1)k-dk

≈ n/2

2d

3

k

keine Angabe

≈ (7/4) log2n-3

(5/2) log2n-1

3

(n+1)· ·log2(n+1) -n log2n

n

Star-Graph (N=n!)

n-1

3(n – 1 ) ⁄ 2)



n+∑ 1 --- – 4 i

n-1

i=1

+(2/n)

Tabelle 3.1: Die wichtigsten Metriken häufig verwendeter statischer Netze.

86

n·n!

Aus verkabelungstechnischen und übertragungsmäßigen Gründen ist es dabei besser, auf die wrap-around-Verbindungen zu verzichten, weil diese relativ lang und entsprechend umständlich zu realisieren sind. • Dally [Dally90] konnte zeigen, daß sich unter einer bestimmten Randbedingung die Kategorie der k-nären Hyperwürfel, zu denen sowohl die Gitter als auch die binären Hyperkuben gehören, für kleine Dimensionszahlen günstiger verhält als für große. Das bedeutet für ein vorgegebenes N, daß Gitter gegenüber Hypercubes zu bevorzugen sind, weil dort die Dimensionszahl auch für große Prozessorzahlen niedrig gehalten werden kann. Die Randbedingung, unter der diese Aussage gilt, ist, daß bei beiden Topologien dieselbe Zahl von Leitungen verwendet wird. Da ein 2-D Gitter nur vier Leitungen von einem Knoten zu seinen Nachbarn benötigt, können dort die übrigen Leitungen zur Verbreiterung der Datenpfade verwendet werden, so daß die Bandbreite des Gitters bei gleicher Knotenzahl und gleichem Materialeinsatz für die Verkabelung größer als die des Hyperwürfels ist.

3.6.1 Sterntopologie Sterne sind einfach strukturierte, aber dennoch nützliche Graphen. Eine SternTopologie ist überall dort vorteilhaft, wo ein Broad-/Multicast, ein inverser Multicast oder eine Prozeßsynchronisation häufig durchzuführen ist, so daß es sich lohnt, zusätzlich zu dem Netz, das zur Interprozessorkommunikation dient, noch einen Stern als zweite Netztopologie zu verwenden. Dies ist bei vielen parallelen Anwendungen, insbesondere aus dem Echtzeit- und Embedded Systems-Gebiet der Fall, weil dort häufig schnelle Prozeßsynchronisationen erforderlich sind, deren Signalisierung am besten direkt im Netz in Hardware implementiert wird [Richter95a]. Die Stern-Topologie wird als Kommunikationsund Rechentopologie für Master-Slave- bzw. Prozessorfarm-Architekturen eingesetzt, bei denen ein zentraler Prozessor (Master) Arbeitsaufträge an untergeordnete Prozessoren (Slaves) vergibt, bei denen wenig oder keine Interprozessorkommunikation zwischen den Slaves erforderlich ist, so daß der Master, über den alle Kommunikation laufen muß, verkehrsmäßig nicht überlastet wird.

3.6.2 Baumtopologie Durch eine Erweiterung der Sternstruktur auf mehrere Ebenen entsteht die Baumtopologie, bei der Durchmesser und mittlerer Knotenabstand mit O(logN) wachsen. Bäume sind für viele rekursive Algorithmen gut geeignet und lassen sich darüberhinaus als sog. H-Bäume leicht in Silizium integrieren [Horowitz81]. Weiterhin sind Bäume für parallele Datenstrukturen und Datenbanken vorteilhaft. Der Nachteil von Bäumen ist, daß bei gleichverteiltem Verkehr an der Basis die Verkehrsdichte an der Spitze des Baumes exponentiell ansteigen kann, weshalb die Fat Tree-, Hypertree- und X-Tree-Netze entwickelt wurden, um Datenverkehr in Querverbindungen umzuleiten.

87

3.6.3 Ringtopologie Ringe werden in verschiedenen Kommunikationssystemen wie Token Ring oder SCI wegen ihrer Fehlertoleranz gegenüber Einzelstrangsystemen eingesetzt. Ein unidirektionaler Ring beispielsweise bietet aus topologischen wie elektrischen Gründen einen höheren Datendurchsatz als eine Kette oder ein Bus, da er mit angepaßten Übertragungsleitungen zwischen Sender und Empfänger betrieben werden kann. Ringtopologien werden beispielsweise bei dem Gigaring-Kommunikationssystem [Scott95] der Fa. Cray eingesetzt, das Vektor-Superrechner und Parallelrechner untereinander und mit der Peripherie mit einer Übertragungsgeschwindigkeit von ca. 1 GByte/s verbindet. Man muß in einem Ring zwei Betriebsweisen unterscheiden: Entweder zirkuliert zu einer Zeit nur ein Paket im Ring oder es kann auf jedem Ringsegment ein Paket unterwegs sein (=Slotted Ring Protocol). Im ersten Fall ist eine Arbitrierung der Zugriffswünsche notwendig, die dezentral sein muß, um skalierbar zu sein. Im letzten Fall steigt die Bandbreite mit der Zahl der Knoten. Der Ring wird also in einem gewissen Rahmen skalierbar. Da sowohl Durchmesser als auch mittlerer Knotenabstand mit O(N) steigen, sind Ringe ohne slotted ring Protokoll ähnlich wie Busse nur für kleine Prozessorzahlen (≤32) geeignet. Eine Erweiterung der normalen Ringstruktur, die sowohl die Bandbreite als auch die Fehlertoleranz erhöht, ist die Sehnenringtopologie. Einige grundlegende Artikel zu Ringen sind in [Saltzer81], [Raghaven81] und [Sylvester83] zu finden.

3.6.4 Gittertopologie Historisch gesehen werden Gitter seit Jahrzehnten in verschiedenen kommerziellen Systemen und Forschungsparallelrechnern verwendet, z.B. im ILLIAC IV-Rechner [Barens68], den Intel Touchstone- [Lillevik90] und Delta-Rechnern sowie deren Nachfolger Paragon und der MIT-J-Maschine [Dally92]. Flache 3-dimensionale Gitter erfreuen sich u.a. wegen einfacher technischer Implementierung und leichter Überschaubarkeit durch den Programmierer zunehmender Beliebtheit. Insbesondere werden sie vorteilhaft zur Berechnung partieller Differentialgleichungen und für Algorithmen in der Signal- und Bildverarbeitung eingesetzt. Eine Besonderheit sind Stapel aus übereinandergesetzten 2-dimensionalen Gittern mit in z-Richtung zunehmendem Gitterabstand und abnehmender Knotenzahl. Sie werden als Pyramiden bezeichnet und für Multigrid-Algorithmen und zum maschinellen Bildverstehen benötigt. Gittertopologien gibt es ohne und mit wrap-around-Verbindungen. Im letzteren Fall heißen sie Torus. Tori sind knotensymmetrisch, während Gitter ohne

88

wrap-around-Verbindungen diese Eigenschaft nicht haben. Tori mit der Einschränkung einer konstanten Zahl k von Knoten in jeder ihrer n-Dimensionen werden auch als k-näre n-Kuben [Dally90] bezeichnet. Bei k-nären n-Kuben gibt es die beiden Möglichkeiten, daß die wrap-around-Verbindungen entweder uni- oder bidirektional sind. Nach Öffnen der wrap-around-Verbindungen sind nur noch bidirektionale Datenpfade möglich, damit jeder Knoten von jedem anderen aus erreichbar bleibt. In diesem Falle entstehen aus den k-nären n-Kuben n-dimensionale Gitter mit der Kantenlänge k pro Dimension. Andererseits sind binäre Hypercuben als Spezialfall k = 2 in topologisch unveränderten k-nären n-Kuben enthalten. Die Genealogie der Gitter und Hypercuben ist in Bild 3.6 dargestellt. n-dimensionale Tori der Ausdehnung k = k-näre n-Kuben

unidirektionale wrap-aroundVerbindungen

bidirektionale wrap-aroundVerbindungen

Beschränkung auf k=2

Öffnen der wraparound-Verbindungen

binäre Hypercuben der Größe 2n

n-dimensionale Gitter der Ausdehnung k

Bild 3.6: Zusammenhang zwischen Tori, Gitter und Hyperkuben.

Ein n-dimensionales Gitter mit k Knoten pro Dimension wird rekursiv aus k einzelnen (n-1)-dimensionalen Gittern konstruiert, indem man je k korrespondierende Knoten aus den verschiedenen Gittern mit Geraden verbindet. (Für Tori werden Ringe benötigt). Um den mittleren Knotenabstand im Gitter zu verbessern, wurden verschiedene Varianten vorgeschlagen, die "Abkürzungen" ermöglichen. Dazu zählen die Einführung eines oder mehrerer globaler Busse [Stout83] oder die Anbringung von Bussen [Prasanna87] oder Bäumen [Huang85] in jeder Zeile und Spalte des Gitters. Weiterhin werden neben Quadraten als geometrische Grundelemente auch Sechsecke verwendet [Chen90].

3.6.5 Hypercube-Topologie Obwohl die Hypercube-Topologie bereits im Jahre 1963 vorschlagen wurde [Squire63], konnte der erste funktionsfähige Hypercube-Rechner erst 20 Jahre später realisiert werden [Seitz85]. Seitdem wurden Hypercubes in einer Vielzahl von Maschinen eingesetzt, und es werden weltweit viele parallele Algorithmen für die Hypercube-Topologie entwickelt [Miller88]. Einer der großen 89

Vorteile von Hypercuben, neben ihrem relativ einfachen Aufbau und den kurzen mittleren Knotenabständen, ist, daß sie fast alle statischen Topologien mit hoher Effizienz nachbilden können (Emulation durch "Einbettung"). Einen binären, n-dimensionalen Hypercube mit N=2n Knoten erhält man entweder rekursiv, indem man zwei (n-1)-dimensionale Hyperwürfel an den korrespondierenden Knoten verbindet (Bild 3.7a) oder konstruktiv, indem man N Symbole (Adressen) zu je n Bits bildet und diejenigen Symbole verbindet, die sich jeweils in einem Bit unterscheiden (Bild 3.7b) [Saad88]. 0000 0D-Würfel

2D-Würfel

1D-Würfel

3D-Würfel

0001

0010

0011

0100 0110

0101 0111

1100

1101

1110

1111

1000 1010

1001 1011

4D-Würfel

4D-Würfel

b) konstruktive Erzeugung

a) rekursive Erzeugung

Bild 3.7: Konstruktionsmethoden eines 4-D binären Hypercube (a und b sind gleichwertig).

Wie bereits erwähnt, sind binäre Hypercuben Spezialfälle der k-nären n-Kuben. So entsteht beispielsweise ein 3-dimensionaler Würfel aus einem 3-dimensionalen Torus, der wiederum einen k-nären n-Kubus für k=2 und n=3 darstellt. Mit der Hypercube-Topologie sind auch Nachteile verbunden. Ein Nachteil liegt z.B. darin, daß die Zahl der Kanten pro Knoten mit der Dimension n ansteigt. Um dieses Problem zu umgehen, wurden die Cube-Connected-Cycles entwickelt [Preparata79]. Darin wird jeder Knoten eines n-dimensionalen binären Hyperkubes durch einen Ring von n Knoten ersetzt. Jede vormalige Kante eines Hyperkubenknotens ist dann mit einem der Ringknoten verbunden, so daß der Grad der Cube-Connected-Cycle-Topologie auf drei fixiert ist und nicht mehr von der Dimension abhängt. Ein anderer Nachteil betrifft die schwierige Realisierung der Hypercube-Topologie bei Rechnern, die mehrere Gehäuse umfassen, da aufgrund der starken inneren Vermaschung des Graphen die Gehäuse nicht unabhängig voneinander verkabelt werden können. Diesen Nachteil gibt es bei den meisten anderen Topologien ebenfalls, mit Ausnahme von 2 bzw. 3-D Gittern. 90

3.6.6 De Bruijn-Topologie De Bruijn-Topologien [Samatham91] sind in der Wissenschaft in den letzten Jahren aufgrund ihrer rekursiven Konstruktionsweise, ihres geringen Durchmessers, der großen Halbierungsbreite sowie besonderer Symmetrieeigenschaften interessant geworden. Sie eignen sich speziell zur Implementierung von Sortieralgorithmen und für die schnelle Fouriertransformation. Darüberhinaus sind sie in der Lage, alle für Hypercuben entworfene Algorithmen effizient durch Emulation der Hypercube-Topologie auszuführen. Konstruktion eines de Bruijn-Graphen Der n-dimensionale de Bruijn-Graph zur Basis b besteht aus bn Knoten und bn+1 gerichteten Kanten, die pro Knoten mit "0","1",...,"b-1" beschriftet werden. Jeder Knoten erhält eine n-stellige Adresse anan-1,..,a1 zur Zahlenbasis b zu seiner Identifikation. Dann verläuft für b = 2 (binärer de Bruijn-Graph) eine gerichtete Kante von Knoten K = anan-1,..,a1 zu Knoten K', wenn dessen Adresse entweder lautet: K0' = an-1,...,a10 oder K1' = an-1,...,a11. Für b>2 ergibt sich für K': K0' = an-1,...,a10 oder K1' = an-1,...,a11 u.s.w. bis Kb-1' = an-1,...,a1(b-1). Das heißt, zwei Knoten sind genau dann miteinander verbunden (benachbart), wenn die Adresse eines der beiden Knoten durch Linksverschieben aus der Adresse des anderen Knoten hervorgeht. An die Position der niedrigstwertigen Stelle (LSD) folgt nach der Linksverschiebung eines von b möglichen Ziffern 0,1,...,(b-1) nach, die höchstwertige Stelle (MSD) geht verloren. Aufgrund dieser Vorschrift werden bei jedem de Bruijn-Graphen die Knoten mit den Nummern 0 und 2n-1 mit sich selbst verbunden. Allgemein verlaufen von jedem Knoten K = anan-1,..,a1 genau b gerichtete Kanten (Pfeile) zu dessen Nachbarn K0' = an-1,...,a10, K1' = an-1,...,a11 ,..., Kb-1' = an-1,...,a1(b-1), die entsprechend der niedrigstwertigen Ziffer von Ki' (0≤i≤b-1) die Aufschrift "i" tragen. Bild 3.8 zeigt die Konstruktion des gerichteten de Bruijn-Graphen für den Fall N = 8 und b = 2. Beim binären de Bruijn-Graphen entspringen von jedem Knoten zwei Kanten, und auf jeden Knoten laufen zwei Kanten zu. Ein Knoten K = anan-1,..,a1 erhält genau dann einen Pfeil von einem Knoten K'', wenn für dessen Adresse entweder K0'' = 0anan-1,..,a2 oder K1'' = 1anan-1,..,a2 gilt, und wenn bei der nachfolgenden Linksverschiebung von K0'' und K1'' das Bit 91

001

000

011

1 0

1

1

1

111

010 1 101

0

1 0

0

1

0 0

1

0

0

100

110

Bild 3.8: Konstruktion des de Bruijn-Graphen (N = 8, b = 2).

a1 des Knotens K als LSB bei K0'' bzw. K1'' nachrückt. Wegen des zuvor Gesagten tragen die Pfeile, die auf K zulaufen, die Aufschrift „a1", was bei binären de Bruijn-Graphen entweder „0" oder „1" sein kann. Für b>2 kann a1 die Werte "0","1",...,"b-1" annehmen. Das wesentliche Konstruktionsmerkmal des de Bruijn-Graphen ist das nichtzyklische Linksverschieben von Ziffern (bzw. Adreßbits für b=2). Seine Konstruktion ist mit der Konstruktion des Shuffle Exchange-Graphen verwandt, den man durch Komplementierung ε des LSB bzw. zyklische Linksverschiebung σ erhält, gemäß der beiden Permutationsfunktionen: ε ( a n a n – 1, …, a 1 ) = a n, a n – 1, …, a 1 und σ ( a n a n – 1, …, a 1 ) = a n – 1, …, a 1 a n . Die Darstellung des Shuffle Exchange-Graphen ist in Bild 3.9a gezeigt. 100 001

111

101

a) 000

010

110

011

10

11

b) 00

01

Bild 3.9: Shuffle Exchange-Graph (a) und de Bruijn-Graph zur Basis 2 mit N=8 bzw. 4 Knoten.

Beim binären Shuffle Exchange-Graphen sind die beiden Exchange-Knoten E0 und E1 mit E0 = anan-1,..,a20 und E1 = anan-1,..,a21 92

mit den Knoten N0' = an-1,..,a20an bzw. N1' = an-1,..,a21an verbunden (E0 mit N0' und E1 mit N1'), die wiederum zueinander keine Exchange-Knoten sind. Faßt man in einem binären Shuffle Exchange-Graphen je zwei Exchange-Knoten E0 und E1 zu einem einzigen Knoten E zusammen, erhält man daraus im korrespondierenden de Bruijn-Graphen einen Knoten K und es gilt: E = K = anan-1,..,a2. Die Verschmelzung aller Exchange-Knotenpaare eines Shuffle-Exchange Graphen aus 2n Knoten, liefert einen de Bruijn-Graphen aus 2n-1 Knoten (Bild 3.9b). Diesen Zusammenhang kann man als zweite Möglichkeit zur Konstruktion von de Bruijn-Graphen benutzen. Eine dritte Konstruktionsmöglichkeit für binäre de Bruijn-Graphen besteht darin, daß man einen de Bruijn-Graphen G der Größe N/2 = 2n-1 auf die doppelte Größe erweitert. Die Verdopplung erfolgt so, daß man die 2n Kanten des Graphen G durch Knoten ersetzt, während seine ursprünglichen Knoten entfallen, so daß man im neuen Graphen G' insgesamt 2n Knoten erhält. G' heißt dann Kantengraph von G. Der entscheidende Schritt bei diesem Verfahren ist, daß man aus je zwei benachbarten Kanten in G, die einen Pfad der Länge zwei bilden, eine neue Kante in G' formt. In Bild 3.10a ist ein de Bruijn-Graph für N/2 = 2 gezeigt, aus dem ein (N = 4)-Graph konstruiert wird. In Bild 3.10b sind die beiden ursprünglichen Knoten grau, die neuen Knoten schwarz gezeichnet. Bild 3.11c zeigt das Resultat. Die rekursive Konstruktion des de Bruijn-Graphen besteht also aus drei Schritten: • Plazieren von neuen Knoten auf den Kanten von G (In Bild 3.10b schwarz dargestellt) • In dem daraus entstehenden Zwischengraphen werden je zwei benachbarte Kanten eines Pfades der Länge zwei zu einer neuen gerichteten Kante zusammengefaßt (ebenfalls schwarz in Bild 3.10b dargestellt) • Weglassen der Knoten und Kanten von G (Bild 3.10c).

3.6.7 Star Graph-Topologie Star-Graphen zählen zu den relativ neuen Verbindungsstrukturen. Genau wie Hypercuben und de Bruijn-Graphen besitzen Star-Graphen [Akers89] eine rekursive Struktur und eine Reihe von Symmetrieeigenschaften. Darüberhinaus weist der Star-Graph bei geringem Knotengrad einen relativ kleinen Durchmesser auf, was ihn interessant für Verbindungsnetzwerke für Parallelrechner macht. In den letzten Jahren sind eine Reihe von Algorithmen für den Star-Graphen entworfen worden, die als sehr effizient gelten.

93

a)

b)

c)

Bild 3.10: Rekursive Konstruktion eines de Bruijn-Graphen für N = 4 und b =2 [Leighton92].

Konstruktion des Star-Graphen Zur Konstruktion von Star-Graphen geht man von einer Menge von n verschiedenen Elementen aus, die als Symbole bezeichnet werden. Jedes Symbol wird durch eine Ziffer zur Zahlenbasis n repräsentiert. Im ersten Schritt wird ein Startvektor erzeugt, indem man eine beliebige Aneinanderreihung (Sequenz) von n Symbolen bildet. Im zweiten Schritt wird eine bestimmte Permutationsregel auf die Symbolsequenz angewandt, um daraus eine neue Sequenz zu erzeugen, auf die wiederum dieselbe Regel angewandt wird, usf. So entsteht eine Menge mit Sequenzen von Symbolen (Vektoren) als Elementen, die untereinander verschieden sein müssen. Die Permutationsregel wird als Generator bezeichnet, und die Elemente der Sequenzmenge werden mit den Knoten eines ungerichteten Graphen identifiziert. Die Sequenzen adressieren die Knoten im Graphen, da es gemäß Voraussetzung keine zwei gleichen Sequenzen gibt. Im letzten Schritt der Konstruktion von Star-Graphen werden dann zwei Knoten im Graphen miteinander verbunden, wenn der eine Knoten durch Permutation der Symbolsequenz aus dem anderen Knoten hervorgegangen ist. Wichtig ist festzustellen, daß die Star-Graphen eine Untermenge der CayleyGraphen [Akers89] sind, die wiederum auf einigen Sätzen aus der Gruppentheorie basieren (Cayley-Graphen werden im nächsten Kapitel behandelt). Zur Erzeugung des speziellen Star-Graphen wird als Permutationsregel die Butterfly-Permutation verwendet. Die Butterfly-Permutation βi zur Zahlenbasis n ist im Gegensatz zur Verwendung bei dynamischen Netzen definiert als: Def. 3.4:

β i ( a n a n – 1 …a n – ( i – 1 ) …a 2 a 1 ) = a n – ( i – 1 ) a n – 1 …a n …a 2 a 1 ,

wobei a k ∈ {0, 1, …, n – 1} ist. Die Butterfly-Permutation βi tauscht in der Sequenz an,...,a1 das erste Symbol (an) mit dem i. Symbol aus (i≤n), weshalb sie auch als Transposition bezeichnet wird. Durch eine Transposition kann man ein Symbol in einer Sequenz an jede Position transportieren, so daß die Anzahl un-

94

terschiedlicher Sequenzen, die durch fortlaufende Transpositionen erzeugt werden können, identisch ist mit der Zahl der Kombinationen von n Elementen zur r-ten Klasse (mit Berücksichtigung der Anordnung und ohne Wiederholungen). Diese Zahl ist für r = n gleich n! Ein Star-Graph besteht deshalb aus n! Knoten, wobei jeder Knoten (n-1) Nachbarknoten hat, die durch Transposition des 1. Symbols mit den übrigen (n-1) Symbolen entstanden sind. Der Grad des Star-Graphen ist somit ebenfalls gleich (n-1). Die Gesamtzahl seiner Kanten beträgt n!(n-1)/2, da von jedem der n! Knoten (n-1) Kanten weggehen und je zwei Knoten eine gemeinsame Kante haben (=Divisor 2). Beispiel: Aus der Menge {1, 2, 3} und der Startsequenz 123 entsteht durch Transposition die Menge {123, 213, 312, 132, 231, 321} aus 6 Elementen. Der dazu gehörende Star-Graph ist ein Ring und in Bild 3.11 gezeigt. Zu beachten ist, daß der nächstgrößere Star-Graph bereits 24 Knoten umfaßt und eine wesentlich komplexere Struktur aufweist. Seine Topologie ist in Bild 3.2 des Kapitels "Typische statische Netze" dargestellt. Der darauffolgende Star-Graph umfaßt 120 Knoten und ist zeichnerisch nur noch schwer darstellbar. 321

123

213

231

312

132

Bild 3.11: Star-Graph mit N = 6 Knoten.

3.7 Skalierbarkeit und Emulation von Netzen Für die praktische Anwendung statischer Netze spielen häufig zwei pragmatische Faktoren eine wichtige Rolle. Der erste Faktor ist die leichte Erweiterbarkeit (Skalierbarkeit) eines Netzes, die möglichst kostengünstig und mit geringem Aufwand verbunden sein sollte, und der zweite Faktor betrifft die Portierbarkeit eines gegebenen parallelen Algorithmus auf einen anderen Parallelrechner mit unterschiedlicher Verbindungstopologie. Obwohl beide Faktoren starken Bezug zur Praxis haben, ist gerade hier die Graphentheorie besonders wichtig. Für die Skalierbarkeit ist das graphentheoretisch berechenbare kleinste Netzinkrement entscheidend, das hinzugefügt werden muß, um das je95

weils nächstgrößere Netz zu erhalten. Für die Portierung ist die Frage wichtig, inwieweit ein Graph durch einen anderen Graphen nachgeahmt (emuliert) werden kann. Im folgenden Abschnitt werden diese Faktoren näher untersucht. Zur Beurteilung der Skalierbarkeit eines Netzes ist die Berechnung des kleinstmöglichen Netzinkrements vorzunehmen. Dabei zeigt es sich, daß die kleinste Zahl hinzuzufügender Knoten, die zur topologischen Vollständigkeit eines Graphen notwendig ist, von Graph zu Graph stark schwankt. Während es beim Ring noch ausreicht, nur einen Knoten hinzuzufügen, sind beim Star-Graphen bereits n ⋅ n! Knoten notwendig. Natürlich kann auch eine kleinere Knotenzahl als das Netzinkrement zur Netz- bzw. Rechnererweiterung verwendet werden, die beispielsweise dem verfügbaren Budget entspricht. Dann allerdings muß man eine erhöhte RoutingKomplexität sowie eine mögliche Sättigung einzelner Kanäle aufgrund ungleichmäßiger Verkehrsaufteilung und zusätzlichen Mehraufwand beim Algorithmenentwurf in Kauf nehmen. Neben dem kleinsten Knoteninkrement spielen für die Skalierbarkeit noch eine Rolle, wie sich die Effizienz der Verbindungstopologie bei zunehmender Knotenzahl verhält. Ein Indikator für die Effizienz ist die Latenzzeit, die wiederum mit dem Netzdurchmesser gekoppelt ist. Ein zweidimensionales Gitter aus N Knoten beispielsweise hat mit O ( N ) ein kleines Inkrement, weil nur eine Gitterzeile und -spalte neu hinzugefügt werden muß. Allerdings wächst der Durchmesser ebenfalls mit O ( N ) , so daß große Gitter im Vergleich zum Hypercube, der mit O(logN) wächst, nur für Anwendungen mit hoher Datenlokalität effizient sind. Die Latenz beim Hypercube steigt relativ langsam an. Hyperkuben haben also auch bei hohen Prozessorzahlen große Effizienz. Ihr Nachteil liegt darin, daß für jede Erweiterung eines gegebenen Hyperkuben die Knotenzahl verdoppelt werden muß, was von einer bestimmten Größe an zu teuer wird. Zusätzlich muß bei einer Erweiterung ein neuer Netzwerkanschluß an jedem Knoten angebracht werden, was in der Praxis nachteilig ist, da dies entweder Stillstandszeiten des Rechner wegen Umbauarbeiten oder von Anfang an freie Steckplätze im Rechner, d.h. höhere Mehrkosten erfordert. Zusammenfassend ist zur Skalierbarkeit zu sagen, daß es die "ideale" Topologie mit geringem Inkrement bei gleichzeitig geringer Latenz nicht gibt, so daß in der Praxis der bestmögliche Kompromiß aus einander widersprechenden Forderungen gefunden werden muß, was eine Abwägung im konkreten Einzelfall bedeutet. Die zweite, für die Praxis wichtige Frage lautet, wie gut ein Graph einen anderen Graphen nachbilden (emulieren) kann. Der Vorteil der Emulation eines Graphen durch einen anderen liegt darin, daß man Programme, die für den einen Graphen, z.B. für ein Gitter, geschrieben sind, auf einen anderen Graphen, z.B. einem Hypercube, unverändert ausführen kann. Dadurch werden Kosten für eine Neukodierung eingespart, weil trotz der Vielzahl existierender Topologien und deren spezifischer paralleler Programmierung eine Wiederverwendung einmal vorhandener Applikation möglich wird.

96

Für die Emulation wird die Topologie eines Gastgraphen G auf einen Wirtsgraphen H so abgebildet, daß alle Knoten von G auf Knoten von H zu liegen kommen. Dadurch wird jede Kante von G auf einen Pfad, d.h. auf eine oder mehrere nachfolgende Kanten von H transformiert. Ein Maß, das Auskunft über die Qualität der Abbildung gibt, ist die Verlangsamung, die eine Anwendung bei der Ausführung auf dem Wirtsgraphen H erfährt. Eine gute Abbildung bzw. ein gut geeigneter Wirtsgraph bedeutet für eine parallele Anwendung eine nur geringfügige Verlangsamung. Je geringer die Verlangsamung, umso größer ist die Effizienz der Emulation. Die Verlangsamung hängt von drei Faktoren ab: • Von der sog. Knotenlast, die als die Zahl von Gastknoten definiert ist, die maximal auf einem Wirtsknoten zu liegen kommen. • Von der Länge des längsten Pfades, auf den eine beliebige Kante von G abgebildet wird. Diese Länge wird als Dilatation (Dehnung) bezeichnet. • Vom Maximum der Zahl der Kanten von G, die auf dieselbe Kante in H abgebildet werden, sich also eine Wirtskante teilen müssen. Dieses Maximum kennzeichnet den Andrang (Congestion) bzw. den Füllungsgrad an dieser Kante. Von R. Koch [Koch89] wurde gezeigt, daß ein Graph G, der mit Last L, Dilatation D und Andrang C von einem Wirtsgraphen emuliert wird, eine Verlangsamung S erfährt, die von der Ordnung O(L+D+C) ist. Für den Fall S = 1 beispielsweise besteht kein Unterschied zwischen der Ausführung auf G oder auf H. Wenn dagegen die Zahl der Knoten von G größer als die Zahl der Knoten von H, dann muß, bei gleicher Rechengeschwindigkeit der Knoten in G und H, S>1 sein. Eine der bei der Emulation interessantesten Fragen ist, wie groß S höchstens werden muß, damit G von H emuliert werden kann. Diese Frage kann bislang nicht allgemein beantwortet werden. Sie ist noch Gegenstand der Forschung. Ein anderes Maß für die Güte der Emulation ist die Effizienz E, die hier als Def. 3.5:

TG NG E = -------------TH NH

definiert wird, wobei TG und NG die Ausführungszeit bzw. Knotenzahl des Gastgraphen und TH und NH die Ausführungszeit und Knotenzahl des Wirtsgraphen sind. Die Effizienz ist also das Verhältnis der mit den Knotenzahlen gewichteten Ausführungszeiten. Mit der Effizienz eng verknüpft ist die Expansion der Knotenzahl, die als das Verhältnis NH/NG definiert ist. Für die Expansion X gilt: Gl. 3.4:

X⋅S⋅E = 1

Die Gl. 3.4 kann als Normierungsbedingung für X, S oder E verwendet werden. Es hat sich herausgestellt, daß binäre Hyperkuben gut geeignet zur Emulation fast aller Topologien sind. Insbesondere kann ein Hyperkubus effizient Ringe, 97

Gitter und Bäume einbetten, für die eine Vielzahl paralleler Anwendungen existieren. Die drei genannten Topologien sind in der parallelen Programmierung besonders gebräuchlich. Auf Gittern beispielsweise können sehr gut partielle Differentialgleichungen, Matrixoperationen und Mehrgitterverfahren berechnet werden können. Auf Bäumen sind alle Teile-und-Herrsche-Algorithmen (Divide and Conquer) leicht implementierbar. Der Ring schließlich wird wegen seiner Einfachheit und seinen geringen Kosten besonders bei kleinen Parallelrechnern bzw. verteilten Systemen verwendet. Ein guter Überblick zur Emulationsfähigkeit des Hypercubes ist z.B. in [Leighton92] zu finden.

3.8 Das Grad-Durchmesser-Problem Verbindungsnetzwerke gelten vom topologischen Standpunkt aus als gut, wenn sie bei gegebener Knotenzahl N einen möglichst geringen Durchmesser k und einen kleinen Knotengrad d haben, weil dann Latenzzeit und die Zahl der Netzanschlüsse, die den Hauptkostenfaktor in einem statischen Netz darstellen, minimal sind. Die Frage dabei ist, wie klein d und k bei gegebener Knotenzahl überhaupt werden können. Mit dieser Fragestellung verwandt ist die Frage, wie viele Knoten N man bei gegebenem Durchmesser k und Knotengrad d maximal miteinander verbinden kann. Das letztere wird als das (d, k)-Problem bezeichnet. In der Mathematik wird das Grad-Durchmesser-Problem bei Graphen seit langem untersucht [Elspas64, Imase85, Opatrny85]. Eine umfassende, endgültige Lösung des Problems ist zur Zeit nicht in Sicht. Die besten bekannten Verfahren zur Erzeugung guter Graphen sind heuristischer Natur [Bermond84]. Eine obere Grenze für N(d, k) ist nach [Delorme84] gegeben durch: k

Gl. 3.5:

d(d – 1) – 2 N ( d, k ) ≤ ------------------------------- , für d > 2 d–2

Gl. 3.5 wird als Moore-Grenze bezeichnet. Interessant ist, daß die heute gebräuchlichen Graphen weit von der Moore-Grenze entfernt sind. Ein Hyperkubus mit d = k = 4 beispielsweise hat 16 Knoten, während nach Moore 161 Knoten möglich sein müßten! Das Problem ist allerdings, daß man nicht weiß, wie man Graphen mit der Moore-Knotenzahl konstruiert und daß nur sehr wenige Graphen überhaupt bekannt sind, wie z.B. der Petersen Graph, die diese Obergrenze tatsächlich erreichen. Mittlerweile wurde sogar gezeigt, daß es aus prinzipiellen Gründen nur wenige Moore-Graphen geben kann [Sied92]. Trotzdem ist die Moore-Grenze eine gute Orientierungshilfe, die motiviert, "bessere" Graphen zu finden.

98

3.9 BIBD-Graphen Eine Möglichkeit, Graphen kleinen Durchmessers und großer Fehlertoleranz zu konstruieren, stellen die Balanced Incomplete Block Designs (BIBD) dar, die bereits 1971 vorgeschlagen wurden [Hagelb71, Opatrny86, Skillicorn88]. BIBD-Graphen liegen bzgl. ihres Durchmessers, Knotengrades und der Zahl der miteinander verbundenen Knoten näher an der Moore-Grenze als eine Reihe anderer Graphen. Beispielsweise besteht ein BIBD-Graph mit Grad 10 und Durchmesser 4 aus 1001 Knoten. Der Vergleich mit einem Hyperkubus aus 1024 Knoten zeigt, daß der Durchmesser beim Hyperkubes bei gleichem Knotengrad mehr als doppelt so groß ist (K = 10). Zur Konstruktion von BIBDs werden im ersten Schritt, ähnlich wie beim Star-Graphen, Kombinationen von n Symbolen zur r-ten Klasse gebildet. Der Unterschied zum Star-Graphen besteht u.a. darin, daß die Kombinationen nicht als Sequenzen (Vektoren) repräsentiert werden, sondern als Mengen, weil die Anordnung der Symbole hier keine Rolle spielt. Genauso wie beim Star-Graphen sind Wiederholungen von Symbolen in derselben Menge nicht erlaubt. n Ein BIBD kann somit maximal ⎛ ⎞ Mengen enthalten, die als Blöcke bezeich⎝ r⎠ net werden (Daher auch die Namensgebung). Zusätzlich gilt bei der Konstruktion von BIBD-Graphen noch die Randbedingung, daß, summiert über alle Mengen, jedes Symbol, jedes Paar von Symbolen, jedes Tripel, Quadrupel, usw. von Symbolen genau sooft in den erzeugten Blöcken enthalten sein muß, wie man zuvor vereinbart hat. Durch diese Zusatzbedingung wird die Zahl der Blöcke, aus denen ein BIBD besteht, i.d.R. wesentlich reduziert. Wenn S die Zahl der Symbole angibt und wenn jedes Symbol insgesamt α mal in Mengen mit r Elementen enthalten ist, dann gilt für die Zahl B der Blöcke: Gl. 3.6:

αS B = ------r

Sind beispielsweise für ein BIBD die Symbole 1,2,...,9 gegeben und sollen daraus alle Kombinationen mit drei Elementen gewonnen werden, die jedes Symbol 4 mal und jedes Symbolpaar 1 mal enthalten, dann lautet das Resultat: {1,2,3}, {4,5,6}, {7,8,9}, {1,4,7}, {2,5,8}, {3,6,9}, {1,5,9}, {2,6,7}, {3,4,8}, {1,6,8}, {2,4,9}, {3,5,7}, was 12 Blöcke ergibt. Im nächsten Schritt werden zur Konstruktion eines BIBD-Graphen die Symbole der Blöcke mit den Knoten eines Graphen identifiziert. Die Symbolnummer gibt dabei die Knotenadresse an (im Beispiel 1 bis 9). Die Verbindungen zwischen den Knoten werden durch die Elemente der Blöcke definiert. Block {1,2,3} bedeutet beispielsweise "Verbinde Knoten 1 mit 2 und diesen mit Knoten 3". In Bild 3.12 ist der BIBD-Graph des Beispiels abgebildet. BIBD-Graphen haben trotz ihrer herausragenden Eigenschaften bzgl. Durchmesser und Fehlertoleranz auch Nachteile. Zum einen ist bislang nicht bekannt, 99

1

2

3

5 4

6

7

8

9

Bild 3.12: Beispiel eines BIBD-Graph für N = 9.

für welche Kombinationen von S, r, B und α es BIBD-Graphen überhaupt gibt. Zum anderen ist das Routing in BIBDs relativ aufwendig, weil die Knoten über komplexe Regeln miteinander verbunden sind und weil der Grad des Graphen nicht konstant ist. Im Beispiel hat der Knoten 5 den Grad 8, während der Knoten 1 den Grad 4 aufweist. Das bedeutet, daß BIBD-Graphen nicht knotensymmetrisch sind.

3.10 Routing in statischen Netzen Die Definition des Routing-Begriffs und die Grundlagen der Wegewahl wurden bereits erläutert. In diesem Kapitel geht es um die verschiedenen Routing-Methoden, die in statischen Netzen eingesetzt werden. Generell unterscheidet man bei statischen Netzen zwischen deterministischen und adaptiven sowie zwischen verklemmungsfreien und deadlock-trächtigen Routing-Methoden. Es wird gezeigt, wie man mit Hilfe spezieller Deadlock-Tests feststellen kann, ob die gewählte Routing-Methode für ein gegebenes Netz verklemmungsfrei ist.

3.10.1 Deterministisches Routing Bei deterministischen Routing-Verfahren werden zur Bestimmung des Netzpfades nur die Adressen von Sender und Empfänger verwendet, andere Informationen wie z.B. die Verkehrsbelastung im Netz gehen in die Berechnung nicht ein. Daher rühren auch die synonymen Bezeichnungen Oblivious- bzw. Fixed-Path-Routing. Das Wesentliche beim deterministischen Routing ist, daß entweder aus der Zieladresse oder aus der Differenz von Ziel- und Herkunftsadresse ein in der Regel einfaches Wegschema ermittelt wird, das für jede Netztopologie spezi-

100

fisch ist. Die gebräuchlichsten deterministischen Routing-Verfahren sind das xy-z- und das e-Cube Routing. x-y-z-Routing Beim x-y-z-Routing, das in einem 3-dimensionalen Gitter bzw. einem 3-D Torus abläuft, wird die Sender- und Empfängeradresse in einer Koordinatendarstellung P(x,y,z) ausgedrückt, und zur Wegewahl werden die Koordinatendifferenzen zwischen Sender und Empfänger berechnet. Wenn S = (sx, sy, sz) und E = (ex, ey, ez) die Sende- bzw. Empfangsadressen repräsentieren, dann erhält man aus D = (dx, dy, dz) = (ex-sx, ey-sy, ez-sz) die Information, wieweit Sender und Empfänger entlang der einzelnen Koordinatenachsen voneinander entfernt sind. Ein Datenpaket, das ausgehend vom Sender die Abstände dx, dy, dz im Netz zurücklegt, erreicht nach (dx+dy+dz) Schritten den Empfänger. Beim x-y-z-Routing wandert das Paket zuerst um die Differenz dx entlang der x-Achse, dann um dy entlang der y-Achse und schließlich um dz entlang der zAchse, bis das Ziel erreicht ist. Ist eine Differenz kleiner Null, muß in absteigender Koordinatenrichtung vorangeschritten werden. Dieses Schema läßt sich auf beliebig viele Dimensionen ausdehnen. Das x-y-z-Routing ist aufgrund der vorgegebenen Abfolge bei der Auswertung der Koordinatendifferenzen (zuerst x, dann y dann z) ein deterministisches Verfahren und kann mit geringem Aufwand in den Rechenknoten implementiert werden. Bezüglich der Wegewahl unterscheidet sich die Torustopologie vom Gitter insofern, als daß beim Torus die Differenz in jeder Koordinatenrichtung nicht größer als die Hälfte des entsprechenden Abstandes im Gitter werden kann. Das bedeutet für das x-y-z-Routing im Torus, daß auch dann, wenn die Koordinatendifferenz positiv ist, in negativer Koordinatenrichtung vorangeschritten wird, sofern der Empfänger dadurch schneller erreichbar ist. D.h., daß beim xy-z-Torus-Routing der räumlich kürzeste Weg aus zwei Alternativen (rechts oder links im Kreis) gewählt wird. Beispiel: In einem Torus seien in x-Richtung 8 Knoten kreisförmig verbunden und die Koordinatendifferenz dx sei gleich +7. Dann wird beim x-y-z-Torus-Routing ein Datenpaket in negativer x-Richtung um |7-8| = |-1| Knoten zum Ziel hin bewegt, da |-1| < +7 ist. e-Cube Routing Ein dem x-y-z-Routing entsprechendes Routing-Schema läßt sich auch für die Hypercube-Topologie aufstellen und trägt dann den Namen e-Cube Routing. In einem Hyperkubus werden die Knoten üblicherweise so durchnumeriert, daß sich benachbarte Knoten um genau ein Bit unterschieden, was analog zu einer

101

Koordinatendifferenz von 1 bei benachbarten Gitter- oder Torusknoten ist. Anstelle der P(x, y, z)-Koordinatendarstellung wird im Hypercube eine binäre Knotenadressierung der Art S = snsn-1...s1 und E = enen-1...e1 (si, ei ∈{0, 1}) für die Sender- und Empfängeradressen gewählt. In diesem Fall haben zwei Knoten S, E, deren Adressen sich um zwei Bits unterscheiden, einen gemeinsamen Nachbarn (Zwischenknoten), der sich um jeweils ein Bit von S und E unterscheidet. Die Entfernung von S und E im Hypercube ist also gleich zwei. Entsprechend hat ein Knotenpaar (S, E) mit i (0 < i ≤ n) unterschiedlichen Bits die Entfernung i, so daß ein Paket i Schritte benötigt, um von S nach E zu kommen. Weiterhin gibt es für zwei beliebige Adreßbits sj, ej (1 ≤ j ≤ n) nur die beiden Möglichkeiten, daß sie entweder gleich oder ungleich sein können. Im ungleichen Fall wird beim e-Cube Routing das Paket von seiner momentanen Position zu demjenigen Nachbarn geschickt, der sich in genau diesem Bit unterscheidet. Für den Fall, daß sj und ej für ein bestimmtes j gleich sind, erfolgt keine Bewegung in der Dimension j. Im Schritt j+1 werden die Bits ej+1 und sj+1 miteinander verglichen, d.h. der beschriebene Vorgang wird nacheinander für alle Adreßbits von S und E durchgeführt. Beispiel: Gegeben sei in einem 4-dimensionalen Hypercube ein Sender-/Empfängerpaar mit S = 0000 und E = 1111. Nach dem e-Cube Routing ergibt sich daraus der Pfad 0000->0001->0011->0111->1111, den ein Datenpaket vom Sender zum Empfänger zurücklegen muß. Der Weg durch das Netz ist durch die vorgegebene Reihenfolge der Dimensionen (LSB First) eindeutig.

3.10.2 Adaptives Routing Das Ziel von adaptivem Routing ist es, den Datendurchsatz durch ein Netz zu steigern und eventuelle Netzdefekte durch alternative Wegewahl zu umgehen. Die bei Netzfehlern durch den Einsatz von adaptivem Routing erzielbare Fehlertoleranz ist für viele Anwendungen wichtig und deshalb wird in diesen Fällen adaptives gegenüber deterministischem Routing bevorzugt. Der Datendurchsatz eines Netzes wird bei adaptivem Routing dadurch erhöht, daß verkehrsmäßig stark belastete Knoten und Kanäle (Hot Spots) seltener als Routing-Pfade verwendet werden als wenig belastete. Die Wartezeiten an den Hot Spots werden dadurch so klein wie möglich gehalten, weil der Verkehr gleichmäßig verteilt wird. Auf der anderen Seite bedeutet die Umgehung hochbelasteter Knoten in der Regel auch eine größere Pfadlänge durch das Netz, so daß die Latenz der Datenpakete, die einen Umweg beschreiten, zunimmt. Die Annahme beim adaptiven Routing ist, daß Umwege sich lohnen, Pakete also trotz des Umwegs schneller zum Empfänger gelangen, als wenn sie an ei102

nem verkehrsreichen Knoten warten würden. Diese Annahme ist jedoch nicht immer gerechtfertigt. Ebenso wird die potentielle Zeitersparnis, die bei einem adaptiven Routing-Verfahren zu gewinnen ist, durch die Ausführungszeit des Verfahrens teilweise wieder aufgezehrt, da es komplexer als deterministisches Routing ist und deshalb mehr Zeit benötigt. Adaptives Routing bedeutet immer ein Abwägen zwischen dem damit verbundenen höheren Aufwand und dem erzielbaren Gewinn. Glass und Ni [Glass92] beispielsweise haben gezeigt, daß in einem 16x16 Gitter ein einfaches x-y-Routing-Schema gegenüber adaptiven Verfahren überlegen ist. Deshalb kann man nicht sagen, daß Adaptivität in jedem Fall besser geeignet ist, vielmehr muß im Einzelfall abgewogen werden. In den meisten praktischen Fällen wird nicht analytisch sondern durch Simulation die Tauglichkeit eines Verfahrens geprüft. Dazu werden die wichtigsten Netzparameter von Bandbreite und Latenz für verschiedene Verkehrsanforderungen simulativ ermittelt. Ein einfaches Beispiel für eine verkehrsabhängige Routing-Methode ist das adaptive x-y-z- bzw. e-Cube Routing. Adaptives x-y-z- und e-Cube Routing Sowohl beim x-y-z- als auch beim e-Cube Routing gibt es die Möglichkeit, die Reihenfolge der Dimensionen, entlang denen ein Paket transportiert wird, flexibel zu handhaben und zwar dergestalt, daß eine Dimension nur dann beschritten werden darf, wenn der dazugehörende Kanal frei ist. Dadurch werden die Wartezeiten verkürzt, die beim Durchgang durch das Netz an belegten Netzressourcen entstehen. Dies wird als adaptives x-y-z- bzw. e-Cube Routing bezeichnet. Ist beim adaptiven x-y-z- bzw. e-Cube Routing der Kanal einer benötigten Dimension zu einem bestimmten Zeitpunkt belegt, wird das Paket auf einem anderen Kanal einer anderen Dimension eingespeist, der zu diesem Zeitpunkt frei ist und der ebenfalls für den Pfad des Pakets benötigt wird. Dadurch kann die Latenzeit verkürzt und der Datendurchsatz gesteigert werden, weil die zu übertragenden Pakete in den Puffern der Knoten nur solange gespeichert werden müssen, bis ein beliebiger Kanal aus der Menge der zulässigen Kanäle frei ist. Darüberhinaus können mit adaptivem x-y-z- und e-Cube Routing defekte Kanäle und Zwischenknoten umgangen werden.

3.10.3 Allgemeine, adaptive Routing-Verfahren Zur Durchführung von adaptivem Routing gibt es mehrere Möglichkeiten, die man hinsichtlich der Parameter Weglänge, Wegewahl und Rückverfolgung (Backtracking) unterscheidet. Dementsprechend kann man für adaptive Routing-Verfahren eine Gliederung, wie sie in Bild 3.13 gezeigt ist, angeben. Jeder der drei Parameter kann zwei Zustände annehmen, so daß insgesamt 8 verschiedene Routing-Varianten existieren. Dabei ist die Weglänge l ein Maß für die Zahl der Zwischenknoten K, die bis zum Empfänger durchlaufen werden müssen, gemäß l = K +1. Die Wegewahl kennzeichnet die Zahl der alternativen 103

Pfade zwischen einem beliebigen Sender-/Empfängerpaar, und der Rückverfolgungsparameter klassifiziert, ob beim Routing-Verfahren Backtracking erlaubt ist. Im folgenden werden alle drei Parameter näher erläutert. adaptive Pfadfindung (Wegelenkung)

Weglänge

Wegewahl

Rückverfolgung

minimal

eingeschränkt

ja

nicht minimal

nicht eingeschränkt

nein

Bild 3.13: Gliederung der adaptiven Routing-Methoden.

Wegewahl Ein Maß für die Adaptivität eines Routing-Verfahrens ist die Zahl der alternativen Pfade, die aufgrund des Routing-Schemas in einer bestimmten Topologie gewählt werden können. Beim n-dimensionalen, adaptiven x-y-z-Routing im Gitter beispielsweise kann man, ebenso wie beim adaptiven e-Cube Routing im Hypercube, im ersten Routing-Schritt von den i Koordinatendifferenzen eines Sender-/Empfängerpaares, die ungleich Null sind, eine Koordinate auswählen und das Paket entlang dieser Richtung schicken. Für den zweiten RoutingSchritt verbleiben noch (i-1) ungleiche Dimensionen zur Auswahl, für den 3. Schritt (i-2) Möglichkeiten usw., so daß es bei beiden Verfahren insgesamt i! Möglichkeiten gibt, in welcher Reihenfolge die Dimensionen beschritten werden können. Damit existieren auch i! verschiedene Pfade zwischen Sender und Empfänger, die darüber hinaus alle gleich lang sind. Deswegen können x-y-z bzw. e-Cube Routing bzgl. der Pfadzahl als gleichwertig bezeichnet werden. Aus technischen Gründen kann es manchmal sinnvoll sein, die Adaptivität, d.h. die Zahl alternativer Pfade einzuschränken, um so ein Routing-Verfahren leichter implementierbar zu machen oder um potentielle Verklemmungen (Deadlocks) zu vermeiden. Man spricht deshalb entweder von eingeschränkter oder von nicht eingeschränkter Wegewahl. Üblicherweise stehen auch bei partieller Adaptivität noch genügend Wegewahlalternativen zur Verfügung, um den Netzdurchsatz zu erhöhen oder Fehlertoleranz zu erzielen. Weglänge Adaptive Routing-Verfahren werden dann als minimal bezeichnet, wenn alle Wege zugleich kürzeste Pfade zwischen Sender und Empfänger sind. Das heißt, 104

daß bei minimalem, adaptivem Routing Umwege nicht erlaubt sind. Beispiele für wegminimales Routing sind das adaptive x-y-z- oder e-Cube Routing. Erlaubt man Umwege (nicht minimales Routing), steigt die Zahl der alternativen Pfade in der Regel erheblich an. Backtracking Bei adaptivem Routing kann es auch sinnvoll sein, eine Wiederaufnahme bzw. Rückverfolgung (Backtracking) bereits eingeschlagener Wege vorzunehmen, die folgendermaßen abläuft: Ein Datenpaket wird solange weitertransportiert, bis es an einem Knoten Kn ankommt, an dem es warten müßte. Um die Wartezeit zu vermeiden, wird das Paket um einen oder mehrere Knoten auf dem Weg zurückgeschickt, auf dem es gekommen ist (von Kn zurück zu Kn-1, Kn-2,...). Von einem der Vorgängerknoten Kn-i (i>0) wird es zu einem anderen Knoten transportiert, der ohne Wartezeit erreichbar und gemäß des Backtracking-Verfahrens zulässig ist, weil er ebenfalls zum Empfänger führt. Das bedeutet, daß adaptives Routing mit Backtracking eine nicht wegminimale Routing-Methode darstellt, weil Rückwege zugelassen sind. Sobald ein Rückweg eingeschlagen wird, entfernt sich das Paket vorübergehend vom Empfänger, deshalb wird Backtracking auch als nicht-progressives Routing bezeichnet. Bei wegminimalem Routing dagegen ist jeder Schritt, der von einem Paket ausgeführt wird, in Richtung des Empfängers (=progressives Routing).

3.10.4 Das Deadlock-Problem Generell müssen sowohl deterministische als auch adaptive Routing-Methoden erst hinsichtlich ihres Deadlock-Potentials analysiert werden, bevor sie in der Praxis angewandt werden. Bei adaptivem Routing wird durch die a priori nicht festgelegte Wegewahl die Gefahr einer Verklemmung noch verschärft. Auftreten von Deadlocks Verklemmungen können bei paketvermittelnden Netzen in allen Netztopologien und bei allen Routing-Verfahren wie Store-and-Forward-, Virtual-CutThrough- oder Wormhole Routing auftreten. Wenn eine Verklemmung vorkommt, sind gleichzeitig drei verschiedene Bedingungen eingetreten: • Eine Interprozessorkommunikation hat eine Ressource wie einen Kanal oder einen Puffer für eine gewisse Zeit exklusiv belegt. • Eine zweite Interprozessorkommunikation benötigt zur Durchführung ihres Datenaustauschs die unter 1. belegte Ressource. (Als belegte Ressourcen gelten dabei volle Puffer oder Kanäle, die keine Daten mehr aufnehmen können, weil sie gerade Pakete von anderen Kommunikationen speichern bzw. übertragen.) 105

• Die erste Interprozessorkommunikation kann nur dann terminieren, wenn die zweite Kommunikation terminiert hat, bis dahin wird die eingangs belegte Ressource blockiert. Durch das Zusammentreffen dieser drei Bedingungen tritt eine zyklische Wartesituation ein, die Kennzeichen jedes Deadlocks ist. In Bild 3.14 ist eine Deadlock-Situation aufgrund belegter Puffer exemplarisch dargestellt. In diesem Beispiel kann keiner der Knoten seine Daten senden, weil die benötigten Empfangspuffer erst frei werden, nachdem die Daten abgeschickt sind. Das Abschicken wird jedoch dadurch verhindert, daß kein Empfangspuffer zur Verfügung steht, wodurch sich der Kreis schließt.

Situation: Alle Puffer belegt

K n o t e n 1

beabsichtigter Transfer: 1->2 negatives Acknowledge beabsichtigter Transfer: 2->1 negatives Acknowledge

K n o t e n

Situation: Alle Puffer belegt

2

Bild 3.14: Verklemmungssituation aufgrund belegter Puffer.

Zu beachten ist, daß eine Verklemmung nach Bild 3.14 bei all denjenigen Knoten eines beliebigen Graphen auftreten kann, die zueinander benachbart sind und bidirektional Daten austauschen wollen und die keine getrennten Sendeund Empfangspuffer haben, so daß es sich nicht um eine auf eine bestimmte Topologie beschränkte Situation handelt. Im Falle des Wormhole-Routings gibt es zur beschriebenen Verklemmungssituation eine analoge Konstellation, bei der nicht Puffer sondern Kanäle die belegte Ressource darstellen. In Bild 3.15 beispielsweise möchte Knoten 1 ein Datenpaket zu Knoten 3 schicken, während Knoten 3 gleichzeitig ein Paket zu Knoten 1 übertragen will. Gemäß Wormhole-Routing wird von Knoten 1 das erste Flit in Richtung Empfänger (Knoten 3) abgeschickt und dadurch der Kanal von 1 nach 2 für diese Kommunikation belegt. Dasselbe geschieht bei Knoten 3 bzgl. des Kanals von 3 nach 2. Die Flits beider Kommunikationen treffen sich im Zwischenknoten 2 und können nicht weiter, weil die benötigten Kanäle durch die jeweils andere Kommunikation belegt sind. Wiederum ist die geschilderte Verklemmungssituation nicht von der Topologie abhängig, sondern kann überall auftreten. Anhand der geschilderten, einfachen Deadlock-Situationen wird bereits deutlich, daß die Deadlock-Vermeidung einen wichtigen Punkt darstellt. Die geschilderten Fälle wechselseitig blockierter Puffer bzw. Kanäle lassen sich auf alle Konstellationen erweitern, bei denen mehr als zwei Interprozessorkommunikationen einander blockieren, so daß dadurch ein zirkulares War106

Knoten 2

Knoten 1

Knoten 3

Transfer 1->3 Kanal 1->2 ist durch Flit 1->3 belegt

Kanal 3->2 ist durch Flit 3->1 belegt

Transfer 3->1 (gestrichelt)

Bild 3.15: Verklemmung aufgrund belegter Kanäle.

ten entsteht. In Bild 3.16 werden exemplarisch 4 Knoten gezeigt, die im Kreis auf freie Puffer warten. In diesem Beispiel möchte Knoten 1 zu Knoten 2, 2 zu 3, 3 zu 4 und dieser wiederum zu Knoten 1 übertragen. Da alle Puffer voller Sendedaten sind und keine getrennte Sende- und Empfangsspeicher existieren, kann kein Knoten die Daten des Nachbarknotens aufnehmen. Situation: Alle Puffer voll

Knoten 1 Transfer: 4->1

Transfer: 1->2 neg. Ack.

neg. Ack.

Knoten 4

Knoten 2

neg. Ack.

neg. Ack. Transfer: 3->4

Transfer: 2->3

Knoten 3

Bild 3.16: Verklemmung aufgrund zirkularen Wartens auf belegte Puffer.

Auch hier gibt es eine zu Bild 3.16 analoge Situation, bei der nicht Puffer, sondern Kanäle beteiligt sind, und die bei Wormhole-Routing immer dann auftreten kann, wenn eine Kommunikation einen Kanal als Teilstrecke eines Pfades reserviert, während die übrigen Kanäle, die zur Komplettierung des Pfades notwendig sind, nicht erhältlich sind, weil sie von anderen Kommunikationen belegt sind. Diese wiederum können ihre Pfade deshalb nicht freigeben, weil sie den reservierten Pfad für die Komplettierung ihrer Kommunikationen benötigen (kreisförmiges Warten). Der geschilderte Deadlock-Kreis ist in Bild 3.17 exemplarisch für 4 Knoten dargestellt. In Bild 3.17 belegt Knoten 1 den Kanal von Knoten 1 zu Knoten 2, um den Transfer 1->3 durchzuführen, sobald der Kanal von Knoten 2 zu Knoten 3 frei ist. Genauso verhalten sich die Knoten 2, 3 und 4 mit den Kanälen von 2 nach 3, 3 nach 4 und 4 nach 1, so daß kein Transfer durchgeführt werden kann, weil jeder ein Teil der Ressourcen des anderen belegt. Der geschilderte Fall nach Bild 3.17 kann bei Leitungsvermittlung immer dann auftreten, wenn eine neue Verbindung durch Reservierung von Teil107

Knoten 1 Transfer: 4->2

Transfer: 1->3 neg. Ack.

neg. Ack.

Knoten 4

Knoten 2

neg. Ack.

neg. Ack. Transfer: 3->1

Transfer: 2->4

Knoten 3

Bild 3.17: Verklemmung aufgrund zirkularen Wartens auf reservierte Kanäle.

strecken aufgebaut wird. Ebenso möglich ist das Eintreten dieser Situation bei Paketvermittlung mit Wormhole-Routing, da jedes Flit eines Pakets solange einen Kanal belegt, bis das erste Flit des Pakets auf dem vordersten Kanal in der Kette weiter transportiert werden kann. Zum geschilderten zyklischen Warten gemäß Bild 3.16 oder Bild 3.17 existiert noch die Variante, daß die Übertragungsrichtung gespiegelt sein kann. Aus einem kreisförmigen Warten im Uhrzeigersinn wird dann ein Zyklus im Gegenuhrzeigersinn, wie es in Bild 3.18 für den Fall von vier Knoten dargestellt ist. 1

2

4

3

Bild 3.18: Verklemmung in gespiegelter Reihenfolge.

Wichtig ist festzustellen, daß es sich bei allen gezeigten Beispielen nicht um den Spezialfall einer bestimmten, kreisförmigen Netztopologie handelt, sondern um alle Kreise, die sich in einen beliebigen Graphen einbetten lassen. Zirkulares Warten kann um so schwerer erkannt werden, je mehr Knoten am Warten beteiligt sind. Prinzipiell ist die Knotenzahl nicht begrenzt; viele Knoten sind jedoch sehr unwahrscheinlich. Bei adaptiven nicht wegminimalen Wormhole-Routing-Verfahren kann zusätzlich der Fall auftreten, daß ein Knoten sich selbst blockiert, indem die Flits eines Pakets, die von dem Knoten ausgehen, einen "Kreis schlagen" und sich ein "früheres" und ein "späteres" Flit desselben Pakets an dem Knoten treffen und in die gleiche Richtung wollen. Als Schlußfolgerung aus den gezeigten Fallstudien lassen sich drei Sätze über Deadlocks aufstellen: 108

Satz 3.2: Solange in einem Netz keine vollen Puffer bzw. keine exklusiv belegten Kanäle existieren, sind Verklemmungen nicht möglich. Satz 3.3: Volle Puffer oder belegte Kanäle sind dann Deadlock-trächtig, wenn ein kreisförmiges (zyklisches) Warten auf Pufferplatz oder Kanalkapazität stattfinden kann. Satz 3.4: An einem Deadlock können eine beliebige Zahl (1,2,...,n) von Kommunikationen beteiligt sein. Diese Sätze haben ein gewisse Praxisrelevanz bei der Verhinderung von Deadlocks. Im allgemeinen wird man jedoch versuchen, ein a priori verklemmungsfreies Routing-Verfahren auszuwählen. Verhinderung von Deadlocks Nach der Darstellung, unter welchen Bedingungen Verklemmungen auftreten können, geht es nun um Methoden zu ihrer Vermeidung. Es zeigt sich, daß die Verhinderung einer Verklemmung, die durch zyklisches Warten auf Kanäle oder Puffer verursacht wird, nur für den Spezialfall von zwei einander blokkierenden Knoten leicht zu bewerkstelligen ist, bei mehr als zwei Knoten jedoch besondere Gegenmaßnahmen erfordert. Die "Zweier"-Verklemmung nach Bild 3.14 läßt sich leicht durch getrennte Sende- und Empfangspuffer vermeiden, weil durch diese Maßnahme auch dann noch Daten von Nachbarknoten entgegengenommen werden können, wenn die Sendepuffer voll sind. Analog kann man die Verklemmung nach Bild 3.15 durch die Einführung getrennter Hin- und Rückkanäle lösen. Beim zyklischen Fall der Vierer-Verklemmung (Bild 3.16) hingegen führen einfache Maßnahmen nicht mehr zum Ziel, wie folgende Konstellation zeigt: Vier mit getrennten Sende- und Empfangspuffern versehene und im Kreis geschaltete Knoten versuchen, Daten zum jeweils übernächsten Nachbarn zu übertragen. Dazu ist es notwendig, daß die Daten in einem Zwischenknoten von dem Empfangspuffer in den Sendepuffer transferiert und von dort abgeschickt werden können. Die Situation nach Bild 3.19 ist jedoch so, daß die Daten solange nicht transferiert werden können, wie der Sendepuffer seinerseits belegt ist und auf einen freien Empfangspuffer im Nachbarknoten wartet. Durch die zyklische Verbindung wartet jeder Knoten mit dem Transferieren vom Sendezum Empfangspuffer, bis der Nachbarknoten seinen Empfangspuffer frei macht, was nie der Fall ist. Die in Bild 3.19 gezeigte Verklemmung läßt sich vermeiden, wenn es in jedem Knoten genauso viele Sende- und Empfangspuffer gibt, wie aufeinander wartende Knoten, also in diesem Fall je vier Puffer. Man kann zeigen, daß die Einführung von vier virtuellen Kanälen, die das Multiplexen voneinander unabhängiger Transfers auf demselben physikalischen Kanal erlauben, eine zu Bild 3.19 analoge Deadlock-Situation, die durch

109

Situation: Alle Puffer aller Knoten sind voll.

Pakete für 2

Pakete für 3 Transfer 1->3 Pakete von 2

T R

Transfer 2->4 Pakete für 4 Pakete von 3

T R

4

1 neg. Ack. neg. Ack.

neg. Ack.

neg. Ack. 3

2

T R

Pakete von 1

Transfer 4->2 Pakete für 1 T R

Pakete von 4

Transfer 3->1

Bild 3.19: Verklemmung trotz getrennter Sende- und Empfangspuffer.

das Warten auf freie Kanäle entsteht, ebenfalls verhindern kann. Diese Resultate lassen sich auf Deadlock-Kreise von mehr als 4 Knoten verallgemeinern: Satz 3.5: Eine hinreichende Bedingung zur Vermeidung von Verklemmungen in einem Netz ist, daß es genauso viele freie virtuelle Kanäle pro physikalischem Kanal bzw. genauso viele freie Puffer pro Knoten gibt, wie im Netz Kommunikationen existieren, die zirkular zusammengehören. Leider wird in großen Netzen die benötigte Puffer- bzw. Kanalzahl schnell zu groß für eine praktische Implementierung dieser Methode, so daß Lösungsansätze dieser Art nur dann erfolgreich sind, wenn es gelingt, die notwendige Puffer- bzw. Kanalzahl zu reduzieren. Dies ist mit Hilfe von sog. Puffer- bzw. Kanalreservierungsverfahren möglich, die im nächsten Abschnitt beschrieben werden. Die Reservierungsmethoden resultieren in a priori verklemmungsfreien Routing-Verfahren, die entweder nach dem Store-and-Forward- oder nach dem Wormhole-Prinzip arbeiten. Deadlock-freies Store-and-Forward Routing Historisch gesehen wurden die Verfahren für Deadlock-freies, deterministisches Store-and-Forward Routing zuerst für Weitverkehrsnetze (WANs) entwickelt und später auf Netze für Parallelrechner übertragen. Den meisten Methoden dieser Art liegt das Prinzip zugrunde, daß man Datenpakete in verschiedene Klassen einteilt und daß die Pakete beim Transfer von einem Knoten zum nächsten in die nächsthöhere Pufferklasse wechseln. Dies wird als Pufferreservierungsschema bezeichnet und dient dazu, die notwendige Pufferzahl für verklemmungsfreies Übertragen möglichst klein zu halten. Das einfachste verklemmungsfreie Pufferreservierungsschema, ist das sog. Hop-Schema [Toueg79, Merlin81, Gunther81], das die Zahl der Zwischen110

schritte, die ein Paket im Netz zurückgelegt hat, als Zuordnungskriterium von Paketklassen zu Pufferklassen benützt: Nach k Zwischenschritten wird ein Paket, das von der Flußsteuerung (Flow Control) gestoppt wurde, in die k. Pufferklasse eines Zwischenknotens eingespeichert. Dadurch wird ein Paket bei seinem Weg durch das Netz bei jedem Zwischenstopp in die jeweils nächsthöhere Pufferklasse eingespeichert. Da 0 ≤ k ≤ d gilt, wobei d der Durchmesser des Netzwerks ist, müssen nach dem Hop-Schema (d+1) verschiedene Pufferklassen in jedem Knoten vorhanden sein, um Deadlocks zu vermeiden. Es gilt also für die Zahl Kp der im Knoten benötigten Pufferplätze: Gl. 3.7:

Kp = d + 1

Können Pakete mehr Zwischenschritte zurücklegen, als das Netz groß ist (k > d), weil Umwege beim Routing erlaubt sind, dann ist die Zahl der Pufferklassen entsprechend größer. Die Pufferklassenzahl läßt sich weiter reduzieren, indem man die Knoten ebenfalls in Klassen einteilt und als Zwischenschritte nur diejenigen zählt, die von einer höheren in eine niedrigere Knotenklasse führen. Dieses verbesserte Verfahren heißt Negative-Hop-Schema [Gopal85]. Die Klassenzerlegung der Knoten eines Graphen ist eine relativ komplexe Angelegenheit, die mit dem Vierfarbenproblem bei Landkarten verwandt ist: Man färbt benachbarte Knoten mit verschiedenen Farben so ein, daß insgesamt möglichst wenig Farben benötigt werden. Knoten gleicher Farbe gehören zur selben Klasse. Jeder Klasse ist eine Nummer zugeordnet, so daß definiert ist, wann ein Übergang von einer höheren Knotenklasse in eine niedere erfolgt (="negativer" Übergang). Nach k solchen negativen Übergängen wird das Paket in die Pufferklasse k eingespeichert. Bei dem Negative-Hop-Schema wird ein Paket bei seinem Weg durch das Netz bei jedem Zwischenstopp entweder in einen Puffer einer höheren (positiver Übergang) oder niedrigeren Pufferklasse (negativer Übergang) eingespeichert. Wenn es insgesamt m Knotenklassen in einem Netz gibt, dann sind in einer Sequenz von hintereinander ausgeführten Übergängen maximal (m-1) Übergänge von einer höheren in eine niedere Knotenklasse möglich. Der m. Übergang, der in der Sequenz ausgeführt wird, muß positiv sein, da er nur von einer niederen zu einer höheren Knotenklasse führt kann. Der Prozentsatz der negativen Übergänge an der Gesamtzahl aller Übergänge beträgt somit höchstens m – 1-----------. Werden in einem beliebigen Netz von einem Paket k Übergänge ausgem m–1 führt, kann somit die Zahl kneg der negativen Übergänge den Wert ------------- k m nicht überschreiten. Sind beim Routen keine Umwege erlaubt, ist k ≤ d , und es ergibt sich für die Zahl der neg. Übergänge kneg des Negative-Hop-Schemas:

111

m–1 k neg ≤ ------------- d < d + 1 m

Gl. 3.8:

m–1 Da 0 ≤ k neg ≤ ------------- d gilt, ist die Zahl der Puffer, die bei diesem Verfahren m für Deadlock-Freiheit benötigt wird: m–1 k p = ------------- d + 1 m

Gl. 3.9:

Sind auch adaptive Routing-Verfahren mit Backtracking etc. zugelassen, ist k>d möglich und für diesen Fall gilt für die Zahl kp der Pufferklassen: m–1 k p = ------------- k + 1 (allgemeines Netz). m

Gl. 3.10:

Der Einsparungseffekt beim Negative-Hop-Schema kann für m = 2 bis max. 50% gegenüber dem normalen Hop-Reservierungsschema betragen. Die Frage, die nun untersucht werden soll, ist, wie klein kp höchstens werden kann, damit das Store-and-Forward Routing-Schema verklemmungsfrei bleibt. Diese Frage korreliert mit der Aufgabenstellung, wie viele Farben maximal benötigt werden, um in einem beliebigen Graphen je zwei benachbarte Knoten verschieden färben zu können. Diese Frage läßt sich nicht allgemein beantworten, aber man kann zeigen, daß in Ringen, n-dimensionalen Gittern und Hyperkuben m = 2 Farben (Knotenklassen) ausreichend sind. Dies kann man sich anhand von Bild 3.20 veranschaulichen: 1

0

1

0 0

1 0

1

1

0 1

0

0

0 1

0 1

1 0

1 1

0 1

1 0

0 1

1

1 0

1 0

0 1

0 0

1

0

Bild 3.20: Zerlegung von Ringen, Gittern und Hyperkuben in die Knotenklassen 0 und 1.

Unter der Randbedingung von zwei Knotenklassen lassen sich für diese drei Topologien verbesserte Werte für die Zahl benötigter Pufferklassen angeben, wenn man zusätzlich berücksichtigt, daß der Durchmesser d eines n-dimensionalen Gitters aus p Knoten pro Dimension d = n (p-1) beträgt und daß für den Hypercube bezüglich des Durchmessers d = n gilt. Damit benötigen diese Topologien nach Gl. 3.10 die folgende Zahl von Pufferklassen für Verklem112

mungsfreiheit: Gl. 3.11:

kp =

n ( p – 1 ) + 1 (Gitter) -------------------2

Gl. 3.12:

kp =

n + 1 (Hypercube) --2

Im bidirektionalen Ring aus p Knoten ist d = Gl. 3.13:

kp =

1 p --- --2 2

p , so daß gilt: --2

+ 1 , (bidirektionaler Ring)

und für den unidirektionalen Ring hat man (d = p-1) und somit: Gl. 3.14: :

kp =

p – 1 + 1 (unidirektionaler Ring). -----------2

Zusammenfassend kann gesagt werden, daß alle Netze, die auf Store-and-Forward Routing basieren, durch die Anwendung des Hop- oder Negative-HopPufferreservierungschemas verklemmungsfrei werden, vorausgesetzt, daß eine ausreichende Anzahl von Pufferklassen vorhanden ist. Beim Negative-HopSchema sind soviele Pufferklassen ausreichend, wie in Gl. 3.10 angegeben. Die Zahl der zur Berechnung benötigten Knotenklassen hängt von der jeweiligen Netztopologie ab. Möchte man wissen, ob ein bestimmtes Pufferreservierungsschema für eine vorgegebene Netztopologie eine verklemmungsfreie Kommunikation erlaubt, kann man einen sog. Verklemmungstest durchführen.

3.10.5 Deadlock-Test für Store-and-Forward Routing Für jedes vorgegebene Netz, das Daten nach der Store-and-Forward-Methode transportiert, läßt sich mit Hilfe eines Verklemmungstests überprüfen, ob das im Netz verwendete Pufferreservierungsschema Deadlock-gefährdet ist oder ob Verklemmungen nie auftreten können. Der Verklemmungstest wird durchgeführt, indem man den sog. Pufferabhängigkeitsgraphen des Netzwerkes erstellt. Der Test beruht auf folgendem wichtigen Satz von Gunter [Gunter81]: Satz 3.6: In einem Netz mit Store-and-Forward Routing kann dann und nur dann eine Verklemmung entstehen, wenn der Pufferabhängigkeitsgraph, der nach dem jeweiligen Pufferreservierungsschema erstellt wurde, einen gerichteten Kreis enthält.

113

Der Pufferabhängigkeitsgraph ist ein gerichteter Graph, der folgendermaßen konstruiert wird: Jede Pufferklasse eines Netzknotens wird im Pufferabhängigkeitsgraphen durch einen Knoten repräsentiert; die Kanten des Graphen werden von den Übergängen gebildet, die ein Paket nach dem vorgegeben Routing-Schema von einem Knotenpuffer zum Nachbarpuffer durchführen kann. Der Verklemmungstest über Pufferabhängigkeitsgraphen soll am Beispiel eines Rings erläutert werden. Unidirektionaler Ring und Hop-Schema Die Verklemmungsfreiheit eines unidirektionalen Rings aus 4 Knoten, bei dem die Pufferklassen nach dem Hop-Schema vergeben wurden, kann mit Hilfe des Satzes von Gunter getestet werden. Bei der Erstellung des Pufferabhängigkeitsgraphen ist zu beachten, daß bei der Topologie des Beispiels ein Paket nach höchstens drei Übergängen am Ziel angekommen ist, weil die maximale Entfernung in einem unidirektionalen Ring aus vier Knoten d = 3 beträgt. Daraus berechnen sich nach dem Hop-Schema d+1 = 4 Pufferklassen. Weiterhin muß berücksichtigt werden, daß von jedem Knoten ein neues Paket in den Ring eingespeist werden kann. Der zum Ring gehörende Pufferabhängigkeitsgraph ist in Bild 3.21 dargestellt. Knoten 1

Knoten 4

0 1 2 3

0 1 2 3 Knoten 3

Knoten 2 0 1 2 3

0 1 2 3

Bild 3.21: Pufferabhängigkeitsgraph im unidirektionalen Ring (Hop-Schema).

Da Bild 3.21 keine geschlossenen Kreise enthält, ist das Hop-Schema mit vier Pufferklassen für das Beispiel des 4-Knoten-Rings verklemmungsfrei. Das Resultat läßt sich auf Ringe beliebiger Größe übertragen, wenn mit zunehmender Ringgröße die Zahl der Pufferklassen nach der im vorigen Kapitel angegebenen Formel kp = d + 1 berechnet wird. Weiterhin behält das Resultat auch bei allen Topologien seine Gültigkeit bei, die aus Ringen bestehen oder in die Ringe eingebettet sind. Unidirektionaler Ring und Negative-Hop-Schema Als zweites Beispiel eines Verklemmungstests soll der Pufferabhängigkeitsgraph für die Ringtopologie mit Negative-Hop-Schema erstellt werden. Dazu 114

p – 1 + 1 bestimmt, was 3 -----------2 Pufferklassen für den unidirektionalen Ring aus vier Knoten ergibt. Daraus erhält man den Pufferabhängigkeitsgraph nach Bild 3.22. wird die benötigte Pufferklassenzahl nach k p =

Knoten 1 Klasse 0

Knoten 4 Klasse 1

0 1 2

0 1 2 Knoten 2 Klasse 1

Knoten 3 Klasse 0

0 1 2

0 1 2

Bild 3.22: Pufferabhängigkeitsgraph im unidirektionalen Ring (Negative-Hop-Schema).

Bezüglich der Verklemmungsfreiheit gilt dieselbe Argumentation wie für das Hop-Schema, d.h. daß aus der Kreisfreiheit des Graphen Verklemmungsfreiheit beim Routing resultiert. Ringe mit mehr als 4 Knoten sind dann verklemmungsfrei, wenn die Zahl der Pufferklassen wie oben angegeben berechnet wird. Ebenso läßt sich das Resultat auf alle Graphen anwenden, die aus Ringen aufgebaut sind. Zu beachten ist, daß das Ergebnis auch auf ringbasierte Topologien ausgedehnt werden kann, die in andere Graphen, wie z.B. einem Hypercube, eingebettet sind.

3.10.6 Deadlock-freies, deterministisches Wormhole Routing Wormhole Routing ist hinsichtlich der Verklemmungsfreiheit eine besonders schwer zu handhabende Routing-Methode. Dafür sind zwei Gründe maßgebend. • Für den Fall, daß entweder der Empfänger eines Datenpakets oder ein an der Wegstrecke zum Empfänger liegender Zwischenknoten temporär nicht daten= aufnahmebereit ist, wird bei Wormhole Routing definitionsgemäß in jedem Zwischenknoten ein Flit des Pakets gespeichert. Da darüberhinaus die Flits verschiedener Pakete bei der Übertragung auf einem Kanal nicht gemischt werden können, belegt ein Flit, das von der Flußsteuerung gestoppt wird, nicht nur den Pufferplatz im Zwischenknoten, sondern auch den vom Zwischenknoten abgehenden Kanal. Pakete bestehen aus vielen Flits und belegen somit bei Flußsteuerungsstop eine Vielzahl aufeinanderfolgender Kanäle exklusiv für sich.

115

• Werden in einem Netzwerk von der Flußsteuerung mehrere Pakete gestoppt, kann es nach der Freigabe des Datentransports zu einer gegenseitigen Verklemmung kommen. Die Verklemmung tritt dann auf, wenn die Pakete einen oder mehrere Kanäle zur Zwischenspeicherung ihrer Flits belegen und wenn Flits verschiedener Pakete wechselseitig einen Kanal benötigen, den ein Flit des jeweils anderen Pakets belegt hat. Die geschilderte Verklemmungssituation kann auf mehr als zwei Datenpakete erweitert werden, wenn diese kreisförmig aufeinander warten. Da bei hoher Verkehrsdichte häufig entweder der Empfänger oder ein Zwischenknoten kurzzeitig nicht Daten aufnahmebereit sind, haben Netze mit Wormhole Routing ein hohes Deadlock-Potential und entsprechende Vorbeugemaßnahmen müssen getroffen werden. Die Situation ist vergleichbar mit der gegenseitigen Verklemmung, die durch Warten auf wechselseitig belegte Puffer entsteht und die in Netzen mit Storeand-Forward Routing beschrieben wurde. Aufgrund dieser Analogie wurde die Idee geboren, die Methoden, die bei Store-and-Forward-Netzen entwickelt wurden, auf Wormhole-Netze zu übertragen. Der Beweis für die Richtigkeit dieses Vorgehens wurde von Boppana und Chalasani geliefert [Boppana93a]. Danach kann man bei Wormhole-Netzen Kanalreservierungsschemata einsetzen, die analog zu den Pufferreservierungsschemata bei Store-and-ForwardNetzen sind. Insbesondere entspricht der (räumlichen) Unterteilung der Knotenpuffer in mehrere, kleine Puffer verschiedener Klassen eine (zeitliche) Unterteilung der Übertragungskanäle in mehrere virtuelle Kanäle kleinerer Bandbreite. Die virtuellen Kanäle werden im Zeitscheibenverfahren (Multiplex) auf einem physikalischen Kanal übertragen. Dabei ist zu beachten, daß die Zeitscheibe, die jedem virtuellen Kanal zur Verfügung steht, so groß sein muß, wie ein Paket für den Transfer seiner Flits benötigt, da Pakete komplett übertragen werden müssen. Die Verwaltung der Übertragungszeit erfolgt auf Paketbasis, weil Flits im Netzwerk keine autonomen Verwaltungseinheiten darstellen, weshalb sich Flits verschiedener Pakete nicht mischen dürfen. Weiterhin ist in jedem Knoten für jeden virtuellen Kanal ein Pufferplatz für jeweils ein Flit zu reservieren, so daß es ebenso viele Flit-Puffer wie virtuelle Kanäle gibt. Bei aktivierter Flußkontrolle muß das zu übertragende Flit in demjenigen Puffer zwischengespeichert werden, der dem zu übertragenden Paket zugeordnet ist. Die Flit-Puffer eines Knotens werden dazu in verschiedene Pufferklassenklassen eingeteilt, die mit den virtuellen Kanälen korrespondieren. Die Analogien zwischen den Puffern in Store-and-Forward-Netzen und den Kanälen bei Wormhole Routing gehen über das bereits Gesagte hinaus. Boppana und Chalasani [Boppana93a] konnten zeigen, daß aus jedem verklemmungsfreien Pufferreservierungsschema ein Reservierungsschema für virtuelle Kanäle konstruiert werden kann, das ebenfalls verklemmungsfrei ist, vorausgesetzt, daß im Pufferreservierungsschema kein Übergang von einer höheren Pufferklasse in eine niedere Klasse erlaubt ist. Da diese Randbedingung von praktisch allen Pufferreservierungsschemata eingehalten wird, lassen sich fast genauso viele Kanal- wie Pufferreservierungsschemata konstruieren. 116

Dally und Seitz [Dally87] zeigten schließlich, daß Verklemmungen in einem Wormhole-Netz nur dann auftreten können, wenn der dazu gehörende Kanalabhängigkeitsgraph nicht kreisfrei ist. Der Kanalabhängigkeitsgraph ist das Analogon zum Pufferabhängigkeitsgraphen und wird für ein gegebenes Netz bestimmter Topologie folgendermaßen gewonnen: Im Kanalabhängigkeitsgraphen stellt jeder Knoten einen virtuellen Kanal dar, und je zwei Knoten V1 und V2 sind dann gerichtet miteinander verbunden, wenn ein Paket, das auf einem virtuellen Kanal (=Knoten V1) ankommt, gemäß dem verwendeten Kanalreservierungsschema auf dem anderen virtuellen Kanal (=Knoten V2) weitergeschickt werden kann. Unidirektionaler Ring und Negative-Hop-Schema Im folgenden wird als Beispiel für die Sätze von Boppana und Chalasani bzw. Dally und Seitz ein Kanalreservierungsschema für den unidirektionalen Ring aus 4 Knoten hergeleitet, der blockierungsfrei Daten über Wormhole Routing überträgt. Wie beim Negative-Hop-Pufferreservierungsschema, das bei Storeand-Forward Routing angewandt wird, werden im ersten Schritt des Verfahrens die Knoten des Rings in die Klassen 0 und 1 eingeteilt. Im zweiten Schritt werden entsprechend zu den Pufferklassen virtuelle Kanäle verschiedener Klassen gebildet. Zu beachten ist dabei, daß folgende Regel gilt: Beim Kanalreservierungsschema wechselt ein Paket von Kanalklasse a zur "höheren" Klasse b, wenn es von einem Knoten der Klasse 1 zu einem Knoten der Klasse 0 übertragen wird (=negativer Übergang). Bei einem positiven Übergang bleibt das Paket in derselben Kanalklasse. Im Gegensatz zu den drei Pufferklassen des Negative-Hop-Schemas, die für verklemmungsfreien Datenverkehr im unidirektionalen Store-and-ForwardRing aus 4 Knoten nötig waren, sind hier nur zwei Kanalklasssen a und b erforderlich. Der Grund liegt darin, daß im Beispiel die maximale Entfernung drei Kanalübertragungen und zwei Zwischenknoten beträgt, wobei an dem einen Zwischenknoten ein positiver und an dem anderen Zwischenknoten ein negativer Übergang stattfindet. Nur beim Zwischenknoten mit dem negativen Übergang muß die Kanalklassse gewechselt werden, so daß insgesamt 2 Kanalklassen ausreichen. Der unidirektionale Ring und sein dazu gehöriger Kanalabhängigkeitsgraph sind in Bild 3.23 dargestellt. Da in Bild 3.23 keine geschlossenen Kreise existieren, ist das zum NegativeHop-Schema analoge Kanalreservierungsschema verklemmungsfrei. Wiederum läßt sich das Resultat auf Ringe beliebiger Größe erweitern, wenn die Anzahl der Kanalklassen entsprechend der Pufferklassenzahl des Negative-HopSchemas berechnet wird. Ebenso sind alle Netze mit Wormhole Routing und entsprechender Kanalklassenzahl verklemmungsfrei, die aus Ringen aufgebaut sind. Dally und Seitz [Dally87] verbesserten dieses Ergebnis für den Fall von k-nären n-Kuben, die aus Wrap Around-Verbindungen in Form von unidirektionalen Ringen bestehen und die ein spezielles von Dally und Seitz entwickeltes Wormhole Routing-Verfahren benützen. Sie zeigten, daß unter diesen Randbe117

0

a

b

b

b

1

1 b 0

a b

0->1

0->1 b

b

a

1->0

a

a

a

a

b 1->0

a

Bild 3.23: Unidirektionaler Ring mit zwei Kanalklassen und Kanalabhängigkeitsgraph.

dingungen zwei Kanalklassen für Verklemmungsfreiheit ausreichen. Dies ist insofern bemerkenswert, als daß die Kanalklassenzahl unabhängig von der Ringgröße ist.

3.10.7 Deadlock-freies, adaptives Store-and-Forward Routing Bei adaptivem Store-and-Forward Routing muß man unterscheiden, ob beim Weg durch das Netz Umwege, wie sie z.B. beim Backtracking entstehen können, erlaubt sind oder nicht. Adaptive Store-and-Forward Verfahren mit minimaler Weglänge können über die bekannten Pufferreservierungsschemata verklemmungsfrei betrieben werden, sofern ihr Pufferabhängigkeitsgraph kreisfrei ist und genügend Pufferklassen vorhanden sind. Ist eine jedoch nicht-minimale Weglänge erlaubt, kann das Hop-, NegativeHop- oder ein anderes Pufferreservierungsschema nicht eingesetzt werden, weil ein Paket eine nicht vorhersagbare Zahl von Zwischenknoten passieren kann, so daß sich die Anzahl der Pufferklassen nicht bestimmen läßt. Dementsprechend basieren Store-and-Forward-Routingverfahren wie das sog. ChaosRouting [Konstantin91], die zugleich nicht-minimal, adaptiv und verklemmungsfrei sind, nicht auf Reservierungschemata. Sie enthalten entweder Zufallselemente, die eine Ursache-Wirkung-Beziehung, wie sie bei Deadlocks existieren, aufheben, oder sie beruhen auf separaten Gegenmaßnahmen zur Deadlock-Vermeidung. Chaos Routing Chaos-Routing ist eine Kombination von Store-and-Forward Routing, Deflection Routing [Baran64], das im nächsten Abschnitt erläutert wird, und zentraler Pufferung; virtuelle Kanäle werden nicht verwendet. Jeder Knoten hat für jeden physikalischen Kanal einen Puffer für je ein Sende- und ein Empfangspaket. Zusätzlich gibt es noch einen für alle Kanäle gemeinsamen FIFO-Puffer mit Platz für mehrere Pakete. Solange bei keinem Knoten ein Kanal belegt ist, wandern die Pakete deterministisch gemäß Store-and-Forward durch das Netz. 118

Sobald ein Sendekanal für ein Paket nicht zur Verfügung steht, wird dieses in dem zentralen FIFO-Speicher zwischengelagert. Parallel dazu wird das vorderste Paket des FIFOs ausgelesen und auf dem gewünschten Sendekanal gegeben, sofern dieser frei ist. Ist über längere Zeit kein Kanal frei, droht auch der Zentralspeicher voll zu werden. Dann wird diesem ein zufällig ausgewähltes Paket entnommen und es auf irgendeinem freien Kanal abgeschickt, um wieder Pufferplatz zu gewinnen (Aufgrund dieses Zufallelements kam die Namensgebung Chaos-Routing zustande). Chaos Routing ist verklemmungfrei, weil jeder Knoten stets in der Lage ist, ein neues Paket aufzunehmen, denn seine Puffer laufen nie über. Es ist aber auch frei von ewig kreisenden Paketen, weil es sehr unwahrscheinlich ist, daß ein und dasselbe Paket mehrere Male dem zentralen FIFO zufällig, d.h. außerhalb der Reihe entnommen wird, um es auf einem ebenso zufällig ausgewählten Kanal weiterzuschicken. Deflection Routing Ein anderes nicht-wegminimales, adaptives und verklemmungsfreies RoutingVerfahren ist das Deflection Routing, das auch als Hot Potatoe Routing bezeichnet wird. Bei diesem Verfahren wird die Methode angewandt, daß anstelle eines besetzten Sendekanals, der für den Weitertransport benötigt wird, ein beliebiger andere Kanal, der gerade frei ist, zum Abschicken des Pakets dient. Trotz dieses starken Zufallselements, das dem Hot Potatoe Routing auch seinen Namen gab, ist dieses Verfahren unter bestimmten Bedingungen [Greenberg92] effizient bei der Datenübertragung. Beim Deflection Routing gelangt ein Paket deshalb zum Ziel, weil bei jedem Zwischenknoten, den das Paket auf seinem (zufälligen) Weg durch das Netz passiert, erneut versucht wird, das Paket die richtige Richtung, d.h. zum Empfänger hin zu transportieren. Allerdings kann es bei Deflection Routing passieren, daß ein Paket beliebig lange im Netz kreist, was als Livelock bezeichnet wird, sofern nicht entsprechende Gegenmaßnahmen getroffen sind, z.B. in der Art, daß in die falsche Richtung geschickte Pakete gegenüber "normalen" Paketen bevorzugt werden.

3.10.8 Deadlock-freies, adaptives Wormhole Routing Bei adaptivem Wormhole Routing muß wie bei Store-and-Forward Routing unterschieden werden, ob nicht-minimale Wege erlaubt sind oder nicht. wegminimale Verfahren können über Reservierungen von virtuellen Kanälen verklemmungsfrei gemacht werden, allerdings ist hier die benötigte Kanalzahl wesentlich höher als bei deterministischen Verfahren. Bei nicht eingeschränkter Wegewahl, d.h. voller Adaptivität steigt bei einigen Wormhole-Verfahren [Linder91, Boppana93b] die Zahl der virtuellen Kanäle exponentiell an, obwohl sie wegminimal sind, wie Tabelle 3.2 zeigt. Damit sind diese Methoden in der Praxis zu aufwendig für eine Implementierung.

119

Anzahl virtueller Kanäle

k-närer n-Kubus

n-dimensionales Gitter

bei unidirektionalen Links

n+1

-

bei bidirektionalen Links

2n (pro Richtung)

2n-1 (pro Richtung)

Tabelle 3.2: Zahl der benötigten virtuellen Kanäle bei Deadlock-freien, adaptiven Wormhole Routing-Verfahren nach Linder und Boppana [Linder91, Boppana93b].

Es gibt jedoch nicht-wegminimale Wormhole Routing-Verfahren, die mit geringem Aufwand implementierbar sind und die deadlockfrei arbeiten. Sie beruhen auf dem sog. Turn-Modell, das die Beweglichkeit eines Pakets in einem Netz gezielt einschränkt und dadurch sowohl Deadlocks als auch eine aufwendige Implementierung vermeidet. Turn-Modell Im folgenden soll exemplarisch ein nicht-wegminimales, Deadlock-freies, adaptives Wormhole Routing-Verfahren für den Spezialfall von n-dimensionalen Gittern erläutert werden, das keine virtuellen Kanäle benötigt. Es basiert auf der Beobachtung, daß im regelmäßigen Gitter zyklische Deadlocks dann vermieden werden können, wenn man für die Pakete bestimmte Richtungswechsel ausschließt [Stricker91]. In Bild 3.24a sind die beiden Deadlock-Szenarien dargestellt, die es prinzipiell gibt: Der Deadlock-Kreis im Uhrzeiger- und im Gegenuhrzeigersinn. Zusätzlich sind in Bild 3.24b die Richtungswechsel gezeigt, die Datenpakete machen müssen, um diese Kreise zu erzeugen. Nach dem Turn-Modell von Glass und Ni [Glass92] genügt es für ein Paket in einem ebenen Gitter, einen Richtungswechsel sowohl im Uhrzeigersinn, z.B. in Ostsüdrichtung, als auch im Gegenuhrzeigersinn, z.B. Nordwestrichtung, auszuschließen, um Deadlocks zu vermeiden. Dies ist eine einfache und zugleich wirkungsvolle Methode der Deadlock-Vermeidung. Eine Konsequenz dieses Modells ist beispielsweise, daß bei Wormhole Routing Sende- und Empfangsknoten voneinander verschieden sein müssen, da Pakete nicht zum Ursprungsknoten zurückkehren können. Dies ist außer für Testzwecke auch nicht nötig. Zu beachten ist weiterhin, daß die in Bild 3.24a abgebildeten Deadlock-Kreise vom Prinzip her topologieunabhängig sind, da bei allen Netzen, in die man Kreise eingebetten kann, auch Verklemmungen entstehen können. Das Turn-Modell kann auf mehr als 2 Raumdimensionen erweitert werden. Die Erweiterung auf n-dimensionale Gitter erfolgt dergestalt, daß man berücksichtigt, daß in einem n-dimensionalen Gitter n(n-1) ebene Kreise möglich sind, die jeweils aus vier 90-Grad Richtungswechseln bestehen. Der Grund für den Faktor n(n-1) liegt darin, daß man 2 Dimensionen pro Kreis benötigt und daß für die erste Dimension n und für die zweite (n-1) Mög-

120

1

2

1

2

4

3

4

3

Nordost

Ostsüd

Westsüd

Nordwest

Westnord

Südwest

Südost

Ostnord

a)

b)

Bild 3.24: Die beiden Deadlock-Szenarien (a) und ihre Richtungswechsel in der Ebene (b).

lichkeiten zur Etablierung des Kreises zur Verfügung stehen. Dabei muß man einen Unterschied bzgl. der Reihenfolge der Dimensionen machen: Die Ebene, die durch das Dimensionpaar (i, j) definiert ist, unterscheidet sich von der (j, i)Ebene (i, j = x,y,z,...) darin, daß sie die entgegengesetzte Kreisrichtung repräsentiert (positiver bzw. negativer Umlaufsinn). Glass und Ni [Glass92] zeigten, daß es zur Verklemmungsfreiheit genügt, in jedem der n(n-1) Kreise einen einzigen Richtungswechsel auszuschließen. Der Ausschluß bestimmter Richtungswechsel kann auf verschiedene Arten erfolgen. Eine einfache Methode ist das sog. Negative First-Verfahren. Negative First-Verfahren Das Verfahren soll anhand des Falles erläutert werden, daß man im 2-D Gitter den Ostsüd- und den Nordwestwechsel ausschließen möchte. Dazu wird das Routing-Verfahren in zwei getrennten Phasen durchgeführt. In der ersten Phase werden Datenpakete nur in negativer, d.h. in (-x)- und (-y)-Richtung und in der zweiten Phase nur in positiver Richtung (+x) und (+y) übertragen. Die Ostsüdund Nordwestwechsel lassen sich auch als (+x-y)- bzw. (+y-x)-Wechsel beschreiben, woran man erkennen kann, daß diese Wechsel eine Routing-Reihenfolge erfordern würden, die zuerst in positiver und dann in negativer Richtung abläuft. Aufgrund des vorgebenen umgekehrten Ablaufs sind die unerwünschten Richtungswechsel unterbunden. In Bild 3.25 ist als zweites Beispiel ein ebenes Gitter gezeigt, auf das das Negative First-Verfahren angewandt wird. Es ist darin die Menge der potentiell wählbaren Kanäle zwischen den Knoten 1 und 2 eingezeichnet, wobei die (-x)bzw. (-y)-Phase des Routing-Verfahrens auf einen Paketübergang begrenzt ist. Je nach Verkehrsbelastung im Gitter kann an jedem Zwischenknoten auf dem

121

Weg vom Sender zum Empfänger ein Kanal ausgewählt werden. Nordwestund Ostsüdwechsel sind, wie man sich überzeugen kann, nicht vorhanden. Dementsprechend können auch keine Deadlock-Zyklen existieren. 4 2

3 2

1

1 0 y 0

1

2

3

4

x

Bild 3.25: Routingpfade nach dem Negative First-Verfahren im ebenen Gitter.

Das dem Negative First-Verfahren zugrunde liegende Prinzip läßt sich folgendermaßen beschreiben: • Zuerst wird das Paket vom Sendeknoten um n (n = 0, 1, 2,..) (negative) Wechsel vom Zielknoten entfernt. • Danach strebt das Paket in der minimalen Zahl von (positiven) Wechseln auf den Empfängerknoten zu. Die Bewegung des Datenpakets kann mit einem Pendel vergleichen werden, das in der 1. Phase des Verfahrens vom Startknoten ausgelenkt wird und in der 2. Phase in Richtung des Zielknotens zurückschwingt. Das bedeutet, daß nur die negative Phase dem Datenpaket Gelegenheit gibt, sich vom Ziel zu entfernen, sofern die Verkehrssituation das erfordert. Rückwege wie beim Backtracking sind nicht möglich. Im Beispiel nach Bild 3.25 sind S(1|2) und E(3|3) die Koordinaten des Sendebzw. Empfangsknotens in der x-y Ebene. Die Position der größtmöglichen Ablenkung, die am Ende der 1. Phase erreicht wird, hat die Koordinaten S'(0|2) 3 bzw. S'(1|1). Daraus erhält man einen Differenzvektor D = E – S' = ⎛ ⎞ ⎝ 1⎠ 2 bzw. D = ⎛ ⎞ , um den das Paket in der 2. Phase voranschreiten muß. Es spielt ⎝ 3⎠ keine Rolle, in welcher Reihenfolge die Übergänge in (+x)- und (+y)-Richtung durchgeführt werden.

122

n-dimensionales Negative First-Verfahren Das Negative First-Verfahren läßt sich auf n Dimensionen erweitern. In einem k-nären, n-dimensionalen Gitter ohne Wrap Around-Enden seien S = snsn1,...,s1 der Sende- und E = enen-1,...,e1 der Empfangsknoten, wobei S und E in Koordinatenschreibweise zur Zahlenbasis k (0 ≤ si,sj < k) dargestellt sind, und die i-te Ziffer die Koordinate entlang der i-ten Dimension angibt. Mit S' sei der maximale Pendelausschlag am Ende der ersten Phase bezeichnet, wobei für S' gelten soll: S' = sn'sn-1',...,s1'. Dann ist die Zahl der Schritte, die in der zweiten Phase des Verfahrens in jeder Dimension bis zum Zielknoten zurückgelegt werden muß:

Gl. 3.15:

⎛ e n – s' n ⎞ ⎜ ⎟ ⎜ e n – 1 – s' n – 1⎟ D = ⎜ ⎟ . … ⎜ ⎟ ⎜ ⎟ ⎝ e 1 – s' 1 ⎠

Wiederum spielt die Reihenfolge der Dimensionen und die Zahl der Schritte innerhalb einer Dimension keine Rolle. Was zählt ist, daß am Ende der 2. Phase die notwendige Zahl der Schritte in jeder Dimensionen zurückgelegt ist. Für S' sind die folgenden Bedingungen zu erfüllen:

Gl. 3.16:

n

∧ ( si' ≤ si ∧ si' ≤ ei ) , i=1

d.h. S' darf nicht "rechts" bzw. "oberhalb" von Sender und Empfänger sein. Wegminimales Negative First-Verfahren Das Turn-Modell in Kombination mit dem Negative First-Verfahren läßt sich auch als Deadlock-freie, adaptive Routingmethode mit minimaler Weglänge betreiben. In Bild 3.25 beispielsweise sind die Koordinatendifferenzen in xund y-Richtung zwischen Knoten 2 und Knoten 1 positiv, so daß in diesem Fall die Zahl der Paketübergänge der negativen Phase auf Null reduziert werden könnte. Jeder der verbleibenden Pfade ist dann zugleich wegminimal. Im Allgemeinfall kann der Empfängerknoten auch "links" bzw. "unterhalb" des Sendeknotens liegen, so daß die negative Phase unbedingt erforderlich ist. Generell muß für Wegminimalität die Zahl der Paketübergänge in der negativen Phase in jeder Dimension so gewählt werden, daß das Ziel in der positiven Phase mit der kleinsten Zahl von Schritten erreicht werden kann. 123

p-cube Routing Wenn das Turn-Modell zusammen mit dem Negative First-Verfahren auf binäre n-Kuben als einem Spezialfall k-närer, n-dimensionaler Gitter angewandt wird, spricht man vom p-cube Routing [Glass92]. Die Weglänge beim p-cube Routing kann wahlweise minimal oder nicht minimal sein. Beispiel: Sei S = 101 die binäre Adresse eines Sendeknotens in einem 3-D Kubus und E = 010 die Adresse des Empfängers, dann ist für wegminimales Routing eine Negativphase der Länge 2 und eine Positivphase der Länge 1 erforderlich, um vom Sender zum Empfänger zu gelangen, da die Bits der Wertigkeit 22 und 20 von 1 auf 0 (negative Richtung) und das 21 Bit von 0 auf 1 (positive Richtung) geändert werden müssen. Dazu sind die beiden Pfade 101->001->000->010 bzw. 101->100->000->010 alternativ geeignet. Bei nicht-wegminimalem p-cube Routing können die Routing-Phasen länger als minimal nötig dauern. Ein Beispiel dafür lautet: S = 111, E = 110, Pfad: 111>011->010->110. S' ist hier 010. Numerierungs-Routing Eine dritte Möglichkeit, bestimmte Richtungswechsel auszuschließen, besteht darin, die Kanäle einer gegebenen Topologie auf eine besondere Art zu numerieren [Dally87]. Die Numerierung erfolgt so, daß jeder erlaubte Richtungswechsel einem Übergang von einem Kanal mit niedriger Nummer zu einem Kanal mit höherer Nummer entspricht. Übergänge von höheren zu niedrigeren Kanalnummern sind nicht erlaubt. Jeder Knoten darf nur einmal besucht werden, Rückwege wie beim Backtracking sind verboten, Sende- und Zielknoten müssen verschieden sein. Ein Pfad zwischen Sender und Empfänger besteht bei diesem Verfahren aus einer streng monoton steigenden Sequenz von Kanalnummern, wodurch die "schädlichen" Richtungswechsel ausgeklammert und Verklemmungsfreiheit garantiert wird. Wichtig ist festzustellen, daß es für sehr viele Topologien eine solche Numerierung gibt. Umgekehrt ist die Blockierungsfreiheit einer bestimmten Topologie dadurch bewiesen, daß das Numerierungsschema möglich ist [Dally87]. In Bild 3.26 ist eine Numerierung für ein ebenes Gitter [Varma94] und in Bild 3.27 für einen 3-dimensionalen Würfel [Varma94] gezeigt, bei denen durch Befolgen der Übergangsregel bestimmte Richtungswechsel ausgeschlossen sind. Voraussetzung für Verklemmungsfreiheit ist bei beiden Beispielen, daß in den Knoten getrennte Sende- und Empfangspuffer für je ein Flit vorhanden sind. Der Vorteil des Numerierungsverfahrens gegenüber dem Negative First-Verfahren liegt darin, daß keine zwei verschiedenen Phasen durchlaufen werden müssen. Diese Routing-Methode ist dadurch schneller, sie erfordert jedoch eine Initialisierungzur Festlegung der Kanalnumerierung.

124

3

10

17

2

44 45 9 4

37 38 16 11

30 31 23 18

24

1

43 46 8 5

36 39 15 12

29 32 22 19

25

0

42 47 7 6

35 40 14 13

28 33 21 20

26

41

34

27

keine

und

Richtungswechsel

Bild 3.26: Verklemmungsfreies Routing im 2-D Gitter durch spezielle Kanalnumerierung. 110

5 5

4 14 1

100

111

0

0 5

1

keine 0

und

Richtungswechsel

4 3

2

4

3 2 2

000

011

1

010

4 1

4 1

001 3

Bild 3.27: Verklemmungsfreies Routing im 3-D Würfel durch Numerierung.

125

3.11 Theorie statischer Graphen (Cayley-Graphenmodell) 3.11.1 Einleitung Im Jahre 1989 wurde von S. B. Akers und B. Krishnamurthy [Akers89] eine Theorie der statischen Netze veröffentlicht, die einen bedeutenden Fortschritt auf diesem Gebiet darstellt. Eine Vielzahl bekannter sowie zukünftiger Graphen, die knotensymmetrisch sind, können nach dieser Theorie einheitlich spezifiziert werden. Die Theorie basiert darauf, daß man die Elemente spezieller algebraischer Gruppen, der sog. Permutationsgruppen, mit den Knoten eines symmetrischen Graphen identifiziert, ähnlich, wie dies bereits bei der Konstruktion des Star-Graphen gezeigt wurde. In dieser Sichtweise sind zwei Knoten dann miteinander verbunden, wenn ihre korrespondierenden Gruppenelemente durch Permutation auseinander hervorgehen. Der Vorteil der einheitlichen Darstellung aller knotensymmetrischen Graphen nach der Methode von Akers und Krishnamurthy liegt darin, daß man im voraus aus den Eigenschaften von Permutationsgruppen auf die Eigenschaften vieler knotensymmetrischer Graphen schließen kann. Damit muß man Sätze über knotensymmetrische Graphen unterschiedlicher Topologie nicht mehr einzeln beweisen, sondern kann topologieübergreifende Aussagen über eine ganze Graphenklasse machen. Dies ist der entscheidende Fortschritt dieser Theorie. Die Theorie von Akers und Krishnamurthy besteht aus zwei Teilen. In dem ersten Teil werden die sog. Cayley-Graphen vorgestellt, die auf Permutationsgruppen beruhen. Damit lassen sich nicht nur solche bekannte Graphen wie Barrelshifter, Hypercube und Cube-Connected-Cycles auf Cayley-Graphen zurückführen, sondern es können auch neue Graphen wie Star-Graph, BubbleSort-Graph, Pancake-Graph [Akers89] usw. erzeugt werden. In einem zweiten, allgemeinen Teil der Theorie werden die Cayley-Graphen so erweitert, daß damit alle knotensymmetrischen Graphen erfaßt werden können. Die Forschungsarbeiten auf dem Gebiet der Cayley-Graphen wurden von Akers und Krishnamurthy nicht abgeschlossen, sondern erst initiiert. Es ist zu erwarten, daß aus der Theorie der Cayley-Graphen weitere Topologien und Graphen besonderer Eigenschaften gefunden werden. Leider sind zum Verständnis der speziellen und der allgemeinen Cayley-Graphentheorie gewisse Kenntnisse der mathematischen Gruppentheorie erforderlich, so daß die Arbeit von Akers und Krisnamurthy nicht leicht zugänglich ist. Der Aufwand für die Einarbeitung in diese Theorie ist jedoch aufgrund deren Bedeutung gerechtfertigt. Im folgenden wird deshalb eine knapp gefaßte Darstellung desjenigen Teils der Gruppentheorie gegeben, der für Cayley-Graphen unbedingt benötigt wird. Zur Vertiefung der mathematischen Grundlagen der Cayley-Graphen wird darüberhinaus z.B. auf [Böhme92] verwiesen. Zur Ergänzung ist weiterhin eine Darstellung der Graphentheorie, wie sie z.B. in [Chartrand93] enthalten ist, empfehlenswert. 126

3.11.2 Gruppentheorie für Cayley-Graphen Definition einer Gruppe Zur Definition algebraischer Gruppen beginnt man mit der Definition von algebraischen Strukturen: Def. 3.6: Algebraische Strukturen sind nichtleere Mengen M, sog. Träger, mit mindestens einer algebraischen Verknüpfung *, für die gilt: *:(a,b)→a*b ∈M (mit a,b∈M). D.h., die Verknüpfung zweier Elemente einer Trägermenge gibt wieder ein Element der Trägermenge. Diese Eigenschaft wird auch als die Abgeschlossenheit von M bezüglich der Verknüpfung * bezeichnet. Auf einer algebraischen Struktur läßt sich eine Halbgruppe definieren: Def. 3.7: Die algebraische Struktur (H, *) heißt Halbgruppe, wenn * bzgl. M abgeschlossen ist und wenn gilt:



[ ( a ⋅ b ) ⋅ c = a ⋅ ( b ⋅ c ) ] (=assoziativ).

a, b, c ∈ M

Beispiele für assoziative Verknüpfungen sind die Addition bzw. die Multiplikation der natürlichen Zahlen. Entsprechend sind (N,+) und (N,·) zwei Halbgruppen. Aus der Halbgruppe folgt durch die Hinzunahme weiterer Eigenschaften die Definition einer Gruppe: Def. 3.8: Die algebraische Struktur (G,*) heißt Gruppe, wenn außer der Abgeschlossenheit und der Assoziativität noch ein neutrales Element e und ein inverses Element a-1 existiert, für die gilt:

∨ ∧

( e ⋅ a = a ⋅ e = a ) und

e∈G a∈G



a∈G a



–1

(a

–1

⋅a = a⋅a

–1

= e) .

∈G



( heißt: "Es existiert genau ein".) Aus der Definition des neutralen Elements e resultiert die Definition des inversen Elements a-1. Daraus folgt wiederum, daß die Gleichung a ⋅ x = b die Lösung x = a –1 ⋅ b hat. Zusätzliche Eigenschaften kennzeichnen höhere algebraische Strukturen. Def. 3.9: Eine Gruppe heißt Abelsche oder kommutative Gruppe, wenn zusätzlich das Kommutativgesetz ∧ ( a ⋅ b = b ⋅ a ) gilt. a, b ∈ G

127

Für nicht Abelsche Gruppen gilt das Kommutativgesetz nur für die Spezialfälle a*e=e*a und a*a-1=a-1*a. Beispiele für kommutative Gruppen sind die ganzen positiven und negativen Zahlen bzgl. der Addition (Z,+) mit e = 0 und a-1 = -a sowie die rationalen Zahlen ohne die Null bzgl. der Multiplikation (Q \ 0,·)mit e = 1 und a-1 = 1/a. Nach der Definition mathematischer Gruppen geht es nun darum, eine allgemeine Darstellung für endliche Gruppen (=Gruppen mit endlich vielen Elementen) zu finden, da Cayley-Graphen endlich viele Knoten haben. Für diesen Zweck erweisen sich Permutationen von Zahlenanordnungen als besonders nützlich, deshalb wird im folgenden der Begriff der Permutation in der Gruppentheorie und verschiedene Permutationsschreibweisen erläutert. Definitionen von Permutationen Aus der Kombinatorik ist der Begriff der Permutationen bereits bekannt. Dort heißt jede Anordnung von n Elementen eine Permutation dieser Elemente, wobei die Anzahl aller Permutationen von n Elementen gleich 1 ⋅ 2 ⋅ 3 ⋅ … ⋅ n = n! ist. In der Gruppentheorie wird eine Permutation zusätzlich als Abbildung interpretiert. Die Permutation 321 beispielsweise, die aus der "natürlichen" Anordnung 123 entstanden ist, definiert in der Gruppentheorie die zyklische Abbildung 1 → 3, 2 → 2, 3 → 1 . Permutationsabbildungen sind für die Gruppentheorie deshalb wichtig, weil sie die Konstruktion endlicher Gruppen ermöglichen und deren Darstellung vereinfachen. Somit müssen zum Verständnis der Cayley-Graphen die Permutationsfunktionen näher erläutert werden. Für die Spezifikation von Permutationen gibt es verschiedene Möglichkeiten, die sich jeweils für einen bestimmten Zweck besonders eignen. Die übersichtlichste Darstellungsform für die Permutation p: M → M mit 1 → p ( 1 ), 2 → p ( 2 ), …, n → p ( n ) ist die Matrizenschreibweise 1 p = ⎛ ⎝p(1)

2



p(2)



n ⎞ , p ( n )⎠

bei der zugeordnete Elemente jeweils untereinander stehen. Die Matrizenschreibweise ist folgendermaßen zu lesen: Die Zahl 1 (= 1. Element in der 1. Zeile der Matrix) wird abgebildet auf, d.h. ersetzt durch p(1), die Zahl 2 wird ersetzt durch p(2), 3 durch p(3), usw. Die Matrizenschreibweise definiert Permutationen also als die Abbildung der geordneten Zahlenfolge 1,2,3,.. auf Permutationen dieser Folge.

128

Aufgrund der Tatsache, daß Permutationen bijektiv, d.h. umkehrbar eindeutig sind, folgt:



p(i) ≠ p(j) .

i, j ∈ M ∧ i ≠ j

Die Matrizenschreibweise läßt sich auch als Tabelle bzw. als Adresse-Inhaltsbeziehung interpretieren, bei der die erste Zeile das Suchkriterium (=Adresse) darstellt und die zweite Zeile den dazu gehörenden Inhalt. In dieser Interpretation ist es nicht notwendigerweise erforderlich, daß die Adressen in aufsteigender Reihenfolge sortiert sind, sondern sie können ihrerseits permutiert sein. Ein Beispiel für eine sortierte Permutation ist: 1 p = ⎛ ⎝4

2

3

1

2

4⎞ . 3⎠

Ein Beispiel für eine unsortierte Permutation lautet: 2 p' = ⎛ ⎝1

1

4

4

3

3⎞ . 2⎠

Beide Permutationen sind zueinander identisch. Eine Variante der Matrizenschreibweise ist die Vektorschreibweise, bei der die zweite Zeile der sortierten Matrix als Vektor geschrieben wird. Beispielsweise ist p = (4123) die Vektorschreibweise der oben angegeben, sortierten Permutation. Aus der Matrizendarstellung läßt sich als weitere Darstellungsform die Zyklenschreibweise ableiten, die für das obige Beispiel p = (1432) lautet und die trotz identischer äußerer Form von der Vektorschreibweise zu unterschieden ist. Um Verwechslungen zu vermeiden, wird deshalb im weiteren nur die Zyklenschreibweise und nicht die Vektorschreibweise verwendet. Der Unterschied zwischen Vektor- und Zyklenschreibweise besteht darin, daß bei der Vektorschreibweise die Elemente der sortierten Zahlenfolge 1, 2, 3, ..., bzw. 0, 1, 2, 3, ... durch die Elemente eines Vektors ersetzt werden, während bei der Zyklenschreibweise die Elemente des Zyklus auf sich selbst abgebildet (ersetzt) werden. Die Zyklenschreibweise p = (1432) wird gelesen als: "Ziffer 1 wird ersetzt durch, d.h. abgebildet auf Ziffer 4, Ziffer 4 wird ersetzt durch Ziffer 3, Ziffer 3 wird ersetzt durch Ziffer 2 und Ziffer 2 wird im Sinne einer Modulo-Beziehung ersetzt durch Ziffer 1." Aufgrund der Modulo-Beziehung rührt auch die Namensgebung Zyklenschreibweise. Im Allgemeinfall sind in der Zyklenschreibweise auch kurze Zyklen von z.B. von nur einem oder zwei Elementen sowie die Aneinanderreihungen von Zyklen erlaubt. Die Permutation

129

1 p = ⎛ ⎝1

2

3

4

3

2

5

5⎞ 4⎠

läßt sich beispielsweise durch das "Produkt" der Zweierzyklen p = (1)(23)(45) ausdrücken. Die Reihenfolge der Zyklen spielt hier keine Rolle, weil die Zyklen ziffernfremd sind, d.h. keine Ziffer taucht mehrfach auf. Üblicherweise werden Einerzyklen weggelassen und Zweierzyklen als Vertauschung oder auch als Transposition bezeichnet. Zyklen mit zwei oder mehr Elementen heißen zyklische Vertauschung - ein Begriff der u.a. aus der Geometrie von Dreiecken bekannt ist. Zyklische Vertauschung von Elementen Als Beispiel einer zyklischen Vertauschung sollen die Ziffern 123 und die Permutation (123) betrachtet werden. Das Resultat der Permutation lautet 231 und wird gelesen: "2 wird ersetzt durch 3, 3 wird ersetzt durch 1 und 1 wird ersetzt durch 2". Dies entspricht einer zyklischen Linksverschiebung der Ziffern um eine Stelle. Eine entsprechende Rechtsverschiebung mit dem Resultat 312 wird durch die Permutation (132) hervorgerufen. In Bild 3.28 ist die zyklische Verschiebung am Beispiel der Dreiecksvertauschung dargestellt. Bei der Dreiecksvertauschung ist zu beachten, daß die Rotation der Ziffern im Uhrzeigersinn eine zyklische Abbildung (Ersetzung) im Gegenuhrzeigersinn bedeutet. vorher:

nachher:

1 wird abgebildet auf

2

2 wird abgebildet auf

3

3

1

wird abgebildet auf

Bild 3.28: Zyklische Dreiecksvertauschung.

Eine technische Anwendung der zyklischen Vertauschung stellt ein zum Ring rückgekoppeltes Schieberegisters dar, wie es bereits im 1. Kapitel vorgestellt wurde. Die Wirkung eines nach links schiebenden Schieberegisterrings läßt sich mit Hilfe der Permutation pL = (123...n) beschreiben. Die entsprechende Permutation für die Rechtsverschiebung um eine Stelle lautet: pR = (1 n (n-1) ... 3 2).

130

Verkettungen von Permutationen Die Hintereinanderausführung mehrer Permutationen wird als Verkettung bezeichnet. Der Grund, warum es Sinn macht, Permutationen zu einem "Produkt" zu verküpfen, liegt in folgendem Satz über die Verkettung mehrerer Permutationen [Böhme92]: Satz 3.7: Jede Permutation von wenigstens zwei Elementen läßt sich als "Produkt" (nicht notwendigerweise ziffernfremder) Zweierzyklen (Transpositionen) darstellen. Beispiel: Zur Erläuterung dieses Satzes soll die Permutation p1 = (1234) dienen, die eine Abbildung der Ziffern 1234 auf die Ziffern 2341 bewirkt. Dasselbe Resultat läßt sich auch durch das Produkt p2 = (12)(13)(14) erzielen, das aus nicht ziffernfremden Zyklen besteht, weil die Ziffer 1 dreimal verwendet wird. Bei Produkten aus nicht ziffernfremden Zyklen sind die Transpositionen streng geordnet von links nach rechts auszuführen. In obigem Beispiel wird somit die Ziffer 1 durch die Permutation p2 über ein dreimaliges Vertauschen von links nach rechts "weitergereicht", und die übrigen Ziffern werden um eine Position nach links versetzt. Als zweites Beispiel eines Produkts aus nicht ziffernfremden Zyklen soll der nach links (Gegenuhrzeigersinn) schiebende Registerring dienen. Er läßt sich als das Produkt pL=(12)(13)...(1n) spezifizieren. Das entsprechende, nicht ziffernfremde Produkt für den nach rechts schiebenden Registerring lautet: pR= (n (n-1)) (n (n-2))...(n 1). Zu beachten ist, daß die Zweierzyklen-Spezifikation im Gegensatz zur Matrizen- oder Zyklenschreibweise nicht eindeutig ist. So läßt sich beispielsweise (123) sowohl als (12)(13) als auch als (23)(21) schreiben. Beim letztgenannten Zweierzyklus wird zuerst die Ziffer 3 auf ihren endgültigen Platz transportiert und danach 1 und 2 vertauscht. Die fehlende Eindeutigkeit erlaubt, ein und dieselbe Permutation durch Produkte verschiedener Transpositionen auszudrücken. Es zeigt sich jedoch, daß für eine bestimmte Permutation die Anzahl der sie erzeugenden Transpositionen stets entweder gerade oder ungerade ist [Böhme92]. Beispielsweise hat die Permutation p = (123) = (12)(13) = (23)(21) in beiden Produkten eine geradzahlige Anzahl von Transpositionen, während die Permutation q = (1234) = (41)(42)(43) = (12)(13)(14) = (23)(24)(21) = (34)(31)(32) in Produkte ungeradzahlig vieler Produktterme zerlegbar ist. Permutationsschreibweise für Cayley-Graphen Für Cayley-Graphen ist es das Ziel, eine besonders kompakte Darstellung der Permutationen zu verwenden. Dazu wird die Matrizenschreibweise dahinge131

hend modifiziert, daß die erste Zeile der Matrix weggelassen und die zweite 1 2 3 4⎞ Zeile ohne Klammern geschrieben wird. Aus p = ⎛ ⎝4 1 2 3⎠ beispielsweise wird so 4123. Diese Schreibweise ist sehr ähnlich der Vektorschreibweise, nur unterliegt sie nicht deren Einschränkungen bzgl. der Verknüpfung von Vektoren. Die kompakte Darstellungsform kann ebenfalls als Positions-/Inhaltsbeziehung interpretiert werden. Die Deutung gemäß einer Positions-/Inhaltsbeziehung erlaubt, die Verknüpfung mehrerer Permutationen zu einem Produkt einfach durchzuführen und deshalb wird sie für die Spezifikation von Cayley-Graphen eingesetzt. Beispiel: Die Permutation 4123 ist folgendermaßen zu lesen: "Auf die Position 1, d.h. ganz links kommt die Ziffer 4, auf die Position 2 die Ziffer 1, auf die Position 3 die Ziffer 2, usw." Ein anderes Beispiel ist die Permutation 123..n, bei der Ziffer und Adreßposition identisch sind. Konstruktion endlicher Gruppen Weil die Cayley-Graphen endliche Gruppen repräsentieren, geht es nach der Definition von Permutationen, deren Schreibweisen und Verknüpfungen nun darum, zu zeigen, daß man aus Permutationen endliche Gruppen konstruieren kann. Um dies besser einzusehen, wird im ersten Schritt eine spezielle Gruppe definiert, die aus Permutationen als Elementen besteht. Im zweiten Schritt wird die Analogie (Isomorphismus) zwischen Permutationsgruppen einerseits und allen endlichen Gruppen andererseits gezeigt. Daraus ergibt sich im dritten Schritt nach einem Satz, daß alle endliche Gruppen auf Permutationsgruppen zurückgeführt werden können. Konstruktion einer Permutationsgruppe Für die Konstruktion einer Permutationsgruppe muß eine Verknüpfungsoperation zwischen den Elementen einer Menge, die in diesem Fall Permutationen sind, definiert werden. Als Verknüpfungsoperation eignet sich die Verkettung, d.h. Hintereinanderausführung von Permutationen. Da Permutationen in der Gruppentheorie als Abbildungen gedeutet werden, greift man für die Definition der Verkettung auf die Definition von ineinandergeschachtelten Abbildungen zurück. Dabei gilt, daß die Verkettung "°" zweier Permutationen p ° q von rechts nach links ausgeführt wird, so daß p ° q = p(q) ist. (Lies: "p verknüpft q ist gleich p angewandt auf q"). Beispielsweise liefert die Verkettung von 1 2 3 4⎞ 1 2 3 4⎞ und q = ⎛ p = ⎛ ⎝4 ⎝3 1 2 3⎠ 4 1 2⎠ 132

das Resultat 1 2 3 4⎞ p°q= ⎛ . ⎝2 3 4 1⎠ Die Verkettung erfolgt, indem man jede Ziffer in der zweiten Zeile von q als Adresse in der ersten Zeile von p auffaßt. Die Verkettung entspricht somit einem zweimaligen Tabellennachschlagen bzw. einer indirekten Adressierung. Aufgrund dieser Definition ergibt sich, daß auch mehrfache Verkettungen möglich sind. Neben der Matrizenschreibweise eignet sich die kompakte Schreibweise von Permutationen besonders gut für die Ausführung einer Verkettung, wie man an dem Produkt p ° q = 4 1 2 3 ° 3 4 1 2 = 2 3 4 1 sehen kann. Ein zweites Beispiel für die Ausführung einer Verkettung lautet: p ° q = 4 2 1 3 ° 3 4 1 2 = 1 3 4 2. Dies wird folgendermaßen gelesen: "Position 1 wird ersetzt durch Ziffer 3 (qTerm), Position 3 wird ersetzt durch Ziffer 1 (p-Term)". Daraus ergibt sich in der Position 1 des Resultats die Ziffer 1. Die zweite Ziffer des Resultats berechnet sich zu: "Position 2 wird ersetzt durch Ziffer 4 (q-Term), Position 4 wird ersetzt durch Ziffer 3 (p-Term)". Daraus ergibt sich die Ziffer 3 in der Position 2 des Resultats. Die dritte Ziffer des Resultats resultiert aus: "Position 3 wird ersetzt durch Ziffer 1 (q-Term), Position 1 wird ersetzt durch Ziffer 4 (p-Term)". Daraus ergibt sich die Ziffer 4 in der Position 3 des Resultats, u.s.w. Nach der Einführung des Verkettungsoperators kann man folgenden Satz angeben [Böhme92], der sagt, wie man eine Permutationsgruppe konstruiert: Satz 3.8: Die Menge (P,°) aller n! Permutationen einer Menge M von n Elementen bildet eine Gruppe bzgl. der Verkettung ° als Verknüpfung. Die Permutationsgruppe heißt symmetrische Gruppe Sn. Die symmetrische Gruppe Sn ist abgeschlossen bzgl. der Verkettung "°" und hat das neutrale Element "1 2 3 .. n". Zu jeder Permutation p existiert das korrespondierende inverse Element p-1. Darüberhinaus gilt das Assoziativgesetz für die Verkettung dreier Permutationen. Isomorphismus zwischen der Permutationsgruppe Sn und allen übrigen Gruppen Es läßt sich ein Zusammenhang zwischen den Permutationselementen von Sn und den Elementen beliebiger anderer endlicher Gruppen G herstellen, indem man eine isomorphe4 Abbildung ρ von Sn auf G definiert. Dabei gilt folgender wichtiger Satz [Böhme92]: 4.

isomorph heißt "gleichgestaltig", d.h. die Eigenschaften von Sn werden durch die Abbildung ρ nicht verändert.

133

Satz 3.9: Jede endliche Gruppe G ist einer Permutationsgruppe isomorph (läßt sich durch Permutationen darstellen). Dieser Satz wird als Darstellungssatz nach Cayley bezeichnet und erklärt, warum Permutationen in der Gruppentheorie besonders bedeutsam sind. Aus diesem Grund wählten auch Akers und Krishnamurthy die Bezeichnung „CayleyGraphen" für ihre Theorie aus. Bei Cayley-Graphen spielen die sog. Untergruppen einer Gruppe eine wichtige Rolle und sollen deshalb im folgenden erläutert werden. Untergruppen einer Gruppe Def. 3.10: Eine Gruppe (U,°) heißt Untergruppe der Gruppe (G,°), wenn U Teilmenge von G ist und für U die Gruppenaxiome (Abgeschlossenheit, neutrales und inverses Element sowie Assoziativität) erfüllt sind. Zur Konstruktion von Untergruppen kann man folgende Sätze [Böhme92] heranziehen: Satz 3.10: Ist ∅ ≠ U ⊂ G , so ist (U,°) genau dann Untergruppe von (G,°), wenn U bzgl. ° abgeschlossen ist und jedes Element a ∈ U sein Inverses wieder in U hat: a

–1

∈ U.

Aus Satz 3.10 folgt, daß (U,°) ein neutrales Element hat und assoziativ ist, wenn (U,°) abgeschlossen ist und die inversen Elemente existieren. Man kann zeigen, daß (U,°) sogar dann Untergruppe von (G,°) ist, wenn nur die Abgeschlossenheit gegeben ist, denn bei den Permutationen folgen aus der Abgeschlossenheit die übrigen Gruppenaxiome. Deshalb gilt: Satz 3.11: Ist ∅ ≠ U ⊂ G , so ist (U,°) genau dann Untergruppe von (G,°), wenn U bzgl. ° abgeschlossen ist. Beispiel: Ein Beispiel für die Anwendung von Satz 3.11 bildet die Menge der "geraden" Permutationen An, die aus einer geradzahligen Anzahl von Transpositionen bestehen. Sie stellen eine Untergruppe zu Sn dar, weil die Verkettung zweier Permutationen mit gerader Zyklenzahl wieder eine gerade Permutation liefert, also abgeschlossen ist. Die geradzahligen Permutationen An heißen auch alternierende Gruppe. Beispielsweise lautet die alternierende Gruppe A3 zur symmetrische Gruppe S3: A3 = {(1), (12)(13), (31)(32)}. Die Abgeschlossenheit von A3 läßt sich durch Ausführung aller Verkettungen leicht überprüfen. Ferner gelten die folgenden wichtigen Sätze über Untergruppen [Böhme92], die die Konstruktion von Untergruppen erleichtern:

134

Satz 3.12: Jede Permutationsgruppe ist Untergruppe einer symmetrischen Gruppe. Satz 3.13: Bei endlichen Gruppen ist die Anzahl der Elemente einer Untergruppe stets Teiler der Anzahl der Elemente der Gruppe (=Satz v. Lagrange). So hat beispielsweise A3 genau 3 Elemente, und die Zahl 3 teilt die 3!=6 Elemente von S3 ohne Rest. Mit dem in den vorigen Kapiteln erläuterten Basiswissen über Gruppentheorie kann man jetzt die Konstruktion von Cayley-Graphen angeben.

3.11.3 Definition von Cayley-Graphen Die Idee von Akers und Krishnamurthy war es, Permutationen aus Sn mit den Knoten eines Graphen zu identifizieren, und die Kanten des Graphen als die Verkettung "°" zweier Permutationen aufzufassen. Daraus resultierten die Cayley-Graphen, deren erweitertes Modell sogar die einheitliche Konstruktion aller knotensymmetrischen Graphen erlaubt. Zur Definition von Cayley-Graphen werden spezielle Permutationen, die sog. Generatoren, verwendet, die es erlauben, Untergruppen von Sn zu erzeugen. Diese wiederum sind folgendermaßen definiert: Def. 3.11: Die Permutationen p 1, p 2, …, p m ∈ S n ( m < n ) heißen Generatoren von U, wenn sie durch Verknüpfung ° eine Untergruppe (U, °) von Sn oder Sn selbst erzeugen. Es gilt dann: ( U, ° ) ⊆ S n und m < U . Zu U gehören die Generatoren selbst sowie alle zwei- und mehrfachen Verknüpfungen von Generatoren, sofern sie unterschiedliche Elemente liefern: m

Suggest Documents