22.12.2013 Aufrufe

Verbindungsnetzwerke für parallel und verteilte Systeme.pdf

Verbindungsnetzwerke für parallel und verteilte Systeme.pdf

Verbindungsnetzwerke für parallel und verteilte Systeme.pdf

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

1 Konventionelle Kopplungen<br />

1.1 Einleitung<br />

In der Technik werden <strong>Verbindungsnetzwerke</strong> im wesentlichen auf vier verschiedenen<br />

Gebieten eingesetzt: Bei Parallelrechnern [Giloi93], räumlich <strong>verteilte</strong>n<br />

Rechensystemen bzw. Client Server-Architekturen [Langen94], Rechnernetzen<br />

wie das Internet [Mezza94] <strong>und</strong> in der Telekommunikation<br />

[Schwartz87].<br />

In der Parallelverarbeitung sind <strong>Verbindungsnetzwerke</strong> ein wichtiger Bestandteil<br />

der Rechnerarchitektur, die vom Aufbau der Rechenknoten <strong>und</strong> deren<br />

Verschaltung untereinander festgelegt wird [Regen87]. Die Rechenknoten bzw.<br />

Rechner <strong>und</strong> deren Kopplung beeinflussen zusammen mit der Programmierung<br />

die Leistungsfähigkeit des Gesamtsystems. Programme werden mit Hilfe von<br />

Kommunikationsmodellen wie (<strong>verteilte</strong>m) gemeinsamem Speicher bzw. Botschaftenaustausch<br />

erstellt, die die Interprozessorkommunikation aus der Sicht<br />

des Benutzers regeln. Die Kommunikation wird implementierungstechnisch<br />

über <strong>Verbindungsnetzwerke</strong> realisiert, um die Kopplung von Rechenknoten<br />

untereinander, mit Speichermoduln <strong>und</strong> mit der Peripherie zu bewerkstelligen.<br />

Verteilte <strong>Systeme</strong> bestehen aus Arbeitsplatzrechnern oder PCs, die über ein<br />

lokales Netz (LAN) wie Ethernet oder ATM [Mezza94] miteinander verb<strong>und</strong>en<br />

sind. Die Netze bestehen aus einzelnen Strängen, die ketten- oder sternartig<br />

über Switche gekoppelt sind. Die <strong>parallel</strong>e Programmierung erfolgt mit Hilfe<br />

von Kommunikationsbibliotheken wie PVM oder MPI in Standardprogrammiersprachen.<br />

Aufgr<strong>und</strong> der großen Verbreitung dieser <strong>Systeme</strong> werden<br />

die sie verbindenden lokalen Netze, ihr Aufbau <strong>und</strong> ihre Betriebsarten immer<br />

wichtiger. Die Switche, die die einzelnen Subnetze zusammenschalten, verwenden<br />

intern <strong>Verbindungsnetzwerke</strong>, wie sie bei Parallelrechnern eingesetzt<br />

werden.<br />

Weitreichende Rechnernetze (MANs, WANs) wie das Internet basieren auf<br />

einer Vielzahl von Gateway- <strong>und</strong> Name Server-Rechnern, die über Switche <strong>und</strong><br />

Subnetze gekoppelt sind. Sie werden als Basis <strong>für</strong> die Realisierung neuer Dienste<br />

wie Multimedia <strong>und</strong> Video-on-Demand angesehen. Notwendige Voraussetzung<br />

<strong>für</strong> diese Dienste sind Kommunikationspfade mit hoher Bandbreite<br />

<strong>und</strong> garantierter Latenzzeit; Eigenschaften, wie sie bei <strong>Verbindungsnetzwerke</strong>n<br />

<strong>für</strong> räumlich konzentrierte <strong>Systeme</strong> bereits realisiert wurden, so daß auch hier<br />

Parallelrechnernetze Einfluß ausüben.<br />

In der Telekommunikation spielen Koppelnetze <strong>für</strong> die Vermittlung von Telefongesprächen<br />

<strong>und</strong> sonstigen analogen oder digitalen Daten eine wichtige<br />

Rolle. Sie sind zusammen mit Übertragungseinrichtungen <strong>für</strong> den Transport<br />

<strong>und</strong> die gezielte Vermittlung von Information notwendig. Die Kopplung von<br />

Schaltern oder Routern, aus denen Netze im wesentlichen bestehen, mit Übertragungseinrichtungen<br />

wie Glasfasern erlaubt, große Entfernungen zwischen<br />

beliebig wählbaren Teilnehmern überbrücken zu können.<br />

1


<strong>Verbindungsnetzwerke</strong>, die Informationen wie Sprache, Bild oder Daten übermitteln,<br />

können auf zwei alternativen physikalischen Prinzipien basieren. Entweder<br />

arbeiten sie nach der Methode der räumlichen Verteilung oder nach dem<br />

Prinzip der zeitlichen Staffelung (Multiplex). Bei räumlicher Verteilung spricht<br />

man von <strong>Verbindungsnetzwerke</strong>n im eigentlichen Sinne, bei zeitlicher Staffelung<br />

von Bussen. Die entsprechenden Bezeichnungen aus der Telekommunikation<br />

lauten Raumlagen- bzw. Zeitlagenkoppelvielfach (space-divisionswitching<br />

bzw. time-division-switching 1 ).<br />

Bei der Zeitmultiplexmethode wird dergestalt Information übertragen, daß<br />

ein gemeinsames Medium wie Bus, Kabel oder Glasfaser zeitlich nacheinander<br />

Daten verschiedenster Herkunft, Dichte <strong>und</strong> Bestimmung übermittelt. Beim<br />

Raumlagenvielfach wird <strong>für</strong> jedes Sender/Empfängerpaar ein physikalischer<br />

Pfad zur Informationsübermittlung etabliert. Die räumliche Verteilung ist ein<br />

<strong>parallel</strong>es Verfahren, bei dem verschiedene Informationen gleichzeitig übertragen<br />

werden, während das Zeitmultiplexen rein sequentiell arbeitet.<br />

In diesem Buch liegt der Schwerpunkt auf den <strong>Verbindungsnetzwerke</strong>n, wie<br />

sie <strong>für</strong> Parallelrechner eingesetzt werden.<br />

<strong>Verbindungsnetzwerke</strong> <strong>für</strong> Parallelrechner<br />

Historisch gesehen leiten sich <strong>Verbindungsnetzwerke</strong> <strong>für</strong> Parallelrechner von<br />

den Koppelnetzen der Telefonvermittlungstechnik ab. Die Arbeiten, die die<br />

Gr<strong>und</strong>lagen <strong>für</strong> Parallelrechnernetze bilden, wurden von Ingenieuren <strong>und</strong> Mathematikern<br />

geleistet, die <strong>für</strong> Forschungseinrichtungen von Telefongesellschaften,<br />

wie z.B. den amerikanischen Bell Labs (AT&T) tätig waren. C. Clos <strong>und</strong><br />

V. Benes sind die bekanntesten Vertreter dieser Generation.<br />

Der Vermittlungstechnik entstammt nicht nur der Kreuzschienenverteiler,<br />

der vor mehr als 50 Jahren <strong>für</strong> handvermittelte Telefongespräche verwendet<br />

wurde, sondern auch das Clos- <strong>und</strong> das Benes-Netz aus dem Jahre 1953 bzw.<br />

1965, die heute noch bei Parallelrechnern Verwendung finden.<br />

Umgekehrt beeinflussen die Parallelrechnernetze seit einiger Zeit die Telefon-<br />

<strong>und</strong> Datenvermittlung, insbesondere hinsichtlich der Topologie <strong>und</strong> des<br />

Routings. Ein ATM-Switch beispielsweise kann auf einer Butterfly- oder Baseline-Topologie<br />

[Regensp87] beruhen, die als mehrstufige Verbindungsstruktur<br />

<strong>für</strong> Multiprozessoren erf<strong>und</strong>en wurde.<br />

In Zukunft werden <strong>Verbindungsnetzwerke</strong> durch das Zusammenwachsen<br />

von Rechnertechnik <strong>und</strong> Übertragungstechnik in ihrer Bedeutung weiter zunehmen,<br />

da Kommunikation <strong>und</strong> intelligente Verarbeitung von Daten Schlüsseltechnologien<br />

<strong>für</strong> das 21. Jahrh<strong>und</strong>ert sind. Die Vereinigung der Verarbeitung<br />

von Daten mit der Übertragung von Information zu einem neuen funktionalen<br />

Ganzen ist ein expansiver Markt der Zukunft. Internet, Multimedia <strong>und</strong> Datenautobahnen<br />

kennzeichnen den Weg dorthin.<br />

1.<br />

siehe dazu z.B. M. Schwartz, "Telecommunication Networks, Protocols, Modelling and Analysis",<br />

Addison-Wesley, 1988.<br />

2


Parallele Rechentechnik<br />

Die <strong>parallel</strong>e Rechentechnik ist ein Forschungsgebiet, mit dem sich Ingenieure,<br />

Mathematiker <strong>und</strong> Informatiker seit Jahrzehnten auseinandersetzen. Bislang<br />

sind deren Entwicklungen in der Praxis hauptsächlich auf Anwendungen konzentriert,<br />

bei denen hohe Rechenleistung oder hohe Zuverlässigkeit gefordert<br />

ist oder bei denen viele Ein- <strong>und</strong> Ausgabesignale gleichzeitig zu verarbeiten<br />

sind, wie es z.B. bei Steuerungen <strong>und</strong> Regelungen der Fall ist.<br />

Seit langem ist bekannt, daß sequentielle Rechner aufgr<strong>und</strong> der endlichen<br />

Ausbreitungsgeschwindigkeit elektrischer Signale, die in einem Kabel bei ca.<br />

20 cm/ns liegt, an ihre physikalischen Grenzen stoßen werden. Rechner müssen<br />

deshalb mit zunehmender Rechenleistung immer kleiner gebaut werden, was<br />

mit der Gr<strong>und</strong> da<strong>für</strong> ist, daß konventionelle Großrechner den Mikroprozessorbasierten<br />

<strong>Systeme</strong>n unterlegen sind <strong>und</strong> (fast) vom Markt verschwinden.<br />

Die Architekturen von Parallelrechnern [Bode80, Bode83, Hwang85,<br />

Hwang93, Erhard95, Waldsch95] <strong>und</strong> deren Programmierung [Bemmerl92]<br />

wurden in den letzten 20 Jahren erheblich weiterentwickelt. Neben wissenschaftlichen<br />

<strong>und</strong> kommerziellen Interessen waren da<strong>für</strong> auch militärische<br />

Gründe maßgebend. Beispielsweise haben das U.S. Verteidigungs- <strong>und</strong> Energieministerium<br />

die <strong>parallel</strong>e Rechentechnik aus strategischen Gründen massiv<br />

unterstützt. Nach dem Ende des kalten Krieges war diese Geldquelle jedoch<br />

erloschen <strong>und</strong> namhafte Parallelrechnerhersteller, die den Umstieg auf zivile<br />

K<strong>und</strong>en nicht rechtzeitig geschafft haben, mußten den großen, auf dem Markt<br />

etablierten Unternehmen weichen, die das Geschäftsfeld der Parallelrechner zur<br />

Abr<strong>und</strong>ung ihrer Produktpalette betreiben, ihr Geld aber mit Massenprodukten<br />

wie PCs, Arbeitsplatzrechnern <strong>und</strong> Servern verdienen.<br />

Bei Mikroprozessoren, den Herzstücken der oben genannten Produkte, ist der<br />

interne Aufbau mittlerweile so gestaltet, daß möglichst viele Vorgänge <strong>parallel</strong><br />

ablaufen (Superpipelining <strong>und</strong> superskalare RISC-Architekturen). Dadurch<br />

werden die von der CMOS-Technologie vorgegebenen Grenzen der Taktrate<br />

durch architektonische Maßnahmen überw<strong>und</strong>en, <strong>und</strong> es ist möglich, mehr als<br />

einen Befehl pro Zeiteinheit auszuführen [Bode90, Flik94, Ungerer95]. Darüber<br />

hinaus sind Prozessor-Chips wie beispielsweise der Intel PentiumPro so<br />

konstruiert, daß die zur Kopplung von Prozessoren notwendigen Einrichtungen<br />

auf dem Chip bereits integriert sind (Symmetric Multiprocessing [Hwang93]).<br />

Die <strong>parallel</strong>e Rechentechnik wird deshalb in Zukunft auch bei Massenprodukten<br />

eine immer größere Rolle spielen <strong>und</strong> damit auch die <strong>Verbindungsnetzwerke</strong><br />

<strong>für</strong> Parallelrechner.<br />

1.2 Einführung in <strong>Verbindungsnetzwerke</strong><br />

Seit mehr als 30 Jahren wird das Problem untersucht, wie Prozessoren am besten<br />

sowohl untereinander als auch mit Speichern <strong>und</strong> der Peripherie gekoppelt<br />

werden können. Ein frühes Zeugnis solcher Projekte ist z.B. in [Squire63] zu<br />

finden, das aus dem Jahre 1963 datiert. Zahlreiche Fortschritte wurden seitdem<br />

3


in den letzten 3 Dekaden bei der Lösung des Kopplungsproblems erzielt. Allerdings<br />

hat sich die Verschaltung von Prozessoren als äußerst vielschichtige<br />

<strong>und</strong> nicht in jeder Hinsicht optimal lösbare Angelegenheit erwiesen.<br />

Wie bei allen technischen <strong>Systeme</strong>n gibt es auch bei den <strong>Verbindungsnetzwerke</strong>n<br />

eine Kluft zwischen dem Kostenfaktor einerseits <strong>und</strong> den gewünschten<br />

Leistungsdaten andererseits. Insbesondere ist es schwierig, gleichzeitig<br />

hohe Bandbreite, geringe Latenzzeit, gute Skalierbarkeit <strong>und</strong> hohe Zuverlässigkeit<br />

in einer preisgünstigen Technologie zu erzielen. Darüber hinaus<br />

lassen sich selbst <strong>für</strong> stark einschränkende Randbedingungen, wie z.B. vorgegebenes<br />

Kommunikationsverhalten der <strong>parallel</strong>en Anwendung, feststehendes<br />

Programmiermodell, konstante Zahl von Prozessoren, usw. verschiedene,<br />

gleich gute Lösungen angeben. Das läßt den Schluß zu, daß es "das Verbindungsnetzwerk"<br />

genausowenig gibt, wie auch "das Automobil" nicht existiert,<br />

das zugleich schnell <strong>und</strong> sparsam, sicher <strong>und</strong> leicht, kompakt <strong>und</strong> komfortabel<br />

ist.<br />

Das Ziel der Kopplung mehrerer Prozessoren, Rechenknoten oder ganzer<br />

Rechner ist es, die Leistungsfähigkeit eines einzelnen Rechenknotens dadurch<br />

zu erhöhen, daß alle Einheiten des Systems im Sinne einer Aufgabenteilung kooperativ<br />

zusammenarbeiten. Die Schwierigkeit, die sich dabei stellt, resultiert<br />

aus der wechselseitigen Abhängigkeit der funktionalen Einheiten untereinander,<br />

die bewirkt, daß das gekoppelte System viel mehr ist als die Summe seiner<br />

Teile. Daß gekoppelte System sehr komplex werden können, selbst wenn sie<br />

aus einfachen, deterministischen Komponenten aufgebaut sind, ist nicht ungewöhnlich:<br />

Ein einzelnes schwingendes Pendel beispielsweise läßt sich leicht<br />

berechnen; zwei Pendel jedoch, von denen eines an der Schwungmasse des anderen<br />

aufgehängt ist, sind relativ kompliziert.<br />

Die Interprozessorkommunikation, die Voraussetzung <strong>für</strong> das Zusammenspiel<br />

der funktionalen Einheiten von Prozessoren/Rechner, Speicher <strong>und</strong> Peripherie<br />

ist, wird implementierungstechnisch mit Hilfe von <strong>Verbindungsnetzwerke</strong>n<br />

realisiert, die sich auf viele verschiedene Arten realisieren lassen. Allen<br />

ist gemeinsam, daß sie Daten zwischen Erzeugern <strong>und</strong> Verbrauchern von<br />

Information transportieren.<br />

1.2.1 Definition eines Netzwerks<br />

Sowohl bei Parallelrechnern als auch bei Rechnernetzen <strong>und</strong> in der Telekommunikation<br />

hat man die gr<strong>und</strong>legende Aufgabe, daß Information von einem Ort<br />

A zu einem Ort B übertragen werden soll, wobei die Entfernung zwischen A<br />

<strong>und</strong> B zwischen einigen Metern (Parallelrechnern) <strong>und</strong> einigen Tausend Kilometern<br />

(Telekommunikation) schwanken kann. Dabei ergibt sich zusätzlich das<br />

Problem, daß der Informationstransport zwischen wechselnden Orten Ai, Bj (i,<br />

j = 1, 2, ... ) erfolgen soll, also zeitabhängige Richtungen aufweist. Dadurch beinhaltet<br />

die Aufgabenstellung der Informationsübertragung neben ihrer räumlichen<br />

noch eine zeitliche Komponente.<br />

4


Zur Lösung des zeitabhängigen Verbindungsproblems existieren verschiedene<br />

Möglichkeiten. In jedem Fall wird der Datentransport von einer funktionalen<br />

Einheit, dem Verbindungsnetzwerk, ausgeführt.<br />

Bei Parallelrechnern sind <strong>Verbindungsnetzwerke</strong>, wie z.B. ein Bus oder ein<br />

Kreuzschienenverteiler, da<strong>für</strong> zuständig, Daten innerhalb eines integrierten<br />

Schaltkreises, einer gedruckten Platine, einer Baugruppe oder zwischen Baugruppen<br />

zu übertragen. In der Telekommunikation <strong>und</strong> bei Rechnernetzen müssen<br />

große Entfernungen überbrückt werden, wozu geeignete Übertragungseinrichtungen<br />

wie Kupfer- oder Glasfaserkabel <strong>und</strong> Verstärker notwendig<br />

sind. Diese können im Falle eines lokalen Netzes ein Ethernet darstellen<br />

oder bei Weitverkehrsnetzen als ATM- oder ISDN 2 -Leitungen ausgelegt sein.<br />

Digitale Vermittlungseinrichtungen wie z.B. EWS/D 3 oder Gateways in Rechnernetzen<br />

sorgen <strong>für</strong> die Verbindung aller Teilnehmer zu einem weltumspannenden<br />

System, wie es das Telefonsystem oder das Internet darstellen.<br />

Aus der Zusammenfassung von einzelnen Informationstransporten zu einer<br />

mathematischen Funktion erhält man eine formale Definition von <strong>Verbindungsnetzwerke</strong>n<br />

V, die sich mit Hilfe der Abbildungsfunktion ft von Orten Ai<br />

auf Bj (i, j = 1, 2, ... ) spezifizieren lassen:<br />

Def. 1.1:<br />

V: {A i<br />

}<br />

f t<br />

→ {B j<br />

}, i=1,2,...,n, j = 1,2,...,m, t 1,2...,p<br />

⎯⎯⎯⎯ ⎯ =<br />

Der Parameter t der Abbildung f t kennzeichnet diejenige Funktion f, die zur<br />

Zeit t die Menge aller Orte Ai auf Bj abbildet. Die Zusammenfassung aller Abbildungen<br />

definiert das Verbindungsnetzwerk V. Die Orte Ai, Bj heißen die<br />

Ein- bzw. Ausgänge des Netzes, deren Zahl durch m bzw. n spezifiziert wird; p<br />

bezeichnet die Gesamtzahl aller Abbildungen von Eingängen auf Ausgängen,<br />

die vom Netz V realisiert werden können.<br />

Für den Spezialfall m = n wird f t zu einer Permutationsfunktion, die <strong>für</strong> p =<br />

n! alle prinzipiell möglichen Permutationen von Punkt-zu-Punkt-Verbindungen<br />

realisieren kann. Eine graphische Repräsentation von V zeigt Bild 1.1.<br />

A1<br />

A2<br />

B1<br />

Verbindungs-<br />

B2<br />

A3 netzwerk B3<br />

. . . . . .<br />

V<br />

An<br />

Bm<br />

Bild 1.1: Graphische Repräsentation eines allgemeinen <strong>Verbindungsnetzwerke</strong>s.<br />

2.<br />

3.<br />

Integrated Services in Digital Nets<br />

Elektronisches Wählsystem/Digital<br />

5


Die formale Behandlung von <strong>Verbindungsnetzwerke</strong>n bietet den Vorteil, daß<br />

wesentliche Eigenschaften wie Topologie, Übertragungskapazität, Latenz <strong>und</strong><br />

Fehlertoleranz präzise quantifiziert werden können, was einen Vergleich verschiedener<br />

Netztypen erlaubt.<br />

Weiterhin kann man durch Modellierung <strong>und</strong>/oder Simulation Voraussagen<br />

über Eigenschaften zukünftiger Netze machen, ohne sie vorher aufzubauen. Die<br />

Prognose der Kenndaten von Netzen erfordert ebenfalls die Anwendung mathematischer<br />

Hilfsmittel.<br />

1.2.2 Beispiel eines Netzwerks<br />

Ein Beispiel eines einfachen Verbindungsnetzwerks ist ein <strong>parallel</strong> lad- <strong>und</strong> lesbares<br />

Schieberegister, das man <strong>für</strong> den Fall von m = n in Bild 1.2 <strong>für</strong> den Informationstransport<br />

von A nach B einsetzen kann, sofern A <strong>und</strong> B nur wenige Millimeter<br />

auseinander liegen (Bild 1.2).<br />

A1<br />

A2<br />

...<br />

An<br />

D<br />

Q<br />

B1<br />

D<br />

Q<br />

B2<br />

... ...<br />

D<br />

Q<br />

Bn<br />

Bild 1.2: Ein Schieberegister als einfaches Verbindungsnetzwerk.<br />

Die Funktion des Schieberegisters ist dabei die folgende: Ist das Schieberegister<br />

geladen, kann es mit jedem von außen angelegten Takt die Information entlang<br />

der Kette weiterreichen <strong>und</strong> z.B. nach unten weiterschieben. Liegt das zu erreichende<br />

Ziel unterhalb des Startpunkts, wird die Differenz k zwischen Ziel <strong>und</strong><br />

Herkunft: k = B j<br />

– A i<br />

≥ k( 0)<br />

. Mit jedem Takt wird die an einem bestimmten<br />

Eingang anliegende Informationseinheit, z.B. ein Bit oder ein Byte, einen<br />

Schritt näher zum Ausgang hingeschoben. Dazu sind k Schritte nötig. Für Bj <<br />

Ai muß die Schieberichtung umgekehrt werden.<br />

Das Funktionsprinzip des Schieberegisters ist dem eines Aufzugs in einem<br />

Gebäude vergleichbar, der nur nach unten bzw. oben fahren kann. Um den<br />

Transport in Gegenrichtung bewerkstelligen zu können, kann man die Schieberegisterkette<br />

zu einem Kreis schließen. Die Differenz Bj - Ai = k (k < 0) wird<br />

dann im Sinne einer Modulo-N-Arithmetik gemäß k mod N = N + k gebildet.<br />

Dies entspricht im Aufzugmodell einem Paternoster.<br />

1.2.3 Gr<strong>und</strong>legende Eigenschaften von Netzwerken<br />

Der Schieberegisterring weist trotz seiner Einfachheit vier typische Eigenschaften<br />

auf, die allen <strong>Verbindungsnetzwerke</strong>n gemeinsam sind, sich aber<br />

6


leichter an diesem überschaubaren Beispiel beobachten <strong>und</strong> verifizieren lassen.<br />

Die exemplarischen Eigenschaften sind:<br />

• In diesem "Netz" wird eine Informationseinheit, wie z.B. ein Bit oder ein Datenpaket,<br />

in mehreren Schritten, d.h. iterativ, von einem Sender zu einem<br />

Empfänger transportiert. Die Art des Informationstransports <strong>und</strong> die Wegeauswahl<br />

wird als Routing bezeichnet.<br />

• Es lassen sich häufig nicht alle an den Sendern (Eingängen A i ) anliegenden<br />

Informationseinheiten gleichzeitig zu ihren Empfängern (Ausgängen Bj)<br />

transportieren, sondern es können Wartezeiten auftreten. Man spricht in einem<br />

solchen Fall von transienter Blockierung.<br />

• In diesem "Netz" existiert mindestens ein Weg von Ai zu Bj. Im Schieberegisterring<br />

ist es möglich, einen eventuell längeren Weg in entgegengesetzter<br />

Ringrichtung zu wählen. Die Entscheidung über den "richtigen Weg"<br />

wird als adaptive Wegewahl bezeichnet.<br />

• Netzwerke lassen sich formal als Graph <strong>und</strong> als Relation darstellen. Aus diesem<br />

Gr<strong>und</strong>e spielt bei <strong>Verbindungsnetzwerke</strong>n die Graphen- <strong>und</strong> Gruppentheorie<br />

eine gewisse Rolle.<br />

Diese vier Eigenschaften haben, ausgehend vom Beispiel des Schieberegisterrings,<br />

allgemeine Bedeutung <strong>und</strong> bedürfen weiterer Erläuterung:<br />

• Routing: Die iterative Annäherung einer Informationseinheit vom Sender<br />

zum Empfänger unterliegt gewissen Regeln <strong>und</strong> ist i.a. von der Netztopologie<br />

vorgegeben. Für die Geschwindigkeit des Routings während des Informationstransports<br />

ist neben der Routingmethode die Zahl der Schritte zwischen<br />

Sender <strong>und</strong> Empfänger maßgebend.<br />

• Blockierung: Im Schieberegisterfall gibt es stets Paare (Ai, Ak) mit<br />

entgegengesetzten Transportwünschen (beispielsweise nach oben <strong>und</strong> nach<br />

unten), die nicht gleichzeitig erfüllt werden können. Bei nicht-blockierungsfreien<br />

Netzen wird eine auftretende Konkurrenzsituation zweier Informationseinheiten<br />

(Datenpakete) durch kurzzeitiges Sperren eines oder<br />

mehrerer Netzeingänge oder Netzzwischenstufen gelöst, d.h. es wird eine<br />

Steuerung des Informationsflusses (Flow Control) vorgenommen. Die gestoppte<br />

Informationseinheit verbringt eine gewisse Zeit wartend, bis sie an<br />

die Reihe zum Weitertransport kommt. Das bedeutet, daß es bei den <strong>Verbindungsnetzwerke</strong>n<br />

Warteschlangen geben muß <strong>und</strong> damit auch Verfahren,<br />

diese zu bedienen (Scheduling).<br />

• Adaptive Wegewahl: Das Vorhandensein alternativer Pfade durch das Netz<br />

erlaubt, eine adaptive Wegewahl vorzunehmen. Die Red<strong>und</strong>anz im Netz<br />

kann entweder zur Fehlertoleranz genutzt werden oder einen höheren Netzdurchsatz<br />

ermöglichen, sofern ein geeignetes Routing-Schema verwendet<br />

wird, das den Netzstatus bzw. die Verkehrssituation an den Knoten berücksichtigt.<br />

• Graphentheorie: Die Graphentheorie hat sich zusammen mit der Gruppentheorie<br />

als ein nützliches Instrument zur Beschreibung von Netzen erwiesen.<br />

7


Der Graph des Schieberegisters ist in Bild 1.3 dargestellt. (Da sowohl Graphen-<br />

als auch Gruppentheorie nicht zum aktiven Wissen von Ingenieuren<br />

<strong>und</strong> technisch orientierten Informatikern gehört, erfolgt an den Stellen, wo<br />

darauf Bezug genommen wird, eine Erläuterung der verwendeten Mathematik.)<br />

1<br />

2<br />

...<br />

n<br />

Bild 1.3: Der Schieberegisterring als Graph.<br />

Für die formale Darstellung von (m=n)-Netzen nach Def 1.1 werden verschiedene<br />

Schreibweisen von Permutationsfunktionen verwendet, wie z. B. die Mengen-<br />

oder Matrizenschreibweise sowie die Darstellung als Zyklen- oder Zweierzyklen.<br />

Diese Notationen sind in Bild 1.4 <strong>für</strong> das Beispiel des<br />

Schieberegisterrings gezeigt, der mit jedem Takt die Daten 1 bis n an seinen<br />

Eingängen im Gegenuhrzeigersinn weiterschiebt.<br />

Für <strong>Verbindungsnetzwerke</strong> sind hauptsächlich die Matrix- <strong>und</strong> die Zyklenschreibweise<br />

bedeutsam. Die letztere läßt sich noch kompakter darstellen<br />

als in Bild 1.4 angegeben. Dazu wird die Matrizenschreibweise dahingehend<br />

modifiziert, daß die erste Zeile der Matrix weggelassen <strong>und</strong> die zweite Zeile<br />

1 2 3 4<br />

ohne Klammern geschrieben wird. Aus p = ⎛<br />

⎞ beispielsweise<br />

wird so 4123. Diese Schreibweise ist sehr ähnlich der Vektor-<br />

⎝4 1 2 3⎠<br />

schreibweise, nur unterliegt sie nicht deren Einschränkungen bzgl. der Verknüpfung<br />

von Vektoren.<br />

1.3 Die Bus/Speicher-Kopplung<br />

Ein zweites einfaches Beispiel eines Verbindungsnetzwerks stellt der Bus dar,<br />

der auf Entfernungen bis ca. 0,5 m die daran angeschlossenen Einheiten im<br />

Zeitmultiplex miteinander verbinden kann. Bei Parallelrechnern wird in der Regel<br />

neben einem Bus noch ein gemeinsamer Speicher zur Kopplung der Rechenknoten<br />

verwendet. Daraus resultiert das Konzept des Symmetric Multiprocessing<br />

(SMP) [Hwang93].<br />

8


V<br />

=<br />

( i j)<br />

Mengenschreibweise:<br />

⎧⎪<br />

A , A mit i, j = 12 , ,..., n<br />

⎫⎪<br />

⎨<br />

⎬<br />

⎩⎪ ( AA 1 2A3... An−1An) → ( AnAA 1 2... An−2An−1)<br />

⎭⎪<br />

⎛<br />

⎜<br />

⎝<br />

Matrixschreibweise:<br />

1 2 3 ... n ⎞<br />

⎟<br />

n 1 2 ... n−1⎠<br />

Zyklenschreibweise:<br />

( 1 n n -1 n - 2 ... 2)<br />

Zweierzyklenschreibweise:<br />

( n n−1) ( n n−2) ( n n−3) ..... ( n 1)<br />

Bild 1.4: Der Schieberegisterring in Mengen-, Matrix-, Zyklen- <strong>und</strong> Zweierzyklenschreibweise.<br />

1.3.1 Symmetrische Multiprozessoren<br />

Die Bus/Speicherkopplung mehrerer gleichartiger Prozessoren oder Rechenknoten<br />

ist der einfachste Fall einer konventionellen Koppelmethode, die<br />

bei SMPs in verschiedenen Varianten realisiert sein kann. Die einfachste <strong>und</strong><br />

zugleich leistungsschwächste Möglichkeit ist in Bild 1.5 dargestellt.<br />

Die Prozessoren tauschen während der Programmausführung über den gemeinsamen<br />

Bus <strong>und</strong> Speicher Daten aus. Zugriffskonflikte, die bei gleichzeitigem<br />

Zugriff von zwei oder mehr Knoten auf dieselbe Speicherzelle entstehen,<br />

werden durch den Bus aufgelöst, indem eine Sequentialisierung der Zugriffe<br />

gemäß eines Prioritätsschemas vorgenommen wird.<br />

Prozessoren<br />

P1<br />

P2 .... ..<br />

Bus<br />

Pn<br />

M1<br />

gemeinsamer<br />

Speicher<br />

Bild 1.5: Einfache Bus/Speicherkopplung in einem Multiprozessorsystem.<br />

9


Als technisch geeignete Bussysteme haben sich in der Vergangenheit z.B. der<br />

VMEbus <strong>und</strong> der MULTIBUS II erwiesen. Bussysteme <strong>für</strong> SMP-Rechner müssen<br />

über eine Multimaster-Betriebsweise verfügen, die <strong>für</strong> einen kontrollierten<br />

Buszugang durch Arbitrierung <strong>und</strong> damit <strong>für</strong> einen wechselseitigen Ausschluß<br />

gleichzeitig zugreifender Rechner sorgt.<br />

Obwohl dieses sehr einfache SMP-Konzept bereits vom Ansatz her in seiner<br />

Leistungsfähigkeit begrenzt ist, gibt es doch kommerzielle Beispiele von Parallelrechnern,<br />

die so gebaut wurden. Bild 1.6 zeigt den Multimax-Rechner der<br />

Fa. Encore [Encore87], der in der Vergangenheit, trotz seiner Einfachheit, oder<br />

vielleicht gerade deswegen, eine gewisse Verbreitung <strong>und</strong> Popularität erreichen<br />

konnte. Heutige SMP-Server sind dagegen bedeutend aufwendiger, um die der<br />

Bus-/Speicher-Kopplung innewohnenden Nachteile zu kompensieren.<br />

Ethernet<br />

SCSI<br />

APC<br />

oder<br />

XPC<br />

Front<br />

Panel<br />

APC<br />

oder<br />

XPC<br />

SCC<br />

... APC<br />

oder<br />

XPC<br />

Nanobus<br />

SMC<br />

EMC<br />

MSC<br />

APC: Advanced Processor Card<br />

XPC: Dual Processor Card<br />

EMC: Ethernet/Mass Storage Controller<br />

MSC: Mass Storage Controller<br />

SCC: System Control Card<br />

SMC: Shared Memory Card<br />

Multimax 320/520 System Cabinet<br />

Bild 1.6: Das Multimax System der Encore Computer Corp. nach [Encore87].<br />

Bei der Bus/Speicherkopplung kommunizieren die Prozessoren P 1 bis P n über<br />

den Speicher M 1 durch das Schreiben <strong>und</strong> Lesen gemeinsamer Daten. Der<br />

Nachteil der Bus/Speicher Kopplung ist, daß die Interprozessorkommunikation<br />

durch die Verwendung des gemeinsamen Busses <strong>und</strong> (einzigen) Speichermoduls<br />

M 1 zeitlich nacheinander ablaufen muß, was die Effizienz des Gesamtsystems<br />

erheblich beeinträchtigt. Simulationen <strong>und</strong> Messungen an dieser Variante<br />

der Bus/Speicherkopplung haben gezeigt, daß sich die beiden wichtigen Maße<br />

Durchsatz <strong>und</strong> Effizienz häufig wie in Bild 1.7 dargestellt verhalten.<br />

Die Idee der Parallelverarbeitung wird durch die rasche Sättigung des Kommunikationssystems<br />

auf den Kopf gestellt, da von einer kritischen Prozessorzahl<br />

an, die relativ niedrig liegt, Durchsatz <strong>und</strong> Effizienz unter die Werte des<br />

Einzelprozessorsystems absinken.<br />

Zur Lösung des Sättigungsproblems bei der Bus/Speicherkopplung müssen<br />

an zwei Stellen Maßnahmen getroffen werden: Zum einen muß die Busbandbreite<br />

so gewählt werden, daß sie ungefähr der additiven Bandbreite der Spei-<br />

10


1 x<br />

relativer<br />

Durchsatz<br />

x<br />

x<br />

x<br />

x<br />

x<br />

x<br />

x<br />

1<br />

Effizienz<br />

x<br />

x<br />

x<br />

x<br />

x<br />

x<br />

x<br />

1<br />

Zahl der<br />

Prozessoren<br />

1<br />

Zahl der<br />

Prozessoren<br />

Bild 1.7: Durchsatz <strong>und</strong> Effizienz der klassischen Bus/Speicherkopplung.<br />

cherschnittstellen der Rechenknoten entspricht. Diese Forderung kann leicht<br />

die Grenzen des technisch Machbaren der Bustechnologie erreichen bzw. überschreiten,<br />

ist also i.a. nicht ohne weiteres erfüllbar. Zum anderen muß die Speicherbandbreite<br />

auf denselben Wert wie die Busbandbreite gesteigert werden,<br />

um Engpässe zu vermeiden. Für das letztere gibt es mehrere Möglichkeiten, die<br />

allesamt auf direkter oder indirekter Nebenläufigkeit im Speichersubsystem beruhen.<br />

Im wesentlichen wird dabei die limitierte Bandbreite durch Verwendung<br />

mehrfacher Speichermodule erhöht (Bild 1.8).<br />

P1<br />

Prozessoren<br />

P2 ......<br />

Bus<br />

Pn<br />

M1 M2 . . . Mm<br />

gemeinsame<br />

Speicher<br />

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

Besteht ein Speichersubsystem aus mehreren <strong>parallel</strong>en Modulen, können folgende<br />

Maßnahmen einzeln oder als Ganzes implementiert werden, um die Bus/<br />

Speicherkopplung attraktiv zu machen:<br />

1. Wortbreiteerhöhung: Eine Erhöhung der Wortbreite des Speichersubsystems<br />

auf das n-fache (n>1) der Prozessorwortbreite bewirkt, daß bei jedem<br />

Speicherzugriff mehr Worte als vom Prozessor benötigt gelesen<br />

werden, wodurch Zugriffe auf nachfolgende Adressen wegfallen. Die Speicherbandbreite<br />

steigt um den Faktor n.<br />

2. Adreßverschränkung: Addreßmäßig nachfolgende Worte werden auf voneinander<br />

unabhängige Speichermodule (Bänke) verteilt, die zeitlich leicht<br />

11


versetzt adressiert werden. Die Summe aller Zeitversetzungen bei n Bänken<br />

ist gleich der Zykluszeit T eines einzelnen Speichermoduls. Dadurch<br />

kann erreicht werden, daß alle T/n Zeiteinheiten ein neues Wort aus dem<br />

Speicher zur Verfügung steht. Voraussetzung bei dieser <strong>und</strong> der ersten<br />

Maßnahme ist, daß der Prozessor möglichst lange linear auf- oder absteigende<br />

Adressen an den Adreßbus anlegt.<br />

3. Geteilter Buszyklus (Split Transaction): Beim Split Transaction-Betrieb<br />

kann ein noch nicht abgeschlossener Speicherzyklus auf der Busseite unterbrochen<br />

werden, sobald die Speicheradresse vom Bus ausgegeben wurde<br />

<strong>und</strong> der Prozessor eine neue Adresse lesen oder schreiben möchte. In der<br />

Zwischenzeit, die der Speicher benötigt, um auf die zuerst gewünschte Variable<br />

zuzugreifen, liegen am Bus eine oder mehrere neue Adressen an.<br />

Nach Ablauf der Speicheraddressierungszeit, die in diesem Fall größer als<br />

die Buszykluszeit ist, werden die nach Ablauf der Zugriffszeit zur Verfügung<br />

stehenden Daten auf den Bus gegeben bzw. ihm entnommen, so daß<br />

der zuvor unterbrochene Schreib- oder Lesezyklus abgeschlossen ist. Die<br />

Überlappung mehrerer Speicherzyklen steigert die Bandbreite des Speichersubsystems.<br />

4. Pipelining: Beim Pipelining wird ein Speicherzugriff der Zeitdauer T in<br />

eine Reihe von n elementaren Operationen wie "Adresse anlegen", "Chip<br />

Enable-Leitung aktivieren", "Speicherzugriffsszeit abwarten", "Datum lesen"<br />

usw., untergliedert, die jeweils die Zeit T/n benötigen. Diese elementaren<br />

Operationen werden fließbandmäßig verkettet ausgeführt. Bei n<br />

gleich langen Unterteilungen können neue Speicheradressen n-fach schneller<br />

angelegt werden.<br />

Durch die Betriebsmöglichkeiten 1 - 4 des Speichersubsystems wird die kritische<br />

Prozessorzahl, von der ab die Latenzzeit der Interprozessorkommunikation<br />

nichtlinear ansteigt, erheblich gesteigert (Bild 1.9).<br />

Insgesamt können die beschriebenen Maßnahmen die Sättigungsgrenze des<br />

Speichersubsystems nur verschieben, aber nicht vermeiden. Man geht davon<br />

aus, daß unter Ausnutzung aller technischen Möglichkeiten nicht mehr als 32<br />

RISC-Prozessoren sinnvoll über Bus <strong>und</strong> gemeinsamen Speicher gekoppelt<br />

werden können. Voll skalierbar sind dagegen die ein- <strong>und</strong> mehrstufigen <strong>Verbindungsnetzwerke</strong>.<br />

Die Maßnahmen 1-4 zur Verbesserung der Bus/Speicherkopplung bei Parallelrechnern<br />

lassen sich bzgl. ihres Kosten/Nutzen-Verhältnisses folgendermaßen<br />

bewerten:<br />

• Wortbreiteerhöhung <strong>und</strong>/oder Adreßverschränkung: Diese Methoden werden<br />

seit ca. 2 Jahrzehnten bei Speichersubsystemen von Vektor-Superrechnern<br />

erfolgreich eingesetzt. Die Maßnahmen erfordern sehr breite Busse<br />

im Subsystem, was einen erheblichen Kostenfaktor darstellt (ca. 70% der Gesamtkosten<br />

eines Vektor-Supercomputers liegen im Speichersubsystem).<br />

Deshalb ist diese Technik nur bedingt bei Parallelrechnern einsetzbar.<br />

• Gemeinsame Speichermodule mit geteiltem Buszyklus (Split Transaction):<br />

Der geteilte Buszyklus erlaubt, mehrere Speicheranforderungen überlappend<br />

12


Latenzzeit<br />

pro Speicherzugriff<br />

x<br />

x<br />

o<br />

o<br />

Band=<br />

breite=<br />

limits<br />

Durchsatz<br />

o o o o<br />

o<br />

x x x x x x<br />

o<br />

x o<br />

x x x x o x<br />

x<br />

1 x x x xx x<br />

x<br />

o o o o o o oo o<br />

o<br />

o<br />

o<br />

1<br />

Zahl der<br />

Zahl der<br />

1<br />

Prozessoren<br />

Prozessoren<br />

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

zu bearbeiten, ohne daß die Prozessoren durch die im Vergleich zum Bus relativ<br />

lange Speicherzykluszeit blockiert werden (asynchrones Schreiben <strong>und</strong><br />

Lesen). Dies ist insbesondere zusammen mit einer mehrfädigen Programmausführung<br />

(Multi Threading), bei der extrem schnell von einem Prozeßfaden<br />

zum nächsten umgeschaltet wird, von großem Vorteil, da die Zugriffszeit auf<br />

Variable im Speicher <strong>für</strong> andere Prozeßfäden genutzt wird (Latency Hiding).<br />

Diese Methode bietet bei Parallelrechnern ein großes Anwendungspotential<br />

<strong>und</strong> ist relativ preisgünstig zu realisieren.<br />

• Pipelining: Gemeinsame Speichermodule mit Pipelining bedeutet, daß der<br />

Speicherzugriff in atomare Einheiten, wie 'Adresse anlegen', 'Buspuffer umschalten'<br />

etc., zerlegt wird, die dann in einer Pipeline verkettet werden können.<br />

Die Speicherzugriffszeiten <strong>für</strong> voneinander unabhängige Zugriffe reduzieren<br />

sich in diesem Fall auf die Bearbeitungszeit der langsamsten<br />

Pipelinestufe. Speicher-Pipelining wird seit 2 Jahrzehnten bei den Vektor-<br />

Supercomputern angewandt <strong>und</strong> ist auch bei Parallelrechnern sinnvoll.<br />

Zwei kommerzielle Beispiele der Bus/Speicherkopplung mit multiplen Kommunikationsspeichern<br />

sind der Sequent <strong>und</strong> der ELXSI Rechner, die in Bild<br />

1.10 <strong>und</strong> Bild 1.11 dargestellt sind.<br />

Eine weitere wesentliche Verbesserung von Durchsatz <strong>und</strong> Latenzzeit des<br />

Kommunikationssystems kann durch zusätzliche Lokalspeicher erzielt werden,<br />

die den Zugriff auf gemeinsame Module M 1 - M m nur <strong>für</strong> das Lesen <strong>und</strong> Schreiben<br />

auch gemeinsam genutzter Variablen erforderlich machen (Bild 1.12). Alle<br />

nicht gemeinsamen Daten werden in den Lokalspeichern L 1 - L n gehalten. Diese<br />

sind nicht über den Systembus zugänglich, sondern über lokale Speicherbusse,<br />

<strong>und</strong> können deshalb <strong>parallel</strong> adressiert werden, so daß die Sequentialisierung<br />

der Kommunikation aufgehoben wird, die einen prinzipiellen<br />

Engpaß der Bus/Speicherkopplung darstellt. Der zweite Vorteil dieser Archi-<br />

13


tektur besteht darin, daß die kleinen, lokalen Busse aus Anpassungs- <strong>und</strong> Laufzeitgründen<br />

breitbandiger ausgelegt werden können als der Systembus.<br />

Dual CPU<br />

Processor<br />

Boards<br />

Memory<br />

Controller<br />

Boards<br />

Memory<br />

Expansion<br />

Boards<br />

. . .<br />

80 MB/s<br />

MULTIBUS<br />

System Bus<br />

User<br />

Devices<br />

T<br />

A<br />

P<br />

E<br />

Multibus<br />

Adapter<br />

Board<br />

SCSI,<br />

Ethernet<br />

Controller<br />

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

CPU CPU . MEM . . MEM<br />

Gigabus<br />

I/O<br />

Proc ess or<br />

I/O<br />

Sub<br />

Bus<br />

ses<br />

I/O<br />

Proc ess or<br />

I/O<br />

Sub<br />

Bus<br />

ses<br />

Servic e<br />

Pr ocess or<br />

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

Zusätzliche Geschwindigkeit sowie Wegfall der manchmal nicht effizient genutzten<br />

gemeinsamen Speicher sowie eine Entlastung des Systembusses ergeben<br />

sich durch den Einbau von Cache-Speichern (Bild 1.13).<br />

Die Cache-Speicher erlauben, lokale Kopien von gemeinsamen Variablen<br />

anzulegen, die von den Prozessoren auch lokal gelesen <strong>und</strong> geschrieben werden<br />

können. Die Cache-Steuerungen sind u.a. da<strong>für</strong> zuständig, daß das Konsistenzproblem,<br />

das bei gleichzeitigem Schreiben mehrerer Kopien einer gemeinsamen<br />

Variablen entsteht, gelöst wird. Eine automatische Konsistenzsicherung<br />

sorgt da<strong>für</strong>, daß gemeinsame Variable <strong>und</strong> ihre Kopien systemweit denselben<br />

Wert haben. Dies wird von den Cache-Steuerungen durch Beobachten der<br />

14


P1<br />

L1<br />

Lokale Busse <strong>und</strong> Speicher<br />

P2<br />

. . .<br />

L2<br />

. . .<br />

Pn<br />

Ln<br />

. . .<br />

M1 M2 . . . Mm<br />

gemeinsame Speicher<br />

Systembus<br />

Bild 1.12: Bus/Speicherkopplung mit Lokalspeicher.<br />

P1<br />

P2<br />

Pn<br />

C1<br />

C2<br />

...<br />

Cn<br />

Bus<br />

M1 M2 Mn<br />

Bild 1.13: Bus/Speicherkopplung mit Caches <strong>und</strong> Bus Snooping.<br />

Schreib-/Leseaktivitäten auf dem Systembus (Bus Snooping) sowie durch Abwicklung<br />

eines komplexen "Update"-Protokolls wie z.B. MESI [Giloi93] erreicht.<br />

Bei der Architektur nach Bild 1.13 bestehen keinerlei geschwindigkeitsmäßige<br />

Unterschiede beim Zugriff der Prozessoren auf Daten in den einzelnen Modulen<br />

M 1 -Mn, weil alle Zugriffe, die nicht von den Caches befriedigt werden<br />

können, gleich schnell bzw. langsam abgewickelt werden können. Diese Eigenschaft<br />

einer symmetrischen Rechnerarchitektur wird als Uniform Memory Access<br />

(UMA) bezeichnet. UMA-Architekturen sind relativ einfach zu programmieren,<br />

weil die Allozierung von Variablen zu Speichern nicht beachtet werden<br />

muß. Andererseits nützen UMA-Rechner die häufig vorhandene Datenlokalität<br />

<strong>parallel</strong>er Anwendung nicht zur Gänze aus, weil keine lokalen Speicher existieren.<br />

Um einen Effizienzverlust zu vermeiden <strong>und</strong> um die Cache-Speicher nicht zu<br />

groß <strong>und</strong> damit zu teuer werden zu lassen, kann man in einer weiteren Optimierungsstufe<br />

der Bus/Speicherkopplung die gemeinsamen Speichermodule<br />

lokal zu den Prozessoren anbringen, wodurch das Konzept der globalen <strong>und</strong> der<br />

lokalen Speicher vereinigt wird. Dadurch wird der Systembus ebenso entlastet<br />

wie der Durchsatz erhöht. Eine Adreßdekodierung an jedem Speichermodul<br />

sorgt da<strong>für</strong>, daß eine Speicheranforderung des lokalen Prozessors auch lokal<br />

abgewickelt wird, also schneller als der Zugriff auf einen entfernten Speicher<br />

15


abläuft. Aufgr<strong>und</strong> der geschwindigkeitsmäßigen Unterschiede der Speicherzugriffe<br />

spricht man in diesem Fall von einer Non Uniform Memory Access-Architektur<br />

(NUMA). Parallele Anwendungen, die Datenlokalität aufweisen,<br />

werden in der Effizienz der Ausführung wesentlich davon beeinflußt, ob lokale<br />

Daten des Programm auch lokal abgespeichert werden. Gute <strong>parallel</strong>e Programmierung<br />

bedeutet deshalb bei einer NUMA-Architektur die richtige Allozierung<br />

von Programmvariablen zu Speichern.<br />

P1<br />

P2<br />

Pn<br />

M1 C1 M2 C2 . . .<br />

Mn<br />

Cn<br />

Systembus<br />

Bild 1.14: Bus/Speicherkopplung mit unsymmetrischen Zugriffszeiten (NUMA).<br />

Die Bus/Speicherkopplung gemäß Bild 1.13 (UMA) oder Bild 1.14 (NUMA)<br />

mit Busbeobachtung zur Konsistenzsicherung ist <strong>für</strong> Multiprozessoren mit kleinerer<br />

Prozessorzahl (≤ 8) aus Kosten- <strong>und</strong> Leistungsgründen sehr gebräuchlich.<br />

Sie wurde <strong>und</strong> wird bei einer Reihe kommerzieller <strong>Systeme</strong> angewandt. Ein<br />

Beispiel da<strong>für</strong> ist der Alliant FX/8-Rechner (Bild 1.15), der dem UMA-Schema<br />

entspricht.<br />

Zusammenfassend kann gesagt werden, daß das Symmetric Multiprocessing<br />

(Bus/Speicherkopplung) in vielen <strong>parallel</strong>en Rechensystemen zu finden ist.<br />

Speziell bei Servern mit 2-4 Prozessoren existieren Rechner von Compaq,<br />

DEC, IBM, Sequent, SNI, SUN <strong>und</strong> anderer Hersteller mit solcher Architektur.<br />

In Zukunft werden es die Fortschritte in der Silizium-Höchstintegration erlauben,<br />

ca. 4 Prozessoren sowie die dazugehörigen Caches mit Bus <strong>und</strong><br />

Konsistenzsicherung auf einem einzigen Silizium-Chip zu integrieren. Dadurch<br />

wird die Bedeutung der Bus/Speicherkopplung weiter zunehmen. Diese Entwicklung<br />

ist bei den sog. Quad-Prozessor Boards bereits vorweggenommen.<br />

1.3.2 Mehrtorspeicherkopplung<br />

Die zweite klassische Kopplungsmethode neben der Bus/Speicherkopplung besteht<br />

darin, Prozessoren über einen Mehrtorspeicher (Multiport Memory) zu<br />

verbinden. Mehrtorspeicher unterscheiden sich von üblichen (Eintor)-Speichern<br />

dadurch, daß sie gleichzeitige Schreib-/Lesezugriffe auf identische oder<br />

unterschiedliche Adressen auf der Ebene des Speichersubsystems erlauben. Der<br />

interne Aufbau der Mehrtorspeicher unterstützt hardwaremäßig einfaches<br />

Schreiben <strong>und</strong> mehrfaches Lesen (Exclusive Write Multiple Read) oder gleichzeitiges<br />

mehrfaches Schreiben <strong>und</strong> Lesen von Variablen (Multiple Write, Mu-<br />

16


MEM<br />

MEM<br />

. . .<br />

MEM<br />

Memory Bus<br />

Cache Cache . . . Cache<br />

. . .<br />

IP1 IP2 IP12<br />

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

tiple Read). Selbstverständlich ist auch beim Multiport-Speicher der Wert einer<br />

Variablen nicht determiniert, wenn von mehreren Prozessoren gleichzeitig dieselbe<br />

Variable beschrieben wird. Dieser Fall kann bei bestimmten Programmiermodellen<br />

wie dem der weak consistency [Hwang93] <strong>und</strong> geeigneten Rechenalgorithmen<br />

erlaubt sein, in den meisten Fällen wird jedoch das<br />

gleichzeitige mehrfache Schreiben einer Variablen durch eine Synchronisation<br />

verhindert, um deterministische Programmergebnisse zu erzielen.<br />

Mehrtorspeicher werden traditionell zur Kopplung weniger (4-16) Prozessoren<br />

verwendet, wie sie bei einem Vektor-Superrechner wie z.B. einer Cray<br />

YMP, J 90, C 90, CONVEX C4 oder NEC SX-4 gegeben sind. In diesen Fällen<br />

werden die multiplen Anschlüsse eines Mehrtorspeichers durch einen sehr<br />

schnellen Eintorspeicher, bestehend aus einer Vielzahl von Speicherbänken<br />

<strong>und</strong> einem Verbindungsnetzwerk wie z.B. ein Kreuzschienenverteiler emuliert.<br />

Das Verbindungsnetzwerk weitet den Speicheranschluß so auf, daß alle Prozessoren<br />

daran angeschlossen werden können. Die Zahl der Speicherbänke muß<br />

groß genug gewählt werden, um die Prozessoren bandbreitemäßig zufriedenzustellen.<br />

Das Prinzip das Mehrtorspeichers ist in Bild 1.16 dargestellt, eine konkrete<br />

Implementierung sieht man in Bild 1.17. Mehrtorspeicher ermöglichen einen<br />

gleichzeitigen Zugriff der Prozessoren durch eine Adreßverschränkung der<br />

Speicherbänke. Bei Parallelrechnern haben Mehrtorspeicher im Vergleich zur<br />

Bus-/Speicher-Kopplung keine besondere Bedeutung erlangt, u.a. deswegen,<br />

weil sie sehr viel teurer in der Realisierung sind.<br />

Technisch betrachtet gibt es zwei Möglichkeiten, Mehrtorspeicher zu implementieren:<br />

• Über spezielle Multiport SRAM- oder DRAM-Speicherbausteine, wie sie<br />

z.B. von AMD oder Cypress angeboten werden. Diese integrierten Schaltkreise<br />

weisen 2-4 Speicheranschlüsse auf, die simultan gelesen oder geschrieben<br />

werden können. Sie haben den Nachteil, daß sie aufgr<strong>und</strong> komplexer<br />

interner Verdrahtung nicht hoch integrierbar sind <strong>und</strong> daß sie wegen der<br />

Vielzahl benötigter Anschlußstifte erheblich teurer in der Herstellung sind als<br />

konventionelle RAM-Speicher.<br />

17


P1 P2 . . . Pn<br />

Verbindungs=<br />

netzwerk<br />

Bild 1.16: Prinzip der Mehrtorspeicherkopplung über Eintorspeicher <strong>und</strong> Netzwerk.<br />

M<br />

P1 P2 P3 P4 P5 P6 P7 P8<br />

4x4 4x4 4x4 4x4 4x4 4x4 4x4 4x4<br />

8x64 8x64 8x64 8x64<br />

256 Speicherbänke<br />

Bild 1.17: Implementierung der Mehrtorspeicherkopplung bei der Cray YMP-816.<br />

• Über konventionelle SRAM- oder DRAM-Bausteine in Verbindung mit einem<br />

vorgeschalteten Netzwerk, das den Speicheranschluß aufweitet. Als<br />

<strong>Verbindungsnetzwerke</strong> werden ein oder mehrstufige Netze oder bei konventionellen<br />

Architekturen auch Busse verwendet. Die Kosten dieser Lösung<br />

sind geringer als bei der Kopplung über integrierte Multiport-Schaltkreise,<br />

die additive Speicherbandbreite allerdings auch, sofern nur eine Speicherbank<br />

verwendet wird.<br />

Parallelrechner in Forschungsprojekten, die auf Multiport-Speicherkopplung<br />

beruhen, wie z.B. der DIRMU-Rechner [Händler85], ermöglichen die Kopplung<br />

einer kleineren Zahl von Prozessoren.<br />

Beim DIRMU-Rechner fungiert jeder Multiport-Speicher als ein Kommunikationselement<br />

mit sieben Kanälen <strong>und</strong> einem achten Anschluß <strong>für</strong> den lokalen<br />

Prozessor. Bis zu acht Rechenknoten mit Multiport-Speicher können so in<br />

einer vollständig vermaschten Topologie miteinander verb<strong>und</strong>en werden. Bei<br />

größeren DIRMU-<strong>Systeme</strong>n sind entfernte Rechenknoten indirekt verb<strong>und</strong>en,<br />

indem einer oder mehrere Multiport-Speicher als Zwischenstation <strong>für</strong> die Daten<br />

der Interprozessorkommunikation dienen.<br />

18


1.3.3 Die Grenzen der Bus/Speicherkopplung<br />

Parallelrechner, die auf Buskopplungen mit gemeinsamen Speichern oder auf<br />

Mehrtorspeichern beruhen, sind aus zwei physikalischen Gründen in ihrer Leistungsfähigkeit<br />

prinzipiell begrenzt, d.h. nicht skalierbar. Busse eignen sich nur<br />

innerhalb kleiner Entfernungen (≤ 1 m) zum schnellen Datentransport, da die zu<br />

treibenden kapazitiven Lasten mit zunehmender Buslänge ebenfalls ansteigen,<br />

während der die Kapazitäten umladende Bustreiberstrom nicht beliebig groß<br />

gemacht werden kann. Busgekoppelte <strong>Systeme</strong> sind deshalb i.a. auf einen Gehäuserahmen<br />

(Crate) begrenzt. Busse haben eine endliche Bandbreite, die von<br />

den nicht anpaßbaren Übertragungsleitungen zwischen Bussender <strong>und</strong> -empfänger<br />

herrührt, <strong>für</strong> die alle Busstecker als störende Impedanzen wirken. Die<br />

Zahl der Steckplätze, <strong>und</strong> damit die Zahl der Prozessoren, ist deshalb <strong>für</strong> einen<br />

Bus mit hoher Bandbreite möglichst klein zu machen. Dies ist eine der<br />

Parallelverarbeitung widersprechende Forderung, die möglichst viele Rechnerknoten<br />

zu koppeln versucht.<br />

Zu diesen beiden "harten" Grenzen, die die Natur vorgibt, kommt eine "weiche"<br />

Grenze, die aus der zunehmenden Unbalanziertheit der Geschwindigkeiten<br />

von Prozessoren auf der einen Seite <strong>und</strong> Speichern auf der anderen<br />

Seite resultiert: Die schnellsten, technisch realisierbaren Bussysteme wie<br />

FASTBus oder Futurebus+ [IEEE91] erreichen maximal ca. 3 Gbyte/s an Datentransferrate<br />

<strong>und</strong> sind damit so schnell wie die Speicherschnittstelle eines einzigen<br />

RISC-Prozessors. Nur durch Zwischenschalten von großen <strong>und</strong> mehrfach<br />

gestuften Caches zwischen Prozessoren <strong>und</strong> Systembus lassen sich deshalb,<br />

ausreichende Datenlokalität vorausgesetzt, mehrere RISC-Prozessoren über einen<br />

gemeinsamen Bus koppeln.<br />

Aufgr<strong>und</strong> der prinzipiell nicht gegebenen Skalierbarkeit von Bus/Speichergekoppelten<br />

Architekturen, sind sehr schnelle Parallelrechner bzw. Parallelrechner<br />

mit großen Prozessorzahlen (> 16-32) auf einer Bustechnologie nicht<br />

aufbaubar. Glücklicherweise lassen sich die von der Physik gezogenen Grenzen<br />

der konventionellen Prozessorkopplungen durch andere Konzepte, wie <strong>parallel</strong>e<br />

<strong>und</strong>/oder hierarchische Busse, sowie durch die Verwendung ein- oder mehrstufiger<br />

Verbindungsnetze umgehen.<br />

Unterhalb der vorgegebenen physikalischen Grenzen ist die Buskopplung mit<br />

gemeinsamem Speicher <strong>für</strong> kleine Prozessorzahlen kostengünstiger als alle anderen<br />

Technologien <strong>und</strong> übertrifft im Preis/Leistungsverhältnis auch die ein<strong>und</strong><br />

mehrstufigen <strong>Verbindungsnetzwerke</strong>. Multiprozessoren mit kleineren Prozessorzahlen<br />

(≤ 8-16) basieren deshalb fast ausschließlich auf diesem Konzept.<br />

Kommerzielle Beispiele <strong>für</strong> Symmetric Multiprocessing sind die Knotenarchitekturen<br />

des PowerChallenge Rechner von SGI, der Symmetric Multiprocessor<br />

von IBM sowie einige andere.<br />

19


1.4 Parallele Bussysteme<br />

Die Busbandbreite ist proportional zur Taktrate des Busses, zu seiner Wortbreite<br />

<strong>und</strong> zur Zahl <strong>parallel</strong>geschalteter Busse pro Prozessor. Weil die Taktrate<br />

moderner Busse aus physikalischen Gründen nur noch wenig gesteigert werden<br />

kann <strong>und</strong> die Wortbreite <strong>für</strong> doppelt-genaue Gleitkommazahlen auf 64 Bit festgelegt<br />

ist, kann zur Bandbreiteerhöhung des Busses die Parallelschaltung mehrerer<br />

Busse herangezogen werden. Mehrbussysteme sind sowohl aus Geschwindigkeits-<br />

als auch aus Zuverlässigkeitsgründen sinnvoll <strong>und</strong> werden in<br />

Forschung <strong>und</strong> Industrie entworfen <strong>und</strong> eingesetzt. Ein typisches Mehrbussystem<br />

zeigt Bild 1.18.<br />

P1 P2 ... Pn<br />

M1<br />

M2<br />

...<br />

Mm<br />

Bild 1.18: Mehrbussystem mit <strong>parallel</strong>en Bussen.<br />

Eine evolutionäre Weiterentwicklung des Mehrbuskonzepts entsteht durch Ersetzen<br />

der Bus-Ports durch Zugriffsbusse <strong>und</strong> durch Hinzufügen von Busbrükken,<br />

wie es in Bild 1.19 gezeigt wird. Diese Methode hat den Vorteil, daß ein<br />

Busanschluß pro Prozessor ausreicht. Da die Bandbreite <strong>für</strong> den Prozessor auf<br />

die des Zugriffsbusses beschränkt bleibt, sind Caches unabdingbar, um die<br />

Speicheranforderungen moderner RISC-Prozessoren erfüllen zu können.<br />

Durch die Kombination von Zugriffsbussen <strong>und</strong> <strong>parallel</strong>en Speicherbussen<br />

entsteht eine 2-dimensionale Busmatrix. Beim Busmatrixkonzept hat jeder Prozessor<br />

einen exklusiven Buszugang (vertikale Richtung), der über Busbrücken<br />

zu den Speicherbussen (horizontale Richtung) die Verbindung mit den Speichermodulen<br />

herstellt.<br />

Die Busbrücken arbeiten adreßgesteuert <strong>und</strong> blenden <strong>für</strong> bestimmte Adreßbereiche<br />

Daten eines horizontalen Busses in den eigenen vertikalen Bus ein. Sie<br />

haben somit eine Schalterfunktion. Dies macht das Busmatrixkonzept identisch<br />

mit einem Kreuzschienenverteiler. Deshalb kann diese Kopplungsmethode<br />

nicht mehr als Buskopplung im eigentlichen Sinne bezeichnet werden, sondern<br />

zählt bereits zu den dynamischen <strong>Verbindungsnetzwerke</strong>n, da Busleitungen<br />

umgeschaltet werden. Umgekehrt werden Kreuzschienenverteiler häufig als<br />

Busmatrix implementiert.<br />

20


P1<br />

P2<br />

...<br />

Pn<br />

C1<br />

C2<br />

...<br />

Cn<br />

M1<br />

M2<br />

...<br />

Mm<br />

Bild 1.19: Mehrbussystem mit vertikalen <strong>und</strong> horizontalen Bussen.<br />

1.5 Hierarchische Bussysteme<br />

Die Umgehung der von der Physik gezogenen Grenzen bei der Bus/Speicherkopplung<br />

kann entweder durch die Verwendung mehrerer <strong>parallel</strong>er Busse<br />

oder durch den Einsatz von hierarchisch gegliederten Bussen erfolgen. In Bild<br />

1.20 ist ein hierarchisches Bussystem zur Prozessorkopplung <strong>für</strong> den Fall von<br />

zwei Hierarchieebenen dargestellt. Auf der unteren Hierarchieebene gibt es vier<br />

einzelne Multiprozessorsysteme, die auf der nächsthöheren Ebene miteinander<br />

verb<strong>und</strong>en sind. Hierarchische Bussystem werden u.a. in [Wilson87] untersucht.<br />

Hierarchische Bussysteme benötigen Datenlokalität in den <strong>parallel</strong>en Anwendungen,<br />

die bei der Interprozessorkommunikation benachbarte Prozessoren<br />

den entfernten Prozessoren vorzieht. Das heißt, daß bei Datenlokalität jeder<br />

Rechner einen Satz von Prozessoren oder Rechnern hat, mit denen er besonders<br />

häufig kommuniziert. Dieser Communication Set, der vergleichbar mit dem<br />

Working Set im Cache eines Einzelprozessors ist, erlaubt, häufig kommunizierende<br />

Rechner auch physikalisch benachbart zu gruppieren.<br />

Bei hierarchischen Bussystemen werden die Prozessoren oder Rechner in<br />

Untergruppen gegliedert, die wiederum zu Hauptgruppen zussammengefaßt<br />

werden. Der Vorteil der Gruppenbildung (Clustering) liegt darin, daß die Interprozessorkommunikation<br />

innerhalb einer Gruppe aus technischen Gründen<br />

schneller abgewickelt werden kann als zwischen den Gruppen, da sich Daten<br />

über kurze Entfernungen schneller transportieren lassen als über lange Distanzen.<br />

Nach einer Arbeit von A. Agarwal [Agarwal91] weist die Datenlokalität zwei<br />

Eigenschaften auf. Die erste Eigenschaft bewirkt, daß die Latenzzeit <strong>für</strong> Interprozessorkommunikation<br />

durch geschickte Allozierung von Prozessen zu Prozessoren<br />

reduziert werden kann. Die zweite Eigenschaft bewirkt, daß bei rich-<br />

21


P1<br />

P2<br />

Pn<br />

P1<br />

P2<br />

Pn<br />

C1<br />

C2<br />

...<br />

Cn<br />

C1<br />

C2<br />

...<br />

Cn<br />

M1 M2 Mn<br />

M1 M2 Mn<br />

P1<br />

P2<br />

Pn<br />

P1<br />

P2<br />

Pn<br />

C1<br />

C2<br />

...<br />

Cn<br />

C1<br />

C2<br />

...<br />

Cn<br />

M1 M2 Mn<br />

M1 M2 Mn<br />

Bild 1.20: Hierarchisches Bussystem.<br />

tiger Zuordnung von Prozessen zu Prozessoren die Kommunikation zwischen<br />

entfernten Prozessoren nicht nur relativ selten stattfindet, sondern auch weniger<br />

Bandbreite benötigt als der Datenaustausch zwischen benachbarten Prozessoren,<br />

die in der Regel mit hoher Datenrate erfolgt. Das bedeutet, daß bei Datenlokalität<br />

entfernte Prozessoren ohne Leistungsverlust mit geringerer Bandbreite<br />

gekoppelt werden können, als benachbarte, was zu erheblichen Kosteneinsparungen<br />

führt. Auf diesem Prinzip fußen hierarchische Bussysteme, da sie Cluster<br />

von Prozessoren mit geringerer Bandbreite koppeln als die Prozessoren innerhalb<br />

eines Clusters.<br />

Moderne Bussysteme wie der Futurebus+ erlauben explizit hierarchische<br />

Buskopplungen zur skalierbaren Einstellung der Rechnerleistung eines Multiprozessorsystems<br />

gegenüber einem Einzelprozessorsystem. Neben den Multiprozessoren<br />

<strong>und</strong> Multicomputern mit <strong>parallel</strong>en Bussen ist die hierarchische<br />

Buskopplung die einzige Möglichkeit, den sequentiellen Charakter eines Bustransfers<br />

über die von der Physik gezogene Bandbreitegrenze hinaus zu beschleunigen.<br />

Der Flaschenhals der Kommunikation kann im Prinzip durch Verwendung<br />

eines ein- oder mehrstufigen <strong>Verbindungsnetzwerke</strong>s vermieden werden, da ein<br />

statisches oder dynamisches Netz nicht auf dem Zeitmultiplexprinzip eines<br />

Busses beruht, sondern einen exklusiven Netzzugang <strong>für</strong> jeden einzelnen Rechner<br />

zur Verfügung stellt. Die räumliche Parallelität erfordert jedoch einen erheblich<br />

größeren schaltungstechnischen Aufwand als ein Zeitmultiplex-Bussystem.<br />

22


1.6 Skalierbarkeit von Verbindungsstrukturen<br />

Unter Skalierbarkeit versteht man die Eignung einer vorgegebenen Verbindungsstruktur<br />

sowohl <strong>für</strong> kleine (einige Dutzend) Teilnehmerzahlen als auch<br />

nach einer entsprechenden Erweiterung <strong>für</strong> sehr große (einige Tausend bis<br />

Zehntausend) Teilnehmerzahlen. Dies setzt einen modularen Aufbau des gegebenen<br />

Netzwerkes voraus. Am Beispiel der Buskopplung wurde das Problem<br />

der Skalierbarkeit von Verbindungsstrukturen sichtbar. Beim Bus ist Skalierbarkeit<br />

aufgr<strong>und</strong> der maximal vorgegebenen Bandbreiten nicht möglich.<br />

Bei ein- <strong>und</strong> mehrstufigen <strong>Verbindungsnetzwerke</strong>n treten ebenfalls gewisse<br />

Probleme auf, die eine beliebige Skalierbarkeit manchmal erschweren bzw. unmöglich<br />

machen. Zwar läßt sich hier die Teilnehmerzahl durch das Raummultiplexprinzip<br />

"unendlich" vergrößern, doch gibt es auch bei solchen Netzwerken<br />

Nebeneffekte, die der Skalierbarkeit Schranken auferlegen.<br />

Eine solche Schranke stellt die inhomogene Verkehrsverteilung in einem<br />

Netz dar, die bewirkt, daß einzelne Kanäle stärker belastetet werden als andere.<br />

Die Sättigung belasteter Kanäle wird mit zunehmender Teilnehmerzahl <strong>und</strong><br />

steigender Datentransferrate immer wahrscheinlicher, da die Datendichte zunimmt.<br />

Die Stellen im Netz, an denen Sättigungseffekte auftreten, werden als<br />

Hot Spots bezeichnet. Sie bewirken, daß sich Rückstaus von Datenpaketen ähnlich<br />

wie auf einer überlasteten Autobahn bilden, wodurch einzelne Netzstufen<br />

kurzzeitig unpassierbar werden. Diese transienten Effekte bewirken zu nicht<br />

vorhersagbaren Zeitpunkten ein nichtlineares Ansteigen der Latenzzeit, was<br />

eine unbegrenzte Skalierbarkeit verhindert. Durch zusätzliche Maßnahmen im<br />

Netz wie adaptives Routing <strong>und</strong> Combining [Pfister85b] lassen sich allerdings<br />

solche hochbelasteten Kanäle umgehen bzw. vermeiden.<br />

Als weiterer Problempunkt bei mehrstufigen Netzen gilt die Tatsache, daß<br />

Netze häufig so organisiert sind, daß die Zahl der Anschlüsse nur in Zweierpotenzen<br />

erhöht werden kann, was ab einer gewissen Zahl von Verdopplungen<br />

ein zu grobes Raster an Anschlüssen bedeutet. Die Verdopplung der Anschlüsse<br />

läßt sich von einer bestimmten Netzgröße an nicht mehr bezahlen, da zu viele<br />

Anschlüsse ungenutzt bleiben - außer die Zahl der Prozessoren wird ebenfalls<br />

verdoppelt. Durch Cluster-Bildung in hierarchische Strukturen kann man hier<br />

Abhilfe schaffen.<br />

Schließlich ist die Durchlaufverzögerung (Latenz) eines Signals durch ein<br />

mehrstufiges Netz i.a. vom Logarithmus der Zahl der Netzeingänge abhängig,<br />

so daß große Netze auch große Latenz bedeuten. Allerdings wächst der Logarithmus<br />

immer langsamer mit zunehmender Netzgröße, so daß sich diese<br />

Schranke in der Praxis nicht stark bemerkbar macht.<br />

Zusammenfassend kann gesagt werden, daß trotz der genannten Probleme<br />

mehrstufige Netze, wie z.B. das Omega- [Lawrie75] oder Baseline-Netz<br />

[Wu80a], als im Prinzip unbegrenzt skalierbar gelten, da die Skalierbarkeit<br />

durch zusätzliche Maßnahmen erhalten bleibt.<br />

23


1.7 Programmiermodelle <strong>und</strong> physikalische<br />

Kopplung<br />

Aus der Sicht des Benutzers gibt es zwei Standardmodelle <strong>für</strong> <strong>parallel</strong>e Programmierung,<br />

die auf gemeinsamen Variablen (Shared Variables) oder auf Botschaftenaustausch<br />

(Message Passing) beruhen. Aus rechnerarchitektonischer<br />

Sicht basieren Parallelrechner entweder auf Kanalkopplung (Channels) oder<br />

auf Speicherkopplung (Shared Memory). Beide Programmiermodelle lassen<br />

sich über die zwei Kopplungsarten realisieren. Je nach Programmier- <strong>und</strong> Koppelmodell<br />

resultieren verschiedene Rechnerarchitekturen bzw. <strong>Verbindungsnetzwerke</strong>.<br />

Programmiermodelle<br />

Message Passing hat durch die Portierung der Message Passing-Bibliotheken<br />

PVM, PARMACS, MPI u.a. auf nahezu alle Rechnerplattformen eine hohe Verbreitung<br />

gewonnen. Die Message Passing-Bibliothek PVM stellt einen De Facto-Standard<br />

<strong>für</strong> <strong>parallel</strong>e Programmierung mit Botschaftenaustausch dar.<br />

Andererseits werden ingenieurwissenschaftliche Codes traditionell in FOR-<br />

TRAN geschrieben, das vom Sprachkonzept her gemeinsame Variable favorisiert,<br />

die z.B. durch FORTRAN Common Blocks sowie durch spezielle Compiler-Direktiven<br />

ausgedrückt werden. Durch die Weiterentwicklungen von<br />

FORTRAN 77 in die Nachfolger FORTRAN 90 <strong>und</strong> High Performance FORT-<br />

RAN (HPF) sowie andere Sprachen mit Array-Datentypen gewinnt das<br />

Programmiermodell der gemeinsamen Variablen in den technisch-wissenschaftlichen<br />

Anwendungsbereichen an Verbreitung.<br />

Den gemeinsamen Variablen eilt der Ruf voraus, bereits nach relativ kurzer Zeit<br />

der Codierung ein lauffähiges <strong>parallel</strong>es Programm zu ermöglichen, d.h. eine<br />

effiziente Programmerstellung zu erhalten, während Botschaftenaustausch, besonders<br />

bei größeren Prozessorzahlen, als effizienter in der Programmausführung<br />

gilt.<br />

Physikalische Kopplung<br />

Die beiden Standardprogrammiermodelle werden oftmals mit den physikalischen<br />

Arten der Kopplung gleichgesetzt. Insbesondere das Modell der aus<br />

Benutzersicht gemeinsamen Variablen suggeriert gemeinsamen Speicher als<br />

Kopplungsmethode. Dies ist in der Praxis keineswegs der Fall. Beispielsweise<br />

beruhen die Shared Variable-Rechner Cray T3D <strong>und</strong> Convex Exemplar auf kanalgekoppelten<br />

Rechenknoten, weil dies aufgr<strong>und</strong> deren räumlicher Ausdehnung<br />

aus technischen Gründen notwendig ist. Bei großen Parallelrechnern,<br />

die mehr als einen Gehäuserahmen (Crate) umfassen, müssen die aus Benutzersicht<br />

gemeinsamen Variablen über Kommunikationskanäle realisiert<br />

werden, da größere Entfernungen anderweitig nicht zu überbrücken sind.<br />

24


Korrespondierend zu der Tatsache, daß Programmiermodell <strong>und</strong> Koppelmodell<br />

voneinander unabhängig sind, gibt es von den japanischen Herstellern NEC <strong>und</strong><br />

Fujitsu in deren Rechnern, die auf physikalisch gemeinsamem Speicher beruhen,<br />

Kommunikation über die Message Passing-Bibliothek PVM.<br />

Zwar bevorzugt das Programmiermodell der gemeinsamen Variablen aus<br />

historischen <strong>und</strong> praktischen Gründen die Buskopplung mit gemeinsamen<br />

Speicher, während Botschaftenaustausch oft auf kanalgekoppelten Prozessoren<br />

basiert, jedoch sind beide Programmiermodelle nicht notwendigerweise an das<br />

von ihnen favorisierte Kopplungskonzept geb<strong>und</strong>en, sondern lassen sich auf jeder<br />

Hardware-Plattform implementieren. In Vergangenheit <strong>und</strong> Gegenwart gab<br />

<strong>und</strong> gibt es Beispiele kommerzieller <strong>und</strong> wissenschaftlicher Rechner, die gemeinsame<br />

Variable auf kanalgekoppelten Prozessoren realisieren bzw. Botschaften<br />

auf gemeinsamen Speicher abbilden.<br />

Um einen Unterschied zwischen der physikalischen Kopplung einerseits <strong>und</strong><br />

der logischen Sicht andererseits zu machen, wird im folgenden der Begriff des<br />

gemeinsamen Speichers auf die physikalische Ebene bezogen. Auf der logischen<br />

Ebene wird statt dessen der Begriff der gemeinsamen Variablen verwendet,<br />

der den Bezug zur Programmierung des Parallelrechners herstellt. Entsprechend<br />

werden Kanäle als das technische Übertragungsmedium bezeichnet <strong>und</strong><br />

Botschaftenaustausch als die Art der Programmierung.<br />

Um die Nomenklatur zu vervollständigen, muß an dieser Stelle der wichtige<br />

Spezialfall vorweggenommen werden, bei dem auf der physikalischen Ebene<br />

ein gemeinsamer Speicher existiert, der nicht räumlich konzentriert, sondern<br />

verteilt ist. Aufgr<strong>und</strong> der physikalischen Ausdehnung von Parallelrechnern, die<br />

einige Meter <strong>und</strong> mehr betragen kann, scheidet die Buskopplung (Symmetric<br />

Multiprocessing) als Verbindung aus, statt dessen wird der gemeinsame Speicher<br />

über Kanäle emuliert. Auf den Kanälen wiederum werden die Adressen<br />

<strong>und</strong> Inhalte des gemeinsamen Speichers in Form von Datenpaketen zwischen<br />

den Speichermodulen übertragen. Diese Architektur, die als <strong>verteilte</strong>r gemeinsamer<br />

Speicher (Distributed Shared Memory) bezeichnet wird, stellt die beiden<br />

physikalischen Kopplungsmodelle gemeinsamer Speicher <strong>und</strong> Kanalkopplung<br />

nicht als zwei Alternativen dar, die sich gegenseitig ausschließen, sondern vereinigt<br />

sie zu einem neuen Ganzen.<br />

Fortschritte in der Hardware-Technologie, wie Caches mit automatischem<br />

Konsistenzabgleich bereits auf dem Prozessor-Chip, fördern die Verbreitung<br />

von Bussen mit gemeinsamem Speicher, während standardisierte Kanalkopplungsmethoden<br />

wie SCI [IEEE92] die Kanalkopplung favorisieren, da sie die<br />

Zusammenschaltung von inhomogenen <strong>Systeme</strong>n verschiedener Hersteller ermöglichen.<br />

Aufgr<strong>und</strong> dieser Entwicklungen werden beide Methoden auch in<br />

Zukunft ihre Bedeutung haben. Der Trend geht dahin, daß kleine "Cluster" busgekoppelt<br />

<strong>und</strong> größere Cluster kanalgekoppelt sind.<br />

25


1.8 Klassifikation nach physikalischer <strong>und</strong><br />

logischer Kopplung<br />

Man kann <strong>parallel</strong>e <strong>und</strong> <strong>verteilte</strong> <strong>Systeme</strong> hinsichtlich ihrer physikalischen <strong>und</strong><br />

logischen Kopplung klassifizieren. Es entsteht dann ein Ordnungsschema, in<br />

dem die Programmiermodelle von Botschaftenaustausch <strong>und</strong> gemeinsamen Variablen<br />

mit den Koppelmodellen von gemeinsamen Speicher <strong>und</strong> Kanalkopplung<br />

kombiniert werden. In Tabelle 1.1 werden gebräuchliche Parallelrechner<br />

hinsichtlich dieser Kriterien klassifiziert. Die Klassifikation erlaubt, die<br />

Rechner bzgl. ihrer Kommunikationseigenschaften vergleichen zu können. Dabei<br />

kann man folgende Punkte feststellen:<br />

• Maschinen mit gemeinsamem Speicher werden häufiger mit dem Programmiermodell<br />

der gemeinsamen Variablen als mit dem der Botschaftenkopplung<br />

auf dem Markt angeboten. Ähnliches gilt <strong>für</strong> Kanalkopplung <strong>und</strong><br />

Botschaftenaustausch im Vergleich zu Kanalkopplung <strong>und</strong> gemeinsamen<br />

Variablen.<br />

• Einige Hersteller wie CONVEX <strong>und</strong> Fujitsu ermöglichen bzw. erfordern aufgr<strong>und</strong><br />

ihrer hybriden Bauweise beide Programmiermodelle. Dabei werden<br />

stets gemeinsame Variable innerhalb eines Rechenknotens <strong>und</strong> Botschaftenaustausch<br />

zwischen den Knoten eingesetzt.<br />

• Vier der fünf großen Parallelrechnerhersteller Cray, Convex, DEC, IBM <strong>und</strong><br />

Intel bieten die innovative Kanalkopplung zusammen mit dem Programmiermodell<br />

der gemeinsamen Variablen an. Convex ermöglicht darüber hinaus<br />

als einziger Hersteller auf dem Markt systemweite Cache-Konsistenz <strong>für</strong><br />

Kopien gemeinsamer Variablen.<br />

Offenbar favorisieren die Kostenvorteile der klassischen Bus/Speicherkopplung<br />

bei kleinen Prozessorzahlen das Programmiermodell der gemeinsamen<br />

Variablen, während große Parallelrechner auf der physikalischen Ebene durchweg<br />

kanalgekoppelt sind. Diese stellen auf der Programmierebene Botschaftenaustausch<br />

zur Verfügung. In einigen Fällen werden auch gemeinsame Variable<br />

als Programmiermodell hardwaremäßig mitunterstützt bzw. sind das primäre<br />

Programmiermodell (Exemplar, T3D/E). Der Trend bei Parallelrechnern geht<br />

zu einer Kombination von gemeinsamem Speicher <strong>und</strong> Variablen innerhalb eines<br />

Knotens <strong>und</strong> Kanälen mit Botschaften zwischen den Knoten, wie man anhand<br />

der CONVEX Exemplar, IBM SP2 (<strong>und</strong> Nachfolger), Intel Paragon, NEC<br />

SX-3/4, sehen kann. Dadurch lassen sich die spezifischen Vorteile beider<br />

Kopplungsarten, nämlich geringe Kosten plus Skalierbarkeit, vereinigen. Bei<br />

(lose) gekoppelten Rechnergruppen, wie einem DEC Workstation Cluster<br />

8400, einem SGI Power Challenge Array oder einer NEC SX-4 Anordnung,<br />

sind hybride Kopplungen <strong>und</strong> Programmiermodelle üblich.<br />

In Tabelle 1.2 sind früher gebräuchliche Parallelrechensysteme zum Vergleich<br />

aufgelistet. Es fällt auf, daß die Zahl der Hersteller von kanalgekoppelten,<br />

Botschaften austauschenden <strong>Systeme</strong>n sowie von <strong>Systeme</strong>n mit gemeinsa-<br />

26


Programmiermodell<br />

gemeinsame<br />

Variable<br />

Botschaftenaustausch<br />

K<br />

o<br />

p<br />

p<br />

e<br />

l<br />

m<br />

o<br />

d<br />

e<br />

l<br />

l<br />

g<br />

e<br />

m.<br />

S<br />

p<br />

e<br />

i<br />

c<br />

h<br />

e<br />

r<br />

K<br />

a<br />

n<br />

ä<br />

l<br />

e<br />

o CONVEX Exemplar<br />

(gem. Speicher im Knoten)<br />

o Cray J90<br />

o Cray T90<br />

o Fujitsu VPP 300/500<br />

o NEC SX-4<br />

(gem. Speicher im Knoten)<br />

reine SMP- Maschinen:<br />

o DEC AlphaServer<br />

o SGI Power Challenge<br />

o sowie die Modelle von<br />

- Compaq<br />

- IBM<br />

- Sequent<br />

- SNI<br />

- SUN<br />

o CONVEX Exemplar<br />

(Kanäle zw. Knoten)<br />

o Cray T3D/E<br />

o DEC Memory Channel<br />

Cluster<br />

o Intel Paragon<br />

(Shared Virtual Memory<br />

Implementierung)<br />

o Meiko CS-2<br />

o CONVEX Exemplar<br />

(gem Speicher im Knoten)<br />

o Dressler GIGAmachine<br />

o Fujitsu VPP 300/500<br />

o Intel Paragon<br />

(gem. Speicher im Knoten)<br />

o SGI Power Challenge<br />

o CONVEX Exemplar<br />

(Kanäle zw. Knoten)<br />

o Cray T3D/E<br />

o DEC AdvantageCluster<br />

o Hitachi SR 2001<br />

o IBM SP2<br />

o Intel Paragon<br />

(Kanäle zw. Knoten)<br />

o Maspar MP 2<br />

o NCUBE 3<br />

o NEC SX-4 Cluster<br />

(Kanäle zw. Knoten)<br />

o PARSYS SN9000<br />

o PARSYS TransAlpha9000<br />

o Parsytec Explorer<br />

o Parsytec GC, CC<br />

o SGI Power Challenge Array<br />

(Kanäle zw. Knoten)<br />

o SNI RM 1000<br />

Tabelle 1.1: Physikalische <strong>und</strong> logische Kopplung gebräuchlicher Parallelrechner.<br />

mem Speicher <strong>und</strong> gemeinsamen Variablen zugenommen hat. Letzteres ist insbesondere<br />

dem Symmetric Multiprocessing zuzuschreiben, das zunehmend<br />

verbreitet ist.<br />

Ein Gr<strong>und</strong> <strong>für</strong> die Zunahme dieser Art von <strong>Systeme</strong>n liegt in der Verbreitung<br />

von PVM, MPI, PARMACS, Linda <strong>und</strong> anderen Bibliotheken bzw. Sprachen<br />

als "standardisierte" Programmierschnittstellen auf Botschaftenbasis, die die<br />

Portierbarkeit einer <strong>parallel</strong>en Anwendung auf verschiedenste Plattformen erlaubt<br />

<strong>und</strong> damit Investitionen in der Software-Entwicklung bewahrt.<br />

Bei den hybriden Lösungen haben die botschaftenorientierten Rechner basierend<br />

auf gemeinsamen Speicher ebenfalls zugenommen. Hier ist das Argu-<br />

27


Programmiermodell (Benutzersicht)<br />

gemeinsame Variable<br />

Botschaftenaustausch<br />

K<br />

o<br />

p<br />

p<br />

e<br />

l<br />

m<br />

o<br />

d<br />

e<br />

l<br />

l<br />

g<br />

e<br />

m.<br />

S<br />

p<br />

e<br />

i.<br />

K<br />

a<br />

n<br />

ä<br />

l<br />

e<br />

o Alliant FX/8<br />

o Balance 21000<br />

o Convex C-1 XP<br />

o CRAY 2, 3, X/YMP<br />

o ETA 10<br />

o Encore Multimax<br />

o IBM 3090/400/VF<br />

o Sequent Symmetry<br />

o Tandem NonStop<br />

o Univac 1194/ISPx2<br />

o BBN Butterfly<br />

o Denelcor HEP 1<br />

o KSR 1, 2<br />

o ELXSI 6400<br />

o Flexible /32<br />

o CDC Cyberplus<br />

o FPS T<br />

o Intel iPSC, Delta<br />

o Meiko CS-1<br />

o NCUBE 2<br />

o Parsytec<br />

o Transtech<br />

o TMC CM2, CM5<br />

Tabelle 1.2: Physikalische <strong>und</strong> logische Kopplung früherer Parallelrechner.<br />

ment eines effizienten Programmierstandards (PVM) zusammen mit den geringen<br />

Kosten (Bus!) maßgebend.<br />

Im Vergleich zu früheren <strong>Systeme</strong>n werden heutzutage von verschiedenen<br />

Herstellern beide Programmiermodelle <strong>für</strong> dieselbe Hardware-Plattform angeboten<br />

(z.B. CONVEX, Fujitsu etc.). Dieser Trend wird sich in Zukunft fortsetzen,<br />

da es dem Parallelrechneranwender maximale Flexibilität ermöglicht.<br />

Tabelle 1.3 klassifiziert einige Forschungs<strong>parallel</strong>rechner hinsichtlich deren<br />

Kopplungsweise.<br />

In dieser Liste dominieren bei den Forschungs<strong>parallel</strong>rechnern die kanalgekoppelten<br />

<strong>Systeme</strong> mit gemeinsamen Variablen als Programmiermodell. Auf diesem<br />

Gebiet ist die meiste Entwicklungsarbeit sowohl auf dem Architektursektor<br />

als auch bei den Programmiermodellen zu leisten.<br />

Verbindungstechniken wie der DEC Memory Channel oder das Scalable Coherent<br />

Interface [IEEE92], die diese Kopplungsart unterstützen, haben neuere<br />

Forschungsprojekte auf diesem Sektor beeinflußt. Für SCI beispielsweise existieren<br />

verschiedene Implementierungen in GaAs <strong>und</strong> Silizium seit dem Jahre<br />

1994.<br />

28


Programmiermodell (Benutzersicht)<br />

gemeinsame Variable<br />

Botschaftenaustausch<br />

K<br />

o<br />

p<br />

p<br />

e<br />

l<br />

m<br />

o<br />

d<br />

e<br />

l<br />

l<br />

g<br />

e<br />

m.<br />

S<br />

p<br />

e<br />

i.<br />

K<br />

a<br />

n<br />

ä<br />

l<br />

e<br />

o C.mmp (S.H.Fuller)<br />

o DIRMU (W. Händler)<br />

o Polyp (R. Männer)<br />

o NYU Ultracomputer<br />

(A. Gottlieb)<br />

o Cedar (D.J. Kuck)<br />

o Cenju 3 (NEC)<br />

o DASH (D. Lenoski)<br />

o FLASH (J. Kuskin)<br />

o GF 11 (J. Beetem)<br />

o IBM RP3 (G.F. Pfister)<br />

o PASM (H.J. Siegel)<br />

o MIT *T (D.E. Arvind<br />

o MIT Alewife (A. Agarval)<br />

o C.mmp<br />

o Cenju 3<br />

o Cosmic Cube<br />

o MULTITOP<br />

o IBM RP3<br />

o GMD Manna<br />

o MIT J-Machin<br />

o Mosaic C<br />

(S.H.Fuller)<br />

(NEC)<br />

(C. Seitz)<br />

(H. Richter)<br />

(G.F. Pfister)<br />

(W. Giloi)<br />

(W. Dally)<br />

(C. Seitz)<br />

Tabelle 1.3: Physikalische/logische Kopplung bei einigen Forschungs<strong>parallel</strong>rechnern.<br />

29


2 Gr<strong>und</strong>lagen statischer <strong>und</strong> dynamischer<br />

Netze<br />

2.1 Definition<br />

Das Kennzeichen statischer Netze ist, daß jeder Kommunikationsknoten im<br />

Netz, der ein Prozessor, ein Rechner oder in der Telekommunikation ein Gesprächsteilnehmer<br />

sein kann, fest mit einer kleineren Zahl anderer Kommunikationsknoten<br />

(Prozessoren, Rechner oder Teilnehmer) verb<strong>und</strong>en ist, die als<br />

Nachbarknoten bezeichnet werden. Der Netzwerkzugang erfolgt über spezielle<br />

Anschlüsse (Netzwerkadapter), die über Leitungen zu den Anschlüssen der<br />

Nachbarknoten führen. In einem statischen Netz kann deshalb von jedem Knoten<br />

in einem Schritt mindestens ein Nachbarknoten erreicht werden, weil alle<br />

Knoten einen zusammenhängenden Netzgraphen bilden.<br />

Ein statisches Netzwerk existiert nicht als physikalisch separierbare Einheit,<br />

sondern in Form der Netzwerkanschlüsse <strong>und</strong> deren Verkabelung. Da die Verdrahtung<br />

zwischen zwei miteinander verb<strong>und</strong>enen Kommunikationsknoten<br />

keine zusätzlichen Schaltelemente enthält, gilt <strong>für</strong> statische Netze auch die synonyme<br />

Bezeichnung einstufiges oder direktes Netz.<br />

Wenn in einem statischen Netz ein Datensender <strong>und</strong> der dazu gehörende<br />

Empfänger nicht benachbart sind, erfolgt der Datenaustausch über Zwischenknoten,<br />

die im einfachsten Fall auf dem kürzesten Weg zwischen Sender <strong>und</strong><br />

Empfänger liegen. Typische einstufige Netze sind Ring-, Gitter- oder Hypercube-Topologien,<br />

wie sie in Bild 2.1. zu sehen sind.<br />

Bild 2.1: Ring, Gitter <strong>und</strong> Hypercube als Beispiele statischer Netze.<br />

Dynamische Netze (auch als mehrstufige oder indirekte Netze bezeichnet) bestehen<br />

aus mindestens einem Schaltelement, an dessen Ein- <strong>und</strong> Ausgänge die<br />

Kommunikationsknoten angeschlossen sind. Zählt man den Weg durch das<br />

Schaltelement als einen Transferschritt, dann ist in einem dynamischen Netz jeder<br />

Knoten von jedem anderen aus direkt erreichbar. Das bedeutet, daß in einem<br />

mehrstufigen Netz keine Nachbarschaften existieren, weil alle Prozessoren<br />

30


(Knoten, Teilnehmer) gleich weit voneinander entfernt sind. Die Schaltstufen<br />

sind aus sog. nxn-Schaltern (lies "n-Kreuz-n-Schalter") <strong>für</strong> n = 2, 3, ... <strong>und</strong> deren<br />

Verdrahtung aufgebaut. Die nxn-Schalter werden als Kreuzschalter bezeichnet,<br />

wenn n = 2 ist <strong>und</strong> sie sowohl <strong>parallel</strong> ("=") als auch gekreuzt ("x")<br />

gesetzt werden können (Bild 2.2). Bei dynamischen Netzen sind Kreuzschalter<br />

die am häufigsten verwendeten Schaltertypen.<br />

Bild 2.2: Ein 2x2-Kreuzschalter <strong>und</strong> seine beiden Schaltmöglichkeiten.<br />

Beispiele <strong>für</strong> dynamische Netze sind der Kreuzschienenverteiler sowie das<br />

Clos- <strong>und</strong> das Benes-Netz [Clos53, Benes65], die in Bild 2.3 (von oben nach unten)<br />

dargestellt sind. Der Kreuzschienenverteiler besteht aus einer einzigen<br />

Schaltstufe zwischen Sender <strong>und</strong> Empfänger, das Clos-Netz aus drei Schaltstufen,<br />

<strong>und</strong> das Benes-Netz hat bei N Ein- <strong>und</strong> Ausgängen insgesamt (2log 2<br />

N-1) Stufen.<br />

In Bild 2.3 sind keine Prozessorknoten eingezeichnet; vielmehr geht man bei<br />

der Darstellung dynamischer Netze implizit davon aus, daß die Knoten mit den<br />

Ein- <strong>und</strong> Ausgängen der Netze verb<strong>und</strong>en werden. Die Datenerzeuger <strong>und</strong> -verbraucher<br />

sind bei den dynamischen Netzen im Gegensatz zu den statischen Topologien<br />

an der Übermittlung der Informationen nur indirekt beteiligt.<br />

2.2 Parallelrechnernetze<br />

Im einfachsten Fall eines Parallelrechnernetzes ersetzt man die Bus/Speicherkopplung<br />

der Rechenknoten durch ein statisches oder dynamisches Verbindungsnetzwerk<br />

<strong>und</strong> behält die Knotenarchitektur bis auf die Busschnittstelle<br />

bei. In der Regel werden jedoch zusätzliche architektonische Maßnahmen bei<br />

den Speichern <strong>und</strong> den Netzwerkanschlüssen vorgenommen, die bei einer Bus/<br />

Speicherkopplung nicht notwendig sind. Durch den Übergang vom Bus zum<br />

Verbindungsnetz ergeben sich neue architektonische Möglichkeiten <strong>für</strong> Parallelrechner,<br />

die im folgenden dargestellt werden.<br />

Ein Beispiel einer auf einem Verbindungsnetzwerk beruhenden Parallelrechnerarchitektur<br />

zeigt Bild 2.4. Jeder Prozessor Pi (i = 1,2,...,n) kann gleichzeitig<br />

mit anderen Prozessoren auf je ein Speichermodul Mj, (j = 1,2,...,n) zugreifen.<br />

Kein Prozessor hat jedoch einen eigenen Lokalspeicher. Diese Architektur<br />

wird als eng gekoppeltes Multiprozessorsystem bezeichnet, weil aus der<br />

Sicht jedes Prozessors die Speichermodule wie ein großer, monolithischer Speicher<br />

aussehen.<br />

Werden die Prozessoren durch einfache Rechenwerke ohne Leitwerk ersetzt<br />

<strong>und</strong> die Steuerung der Befehlsausführung einer zentralen Instanz übertragen,<br />

31


.<br />

.<br />

.<br />

. . .<br />

Bild 2.3: Kreuzschienverteiler, Clos- <strong>und</strong> Benes-Netz als Beispiele <strong>für</strong> dynamische Netze.<br />

P1<br />

P2 . . .<br />

Pn<br />

Verbindungs=<br />

netzwerk<br />

M1 M2 . . . Mn<br />

Bild 2.4: Verbindungsnetzwerk <strong>für</strong> ein eng gekoppeltes Multiprozessorsystem.<br />

hat man einen Single Instruction Multiple Data-Rechner (SIMD) vorliegen. Die<br />

in Bild 2.4 gezeigte Architektur wird häufig bei SIMD-Rechnern verwendet.<br />

Ein Vertreter der SIMD-Kategorie ist z.B. der GF11-Rechner von IBM<br />

[Beetem85].<br />

Speziellere SIMD-Rechner stellen die CM2 [Hillis85] von Thinking Maschines<br />

Corporation <strong>und</strong> die MasPar MP1 [MasPar91] dar, die in ihrer<br />

Rechnerarchitektur ein statisches mit einem dynamischen Netz kombinieren.<br />

Ist jedes Rechenwerk mit einem Leitwerk ausgerüstet, so daß mehrere Befehlsströme<br />

gleichzeitig verarbeiten werden können, spricht man von Multiple<br />

Instruction Multiple Data-Rechnern (MIMD). Historische Beispiele <strong>für</strong><br />

MIMD-Maschinen nach Bild 2.4 sind der NYU Ultracomputer [Gottlieb83]<br />

32


<strong>und</strong> der IBM RP3-Rechner [Pfister85]. Modernere MIMDs wie die Cray T3D<br />

[Oed94], IBM SP2 [IBM95], Convex Exemplar [Convex93] oder die SNI<br />

RM1000 sind im Vergleich dazu bedeutend komplexer aufgebaut.<br />

Die Programmiermodelle dieser Maschinen sind entweder gemeinsame Variable,<br />

(NYU Ultracomputer, IBM GF11) oder Botschaftenaustausch (TMC<br />

CM2, Maspar MP1, IBM SP2, SNI RM1000) oder beides (IBM RP3, Cray<br />

T3D/E, Convex Exemplar).<br />

2.2.1 Netze <strong>für</strong> gemeinsamen Speicher<br />

Die Weiterentwicklung der Architektur eng gekoppelter Multiprozessorsysteme<br />

nach Bild 2.4 zielt auf die bessere Handhabbarkeit <strong>und</strong> Unterstützung des<br />

gemeinsamen Speichers ab. Wie bei der Bus/Speicherkopplung kann man<br />

durch den Einbau von Lokalspeichern die gemeinsamen Kommunikationsspeicher<br />

entlasten <strong>und</strong> den Durchsatz erhöhen. Daraus ergibt sich eine Architektur<br />

nach Bild 2.5.<br />

L1<br />

L2<br />

. . .<br />

Ln<br />

P1 P2 . . . Pn<br />

Verbindungs=<br />

netzwerk<br />

M1 M2 . . . Mm<br />

Bild 2.5: Verbindungsnetzwerk <strong>für</strong> eng gekoppelten Multiprozessor mit Lokalspeichern.<br />

Ein Beispiel dieser Architektur ist der Cedar-Rechner [Kuck86], der sowohl einen<br />

lokalen als auch einen globalen Speicher hat. Beim Cedar-Rechner werden<br />

gemeinsame Variable als Programmiermodell verwendet.<br />

Ein weiterer Evolutionsschritt <strong>für</strong> eng gekoppelte Multiprozessorsysteme mit<br />

Lokalspeichern <strong>und</strong> gemeinsamen Variablen besteht darin, die globalen Speichermodule<br />

wegzulassen <strong>und</strong> die Lokalspeicher zusätzlich anderen Prozessoren<br />

zugreifbar zu machen. Diese Architekturen benötigen spezielle Netzwerkanschlüsse,<br />

sog. Ports A i (i = 1,...,n), die den Zugriff auf fremde Lokalspeicher<br />

abwickeln. Das Architekturprinzip ist in Bild 2.6 dargestellt. Ein<br />

Beispiel <strong>für</strong> ein System, das ein mehrstufiges Netz <strong>und</strong> gemeinsam benutzbaren<br />

Speicher verwendet, ist der Bolt Beranek &Newman TC2000 [BBN89].<br />

Bei gemeinsamen Variablen hat jede Speicherzelle der Lokalspeicher eine<br />

rechnerweit eindeutige Adresse, so daß aus der Sicht des Benutzers ein gemeinsamer<br />

Adreßraum entsteht. Der Adreßraum wird so implementiert, daß die<br />

niedrigerwertigen Adreßbits innerhalb eines Lokalspeichers gelten <strong>und</strong> die hö-<br />

33


herwertigen Bits zur Unterscheidung der verschiedenen Lokalspeicher dienen.<br />

Aufgr<strong>und</strong> der Tatsache, daß jedem Prozessor ein räumlich dicht benachbarter<br />

Speicher als Lokalspeicher zugeordnet ist <strong>und</strong> daß ein gemeinsamer Adreßraum<br />

existiert, spricht man von einem <strong>verteilte</strong>n gemeinsamen Speicher (Distributed<br />

Shared Memory).<br />

P1<br />

M1<br />

A1 M1<br />

P2 P1<br />

M2 M1<br />

A2 M1<br />

. . .<br />

B<br />

u<br />

s<br />

Kanal<br />

Verbindungs=<br />

netzwerk<br />

Pn P1<br />

Mn M1<br />

An M1<br />

Bild 2.6: Verbindungsnetzwerk <strong>für</strong> <strong>verteilte</strong>n gemeinsamen Speicher.<br />

Bei Rechnern mit <strong>verteilte</strong>m gemeinsamen Speicher kommt den Netzwerkanschlüssen<br />

eine wichtige Rolle zu. Sie sind da<strong>für</strong> zuständig, selbständig einen<br />

entfernten Speicherzugriff über das Netz durchzuführen, sobald vom Prozessor<br />

eine Adresse ausgegeben wird, die nicht im Lokalspeicher existiert. Dazu<br />

schickt ein Port A i eine Nachricht über das Netz zu einem anderen Port A j , der<br />

lokal zum benötigten Speichermodul ist. Diese Nachricht enthält die Adresse<br />

des gewünschten Elements sowie die Zahl der zu übertragenden Bytes, sofern<br />

es sich um ein Feld von Elementen handelt <strong>und</strong> ein Blocktransfer angefordert<br />

wurde.<br />

In dem Zusammenspiel zweier Netzwerkanschlüsse führt der angesprochene<br />

Port einen von seiner CPU autonomen Speicherzugriff durch <strong>und</strong> schickt das<br />

gewünschte Datum in einer Botschaft verpackt zurück (Bild 2.7). Die geschilderten<br />

Vorgänge laufen <strong>für</strong> beide Prozessoren transparent ab.<br />

Durch die autonom agierenden Ports ist eine Entkopplung von Kommunikation<br />

<strong>und</strong> Rechnung erreicht, da die Rechenknoten währenddessen, daß ein<br />

Datum gelesen oder geschrieben wird, an anderer Stelle im Programm weiter<br />

rechnen oder eine neue Speicherzelle adressieren können. Das letztere wird als<br />

offenstehende Lade/Speichere-Operation (Outstanding Load/Store) bezeichnet<br />

<strong>und</strong> dient dazu, den Durchsatz zu erhöhen. Ein Beispiel der Architektur des <strong>verteilte</strong>n<br />

gemeinsamen Speichers ist der T3D-Rechner [Oed94] der Fa. CRAY.<br />

Die Implementierung von <strong>verteilte</strong>m gemeinsamen Speicher über Kanäle, auf<br />

denen Datenpakete übertragen werden, erlaubt ohne Mehraufwand, daß Benutzer<br />

die Botschaften austauschenden Systemmechanismen <strong>für</strong> ihre Applikationen<br />

mitverwenden <strong>und</strong> ebenfalls Botschaften versenden. Dadurch erhält der<br />

Anwender eines Parallelrechners, der auf <strong>verteilte</strong>m gemeinsamen Speicher basiert,<br />

die Möglichkeit, sowohl Botschaften auszutauschen als auch gemeinsame<br />

Variable zu verwenden.<br />

34


Pi<br />

Ai<br />

Kanal<br />

Netz<br />

Kanal<br />

Aj<br />

Pj<br />

beobachtung<br />

Bus-<br />

Bus-<br />

beobachtung<br />

a)<br />

b)<br />

Leseanforderung<br />

+ Adresse<br />

Speicherinhalt<br />

als Antwort<br />

Schreibanforderung<br />

+ Adresse+Datum<br />

Bestätigung<br />

als Antwort<br />

Bild 2.7: Lesen (a) <strong>und</strong> Schreiben (b) über das Verbindungsnetzwerk.<br />

Der Nachteil, der dem Konzept des <strong>verteilte</strong>n gemeinsamen Speichers anhaftet,<br />

ist, daß im Vergleich zum räumlich konzentrierten Speicher mehr Daten über<br />

das Verbindungsnetzwerk transportiert werden, weil Speicheradressen <strong>und</strong> -inhalte<br />

in Pakete verpackt werden müssen, was einen Mehraufwand (Overhead)<br />

bedeutet. Zusätzlich sind die Netzwerkanschlüsse aufwendiger auszulegen als<br />

bei Architekturen ohne <strong>verteilte</strong>m gemeinsamen Speicher, da sie DMA-Transfers<br />

durchführen müssen.<br />

In einigen Forschungsprojekten wurde das Konzept des <strong>verteilte</strong>n gemeinsamen<br />

Speichers weiterentwickelt. Eine Verbesserung erhält man dadurch, daß<br />

man den gemeinsamen Adreßraum nicht über physikalische, sondern über virtuelle<br />

(logische) Adressen bildet. Voraussetzung da<strong>für</strong> ist, daß die Prozessoren<br />

der Rechenknoten Speicherverwaltungen (MMUs) besitzen, die logische CPU-<br />

Adressen in physikalische Adressen umwandeln. Werden zusätzlich die Netzwerkanschlüsse<br />

durch Kommunikationsprozessoren ersetzt (in Bild 2.8 mit Ki<br />

bezeichnet), spricht man von einem <strong>verteilte</strong>n gemeinsamen Speicher mit virtuellen<br />

Adressen (Distributed Virtual Shared Memory).<br />

Die Verwendung virtueller Adressen zur Etablierung eines gemeinsamen<br />

Adreßraums geht auf Kai Li [Li86] <strong>und</strong> einigen anderen zurück <strong>und</strong> wurde im<br />

Jahre 1986 erstmalig formuliert. In der Originalarbeit von Li wird das Konzept<br />

der virtuellen Adressen mit dem Seitenkonzept verknüpft, das man von der Seitenmigration<br />

(Paging) bei Großrechnern oder Arbeitsplatzrechnern gewohnt<br />

ist.<br />

Li ging von der Vorstellung aus, daß die entfernten Speichermodule analog<br />

zu einem Festplatten-Hintergr<strong>und</strong>speicher anzusehen sind. Entsprechend wird<br />

der virtuelle Adreßraum in Seiten (Pages) eingeteilt <strong>und</strong> bei einem Seitenfehlen<br />

(Page Fault) der benötigte Adreßbereich von einem entfernten Speicher in den<br />

eigenen Lokalspeicher transportiert (Seitenmigration). Nach der Migration<br />

kann die Seite vom entfernten Prozessor nicht mehr modifiziert werden, da sie<br />

35


dort nicht mehr zur Verfügung steht, außer es sind Zusatzmechanismen wie Seitenduplizierung<br />

vorhanden.<br />

P1<br />

M1<br />

M1 K1<br />

Bus<br />

P2 P1<br />

M2 M1<br />

K2 M1<br />

. . .<br />

Kanal<br />

Verbindungs=<br />

netzwerk<br />

Pn P1<br />

Mn M1<br />

Kn M1<br />

Bild 2.8: Verbindungsnetzwerk <strong>für</strong> virtuellen gemeinsamen Speicher.<br />

Die dargestellte Lösung der Koppelung der Rechnerknoten über einen <strong>verteilte</strong>n<br />

gemeinsamen Speicher ist aus Benutzersicht elegant, hat jedoch <strong>für</strong> das<br />

Verbindungsnetzwerk Nachteile:<br />

• Für jede benötigte Variable, die nicht lokal vorhanden ist, muß ein Blocktransfer<br />

von einigen KB Größe (üblich sind 4KB) in Form einer Seitenmigration<br />

angestoßen werden, was das Netz belastet.<br />

• Falls zwei oder mehr Prozessoren dieselbe Variable mehr als einmal lesen<br />

oder schreiben wollen, kommt es zur periodischen Migration der Seite, in der<br />

die Variable alloziert ist. Dies ist von virtuellen Speichersystemen auf sequentiellen<br />

Rechnern als Seitenflattern (Page Thrashing) bekannt. Durch Seitenflattern<br />

wird das Verbindungsnetzwerk schnell bis zur Kapazitätsgrenze<br />

belastet. Um dieses Problem zu lösen, kann man anstelle der Migration eine<br />

Replizierung der Seite durchführen, was zusätzlich eine Konsistenzsicherung<br />

der Kopie erfordert.<br />

• Falls Variablen verschiedener Prozessoren in derselben Seite alloziert sind,<br />

aber nicht gemeinsam benutzt werden, kommt es zu einer unnötigen Seitenmigration<br />

(False Sharing) ähnlich dem Seitenflattern, die dadurch verhindert<br />

werden kann, daß man nicht zusammengehörende Variablen verschiedenen<br />

Seiten zuordnet. Die Verhinderung von False Sharing obliegt entweder dem<br />

Compiler oder dem Benutzer, indem eine korrekte Zuordnung von Variablen<br />

zu Lokalspeichern vorgenommen wird.<br />

Um die dargestellten Probleme zu lösen oder zumindest zu mildern, wurde in<br />

weiteren Forschungsprojekten, wie dem MANNA-Rechner der GMD [Mon92]<br />

<strong>und</strong> den Stanford DASH- <strong>und</strong> FLASH-Maschinen [Lenoski92, Kuskin94], als<br />

kleinste Transfereinheit nicht eine Seite von 4 KB Größe, sondern eine Cache-<br />

Zeile von 128 Byte gewählt. Dadurch sind die Transportzeiten verkürzt <strong>und</strong> so<br />

die "Kosten" <strong>für</strong> ein Seitenfehlen reduziert. Zusätzlich werden lokale Caches<br />

verwendet, die Kopien der Zeilen in Form von 128 Byte großen Cache-Zeilen<br />

enthalten. Hiermit werden Engpässe (Hot Spots), die bei gleichzeitigem Zugriff<br />

36


mehrerer Prozessoren auf dieselbe Variable entstehen, vermieden, weil jeder<br />

Prozessor beim ersten Zugriff auf eine entfernte Variable eine lokale Kopie bekommt.<br />

Allerdings ist dann das Konsistenzproblem verschärft, da jetzt viele<br />

Kopien von Zeilen in den lokalen Caches existieren können.<br />

Für die Netzwerkanschlüsse bedeutet dies eine weitere Steigerung der Komplexität,<br />

da Konsistenzlisten über den Zustand der Cache-Zeilen geführt werden<br />

müssen. Deshalb reichen einfache Netzwerkanschlüsse wie beim Speicher mit<br />

physikalischen Adressen nicht mehr aus, sondern müssen durch spezielle Kommunikationsprozessoren<br />

K i ersetzt werden, die entweder mikroprogrammiert<br />

oder fest verdrahtet sind. Diese führen ein komplexes Protokoll aus, das eine<br />

auf alle K i -Prozessoren <strong>verteilte</strong> Liste <strong>für</strong> das Schreiben <strong>und</strong> Lesen von Seiten<br />

oder Cache-Zeilen aufbaut. Eine zentral gehaltene Liste ist nicht möglich, weil<br />

dies einen Engpaß in der Skalierbarkeit des Rechners darstellen würde.<br />

Zusammenfassend kann gesagt werden, daß es <strong>für</strong> das Verbindungsnetzwerk<br />

einen Unterschied macht, ob es sich um einen <strong>verteilte</strong>n gemeinsamen Speicher<br />

mit physikalischen oder mit logischen Adressen handelt. Bei physikalischen<br />

Adressen ist der Verwaltungsaufwand <strong>und</strong> damit der Datentransfer durch das<br />

Netz kleiner <strong>und</strong> das Netzwerk-Interface einfacher. Bei logischen Adressen ist<br />

der Hardware-Aufwand größer; da<strong>für</strong> kann sich im "eingeschwungenen Zustand"<br />

eines Programms ein "Working Set" häufig benötigter Seiten oder Zeilen<br />

im Lokalspeicher oder Cache bilden, so daß der durch den Benutzer verursachte<br />

Netzverkehr auf einer längeren Zeitskala abnimmt. In beiden Fällen ist der Benutzerverkehr,<br />

der von der <strong>parallel</strong>en Anwendung herrührt, von zusätzlichem<br />

Datenaustausch überlagert, der von den Kommunikationsprozessoren durch die<br />

Abwicklung ihres Protokolls verursacht wird.<br />

Abschließend ist noch festzustellen, daß das Architekturkonzept des <strong>verteilte</strong>n<br />

gemeinsamen Speichers in die Kategorie der NUMA-Architekturen einzuordnen<br />

ist.<br />

2.2.2 Netze <strong>und</strong> Caches<br />

Für die Leistungsfähigkeit eines Verbindungsnetzwerks, das einen <strong>verteilte</strong>n<br />

gemeinsamen Speicher mit virtuellen Adressen <strong>und</strong> Zeilenmigration unterstützt,<br />

sind Größe <strong>und</strong> Art der Caches entscheidend. Im Bewußtsein dieser Tatsache<br />

wurde von der amerikanischen Firma Kendall Square Research eine<br />

Rechnerarchitektur entwickelt, die nur noch aus Caches besteht. Dies wird als<br />

Cache Only Architecture (COMA) bezeichnet. COMA ist eine spezielle Realisierung<br />

einer Virtual Shared Memory NUMA-Maschine. Die Firma KSR hat<br />

diese Idee in die Produkte KSR 1 [KSR92] <strong>und</strong> KSR 2 umgesetzt. Eine typische<br />

COMA-Architektur zeigt Bild 2.9.<br />

Eine ernsthafte Schwierigkeit bei Virtual Shared Memory NUMA- bzw.<br />

COMA-Architekturen stellt die Aufrechterhaltung der systemweiten Cache-<br />

Konsistenz dar. Diese ist im Falle einer Bus/Speicherkopplung kein Problem,<br />

da sie dort bei vertretbarem Aufwand durch Mitverfolgen des Busverkehrs (Bus<br />

Snooping) realisiert werden kann. Bei einem Rechner mit ein- oder mehrstufi-<br />

37


P1<br />

P2 P1<br />

. . .<br />

Pn P1<br />

C1 M1<br />

C2 M1<br />

. . .<br />

Cn M1<br />

K1 M1<br />

K2 M1<br />

. . .<br />

Kn M1<br />

Verbindungs=<br />

netzwerk<br />

Bild 2.9: Verbindungsnetzwerk <strong>für</strong> COMA-Architektur.<br />

gem Verbindungsnetzwerk kann diese Methode nicht mehr angewandt werden,<br />

da es physikalisch viele verschiedene Pfade gibt, so daß eine dezentrale Überwachung<br />

aller Kommunikationskanäle zu aufwendig wird. Ein zentrales Abhören<br />

des Datenverkehrs ist aus Skalierungsgründen ebenfalls nicht möglich. Der<br />

Konsistenzabgleich muß deshalb über <strong>verteilte</strong> Listen (Directories) realisiert<br />

werden, die in den Kommunikationsprozessoren implementiert sind. Deren<br />

Transportmedium ist das Verbindungsnetzwerk, dessen Eigenschaften <strong>für</strong> die<br />

Übertragung von Seiten oder Cache-Zeilen optimiert sein sollten. Dies bedeutet,<br />

daß im Netz Puffer entsprechender Größe (4 -8 KB bzw. 128-256 Byte) vorhanden<br />

sein müssen, falls eine Netzstufe oder der Datenempfänger einer Seite<br />

oder Cache-Zeile vorübergehend nicht aufnahmebereit ist, da sonst Daten verloren<br />

gehen.<br />

2.2.3 Netze <strong>für</strong> Botschaftenaustausch<br />

Botschaftenorientierte, kanalgekoppelte Parallelrechner sind aus rechnerarchitektonischer<br />

Sicht ähnlich den <strong>Systeme</strong>n mit <strong>verteilte</strong>m gemeinsamen<br />

Speicher. Der Unterschied besteht darin, daß bei Botschaften als Programmiermodell<br />

die Adressierung fremder Lokalspeicher entfällt, weshalb die Netzwerkanschlüsse<br />

D i im Vergleich zu den Adaptern A i <strong>und</strong> den Kommunikationsprozessoren<br />

K i eine andere Funktionalität aufweisen. Botschaftenorientierte,<br />

kanalgekoppelte Parallelrechner werden auch als lose gekoppelte Multiprozessorsysteme<br />

bezeichnet. Ein typisches System dieser Art zeigt Bild 2.10.<br />

Beispiele <strong>für</strong> lose gekoppelte Multiprozessorsysteme stellen alle transputerbasierten<br />

Parallelrechner von Firmen wie z.B. Parsytec, Meiko, Transtech<br />

<strong>und</strong> Parsys dar, aber auch eine Reihe anderer <strong>Systeme</strong> wie beispielsweise die<br />

IBM SP2. Im Falle der Transputerrechner sind auf dem Transputerchip (Typ<br />

T9000 oder T805) vier serielle Kommunikationskanäle mit 100 Mb/s Datenrate<br />

pro Kanal <strong>und</strong> Richtung (20 Mb/s bei T805) integriert, die simultan <strong>und</strong> autonom<br />

zum Rechenwerk Daten transferieren können, um überlappende Kommunikation<br />

zu ermöglichen. Darüberhinaus werden Netze <strong>für</strong> Botschaftenaustausch<br />

zur Kopplung von Rechnern eingesetzt, die ein Cluster bilden, wie<br />

z.B. das Server Cluster Modell 8400 von DEC, das den sog. Memory Channel<br />

38


P1<br />

M1<br />

M1<br />

M1 D1<br />

P2 P1<br />

M1<br />

M2<br />

D2 M1<br />

. . .<br />

Kanal<br />

B<br />

u<br />

s<br />

Verbindungs=<br />

netzwerk<br />

Pn P1<br />

Mn M1<br />

Dn M1<br />

Bild 2.10: <strong>Verbindungsnetzwerke</strong> <strong>für</strong> ein lose gekoppeltes Multiprozessorsystem.<br />

verwendet, die NEC SX-4 Cluster, die über einen glasfasergekoppelten Kreuzschienenverteiler<br />

verb<strong>und</strong>en sind, sowie das Power Challenge Array von SGI.<br />

2.2.4 Netzwerkanschlüsse <strong>für</strong> Botschaftenaustausch<br />

Die Hauptunterschiede zwischen den Netzanschlüssen A i der eng gekoppelten<br />

<strong>Systeme</strong> <strong>und</strong> den DMA-Adaptern D i der lose gekoppelten Maschinen liegen in<br />

der Art <strong>und</strong> Weise, wie ein Transfer initiiert wird, wie die Kommunikation zwischen<br />

zwei Anschlüssen D i <strong>und</strong> D j abläuft <strong>und</strong> wie sich die Prozessoren während<br />

des Transfers <strong>und</strong> danach verhalten.<br />

Transfer initiieren<br />

Während A i -Ports selbständig <strong>und</strong> transparent <strong>für</strong> den Prozessor den lokalen<br />

Adreßbus beobachten <strong>und</strong> nicht-lokale Daten lesen bzw. schreiben, werden D i -<br />

Ports explizit vom Benutzer programmiert. Dies geschieht auf Hochsprachenniveau<br />

durch SEND/RECEIVE-Funktionen, die entweder über Prozeduraufrufe<br />

von Kommunikationsbibliotheken oder über spezielle Sprachkonstrukte<br />

abgewickelt werden. Ein Beispiel <strong>für</strong> letzteres sind die<br />

Kommunikationsmittel der Sprachen Ada <strong>und</strong> occam [Pount88].<br />

Kommunikation zwischen Di-Anschlüssen im Vergleich zu Ai-Ports<br />

Ein A i -Port einer Rechnerarchitektur mit gemeinsamen Speicher übermittelt an<br />

einen korrespondierenden Port A j die Art der Kommunikationsanforderung<br />

(Lesen oder Schreiben) <strong>und</strong> die Speicheradresse der Variablen sowie einen Variablenwert,<br />

falls geschrieben werden soll. Der A i -Port erhält im lesenden Fall<br />

vom A j -Port den gewünschten Wert bzw. im schreibenden Fall eine Bestätigung,<br />

daß geschrieben wurde, als Antwort zurück.<br />

Ein D i -Port einer Architektur <strong>für</strong> Botschaftenaustausch schickt im schreibenden<br />

Fall einen Kanalnamen, der als ein Adreßäquivalent aufgefaßt werden<br />

kann, sowie einen oder mehrere Variablenwerte an den korrespondierenden<br />

Anschluß D j <strong>und</strong> erhält <strong>für</strong> jedes Datum eine Bestätigung (Acknowledge) in<br />

39


Form eines Flußsteuerungssignal zurück. Im lesenden Fall sind die Rollen von<br />

D i <strong>und</strong> D j vertauscht.<br />

Ein Netzwerkanschluß D i benötigt in der Regel drei Parameter von der lokalen<br />

CPU, um ein oder mehrere Bytes vom eigenen Lokalspeicher als Botschaft<br />

zu einem korrespondierenden Anschluß D j zu senden:<br />

• einen Zeiger auf den zu übertragenden Speicherbereich bzw. die zu sendende<br />

Variable,<br />

• die Länge des DMA Transfers <strong>und</strong><br />

• einen Zeiger auf den Prozeß, der den Transfer angestoßen hat, um diesem<br />

eine Rückmeldung nach erfolgtem Transfer zu schicken oder ihn erneut der<br />

CPU zur weiteren Bearbeitung zuzuführen.<br />

Entsprechend benötigt der empfangende Anschluß D j einen Zeiger auf den Puffer,<br />

in dem die Botschaft gespeichert werden soll, inklusive einer Längenangabe<br />

sowie einen Zeiger auf den Empfangsprozeß. Zum Botschaftenaustausch<br />

wird ein gemeinsamer Kanalname vereinbart, der <strong>für</strong> beide Prozesse gilt.<br />

Dies kann entweder zur Kompilierungszeit in Form einer Konstanten oder zur<br />

Laufzeit mit Hilfe einer vom jeweiligen Betriebssystem bereitgestellten Socket-<br />

Adresse erfolgen.<br />

Verhalten der Prozessoren<br />

Bei eng gekoppelten <strong>Systeme</strong>n macht sich, wenn man vom Spezialfall offenstehender<br />

Lade/Speichere-Operationen absieht, der Zugriff auf nicht-lokale<br />

Speicher nur durch eine größere Zugriffszeit bemerkbar. Bei lose gekoppelten<br />

<strong>Systeme</strong>n wird in der Regel den kommunizierenden Prozessen während des<br />

Transfers die CPU entzogen <strong>und</strong> anderen Prozessen zugeteilt, weil der eigentliche<br />

Transfer CPU-autark abläuft. Man geht davon aus, daß die Kommunikation<br />

im Vergleich zum Scheduling "teuer" ist, d.h. lang dauert, so daß es sich<br />

lohnt, einem Prozeß die CPU zu entziehen <strong>und</strong> nach erfolgtem Transfer wieder<br />

zuzuteilen.<br />

Ein weiterer Unterschied zwischen D i - <strong>und</strong> A i -Ports besteht darin, daß die<br />

Netzwerkzugänge nicht <strong>für</strong> die Übertragung von Speicheradressen ausgelegt<br />

sein müssen, also 16 - 64 Bit breit sind, sondern daß auch bitserielle Kanäle<br />

(Links) zur Übertragung von Botschaften ausreichen.<br />

Schließlich weisen die D i - gegenüber den A i -Ports die Eigenschaft des Multiplexens<br />

bzw. Demultiplexens von logischen auf physikalische Kanäle auf.<br />

Das Multiplexen mehrerer logischer Kanäle auf einen physikalischen Kanal<br />

wird immer dann notwendig, wenn mehr gleichzeitig kommunizierende Prozesse<br />

oder Prozeßfäden (Threads) auf einem Prozessor existieren, als dieser an<br />

Netzanschlüssen aufweist. Für diesen Fall werden die Botschaften von <strong>und</strong> zu<br />

den Prozessen im Zeitscheibenverfahren auf dem Kanal übertragen (Bild 2.11).<br />

40


Prozessor i<br />

Prozeß<br />

b<br />

Prozeß<br />

a<br />

Prozeß<br />

c<br />

logischer<br />

Kanal 1<br />

log.<br />

Kan. 2<br />

logischer<br />

Kanal 3<br />

Adapter<br />

Di<br />

gemultiplexter<br />

physikalischer<br />

Kanal i->j<br />

Adapter<br />

Dj<br />

logischer<br />

Kanal 1<br />

log.<br />

Kan. 2<br />

logischer<br />

Kanal 3<br />

Prozeß<br />

d<br />

Prozeß<br />

f<br />

Prozessor j<br />

Prozeß<br />

e<br />

Bild 2.11: Die Netzwerkanschlüsse D i als Multiplexer/Demultiplexer von logischen Kanälen.<br />

2.2.5 Synchrone <strong>und</strong> asynchrone Kommunikation<br />

Bei botschaftenorientierten Parallelrechnern kann die Interprozessorkommunikation<br />

entweder synchron oder asynchron zwischen Sender <strong>und</strong> Empfänger<br />

ablaufen. Beim synchronen Verfahren müssen die beiden korrespondierenden<br />

Prozesse, die auf den Prozessoren die Kommunikation ausführen, gleichzeitig<br />

zum Datenaustausch bereit sein. Dies wird als Rendezvous-Verfahren bezeichnet,<br />

da die austauschenden Partner bei der Byteübergabe zeitgleich aktiv<br />

sein müssen, d.h. sie "treffen" zusammen. Ein Datenaustausch entspricht somit<br />

zugleich einer Prozeßsynchronisation.<br />

Bei asynchroner Kommunikation gibt es zwei Fälle. Im ersten Fall kann der<br />

Sender unabhängig vom Empfänger seine Daten in einem Systempuffer des<br />

Empfängers ablegen, aus dem dieser zu einem späteren Zeitpunkt liest. Im<br />

zweiten Fall kann ebenfalls zu einem beliebigen Zeitpunkt gesendet werden,<br />

der Empfangsprozeß wird allerdings mit Hilfe eines Interrupts zum sofortigen<br />

Einlesen <strong>und</strong> Bearbeiten gezwungen. In beiden Fällen wird von den Prozessen<br />

nicht explizit auf das Schreiben oder Lesen einer Nachricht gewartet. Dementsprechend<br />

kann asynchrones Lesen nur dann erfolgreich sein, wenn der Sender<br />

seine Datenübertragung zuvor durchgeführt hat.<br />

Man kann zeigen, daß zwei asynchrone Kommunikationen mit wechselnder<br />

Kommunikationsrichtung eine synchrone Kommunikation funktional ersetzen<br />

können.<br />

2.3 Allgemeine Konstruktionsprinzipien von<br />

Netzwerken<br />

Für <strong>Verbindungsnetzwerke</strong> gibt es neben den Möglichkeiten, die in späteren<br />

Kapiteln noch erläutert werden, vier allgemeine Entwurfsprinzipien, die gr<strong>und</strong>legend<br />

<strong>und</strong> unabhängig von technischen Implementierungen sind. Diese Prinzipien<br />

sind Parallelität, Hierarchie, Modularität <strong>und</strong> Rekursion. Bei Buskopplungen<br />

wurden diese Prinzipien an Einzelbeispielen bereits erläutert, sie<br />

lassen sich jedoch auf alle Netzwerke übertragen.<br />

Die Prinzipien sind sowohl vom theoretischen wie vom praktischen Standpunkt<br />

aus interessant, da sie einerseits die Erzeugung neuer Netzstrukturen er-<br />

41


lauben <strong>und</strong> andererseits die technische Realisierung <strong>und</strong> die Eigenschaften eines<br />

Netzes beeinflussen:<br />

• Parallelgeschaltete Netze bedeuten eine Erhöhung der Bandbreite <strong>und</strong> der<br />

Zuverlässigkeit gegenüber einem Einzelnetz <strong>und</strong> können bei gleichen technischen<br />

Daten die Kosten senken, da sich die Stückzahl erhöht.<br />

• Hierarchisch gekoppelte Netze erlauben, einen Top-Down- oder Bottom-Up-<br />

Entwurf bei der Netzkonstruktion zu machen <strong>und</strong> ermöglichen einen schichtweisen<br />

Aufbau <strong>und</strong> Test, sofern die Hierarchieebenen voneinander separierbar<br />

sind.<br />

• Rekursion bedeutet, daß das Netz hierarchisch gegliedert ist <strong>und</strong>, daß es nach<br />

stets derselben Regel aufgebaut ist, was die Beschreibung des Netzes vereinfacht.<br />

• Modularität heißt, daß es im Netz eine (kleine) Anzahl verschiedener Modultypen<br />

gibt, die in Stückzahl produziert werden <strong>und</strong> so die Kosten senken.<br />

Darüber hinaus machen Module ein Netz skalierbar, wenn sie beliebig<br />

anreihbar sind.<br />

2.3.1 Parallelität<br />

In Bild 2.12 ist die Parallelschaltung mehrerer Netzwerke, die im Allgemeinfall<br />

auch inhomogen sein können, dargestellt. Dabei ist jedes Netz über bestimmte<br />

Ports an die Rechenknoten gemäß dem Schema "verbinde Port i am Knoten j<br />

mit Netz i" angeschlossen.<br />

P1<br />

P2 . . .<br />

Pn<br />

Verbindungs=<br />

netzwerke<br />

Bild 2.12: Parallelschaltung mehrerer <strong>Verbindungsnetzwerke</strong>.<br />

Genau wie bei Bussen bewirkt eine Parallelschaltung von m voneinander unabhängigen<br />

Netzen sowohl eine Bandbreiteerhöhung um das m-fache als auch<br />

eine erhöhte Fehlertoleranz. Bis zu (m-1) defekte Netze können von den Prozessorknoten<br />

toleriert werden. Darüber hinaus ist die Parallelschaltung von<br />

Netzen <strong>für</strong> den Fall die kostengünstigste Lösung, daß jeder Rechenknoten über<br />

mehr als einen Port an ein Netz angeschlossen werden soll. Wenn z.B. n Knoten<br />

gegeben sind, von denen jeder m Ports aufweist, die alle an ein (großes) Netz<br />

anzuschließen sind, müssen <strong>für</strong> ein Netz logarithmischer Komplexität von mn<br />

Eingängen O(mn*log(mn)) Schalter aufgewendet werden, während <strong>für</strong> m klei-<br />

42


nere Netze mit je n Eingängen nur O(m*nlogn) Schalter nötig sind. Die erzielte<br />

Einsparung kann beträchtlich sein <strong>und</strong> resultiert letztlich daraus, daß bei dem<br />

mn-Netz die m Ports eines Knotens mit sich selbst verb<strong>und</strong>en werden können,<br />

was in der Regel unnötig ist.<br />

Ein Beispiel <strong>für</strong> Parallelität zeigt Bild 2.13. Hier ist die Verbindungsstruktur<br />

eines 3-dimensionalen Gitters aus <strong>parallel</strong>geschalteten 2-dimensionalen Gittern<br />

aufgebaut, wobei der Übergang von einer Gitterebene zur nächsten in den Knoten<br />

stattfindet. Weitere Beispiele sind <strong>parallel</strong>geschaltete Kreuzschienenverteiler<br />

oder <strong>parallel</strong>geschaltete Kanäle innerhalb eines ein- oder mehrstufigen<br />

Netzes. Letztere werden auch als dilatierte Netze bezeichnet [Upfal89].<br />

Bild 2.13: Parallelschaltung von 2-D Gittern zu einem 3-D Gitter.<br />

2.3.2 Hierarchie<br />

Hierarchische Netze findet man überall dort, wo die Kommunikation der<br />

Netzteilnehmer einer gewissen Lokalität gehorcht. Dies ist z.B. bei allen Telefonsystemen<br />

der Welt der Fall, da Ortsgespräche häufiger als Ferngespräche<br />

geführt werden. Auch <strong>parallel</strong>e Programme weisen häufig eine Datenlokalität<br />

auf, die sich in einer hierarchischen Architektur des Parallelrechners, der diese<br />

Programme ausführt, widerspiegeln kann.<br />

Netzteilnehmer (Knoten) sind dann benachbart, wenn sie in derselben Hierarchieebene<br />

angeschlossen sind. Die Überquerung einer oder mehrerer Hierarchieebenen<br />

kostet Zeit, so daß der Zugriff auf Nachbarn derselben Hierachiestufe<br />

schneller abgewickelt werden kann als die Kommunikation mit entfernten<br />

Knoten, was genau der Datenlokalität entspricht. Die CM5 von Thinking Machines<br />

Corp. oder der MANNA-Rechner der GMD [Mon92] sind Implementierungen<br />

von Parallelrechnern mit hierarchischen Netzen.<br />

Ein Beispiel einer Netzhierarchie ist in Bild 2.14 <strong>für</strong> den Fall von 2 Hierarchieebenen<br />

gezeigt. Von einem Hauptnetz ausgehend verzweigen sich baumartig<br />

vier Subnetze. Das Prinzip läßt sich auf beliebig viele Ebenen ausdehnen<br />

Ein anderes Beispiel zeigt das Verbindungsnetzwerk eines MANNA-Rechners<br />

mit 192 Prozessoren (Bild 2.15), dessen Hierarchieebenen nicht baumartig,<br />

sondern voll vermascht miteinander verb<strong>und</strong>en sind.<br />

In der Ebene 2 der Manna-Archiektur werden 4 von den 16 Ein-/Ausgängen jedes<br />

Kreuzschienenverteilers <strong>für</strong> die Verbindung zu Ebene 1 verwendet, die verbleibenden<br />

12 dienen zur Ankopplung der Rechenknoten.<br />

Insgesamt kann man aus einer vielstufigen Netzhierarchie ein fein abgestuftes<br />

System verschiedener Zugriffsgeschwindigkeiten erhalten, das eine fle-<br />

43


P1<br />

P2<br />

. . .<br />

Pn<br />

P1<br />

P2 . . .<br />

Pn<br />

P1<br />

Subnetz<br />

P2<br />

. . .<br />

Subnetz<br />

Pn<br />

H<br />

a<br />

u<br />

p<br />

t<br />

n<br />

e<br />

t<br />

z<br />

P1<br />

Subnetz<br />

P2 . . .<br />

Subnetz<br />

Pn<br />

Bild 2.14: Baumartige Hierarchie von Netzen.<br />

1 2 3 4<br />

16x16 16x16 16x16 16x16<br />

Ebene 1 aus<br />

Kreuzschienenverteilern<br />

16x16<br />

...<br />

1 2 12<br />

16x16<br />

...<br />

1 2 12<br />

16x16<br />

...<br />

1 2 12<br />

. . .<br />

. . .<br />

16x16<br />

...<br />

1 2 12<br />

1 2 3 16<br />

Bild 2.15: Vermaschte Hierarchie aus Kreuzschienenverteilern.<br />

Ebene 2 aus<br />

Kreuzschienenverteilern<br />

Rechenknoten<br />

xible Zuordnung von Prozessen zu Prozessoren gemäß den Bandbreiteanforderungen<br />

der Anwendung ermöglicht.<br />

2.3.3 Rekursion<br />

Rekursiv aufgebaute Netze bestehen aus einer gegebenen Gr<strong>und</strong>struktur wie<br />

z.B. einem Ring oder einem Stern, die vielfach ineinandergeschachtelt im Sinne<br />

einer Selbstähnlichkeit repliziert wird. In Bild 2.16 sind Beispiele rekursiver<br />

Netze gezeigt, die jeweils zwei Rekursionsstufen umfassen.<br />

2.3.4 Modularität<br />

Ein modularer Aufbau ist gr<strong>und</strong>sätzlich in allen Gebieten der Technik wünschenswert,<br />

weil dadurch der Entwurf, die Realisierung <strong>und</strong> der Test von <strong>Systeme</strong>n<br />

vereinfacht wird. Bei <strong>Verbindungsnetzwerke</strong>n genügt es oft, ein einziges<br />

Modul, das wiederum ein Netz sein kann, vielfach zu replizieren, um daraus ein<br />

Netzwerk "nach Maß" zu erhalten.<br />

Modularität wird oftmals gleichzeitig mit den Konstruktionsprinzipien Rekursion<br />

<strong>und</strong>/oder Hierarchie eingesetzt. In Bild 2.17 ist beispielsweise ein 2-di-<br />

44


a) b)<br />

Bild 2.16: Rekursiv aufgebauter Ring (a) bzw. Stern (b).<br />

mensionaler Kreuzschienenverteiler gezeigt, der aus mehreren typgleichen Modulen<br />

aufgebaut ist. Jedes Modul kann wiederum ein 2-dimensionaler Kreuzschienenverteiler<br />

sein oder auch ein anderes Netz z.B. vom Benes- [Benes62]<br />

oder Clos-Typ [Clos53], so daß sich optional ein rekursiver bzw. hierarchischer<br />

Aufbau ergibt.<br />

Weiterhin ist es möglich, daß in einem Netz mehrere Modultypen in verschiedener<br />

Zahl existieren, die ihrerseits <strong>parallel</strong>geschaltet <strong>und</strong>/oder rekursiv oder<br />

hierarchisch gegliedert sein können, wodurch sich eine außerordentliche Vielfalt<br />

von Konfigurationsmöglichkeiten ergibt. Dies spiegelt die gleichzeitigen<br />

Anwendung aller vier Konstruktionsprinzipen wider.<br />

P1<br />

P2 . . .<br />

Pm<br />

Pn<br />

Po<br />

. . .<br />

Pz<br />

Bild 2.17: Kreuzschienenverteiler aus Subnetzen.<br />

Ein gutes Beispiel der potentiellen Mannigfaltigkeit, die Netzen innewohnt, ist<br />

das Internet, das aus vielen lokalen Netzen (WANs, MANs <strong>und</strong> LANs) aufgebaut<br />

ist, die ihrerseits modular, <strong>parallel</strong>, hierarchisch, rekursiv oder unstrukturiert<br />

sein können.<br />

Eine graphische Darstellung eines solchen allgemeinen Netzes ist exemplarisch<br />

in Bild 2.18 wiedergegeben. In diesem Bild sind die Elemente P 1 -P 5 keine<br />

Rechenknoten, sondern Cluster von Prozessoren, zwischen denen Subnetze<br />

verschiedener Topologie aufgespannt werden.<br />

Irreguläre Strukturen werden i.a. nicht als <strong>Verbindungsnetzwerke</strong> <strong>für</strong> Parallelrechner<br />

verwendet, da sie aufgr<strong>und</strong> ihrer amorphen Gestalt eine hohe Routing-<br />

Komplexität aufweisen. Bei lokalen <strong>und</strong> globalen Netzen der Telekommunika-<br />

45


P1<br />

P5<br />

P2<br />

P4<br />

P3<br />

Bild 2.18: Allgemeines Netz bestehend aus Subnetzen <strong>und</strong> Prozessor-Clustern P1-P4.<br />

tion <strong>und</strong> bei Rechnernetzen sind amorphe Strukturen dagegen die Regel. Deshalb<br />

kann in diesen Fällen kein fester Routing-Algorithmus <strong>für</strong> die Wegewahl<br />

existieren. Vielmehr beruht der Informationstransfer auf Routing-Tabellen, deren<br />

Einträge die Vernetzung mit den jeweiligen Nachbarknoten eines Routers<br />

oder Gateways dokumentieren.<br />

2.4 Verbindungstypen<br />

Neben der formalen Darstellung von <strong>Verbindungsnetzwerke</strong>n <strong>und</strong> ihren gr<strong>und</strong>legenden<br />

Konstruktionsmöglichkeiten ist die Unterscheidung der in einem Netz<br />

auftretenden Verbindungstypen <strong>und</strong> die Berechnung ihrer Anzahl von Bedeutung.<br />

Im folgenden soll deshalb ein allgemeines Netz hinsichtlich dieser Kriterien<br />

untersucht werden.<br />

Gegeben sei ein Verbindungsnetzwerk V gemäß Bild 2.19 mit n∈N daran angeschlossenen<br />

Teilnehmern T 1 - T n , die Rechner oder Knoten eines Rechners<br />

sein können, wie sie in lokalen Netzen oder in Netzen <strong>für</strong> Parallelrechner eingesetzt<br />

werden.<br />

T2<br />

T1<br />

V<br />

Tn<br />

Tn-1<br />

T 3<br />

. . .<br />

Bild 2.19: Allgemeines Verbindungsnetzwerk zwischen Teilnehmern.<br />

In V lassen sich verschiedene Verbindungstypen <strong>für</strong> die n gegebenen Netzzugänge<br />

(Ports) unterscheiden. Die bekanntesten Verbindungstypen sind die<br />

Punkt-zu-Punkt-, Broadcast- <strong>und</strong> Multicast-Verbindung, bei denen entweder<br />

einer an einen, einer an alle oder einer an viele Daten sendet. Die Multi-/Broadcast-Funktionen<br />

dienen nicht nur dem reinen Datenaustausch, sondern erlauben<br />

46


auch Prozeßsynchronisation, z.B. um den Start einer <strong>parallel</strong>en Schleife, die dezentral<br />

abgearbeitet wird, von einer zentralen Stelle aus anzustoßen. Daneben<br />

gibt es eine Reihe weiterer Kommunikationsformen, die in der Reihenfolge ihres<br />

Auftretens weniger häufig sind. Dazu zählen der allgemeine Multi-/Broadcast,<br />

der personalisierte Multi-/Broadcast, die Kombination aus beiden sowie<br />

deren Inversionen, die hauptsächlich bei der <strong>parallel</strong>en Programmierung Bedeutung<br />

haben <strong>und</strong> in Kommunikationsbibliotheken wie PVM <strong>und</strong> MPI Berücksichtigung<br />

finden.<br />

Allgemeiner Multi-/Broadcast<br />

Beim allgemeinen Broadcast schicken alle an das Netz angeschlossenen Sender<br />

ihre Daten gleichzeitig an alle Empfänger, so daß am Ende jeder über die Daten<br />

der anderen verfügt. Bei der Verallgemeinerung, dem allgemeinen Multicast<br />

(viele an viele), kann der Teilnehmerkreis gezielt ausgewählt werden. Die allgemeinen<br />

Multi-/Broadcast-Funktionen sind wie der normale Broad-/Multicast<br />

zum globalen Datenaustausch <strong>und</strong> zur Prozeßsynchronisation geeignet, beispielsweise,<br />

um am Ende einer Iterationsschleife die Ergebnisse aller Prozessoren<br />

schnell <strong>und</strong> ohne Zuhilfenahme einer zentralen Instanz auszutauschen.<br />

Personalisierter Multi-/Broadcast<br />

Bei diesem Verbindungstyp wird von einem Sender nicht ein Skalar, sondern<br />

ein Vektor von Daten an die übrigen Rechenknoten bzw. einer Teilmenge davon<br />

übermittelt, wobei jeder Empfänger ein bestimmtes Vektorelement erhält<br />

(einer an viele oder einer an alle). Anwendungen dieses Typs treten u.a. bei <strong>parallel</strong>isierten<br />

numerischen Verfahren der linearen Algebra auf.<br />

Allgemeiner personalisierter Multi-/Broadcast<br />

Die Kombination der beiden zuvor erläuterten Verbindungstypen entspricht der<br />

gleichzeitigen Verbreitung von Datenvektoren nach dem alle an alle- bzw. viele<br />

an viele-Schema. Wiederum ist es so, daß dezentral jeder mit Information von<br />

jedem anderen versorgt wird, wobei die Datentransfers überlappend ausgeführt<br />

werden können, so daß nicht mehr Zeit als in der einer an viele-Variante verbraucht<br />

wird.<br />

Die aufgeführten Verbindungstypen erlauben, den Informationsfluß umzukehren.<br />

Dabei bedeutet eine Richtungsumkehr im Falle der Punkt-zu-Punkt-<br />

Verbindung, daß bidirektional Daten ausgetauscht werden, während beim inversen<br />

Multi-/Broadcast Datenreduktionsoperationen ausgeführt werden.<br />

Die inversen Operationen der speziellen Verbindungstypen sind folgendermaßen<br />

definiert:<br />

47


Inverser Multi-/Broadcast<br />

Damit bezeichnet man eine Kommunikationsform, bei der viele oder alle Sender<br />

gleichzeitig ihre Daten an einen einzigen Empfänger schicken, der die Daten<br />

seinerseits z.B. zu Protokollzwecken sammelt oder eine Datenreduktion damit<br />

durchführt. Reduktionsoperationen treten in der Parallelverarbeitung<br />

beispielsweise dann auf, wenn eine globale Summe oder das Maximum oder<br />

Minimum aus einer Reihe von Werten berechnet werden soll, die auf mehreren<br />

Rechnern oder Rechenknoten verteilt sind. Der inverse Multi-/Broadcast kann<br />

auch zur Prozeß- oder Rechnersynchronisation verwendet werden, um z.B. das<br />

Ende einer <strong>parallel</strong>en Schleife oder sonstigen <strong>verteilte</strong>n Operation einem übergeordneten<br />

Prozessor mitzuteilen. Dazu schickt jeder Teilnehmer sein Ready-<br />

Bit an den Master, der anhand einer UND-Verknüpfung erkennt, wann alle Prozesse<br />

terminiert haben.<br />

Inverser allgemeiner Multi-/Broadcast<br />

Dies ist die Vereinigung eines inversen Multi-/Broadcasts <strong>und</strong> eines daran anschließenden<br />

(normalen) Multi-/Broadcasts zu einer einzigen Operation. Sein<br />

Sinn liegt darin, durch Überlappung der einzelnen Transfers Zeit im Vergleich<br />

zur sequentiellen Ausführung zu sparen. Eine Anwendung der Operation ist<br />

wiederum bei der Prozeßsynchronisation gegeben, um beispielsweise die Terminierung<br />

einer <strong>verteilte</strong>n Operation zentral zu erkennen <strong>und</strong> allen Prozessoren<br />

in einem Schritt mitzuteilen.<br />

Wenn in einem anderen Beispiel ein Prozessor beim <strong>parallel</strong>en Durchsuchen<br />

einer Datenbank den benötigten Eintrag gef<strong>und</strong>en hat, müssen alle anderen Prozessoren/Prozesse<br />

davon unterrichtet werden <strong>und</strong> ihre Suche stoppen. Diese<br />

Funktion kann ebenfalls mit dem inversen, allgemeinen Multi-/Broadcast effizient<br />

implementiert werden.<br />

Inverser personalisierter Multi-/Broadcast<br />

Beim inversen personalisierten Multi-/Broadcast werden die Daten, die die Rechenknoten<br />

an einen Master schicken, in den Elementen eines Vektors abgespeichert.<br />

Der Resultatvektor kann anschließend z.B. mit Hilfe eines Vektorrechenwerks<br />

weiterverarbeitet werden. Der inverse, personalisierte Multi-/<br />

Broadcast ist eine Verallgemeinerung des inversen Multi-/Broadcast, weil nicht<br />

ein Skalar, sondern ein Vektor erzeugt wird.<br />

Inverser allgemeiner <strong>und</strong> personalisierter Multi-/Broadcast<br />

Hier werden gleichzeitig von allen Sendern Vektorelemente zu allen Empfängern<br />

geschickt, um einen globalen Datenaustausch durchzuführen. Dies stellt<br />

die Zusammenfassung eines inversen, personalisierten Multi-/Broadcasts <strong>und</strong><br />

48


eines normalen Multi-/Broadcasts zu einer einzigen Operation dar, die gegenüber<br />

einer Ausführung in zwei Einzeloperationen Zeit spart.<br />

Schließlich ist der Spezialfall der sog. Konferenzschaltung zu erwähnen, bei<br />

dem innerhalb eines festgelegten Teilnehmerkreises nacheinander Multicasts in<br />

der Art "einer-an-viele, einer-an-viele, ..." usw. stattfinden, wobei die Zahl der<br />

Multicasts von vorneherein nicht feststeht. Die Konferenzschaltung ist dem allgemeinen<br />

Multicast vergleichbar, wobei hier die Multicast-Verbindungen<br />

nacheinander ausgeführt werden. Konferenzschaltungen haben weniger in der<br />

<strong>parallel</strong>en Programmierung als in der Telekommunikation eine Bedeutung. Sowohl<br />

dort als auch bei lokalen <strong>und</strong> globalen Datennetzen sind Konferenzschaltungen<br />

notwendige Voraussetzung <strong>für</strong> die sog. Telekooperation, bei der räumlich<br />

getrennte Mitglieder eines Teams gemeinsam ein Projekt bearbeiten.<br />

Im Bild 2.20 sind anhand des Datums a bzw. b, das einem Prozessor 1 bzw.<br />

2 zugeordnet ist, die Wirkungen der wichtigsten Verbindungstypen aufgelistet.<br />

Die Darstellung unterscheidet die beiden Zustände "vorher" <strong>und</strong> "nachher" <strong>und</strong><br />

im inversen Multi/Broadcast-Fall zusätzlich die Datenfeldelemente a,b,...z, um<br />

die Funktionsweise der Verbindungstypen zu erläutern. R(a, b,...,z) stellt einen<br />

Reduktionsoperator dar.<br />

In Bild 2.21 sind die Funktionen der anderen Verbindungstypen dargestellt.<br />

Wiederum wird zur Erläuterung die Wirkung auf ein auf mehrere Prozesssoren<br />

<strong>verteilte</strong>s Datenfeld gezeigt. Im Zustand "vorher" ist je ein Datenelement einem<br />

Prozessor zugeordnet. V(a,b,...,z) ist ein Datenvektor <strong>für</strong> Prozessor 1.<br />

Bild 2.22 schließlich zeigt den Fall des personalisierten Multi/Broadcast sowie<br />

dessen Umkehrung, die beide zum gleichzeitigen Austausch von Vektoren<br />

dienen.<br />

2.4.1 Zahl der Verbindungen<br />

Die gezeigten Verbindungstypen sind eine qualitative Darstellung aller in einem<br />

Netz möglichen Kommunikationsformen. Im nächsten Schritt geht es um<br />

deren quantitativer Erfassung.<br />

Die Zahl der Verbindungen, die in einem Netzwerk realisiert werden können,<br />

gibt Auskunft über die Blockierungsfreiheit des Netzes. Ein blockierungsfreies<br />

Netz kann bei n Ein- <strong>und</strong> Ausgängen alle potentiell möglichen n! Verbindungen<br />

realisieren. Bei der Berechnung der Zahl der Verbindungen muß man unterscheiden,<br />

ob jede Verbindung <strong>für</strong> sich betrachtet werden soll oder ob die Kombinationen<br />

der Verbindungen von Interesse ist. Im letzteren Fall muß berücksichtigt<br />

werden, wer mit wem kommuniziert, während im ersten Fall nur die<br />

Zahl der Möglichkeiten wichtig ist, die sich pro Einzelverbindung ergeben.<br />

Im folgenden werden <strong>für</strong> die am häufigsten vorkommenden Kommunikationsformen<br />

von Punkt-zu-Punkt, Multicast- <strong>und</strong> inverser Multicast-Verbindung<br />

die Maximalzahl von Verbindungen berechnet, die in einem Netz vorkommen<br />

können. Die Berechnung erfolgt sowohl durch Summation als auch<br />

durch Multiplikation der Verbindungen, um die Zahl der Einzelmöglichkeiten<br />

<strong>und</strong> deren Kombinationen angeben zu können.<br />

49


Bezeichnung<br />

Typ<br />

Vorher<br />

Nachher<br />

Punkt-zu-Punkt<br />

Verbindung<br />

1 2<br />

lokale Daten<br />

Prozessor 1 a<br />

Prozessor 2<br />

Prozessor 3<br />

. . .<br />

...<br />

Prozessor n<br />

a<br />

a<br />

. . .<br />

Inverse<br />

Punkt-zu-Punkt<br />

Verbindung<br />

1 2<br />

b<br />

b<br />

b<br />

. . . . . .<br />

Multi/Broadcast<br />

Verbindung<br />

1<br />

2<br />

3<br />

...<br />

n<br />

1<br />

2<br />

3<br />

...<br />

n<br />

a<br />

a<br />

a<br />

a<br />

. . . . . .<br />

a<br />

Inverse<br />

Multi/Broadcast<br />

Verbindung<br />

1<br />

2<br />

3<br />

...<br />

n<br />

1<br />

2<br />

3<br />

...<br />

n<br />

a<br />

b<br />

c<br />

z<br />

. . .<br />

R =Reduktion<br />

R (a,b,c,...,z)<br />

b<br />

c<br />

. . .<br />

z<br />

Bild 2.20: Die Wirkung von Punkt-zu-Punkt-, Multi-/Broadcast-Verbindungen <strong>und</strong> ihre inversen<br />

Funktionen.<br />

Punkt-zu-Punkt-Verbindungen<br />

Hierbei ist jeder Sender mit genau einem Empfänger verb<strong>und</strong>en, so daß eine<br />

umkehrbar eindeutige Zuordnung von Sendern zu Empfängern besteht. Für den<br />

Sender, der als erstes in das Netz Daten einspeist, hat man potentiell e = s<br />

Empfänger zur Auswahl, <strong>für</strong> den zweiten Sender verbleiben noch e = (s-1)<br />

Empfänger, <strong>für</strong> den 3. Sender noch e = (s-2) Empfänger usw., so daß bei s<br />

gleichzeitig aktiven Verbindungen K Kombinationen von Verbindungen möglich<br />

sind. Die Zahl K berechnet sich zu:<br />

Gl. 2.1:<br />

K = s⋅ ( s – 1) ⋅ … ⋅ 1 = s! = e! , (s=e Verb. gleichzeitig).<br />

Möchte man nur die Summe S der Möglichkeiten der Einzelverbindungen wissen,<br />

hat man:<br />

50


Bezeichnung<br />

Typ<br />

Vorher<br />

Nachher<br />

allgemeine<br />

Multi/Broadcast<br />

Verbindung<br />

1<br />

2<br />

3<br />

...<br />

n<br />

1<br />

2<br />

3<br />

...<br />

n<br />

a<br />

b<br />

c<br />

z<br />

a b c z<br />

a b c z<br />

. . .<br />

a b c z<br />

. . .<br />

a b c z<br />

Inverse,<br />

allgemeine<br />

Multi/Broadcast<br />

Verbindung<br />

1<br />

2<br />

3<br />

...<br />

n<br />

1<br />

2<br />

3<br />

...<br />

n<br />

a<br />

b<br />

c<br />

z<br />

R1(a,b,...,z)<br />

R2(a,b,...,z)<br />

R3(a,b,...,z)<br />

. . . . . .<br />

Rn(a,b,...,z)<br />

R=Reduktion<br />

Personalisierte<br />

Multi/Broadcast<br />

Verbindung<br />

1<br />

2<br />

3<br />

...<br />

n<br />

1<br />

2<br />

3<br />

...<br />

n<br />

V(a,b,c,...,z)<br />

a<br />

. . .<br />

b<br />

c<br />

z<br />

. . .<br />

V=Vektor<br />

Inverse,<br />

personalisierte<br />

Multi/Broadcast<br />

Verbindung<br />

1<br />

2<br />

3<br />

...<br />

n<br />

1<br />

2<br />

3<br />

...<br />

n<br />

a<br />

b<br />

c<br />

z<br />

. . .<br />

V(a,b,c,...,z)<br />

b<br />

c<br />

. . .<br />

z<br />

Bild 2.21: Wirkung der allgemeinen Multi-/Broadcast-, personalisierten Multi-/Broadcast-<br />

Verbindung <strong>und</strong> ihrer inversen Abbildungen.<br />

Bezeichnung<br />

Typ<br />

Vorher<br />

Nachher<br />

Allgemeine,<br />

personalisierte<br />

Multi/Broadcast<br />

Verbindung<br />

1<br />

2<br />

3<br />

...<br />

n<br />

1<br />

2<br />

3<br />

...<br />

n<br />

V(a,b,c,...,z)<br />

V(a',b',c',...,z')<br />

V(a'',b'',c'',...,z'')<br />

. . .<br />

(n)<br />

V(a ,b<br />

(n) (n)<br />

,...,z )<br />

a<br />

b<br />

c<br />

z<br />

a'<br />

b'<br />

c'<br />

a''<br />

b''<br />

c''<br />

...<br />

...<br />

...<br />

z' z'' ...<br />

a<br />

(n)<br />

b (n)<br />

c (n)<br />

z (n)<br />

Inverse,<br />

allgemeine,<br />

personalisierte<br />

Multi/Broadcast<br />

Verbindung<br />

1<br />

2<br />

3<br />

...<br />

n<br />

1<br />

2<br />

3<br />

...<br />

n<br />

a<br />

b<br />

c<br />

z<br />

V (a,b,...,z)<br />

V (a,b,...,z)<br />

V (a,b,...,z)<br />

. . . . . .<br />

V (a,b,...,z)<br />

V=Vektor<br />

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

51


Gl. 2.2:<br />

1<br />

S = s+ ( s–<br />

1) + … + 1 = --s⋅<br />

( s + 1)<br />

=<br />

2<br />

1<br />

--e ⋅ ( e + 1)<br />

2<br />

Wiederum können gleichzeitig s = e Verbindungen gleichzeitig aktiv sein.<br />

Normaler Multicast<br />

In diesem Fall ist jeder der gegebenen s aktiven Sender mit einem der e Empfänger<br />

( s, e ≤ n ) verb<strong>und</strong>en, wobei ein Empfänger genau einem Sender, jeder<br />

Sender aber mehreren Empfänger zugeordnet sein kann. Das heißt, daß nur bei<br />

der Abbildung von Empfängern zu Sendern eine eindeutige Beziehung gegeben<br />

ist.<br />

Da jeder Empfänger maximal s Sender zur Auswahl hat, mit denen er potentiell<br />

verb<strong>und</strong>en sein kann, gibt es höchstens s e Kombinationen von Verbindungen,<br />

von denen e in einem Netz gleichzeitig existieren können. Die tatsächliche<br />

Zahl von Verbindungen ist kleiner als s e , weil nicht berücksichtigt wurde,<br />

daß je zwei Empfänger nur dann denselben Sender haben, wenn sie zum selben<br />

Multicast gehören. Die Auswahl an Sendern ist deshalb <strong>für</strong> jeden Empfänger<br />

kleiner als s, sobald mehr als ein Multicast im Netz existiert (s>1).<br />

Die Berechnung der exakten Zahl von Kombinationsmöglichkeiten ist aufwendig<br />

<strong>und</strong> wird erst im nächsten Kapitel vorgenommen. An dieser Stelle beschränken<br />

wir uns auf die Angabe der Obergrenzen <strong>für</strong> die Zahl K der Kombinationen.<br />

K beträgt höchstens:<br />

Gl. 2.3:<br />

K < s e , (s>1 bei e>1 gleichzeitigen Verb.)<br />

Die Obergrenze <strong>für</strong> die Summe S der Einzelmöglichkeiten berechnet sich zu:<br />

e-mal<br />

Gl. 2.4:<br />

S = s+ s + … + s = e ⋅ s, ( s>1,e>1 gleichzeitige Verb.)<br />

⎫ ⎪<br />

⎪<br />

⎬<br />

⎪<br />

⎪<br />

⎭<br />

Inverser Multicast<br />

Beim inversen Multicast ist eine eindeutige Zuordnung bei der Abbildung von<br />

Sendern zu Empfängern gegeben, weil jeder Sender genau einem Empfänger<br />

zugeordnet ist, während ein Empfänger mit mehreren Sendern verb<strong>und</strong>en sein<br />

kann. Die Obergrenze <strong>für</strong> die Zahl der Kombinationen berechnet sich gemäß<br />

Gl. 2.5 in analoger Weise wie beim Multicast-Fall. Für die Summe der Einzelmöglichkeiten<br />

gilt Gl. 2.6. Man erhält diese Gleichungen alternativ dadurch,<br />

daß man in Gl. 2.3 <strong>und</strong> Gl. 2.4 die Rollen von Sender <strong>und</strong> Empfänger vertauscht.<br />

Gl. 2.5:<br />

K < e s , (e>1, s>1 gleichzeitige Verb.)<br />

52


s – mal<br />

Gl. 2.6:<br />

S < e + e + … + e = s⋅<br />

e<br />

⎫ ⎪<br />

⎪<br />

⎬<br />

⎪<br />

⎪<br />

⎭<br />

2.4.2 Gesamtzahl der Verbindungen<br />

In vielen Fällen möchte man die Gesamtzahl der Verbindungen wissen, die ein<br />

Netz realisieren kann, <strong>und</strong> nicht nur die Zahl der Punkt-zu-Punkt-, Multicast<strong>und</strong><br />

inversen Multicast-Verbindungen. Dazu muß man alle existierenden Verbindungstypen<br />

bei der Abbildung von Sendern auf Empfängern, d.h. von Netzeingängen<br />

auf -ausgängen, berücksichtigen.<br />

Um die Gesamtzahl der Verbindungen zu bestimmen, betrachtet man die<br />

Verbindungen zwischen Sendern <strong>und</strong> Empfängern als die Abbildung eines Sendevektors<br />

S auf einen Empfangsvektor E . Die Vektoren S <strong>und</strong> E repräsentieren<br />

dabei die geordnete Folge von Sendern <strong>und</strong> Empfängern, die an den<br />

Ein-/Ausgängen des Netzes angeschlossen sind.<br />

Die Gesamtzahl der Verbindungen wird durch die Menge aller Abbildungen<br />

E = V ⋅ S bestimmt, wobei V das Verbindungsnetzwerk darstellt. Der<br />

entscheidende Schritt ist, daß V als eine nxn-Matrix angesehen wird, deren Elemente<br />

die Boolschen Werte "verb<strong>und</strong>en" oder "nicht verb<strong>und</strong>en" annehmen<br />

können. Aus der Variation der Elemente von V ergibt sich die Menge aller<br />

Abbildungen.<br />

Bei n 2 Boolschen Elementen, aus denen V besteht, gibt es verschiedene<br />

Zustände der Art "verb<strong>und</strong>en/nicht verb<strong>und</strong>en", so daß die Gesamtzahl der<br />

Kombinationen von Verbindungen ebenfalls gleich wird. Dieser Wert erfaßt<br />

alle Fälle, so daß in einem Netz bei n gleichzeitig aktiven Sendern <strong>und</strong><br />

Empfängern maximal<br />

2 n2<br />

2 n2<br />

Gl. 2.7:<br />

K<br />

=<br />

2 n2<br />

Kombinationen von Verbindungen verschiedener Verbindungstypen auftreten<br />

können.<br />

Die Berechnung der Gesamtzahl der Kombinationen nach Gl. 2.7 unterscheidet<br />

nicht nach einzelnen Teilnehmern oder Teilnehmergruppen, sondern<br />

betrachtet das Netz als Ganzes.<br />

Eine genauere Differenzierung des Netzwerkverkehrs ist manchmal wünschenswert.<br />

Eine Differenzierung nach Teilnehmergruppen erlaubt beispielsweise<br />

eine exakte Berechnung der Zahl der Mulitcast <strong>und</strong> inversen Multicast-<br />

Kombinationen, von denen im vorigen Kapitel nur die Obergrenzen angegeben<br />

wurden. Die Unterscheidung nach Teilnehmergruppen erlaubt weiterhin, qualitative<br />

Aussagen über den Verkehr auf dem Netz zu machen <strong>und</strong> optimierte Rou-<br />

53


ting-Strategien anzugeben, sofern man zusätzlich weiß, welche Teilnehmer mit<br />

welchen häufig kommunizieren.<br />

2.4.3 Nach Teilnehmergruppen differenzierte Verbindungen<br />

Man kann die Verbindungen, die in einem Netz vorhanden sind, dergestalt differenzieren,<br />

daß man einzelne Teilnehmergruppen bildet, in denen jeweils ein<br />

bestimmter Verbindungstyp existiert. Dabei sind als Verbindungstypen die<br />

Punkt-zu-Punkt-Verbindung, der normale Multicast, der personalisierte Multicast,<br />

der allgemeine Multicast, der allgemeine, personalisierte Multicast <strong>und</strong><br />

deren Umkehrungen von besonderem Interesse, weil diese in einem Netz<br />

gleichzeitig auftreten können. Dasselbe gilt <strong>für</strong> die Punkt-zu-Punkt-Verbindungen,<br />

die ebenfalls zur selben Zeit in einem Netz vielfach existieren können<br />

<strong>und</strong> die als Spezialfall im Multicast enthalten sind, wenn man auf jeden Sender<br />

genau einen Empfänger schaltet.<br />

Der Verkehr in einem Netz besteht entweder aus mehreren, simultan existierenden<br />

Verbindungen der genannten Typen oder es gibt genau eine Broadcast-Verbindung,<br />

die definitionsgemäß das ganze Netz umfaßt. Der Broadcast-<br />

Verbindungstyp erlaubt keine Differenzierung nach Teilnehmergruppen, weil<br />

zu einem Zeitpunkt nur ein Broadcast-Typ (normaler Broadcast, allgemeiner<br />

Broadcast, personalisierter Broadcast, allgemeiner, personalisierter Broadcast<br />

<strong>und</strong> deren Umkehrungen) auftreten kann. Innerhalb eines Broadcast-Typs gibt<br />

es jedoch entsprechend den n Netzeingängen, an die man den Broadcast-Sender<br />

anlegen kann, n Broadcast-Möglichkeiten.<br />

Im folgenden soll die Zahl der Kombinationen <strong>für</strong> ein Netz berechnet werden,<br />

in dem als Verbindungstypen die Punkt-zu-Punkt-Verbindung sowie der normale<br />

<strong>und</strong> der personalisierte Multicast <strong>und</strong> deren Umkehrungen erlaubt sind.<br />

Dabei soll berücksichtigt werden, wer mit wem verb<strong>und</strong>en ist <strong>und</strong> wer zu welcher<br />

Teilnehmergruppe gehört. Dies ist ein <strong>für</strong> die Praxis besonders interessanter<br />

Fall.<br />

Zur Berechnung der Kombinationszahl zerlegt man die Menge A der sendenden<br />

<strong>und</strong> empfangenden Netzwerkanschlüsse in einzelne Teilmengen, die jeweils<br />

einer Teilnehmergruppe entsprechen. (Bei der Zerlegung handelt es sich<br />

nicht um eine Klassenzerlegung von A im mathematischen Sinne, weil es erlaubt<br />

ist, daß verschiedene Teilnehmergruppen denselben Verbindungstyp, d.h.<br />

dieselbe Klasse haben können.) Nach der erfolgten Zerlegung in<br />

Teilnehmergruppen (Teilmengen) kann man eine Reihe von Aussagen machen.<br />

In einem Netz mit n bidirektionalen Netzwerkanschlüssen gilt <strong>für</strong> die Zahl<br />

der Elemente (=Sender oder Empfänger), die in A enthalten sind:<br />

Gl. 2.8: A = 2n .<br />

Bezeichnet man die Teilmengen, die einer Teilnehmergruppe eines bestimmten<br />

Verbindungstyps zugeordnet sind, mit U i<br />

⊆ A , dann läßt sich über Ui folgendes<br />

feststellen:<br />

54


Ist die i. Teilmenge vom Punkt-zu-Punkt-Typ, dann gilt Gl. 2.9, da sie genau<br />

einen Sender <strong>und</strong> einen Empfänger enthält.<br />

Gl. 2.9: U i<br />

= 2 ,<br />

Besteht die i. Teilmenge aus einem inaktiven Teilnehmer, dann hat man<br />

Gl. 2.10: U i<br />

= 1 ,<br />

da der inaktive Teilnehmer mit niemandem anderen Daten austauscht.<br />

Umfaßt die i. Teilmenge alle Empfänger, erhält man einen Broadcast von einem<br />

Sender auf n Empfänger:<br />

Gl. 2.11:<br />

U i<br />

= n + 1<br />

Die Zahl u der nichtleeren Teilmengen U i , in die A zerlegt werden kann, ist<br />

gleich n, wenn alle Ports inaktiv sind. Andererseits kann die Zahl der Elemente,<br />

die in einem speziellen enthalten sind, ebenfalls höchstens gleich n werden.<br />

Daraus ergibt sich insgesamt :<br />

U i<br />

1 U i<br />

n<br />

Gl. 2.12:<br />

≤ ≤ . <strong>für</strong> n ≥ u≥ i≥<br />

1<br />

Faßt man alle Teilmengen, die nur ein Element enthalten, zur Menge NA (NA=<br />

"nicht angeschlossen") der inaktiven Teilnehmer zusammen, wird die ursprüngliche<br />

Menge A der Netzwerkanschlüsse zu einem bestimmten Zeitpunkt<br />

t so in verschiedene Teilmengen zerlegt, daß gilt:<br />

Gl. 2.13: A = U 1<br />

∪ U 2<br />

∪ U 3<br />

∪ … ∪ U u<br />

∪NA,<br />

wobei alle mindestens zwei Elemente (1 Sender <strong>und</strong> 1 Empfänger) enthalten<br />

müssen. Gl. 2.13 ist eine vollständige Zerlegung von A in disjunkte Teilmengen,<br />

so daß die Teilmengen überschneidungsfrei sind:<br />

U i<br />

U i<br />

U j<br />

∅<br />

u<br />

∧<br />

i,<br />

j = 0<br />

i ≠ j<br />

∩<br />

=<br />

Das bedeutet, daß kein Sender oder Empfänger gleichzeitig in mehr als einer<br />

Teilmenge (Teilnehmergruppe) enthalten ist.<br />

Die Zahl der Kombinationen von Verbindungen, die in einem Netz auftreten<br />

können, ist identisch mit der Anzahl der Arten, in die sich A zerlegen läßt. Jede<br />

Teilmenge ⊆ A repräsentiert dabei eine der genannten Verbindungstypen<br />

U i<br />

55


Punkt-zu-Punkt, Multicast, personalisierter Multicast oder deren Umkehrungen.<br />

Die Zahl der Zerlegungen (Kombinationsanzahl) kann sehr groß werden. Beschränkt<br />

man sich z.B. nur auf die Punkt-zu-Punkt-Verbindungen, erhält man<br />

bei n gleichzeitig aktiven Teilnehmern n! Permutationen [Vogel74] potentieller<br />

Verbindungen. Im Falle des Parallelrechners CM-5 [Leiserson92] z.B. haben<br />

wir im Vollausbau ein Verbindungsnetzwerk, das 16 K Prozessoren miteinander<br />

koppelt. Dieses Netz muß deshalb 16 K! (≈10 160000 verschiedene Punkt-zu-<br />

Punkt-Verbindungen schalten können. (Zum Vergleich: Die Zahl der Atome im<br />

Universum beträgt "nur" ca. 10 65 .)<br />

Die Realisierung aller Punkt-zu-Punkt-Verbindungen stellt also hohe Anforderungen<br />

an das Verbindungsnetzwerk. Bei Realisierung aller Verbindungstypen<br />

ist die Zahl der Kombinationen noch wesentlich größer.<br />

2.4.4 Berechnung der Zahl der Teilnehmergruppen<br />

Um die Zahl verschiedener Teilnehmergruppen, die gleichzeitig in einem Netz<br />

existieren können, zu bestimmen, muß die Anzahl der Zerlegungen von A berechnet<br />

werden. Für eine anschauliche Herleitung der Zerlegung gehen wir zunächst<br />

davon aus, daß in jeder Teilmenge U i derselbe Multicast-Verbindungstyp<br />

existiert. Als Typ wählen wir den einfachsten Fall, den normalen<br />

Multicast, der den Punkt-zu-Punkt-Typ als Spezialfall enthält, wenn man die<br />

Zahl der Empfänger, die an jeden Sender angeschlossen sind, gleich Eins setzt.<br />

Zur Berechnung der Zahl von Zerlegungen in normale Multicasts geht man von<br />

folgender Überlegung aus:<br />

Der erste Sender, der Daten in ein gegebenes Netz einspeist, kann potentiell<br />

aus einem Vorrat von n Empfängern einen bestimmten Empfänger (sich selbst<br />

eingeschlossen) auswählen. Für die Auswahl des 2. Empfängers, der zum Multicast<br />

gehört, verbleiben <strong>für</strong> den 1. Sender noch (n-1) Empfänger, <strong>für</strong> den 3.<br />

Empfänger noch (n-2) Empfänger usw. Am Ende der Empfängerauswahl des 1.<br />

Senders sollen i 1 Empfänger vom 1. Sender ausgewählt worden sein. (i 1 stellt<br />

also die Zahl der an den 1. Sender angeschlossenen Empfänger dar, mit<br />

0 ≤ i1 ≤ n). Entsprechend verbleiben <strong>für</strong> den 2. Sender, der gleichzeitig zum 1.<br />

Sender Daten in ein Netz einspeist, noch (n-i 1 ) Empfänger <strong>für</strong> seinen Multicast.<br />

Der zweite Sender wählt aus den verbliebenen (n-i 1 ) Empfängern „seine" i 2<br />

Empfänger aus, danach folgt der 3. gleichzeitig aktive Sender usw. Am Ende<br />

des Auswahlprozesses sind alle n maximal möglichen Sender mit ihren i 1 bis i n<br />

Multicast-Empfängern verb<strong>und</strong>en, <strong>und</strong> es gilt <strong>für</strong> die Summe aller Empfänger:<br />

Gl. 2.14: i 1<br />

+ i 2<br />

+ … + i n<br />

≤ n .<br />

Durch die Zerlegung nach Gl. 2.14 wird <strong>für</strong> jede Teilmenge U i die Zahl ihrer<br />

Elemente gemäß U 1<br />

= i 1<br />

+ 1, U 2<br />

= i 2<br />

+ 1, …,<br />

U n<br />

= i n<br />

+ 1 , festgelegt,<br />

da zur j-ten Teilnehmergruppe i j Empfänger sowie ein Sender gehören.<br />

Somit gilt:<br />

56


Gl. 2.15:<br />

∧<br />

U j<br />

= i j<br />

+ 1 .<br />

An dieser Stelle ist zu beachten, daß Gl. 2.15 die Menge NA der inaktiven Anschlüsse,<br />

die im vorigen Kapitel definiert worden ist, mit enthält, da in Gl. 2.14<br />

auch i j = 0 zugelassen ist. Es gilt in diesem Fall: Uj = 1,<br />

( ij = 0)<br />

. Die Teilmenge<br />

U j besteht also aus einem inaktiven Sender j als einzigem Element.<br />

In Gl. 2.14 ist die Zahl aller Punkt-zu-Punkt-Verbindungen ebenso mit berücksichtigt,<br />

wenn man <strong>für</strong> einen beliebigen Sender j die Zahl seiner Empfänger<br />

gleich 1 setzt. Dann hat man Uj = 2 , da die Teilmenge aus zwei Teilnehmern<br />

(Sender <strong>und</strong> Empfänger) besteht (i j = 1). Schließlich berücksichtigt Gl. 2.14<br />

auch den Broadcast-Fall, wenn <strong>für</strong> Uj = n,<br />

( ij = n)<br />

gilt <strong>und</strong> alle anderen Indizes<br />

i k = 0 ( k ≠ j)<br />

sind.<br />

Zusammengefaßt kann man sagen, daß sich bei n Sendern mit Multicast<br />

höchstens n Gruppen von Empfängern bilden können, wobei in jeder Gruppe<br />

zwischen 0 <strong>und</strong> n Empfänger erlaubt sind. Insgesamt darf die Summe aller<br />

Empfänger aus allen Gruppen die Zahl n der Netzanschlüsse nicht übersteigen.<br />

Empfängerauswahl<br />

Für die Wahl der i 1 Empfänger der 1. Empfängergruppe, die vom 1. Sender ausgewählt<br />

werden, gibt es<br />

⎛<br />

n<br />

⎞<br />

⎝ ⎠<br />

i 1<br />

n<br />

j = 1<br />

Möglichkeiten [Hockney85], da die Reihenfolge<br />

innerhalb einer Multicast-Gruppe keine Rolle spielt. Entsprechend gibt es <strong>für</strong><br />

⎛n – i 1 ⎞<br />

die Wahl der i 2 Mitglieder der 2. Empfängergruppe noch ⎜ ⎟ Möglichkeiten,<br />

usw., so daß <strong>für</strong> den letzten, d.h. n. Sender schließlich<br />

⎝ i 2 ⎠<br />

⎛n– i 1<br />

– i 2<br />

– … – i n – 1 ⎞<br />

⎜<br />

⎟ Möglichkeiten der Empfängerauswahl übrigbleiben.<br />

⎝ i n ⎠<br />

Da sich die Gesamtzahl der Möglichkeiten aus dem Produkt der Einzelmöglichkeiten<br />

ergibt, erhält man in einem allgemeinen Verbindungsnetzwerk insgesamt<br />

K ⎛<br />

n<br />

⎞<br />

⎛ n – i 1⎞ ⎛n – i 1<br />

– i 2<br />

– … – i n – 1 ⎞<br />

=<br />

Multicast-Kombinationen.<br />

⎝i 1<br />

⎠<br />

⎜ ⎟ … ⎜<br />

⎟<br />

⎝ i 2 ⎠ ⎝ i n ⎠<br />

Dies läßt sich auch schreiben als [Richter95b]:<br />

57


Gl. 2.16:<br />

K<br />

n<br />

∏<br />

F j<br />

i j<br />

= ⎛ ⎞ mit<br />

⎝ ⎠<br />

F = n – i l<br />

j = 1<br />

j – 1<br />

∑<br />

l = 1<br />

Die Randbedingungen, die dabei beachtet werden müssen, sind:<br />

Gl. 2.17: 0 ≤ i j<br />

≤ F j<br />

, bei i ≤ n l<br />

<strong>für</strong> j > 1 .<br />

In Gl. 2.16 stellt K die Zahl der Multicast-Kombinationen zwischen Sendern<br />

<strong>und</strong> Empfängern dar, die in einem beliebigen Netz bei n Sendern <strong>und</strong> deren<br />

Empfängergruppen zu höchstens n Empfängern möglich ist. K ist eine Funktion<br />

der Variablen i 1 bis in, die die Anzahl der Empfänger je Gruppe festlegen. Die<br />

Zahl n der Netzwerkanschlüsse ist ein freier Parameter.<br />

Wenn man in Gl. 2.16 die Variablen <strong>für</strong> "Sender" mit denen <strong>für</strong> "Empfänger"<br />

vertauscht, gilt Gl. 2.16 auch <strong>für</strong> die Berechnung der Zahl der inversen Multicasts,<br />

die gleichzeitig in einem allgemeinen Netz auftreten können. Dieselbe<br />

Dualität (d.h. Austauschbarkeit von Sender durch Empfänger) gilt ebenfalls <strong>für</strong><br />

die anderen beschriebenen Resultate.<br />

Man kann sich Gl. 2.16 folgendermaßen veranschaulichen: K kann als das<br />

Volumen eines n-dimensionalen Quaders gedeutet werden, der aus n aufeinander<br />

senkrechten Achsen der Länge ⎜ ⎟ besteht. Die Längen der Koordina-<br />

⎛F j ⎞<br />

⎝i j ⎠<br />

tenachsen entsprechen der Zahl der Möglichkeiten, die es gibt, um die Zusammensetzung<br />

der max. n Empfängergruppen festzulegen.<br />

Spezialfälle<br />

j – 1<br />

∑<br />

l = 1<br />

Gl. 2.16 enthält drei bekannte Beispiele als Spezialfälle. Den ersten Spezialfall<br />

erhält man <strong>für</strong> i 1 = i 2 =...= i n = 1. Dann gilt:<br />

Gl. 2.18: K ⎛n⎞ ⎛n – 1⎞ n – 2<br />

= ⋅ ⋅ ⎛ ⎞ ⋅ … ⋅ ⎛ n – ( n – 1)<br />

⎞ = n! ,<br />

⎝1⎠<br />

⎝ 1 ⎠ ⎝ 1 ⎠ ⎝ 1 ⎠<br />

Man erhält also alle Punkt-zu-Punkt-Abbildungen, die bei n Ein-/Ausgängen in<br />

einem Netz möglich sind. Der zweite Spezialfall ergibt sich <strong>für</strong> i 1 = n <strong>und</strong> i 2 =<br />

i 3 =...= i n = 0. Die Zahl K der Kombinationen läßt sich berechnen zu:<br />

Gl. 2.19: K ⎛n⎞ ⎛n – n⎞ ⎛n – n⎞ … ⎛ n – n ⎞ n<br />

= ⋅ ⋅ ⋅ ⋅ = ⎛ ⎞ = 1 , mit ⎛0⎞ = 1 .<br />

⎝n⎠<br />

⎝ 0 ⎠ ⎝ 0 ⎠ ⎝ 0 ⎠ ⎝n⎠<br />

⎝0⎠<br />

58


Dies stellt den Broadcast vom 1. Sender zu allen Empfängern dar, wo<strong>für</strong> es<br />

selbstverständlich genau eine Kombinationsmöglichkeit gibt.<br />

Der dritte Spezialfall von Gl. 2.16 ist dann gegeben, wenn jeder der möglichen<br />

n Empfänger mit einem Sender verb<strong>und</strong>en ist, d.h. die Zerlegung von A in<br />

disjunkte Gruppen vollständig aus aktiven Ports besteht, NA also gleich Null<br />

ist. Dann gilt:<br />

n<br />

∑<br />

Gl. 2.20: = n , ( 0 ≤ i j<br />

≤ n)<br />

, <strong>für</strong> NA = 0 .<br />

j = 1<br />

i j<br />

Mit Gl. 2.20 als Zusatzbedingung läßt sich Gl. 2.16 vereinfachen in [Bronstein83]:<br />

Gl. 2.21:<br />

K<br />

=<br />

n!<br />

------------------------<br />

i 1<br />

!i 2<br />

!…i n<br />

!<br />

Der Fall der Aufteilung von empfangenden Netzwerkanschlüssen auf Empfängergruppen<br />

gemäß Gl. 2.20 stellt eine vollständige Zerlegung ohne Rest der<br />

Menge A der Netzwerkanschlüsse dar. Schließlich kann man noch eine Abschätzung<br />

über die Zahl der Kombinationen angeben:<br />

(<br />

Gl. 2.22: 2 n2 )<br />

n n n!<br />

» » n! ≥ ------------------------ ≥ ⎛ ⎞ .<br />

i 1<br />

!i 2<br />

!…i n<br />

! ∏ ⎝ ⎠<br />

2.4.5 Zusammenfassung<br />

Die Resultate der Betrachtungen über die Verbindungskombinationen sind in<br />

Tabelle 2.1 zusammengefaßt.<br />

2.5 Datentransport in Netzen<br />

2.5.1 Einleitung<br />

j = 1<br />

Die Aufgabe eines Verbindungsnetzwerks ist es, in einem Parallelrechner oder<br />

Rechnernetz effizient Information zwischen kommunizierenden Teilnehmern<br />

bzw. Rechenknoten zu übertragen. Der Informationstransport mit Hilfe eines<br />

statischen oder dynamischen Verbindungsnetzwerks erfordert die Festlegung<br />

einer Reihe technischer Parameter. Dazu zählen beispielsweise die Frage, ob<br />

die Daten formatiert übertragen werden sollen, ob die Verbindungen zwischen<br />

n<br />

F j<br />

i j<br />

59


Gesamtzahl der Verbindungskombinationen in einem Netzwerk mit n bidirektionalen<br />

Ports:<br />

K<br />

=<br />

2 n2<br />

Zahl der Verbindungskombinationen, wenn nur Punkt-zu-Punkt-, Multicast- oder<br />

personalisierte Multicast-Verbindungen sowie deren Umkehrungen auftreten (mit Aufschlüsselung<br />

nach Teilnehmergruppen der Stärke ):<br />

K<br />

F j<br />

n ⎛ ⎞<br />

= ∏ ⎜ ⎟ F<br />

⎝ ⎠ j<br />

= n – ∑ i 0 ≤ i l<br />

j<br />

≤ F j ∑ i l<br />

≤ n<br />

j = 1<br />

i j<br />

j – 1<br />

j – 1<br />

, mit <strong>und</strong> ( <strong>für</strong> j>1).<br />

l = 1<br />

l = 1<br />

K<br />

=<br />

------------------------<br />

n!<br />

i 1<br />

!i 2<br />

!…i n<br />

!<br />

Tabelle 2.1: Zahl der Verbindungskombinationen in einem Netzwerk.<br />

Sender <strong>und</strong> Empfänger permanent oder transient sind, ob Wege zentral oder dezentral<br />

ausgewählt werden <strong>und</strong> ob bzw. wie eine Flußsteuerung (Flow Control)<br />

vorgenommen werden soll.<br />

Entsprechend kann man den Datentransport in die Aspekte Verbindungsart,<br />

Verbindungsaufbau <strong>und</strong> -steuerung, sowie Paketformat <strong>und</strong> Routing untergliedern.<br />

Eine graphische Darstellung dieser Gliederung ist in Bild 2.23 gezeigt.<br />

Datentransport<br />

Verbindungsart<br />

Vereinfachung, wenn alle Netzwerkanschlüsse gleichzeitig senden <strong>und</strong>/oder empfangen:<br />

Leitungs-<br />

Paket-<br />

Nachrichtenvermittlung<br />

Verbindungsaufbau<br />

statisch<br />

dynamisch<br />

Verbindungssteuerung<br />

zentral<br />

dezentral<br />

Paketformat<br />

Kopf<br />

Daten<br />

Ende<br />

Routing<br />

Adreßdekodierung<br />

Wegewahl<br />

Flußsteuerung<br />

Bild 2.23: Klassifikation des Datentransports.<br />

In den folgenden Kapiteln wird jeder der in Bild 2.23 dargestellten Parameter<br />

näher erläutert.<br />

60


2.5.2 Verbindungsart<br />

Gr<strong>und</strong>sätzlich gibt es in einem Netz drei Möglichkeiten, eine Verbindung zwischen<br />

einem Sender <strong>und</strong> einem Empfänger aufzubauen, die als Leitungsvermittlung,<br />

Paketvermittlung <strong>und</strong> Nachrichtenvermittlung bezeichnet werden.<br />

Die ersten beiden Arten sind sehr unterschiedlich in ihren Eigenschaften, während<br />

die dritte eine Kombination aus beiden darstellt. Im einzelnen gilt:<br />

Leitungsvermittlung wurde ursprünglich auf dem Gebiet der Telefonvermittlungstechnik<br />

eingesetzt <strong>und</strong> danach auf Parallelrechnernetze übertragen.<br />

Bei Leitungsvermittlung wird eine physikalische Verbindung zwischen den<br />

Teilnehmern (Rechenknoten) hergestellt, die auf der Koppelung aller Teilstrecken,<br />

die zwischen Sender <strong>und</strong> Empfänger liegen, beruht. Wesentlich dabei<br />

ist, daß der durch das Zusammenschalten von Leitungen etablierte Pfad <strong>für</strong> die<br />

gesamte Dauer der Informationsübermittlung physikalisch bestehen bleibt.<br />

Die Daten werden auf dem Pfad durch das Netz unformatiert übertragen; insbesondere<br />

ist keine Adresse <strong>und</strong> kein Paketendezeichen erforderlich, so daß<br />

nach der Aufbauphase der Verbindung eine hohe Nettodatenrate möglich ist.<br />

Weiterer Verwaltungsaufwand fällt bis zum Abbau der Verbindung nicht mehr<br />

an.<br />

Der Nachteil von Leitungsvermittlung liegt darin, daß die Kommunikationskanäle,<br />

die den Datenpfad bilden, während der Verbindung <strong>für</strong> andere Kommunikationszwecke<br />

nicht zur Verfügung stehen, da sie fest alloziert zur aufgebauten<br />

Verbindung sind. Dies bewirkt häufig eine schlechte Ausnutzung der im<br />

Netz vorhandenen Kanäle. Aus diesem Gr<strong>und</strong>e wird Leitungsvermittlung bei<br />

Netzen <strong>für</strong> Parallelrechner nur noch selten angewandt.<br />

Paketvermittlung vermeidet den Nachteil der Ressourcen-Blockierung, indem<br />

sie die Nutzinformation in einzelne physikalische Abschnitte (Pakete) unterteilt,<br />

die nur <strong>für</strong> die Dauer der Übertragung von einem Knoten zu seinem<br />

Nachbarknoten den dazwischen liegenden Kanal belegen. Die Interprozessorkommunikation<br />

besteht in diesem Fall aus dem Austausch einzelner Datenpakete.<br />

Gehören mehrere Pakete logisch zueinander, werden sie zu einer Nachricht<br />

zusammengefaßt, die als übergeordnete Verwaltungseinheit dient.<br />

Die einzelnen Bytes, aus denen ein Paket besteht, können mit den Waggons<br />

eines Zuges verglichen werden. Dieser benötigt zur freien Fahrt nur den Strekkenabschnitt,<br />

auf dem er sich gerade befindet. Wenn er einen Gleisabschnitt<br />

passiert hat, steht die Teilstrecke <strong>für</strong> andere Züge (Pakete) wieder zur Verfügung.<br />

Das bedeutet, daß an einem physikalischen Kanal mehrere logische Datenströme<br />

im Zeitmultiplex-Verfahren übertragen werden können. Diese werden<br />

als virtuelle Kanäle bezeichnet.<br />

Bei Parallelrechnernetzen mit Paketvermittlung erfordert die Mehrfachausnutzung<br />

der Kanäle einen erhöhten Verwaltungsaufwand, da jedes Paket mit einer<br />

Zieladresse versehen werden muß, weil sonst unklar ist, wer der Empfänger<br />

ist. Zusätzlich sind <strong>für</strong> das Multiplexen unterschiedlicher Nachrichten auf demselben<br />

physikalischen Kanal eine Herkunftsadresse sowie weitere Verwaltungsinformation<br />

wie Nachrichtenanfang, Nachrichtenende <strong>und</strong> Paketnummer<br />

61


erforderlich, um eine ungestörte Durchmischung der Pakete verschiedener<br />

Nachrichten zu gewährleisten.<br />

Der beschriebene Verwaltungsaufwand, der bei Paketvermittlung anfällt, bewirkt,<br />

daß die Nettodatenrate kleiner als bei der Leitungsvermittlung ausfällt.<br />

Insbesondere bei langen Nachrichten, die am Stück übertragen werden, ist Leitungsvermittlung<br />

effizienter; auch, weil keine zusätzlichen Zeiten zur Inspektion<br />

der Zieladressen in den einzelnen Zwischenknoten anfallen. Trotzdem wird<br />

bei Parallelrechnernetzen Paketvermittlung bevorzugt, da eine gute Ausnutzung<br />

der Kommunikationskanäle die Effizienz der Programmausführung <strong>und</strong><br />

damit des Parallelrechners erhöht.<br />

Schließlich ist es zur Übertragung jedes Pakets erforderlich zu wissen, welcher<br />

Weg durch das Netz der beste, d.h. schnellste oder kürzeste, ist. Diese Frage<br />

stellt sich bei der Leitungsvermittlung nur einmal, nämlich am Anfang einer<br />

Interprozessorkommunikation zum Aufbau des Pfades.<br />

Nachrichtenvermittlung ist eine Mischung aus Paket- <strong>und</strong> Leitungsvermittlung.<br />

Sie versucht, die Vorteile beider Vermittlungsarten zu kombinieren, indem<br />

sie Nachrichten nicht in kleine Pakete unterteilt, sondern am Stück als ein<br />

großes Paket überträgt. Ein Durchmischen der Nachrichten auf Paketbasis entfällt<br />

dadurch ebenso wie der damit verb<strong>und</strong>ene Verwaltungsaufwand, was sich<br />

positiv auf die Übertragungsbandbreite auswirkt. Die genannten Vorteile werden<br />

allerdings damit erkauft, daß sich die durchschnittliche Latenzzeit der<br />

Interprozessorkommunikation bei langen Nachrichten deutlich erhöht, was<br />

wiederum die Effizienz einer <strong>parallel</strong>en Anwendung senkt.<br />

Zusammenfassend kann gesagt werden, daß Paketvermittlung sich besonders<br />

<strong>für</strong> kurze Botschaften eignet, während Leitungsvermittlung bei sehr langen<br />

Nachrichten günstiger ist. Botschaften mittlerer Länge können am besten mit<br />

Nachrichtenvermittlung übertragen werden.<br />

Da die drei Vermittlungsarten in einem Verbindungsnetzwerk unterschiedliche<br />

technische Einrichtungen <strong>und</strong> Abläufe erfordern, ist es nicht möglich, abhängig<br />

von der Nachrichtenlänge eine der drei Arten dynamisch auszuwählen.<br />

Vielmehr muß man sich von Anfang an festlegen. Bei Paketvermittlung kann<br />

man durch die Wahl kleiner bis mittlerer Paketlängen eine ausreichende Bandbreite<br />

bei gleichzeitig niedriger Latenz <strong>und</strong> guter Ressourcen-Auslastung erreichen,<br />

<strong>und</strong> deshalb wird Paketvermittlung bevorzugt.<br />

2.5.3 Verbindungsaufbau<br />

Der Aufbau einer Verbindung kann entweder statisch oder dynamisch erfolgen.<br />

Bei statischem Aufbau wird zur Übersetzungszeit des Programms festgestellt,<br />

welche Interprozessorkommunikationen durchgeführt werden sollen, <strong>und</strong> diese<br />

werden als ein Teil des Programmladens im Verbindungsnetzwerk hergestellt.<br />

Jede Verbindung bleibt während der gesamten Ausführung der <strong>parallel</strong>en Anwendung<br />

bestehen. Neue Verbindungen können nicht realisiert werden.<br />

Ein statischer Verbindungsaufbau ist <strong>für</strong> diejenigen <strong>parallel</strong>en Anwendungen<br />

ausreichend, bei denen gemäß einfacher Muster (Regeln) kommuniziert wird.<br />

62


Dies ist z.B. bei allen systolischen Algorithmen der Fall, aber auch bei Verfahren<br />

aus der Bildverarbeitung <strong>und</strong> bei Matrizenarithmetik.<br />

Ein dynamischer Verbindungsaufbau kann Datenabhängigkeiten, die erst zur<br />

Laufzeit bekannt werden, berücksichtigen <strong>und</strong> nicht mehr benötigte Verbindungen<br />

ab- <strong>und</strong> neue aufbauen. Der dynamische Verbindungsaufbau ist flexibler,<br />

aber er erfordert eine schnelle Rekonfigurierbarkeit des Netzes sowie einen<br />

erhöhten Betriebssystemaufwand, um die Verbindungswünsche effizient<br />

<strong>und</strong> sicher herstellen zu können. Üblicherweise wird bei Parallelrechnernetzen<br />

ein dynamischer Verbindungsaufbau gewählt.<br />

2.5.4 Verbindungssteuerung<br />

Die Entscheidung, über welche Zwischenknoten ein Datenpaket zum Ziel gelangt,<br />

bzw. über welche Streckenabschnitte ein unformatiertes Datum zum<br />

Empfänger transportiert wird, kann entweder von einer einzigen zentralen Instanz,<br />

die ein besonderer Knoten oder ein Host-Rechner sein kann, getroffen<br />

werden oder sie wird von vielen lokalen Knoten in dezentraler Art <strong>und</strong> Weise<br />

vorgenommen. Man spricht deshalb entweder von zentraler oder von lokaler<br />

Verbindungssteuerung.<br />

Eine zentrale Steuerung des Verbindungsaufbaus hat den Vorteil, daß die<br />

Verbindungswünsche, die von den Rechenknoten an sie herangetragen werden,<br />

so realisiert werden können, daß ein globales Optimum bzgl. des Datendurchsatzes<br />

<strong>und</strong> der Latenzzeit entsteht, vorausgesetzt, das Netzwerk bietet verschiedene<br />

Alternativen in der Wegewahl. Zentrale Steuerungen haben deshalb das<br />

Potential, ein Netz besonders effizient nutzen zu können.<br />

Leider sind mit einer zentralen Instanz auch mehrere Nachteile verb<strong>und</strong>en:<br />

Um Wartezeiten bei einem <strong>für</strong> alle Knoten gemeinsamen Verbindungs-Server<br />

zu vermeiden, muß dieser erheblich schneller als die Wünsche seiner Klienten<br />

sein, was sich nur <strong>für</strong> eine kleine K<strong>und</strong>enzahl realisieren läßt. Große Parallelrechnersysteme<br />

können deshalb nicht auf einer gemeinsamen Verbindungssteuerung<br />

beruhen, da diese einen Engpaß darstellen würde. Darüberhinaus hat<br />

eine zentrale Instanz den Nachteil, daß das ganze System bei deren Ausfall<br />

blockiert würde. Deshalb ist bei fehlertoleranten <strong>und</strong>/oder massiv <strong>parallel</strong>en<br />

Rechnern eine auf mehrere oder alle Knoten <strong>verteilte</strong> Verbindungssteuerung<br />

das Mittel der Wahl.<br />

Allerdings ist nicht bei allen Netztypen eine Dezentralisierung machbar. Die<br />

Kategorie der mehrstufigen Netze z.B., die nur durch Umordnen interner Wege<br />

blockierungsfrei ist (rearrangable non blocking networks), erfordern eine zentrale<br />

Vergabe aller Teilstrecken im Netz, da sonst nicht alle Verbindungswünsche<br />

realisiert werden können. Die mit diesen Netzen verb<strong>und</strong>enen<br />

Wegesuchalgorithmen werden auf einem einzigen Verbindungs-Server sequentiell<br />

ausgeführt. Eine Parallelisierung der Algorithmen <strong>und</strong> deren <strong>verteilte</strong><br />

Ausführung auf einer beliebigen Zahl von Knoten, z.B. entsprechend der Zahl<br />

der Prozessoren im System, ist oft nicht möglich oder wünschenswert. Beispiele<br />

<strong>für</strong> Netze, bei denen eine Dezentralisierung schwierig ist, sind das Benes-<br />

63


<strong>und</strong> das Clos-Netz, die beide leitungs- oder paketvermittelnd betrieben werden<br />

können.<br />

Dezentrale Verbindungssteuerungen werden überwiegend in statischen <strong>Verbindungsnetzwerke</strong>n,<br />

aber auch in Banyan-Netzen eingesetzt, die zur Kategorie<br />

der dynamischen Netze gehören. Bei diesen Netztypen existieren eine Reihe<br />

von Verfahren, wie Datenpakete lokal, d.h. von den einzelnen Rechen- oder<br />

Schaltknoten durch das Netz gelotst werden können. Dezentrale Verbindungssteuerungen<br />

bieten Vorteile bzgl. Fehlertoleranz <strong>und</strong> Skalierbarkeit. Allerdings<br />

gibt es auch Nachteile:<br />

Zum einen sind die spezifischen Algorithmen zur Wegewahl primär auf paketvermittelnde<br />

Netze beschränkt. Ein Anwendung auf Leitungsvermittlung ist<br />

schwierig, weil die Kopplung verschiedener Teilstrecken zu einem gemeinsamen<br />

Pfad vom Charakter her zentralistisch ist.<br />

Zum anderen erfordert die Erzielung eines globalen Optimums von Netzdurchsatz<br />

<strong>und</strong> Latenzzeit, daß die einzelnen Knoten Kenntnis über die Wegeentscheidungen<br />

der Nachbarknoten haben. Insbesondere muß jeder Knoten bei<br />

seiner Routingentscheidung <strong>für</strong> eine effiziente Netzauslastung die momentane<br />

Verkehrsbelastung der anderen Knoten berücksichtigen. Ist die Information<br />

über die Verkehrssituation anderer Knoten nicht vorhanden, können nur lokale,<br />

aber keine globalen Optimierungen getroffen werden.<br />

Leider kann auch bei gegenseitigem Austausch der Verkehrsbelastung ein<br />

globales Optimum deshalb nicht erreicht werden, weil die Daten entfernter<br />

Knoten aufgr<strong>und</strong> der endlichen Signalausbreitungsgeschwindigkeit in der Regel<br />

erst dann zur Routing-Entscheidung eintreffen, wenn sie bereits veraltet<br />

sind, da sich die Verbindungsanforderungen schnell ändern können. In der Praxis<br />

sind dezentrale Verbindungssteuerungen mit gegenseitigen Austausch der<br />

Verkehrsbelastungen trotzdem vorteilhaft, da sie aufgr<strong>und</strong> ihrer Adaptivität der<br />

Wegewahl zur Leistungssteigerung der Rechnersystems beitragen. Bei Parallelrechnernetzen<br />

<strong>und</strong> lokalen Netzwerken ist deshalb Paketvermittlung mit dezentraler<br />

Verbindungssteuerung die häufigste Betriebsart.<br />

2.5.5 Paketformate<br />

Bei paketvermittelnden Netzen müssen die Daten, bevor sie ins Netz eingespeist<br />

werden, formatiert, d.h. in Pakete verpackt werden. Für die Nachrichtenformatierung<br />

läßt sich ein genereller Aufbau angeben, der in drei Hierarchieebenen<br />

gegliedert ist, die wiederum aus einzelnen Abschnitten bestehen. Das<br />

Prinzip des Nachrichtenaufbaus ist in Bild 2.24 gezeigt.<br />

Auf der obersten Hierarchieebene bestehen Nachrichten aus einer Reihe von<br />

Datenpaketen, die von einem Kopf- <strong>und</strong> einem Endepaket eingerahmt sind, um<br />

so Beginn <strong>und</strong> Ende der Nachricht zu kennzeichnen. Einzelne abgesendete Pakete<br />

werden vom Empfangsprozeß zwischengespeichert <strong>und</strong> dort zur ganzen<br />

Nachricht wieder zusammengesetzt.<br />

Auf der mittleren Hierarchieebene ist jedes Paket in Nutzdaten <strong>und</strong> Verwaltungsinformation<br />

gegliedert, die wiederum aus einzelnen Abschnitten wie<br />

64


Ziel- <strong>und</strong> Herkunftsadresse bestehen. Verwaltungsinformationen werden von<br />

den Vermittlungseinrichtungen des <strong>Verbindungsnetzwerke</strong>s, Nutzdaten von<br />

den Rechenknoten ausgewertet. Eine laufende Paketnummmer wird <strong>für</strong> die Fälle<br />

mit übertragen, wo Pakete in anderer Reihenfolge, als sie abgeschickt werden,<br />

empfangen werden können, um so die korrekte Sequenz der Pakete nach<br />

dem Empfang wiederherzustellen. Eine Herkunftsadresse wird vom Empfänger<br />

<strong>für</strong> den Fall benötigt, daß virtuelle Kanäle vorhanden sind, um das Paket anhand<br />

dieser Angabe dem richtigen logischen Empfangskanal zuordnen zu können<br />

(Paket-Demultiplexen).<br />

Nachricht (Botschaft)<br />

Kopfpaket<br />

(Header)<br />

Datenpaket<br />

1<br />

Daten- . . . Datenpaket<br />

2 paket n<br />

Endepaket<br />

(Trailer)<br />

Zieladresse<br />

Herkunftsadresse<br />

Paket<br />

Nr.<br />

Datenblock<br />

Paketendezeichen<br />

Nachrichtenendezeichen<br />

Flit Flit . . . Flit<br />

(Phit) (Phit) (Phit)<br />

Bild 2.24: Hierarchischer Aufbau einer Nachricht.<br />

Auf der untersten Ebene (Transportschicht) sind die Daten in elementare Transporteinheiten,<br />

den Physical Transfer Units (Phits), zerlegt <strong>und</strong> diese werden<br />

bitseriell, byte<strong>parallel</strong> oder wort<strong>parallel</strong> übertragen. Wird auf dieser Ebene eine<br />

Flußsteuerung vorgenommen, um eine Datenüberflutung des Netzes oder des<br />

Empfängers zu vermeiden, heißen die Phits Flow Control Digits (Flits). Eine<br />

Cray T3D beispielsweise verwendet 16 Bit breite Flits zur Informationsübertragung.<br />

Die IBM SP2 arbeitet mit 8 Bit breiten Flits.<br />

Der geschilderte, dreifach gegliederte <strong>und</strong> mehrfach in Abschnitte unterteilte<br />

Nachrichtenaufbau ist bei den meisten Formaten nicht vollständig implementiert;<br />

z.B. wird ein Kopf- <strong>und</strong> Endepaket nur dann übertragen, wenn eine Verbindung<br />

explizit auf- <strong>und</strong> wieder abgebaut werden muß (Connection Oriented<br />

Protocol). Dementsprechend können Pakete je nach Format eine feste Länge<br />

aufweisen oder variabel lang sein, <strong>und</strong> sie können alle Abschnitte der Ebenen 2<br />

<strong>und</strong> 3 enthalten oder nur Teile davon.<br />

Beispiel:<br />

Der Kopfteil eines Transputer T9000 Pakets enthält nur die Zieladresse (Bild<br />

65


2.25a), während beim ATM- <strong>und</strong> SCI-Format eine Reihe weiterer Informationen<br />

im Kopfteil enthalten sind, wie die Priorität <strong>und</strong> die Herkunftsadresse (SCI-<br />

Format). T9000 Zieladressen variieren je nach Netzgröße, ebenso kann dort das<br />

letzte Paket der Nachricht kürzer als die vorangehenden sein, während SCI-<br />

Adressen auf 8 Byte <strong>und</strong> SCI-Daten auf 64 bzw. 256 Bytegrenzen festgelegt<br />

sind (Block-Write Request). Die ATM-Zelle hat ebenfalls einen Kopf- <strong>und</strong> Datenteil<br />

konstanter Länge (Bild 2.25 b <strong>und</strong> c).<br />

1. Paket<br />

Ziel 32 Byte Daten Paketende<br />

a)<br />

2. Paket<br />

Ziel 32 Byte Daten Paketende<br />

n. Paket<br />

. . .<br />

Ziel ≤ 32 Byte Daten<br />

1.- n. Paket<br />

Nachrichtenende<br />

1 Phit =<br />

1 Byte<br />

b)<br />

5 Byte Kopf<br />

48 Byte Daten<br />

1.- n. Paket (Block-Write Request)<br />

c) 16 Byte Kopf<br />

64/256 Byte Daten<br />

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

2.5.6 Routing<br />

Ein wichtiger Teil beim Transport von Information durch ein paketvermittelndes<br />

Netz ist das Routing. Bei Leitungsvermittlung tritt Routing nur in der Phase<br />

des Verbindungsaufbaus auf. Während der eigentlichen Datenübertragung wird<br />

Routing nicht benötigt.<br />

In umfassenderen Sinne wird unter Routing der Vorgang verstanden, wie<br />

Information von einem Datenerzeuger durch ein Verbindungsnetzwerk zu einem<br />

Datenverbraucher transportiert wird. Dabei spielen verschiedene, voneinander<br />

unabhängige Mechanismen ineinander <strong>und</strong> tragen zum Datentransport<br />

bei. Im engeren Sinne zählen zum Routing der Verbindungsaufbau, der die<br />

Wahl eines geeigneten Pfades durch das Netz beinhaltet, die Dekodierung von<br />

Paketadressen, eine optionale alternative Wegelenkung zur Leistungsoptimierung<br />

sowie eine geeignete Flußsteuerung zur Verhinderung von Datenüberlauf.<br />

Adreßdekodierung, Wegewahl <strong>und</strong> Flußsteuerung werden üblicherweise unter<br />

dem gemeinsamen Oberbegriff des Routings zusammengefaßt.<br />

Traditionell wird in Rechnernetzen wie LANs, MANs <strong>und</strong> WANs seit mehr<br />

als 2 Dekaden das sog. Store-and-Forward Routing eingesetzt, das eine bestimmte<br />

Art des Pakettransports <strong>und</strong> der Flußsteuerung beinhaltet. In Parallel-<br />

66


echnernetzen wird ebenfalls Store-and-Forward Routing verwendet, jedoch<br />

werden hier auch neuere Methoden wie Virtual-Cut-Trough <strong>und</strong> Wormhole<br />

Routing eingesetzt, die beim Informationstransport <strong>für</strong> eine besonders kleine<br />

Latenzzeit sorgen.<br />

Aktuelle Entwicklungen bei Rechnernetzen greifen auf Virtual-Cut-Through<br />

<strong>und</strong> Wormhole Routing zurück, da sie sich zur Echtzeitübertragung von<br />

Sprach-, Video- <strong>und</strong> anderen Multimediadaten eignen, so daß an dieser Stelle<br />

Wechselwirkungen bei der Entwicklung von Rechnernetzen einerseits <strong>und</strong> Netzen<br />

<strong>für</strong> Multiprozessorsysteme andererseits erkennbar sind.<br />

Trotz einiger Gemeinsamkeiten von Rechnernetzen <strong>und</strong> Parallelrechnernetzen<br />

gibt es prinzipielle Unterschiede. Bei einem Parallelrechner beispielsweise<br />

verkürzt eine geringe Latenz die Wartezeiten sowohl bei der Interprozessorkommunikation<br />

als auch bei der Prozeßsynchronisation <strong>und</strong> ist deshalb<br />

<strong>für</strong> die Effizienz des Systems von großer Bedeutung. Bei Rechnernetzen dagegen<br />

spielt, außer <strong>für</strong> Echtzeitanwendungen, mehr der Datendurchsatz als die<br />

Verweildauer eines Datenpakets im Netz die wesentliche Rolle.<br />

Ein zweiter Unterschied zwischen beiden Netztypen liegt in den spezifischen<br />

Routing-Aspekten von Wegewahl bzw. alternativer Wegelenkung. Bei Weitverkehrsnetzen<br />

(WANs) sind diese Aufgaben so komplex, daß etliche Rechner<br />

darin involviert sind. Dies liegt u.a. daran, daß die Topologien von Weitverkehrsnetzen<br />

irregulär <strong>und</strong> ständigen Veränderungen unterworfen sind, so daß<br />

Tabellen zur Lösung der Routing-Aufgaben eingesetzt werden müssen, die sich<br />

nicht wie bei Parallelrechnernetzen durch einfache, in Hardware implementierte<br />

Algorithmen ersetzen lassen. Tabellen sind flexibler in der Anpassung<br />

<strong>und</strong> können leichter als Algorithmen modifiziert werden.<br />

Parallelrechnernetze weisen fast immer eine Art von Symmetrie auf, so daß<br />

Wegewahl <strong>und</strong> Wegelenkung implizit über festverdrahtete Algorithmen oder<br />

über Mikroprogrammierung realisiert werden können. Darüberhinaus ändert<br />

sich das Netz eines gegebenen Parallelrechners in der Regel nur hinsichtlich<br />

seiner Größe, aber nicht hinsichtlich der Topologie. Algorithmische (implizite)<br />

Wegewahl <strong>und</strong> -lenkung haben gegenüber tabebellengesteuertem (expliziten)<br />

Routing den Vorteil, schneller <strong>und</strong> platzsparender zu sein, da Suchvorgänge<br />

<strong>und</strong> Tabellenhaltung entfallen. Alogrithmisches Routing wird deshalb bei Netzen<br />

<strong>für</strong> Parallelrechner bevorzugt.<br />

2.6 Routingmethoden in Netzen<br />

2.6.1 Einleitung<br />

Für die Leistungsfähigkeit eines Weitverkehrs- oder Parallelrechnernetzes spielen<br />

effiziente Routingmethoden eine wichtige Rolle. Wie bereits erwähnt, tragen<br />

Adreßdekodierung, Wegewahl <strong>und</strong> Transportart, bzw. Flußsteuerung der<br />

Pakete wesentlich zur Effizienz bei. In Bild 2.26 ist graphisch dargestellt, welche<br />

Methoden üblicherweise <strong>für</strong> diese drei Routing-Aufgaben eingesetzt werden.<br />

67


Routing<br />

Adreßdekodierung<br />

Wegewahl<br />

Transportart/Flußsteuerung<br />

Quellenbasiert<br />

Zielbasiert<br />

deterministisch<br />

adaptiv<br />

Store-and-Forward<br />

Virtual-Cut-Trough<br />

x-y-z Routing<br />

Wormhole<br />

e-cube Routing<br />

...<br />

Bild 2.26: Gliederung des Routing-Begriffs.<br />

2.6.2 Adreßdekodierung<br />

Gr<strong>und</strong>sätzlich gibt es zwei Möglichkeiten, Paketadressen zu spezifizieren. Bei<br />

der ersten Methode wird der Kopfteil (Header) eines Pakets mit einer systemweit<br />

eindeutigen, d.h. absoluten Empfängeradresse versehen. Beim Routing<br />

wird diese Adresse von jedem Zwischenknoten auf dem Weg zum Empfänger<br />

inspiziert <strong>und</strong> anhand dieser Information derjenige Übertragungskanal (Ausgang)<br />

ausgewählt, der zum nächsten geeigneten Zwischenknoten bzw. Empfänger<br />

führt. Diese Methode wird als Destination-Based Routing bezeichnet.<br />

Beim Destination-Based Routing muß jeder Zwischenknoten "wissen", in<br />

welcher Richtung das jeweilige Ziel von der eigenen Knotenposition aus zu erreichen<br />

ist. Der Absender des Pakets, der die absolute Zieladresse generiert hat,<br />

braucht sich dagegen nicht um die korrekte Dekodierung <strong>und</strong> Interpretation der<br />

Adreßinformation zu kümmern. Destination-Based Routing erfordert deshalb<br />

in den Zwischenknoten eine komplexere Logik als im Absender. Bei Rechnernetzen<br />

wie z.B. dem Internet wird durchweg diese Methode angewandt; jeder<br />

Rechner hat hier eine weltweit eindeutige, absolute Adresse, die in 4 Bytes kodiert<br />

ist. Bei Netzen <strong>für</strong> Multiprozessorsystemen ist Destination-Based Routing<br />

ebenfalls weit verbreitet.<br />

Die zweite Methode der Adreßspezifikation ist das Source-Based Routing.<br />

Hier wird das Paket, abhängig von der Position des Absenders im Netz, mit allen<br />

Informationen versehen, die es benötigt, um ohne Zusatzinformation von<br />

den Zwischenknoten zum Empfänger zu gelangen. In diesem Fall wird nicht<br />

eine absolute, sondern eine relative Empfängeradresse verwendet, die aussagt,<br />

welche Abzweigungen an welchem Zwischenknoten zu nehmen sind.<br />

In einem statischen oder dynamischen Verbindungsnetz kann das Source-Based<br />

Routing mit der Art <strong>und</strong> Weise verglichen werden, wie einem Menschen in<br />

einer fremden Stadt der Weg zu einer bestimmen Straße erklärt wird: „Zuerst<br />

geradeaus, dann nach 50 m rechts, dann die dritte Abzweigung links, usw.". Destination-Based<br />

Routing würde in dieser Analogie, bei der die Straßen den Ver-<br />

68


indungskanälen <strong>und</strong> die Passanten den Kreuzungen an den Zwischenknoten<br />

entsprechen, bedeuten, daß der Fremde an jeder Straßenkreuzung einem Passanten<br />

sein Ziel nennt <strong>und</strong> ihn dieser bis zur nächsten Kreuzung weiterschickt.<br />

Source-Based Routing erfordert im Sender eine komplexere Logik als in den<br />

Zwischenknoten. Ein Beispiel <strong>für</strong> die Anwendung dieser Methode ist beim<br />

Netz der IBM SP-2 Maschine gegeben.<br />

2.6.3 Wegewahl<br />

In nahezu allen statischen <strong>Verbindungsnetzwerke</strong>n sowie allen dynamischen<br />

Netzen, die aus mindestens zwei hintereinandergeschalteten Banyans bestehen,<br />

existiert mehr als ein Weg von jedem Sender zu jedem Empfänger. Daraus ergibt<br />

sich das Problem der Wegewahl, um <strong>für</strong> einen bestimmten Datentransfer<br />

den jeweils besten Weg festzulegen. Die nicht adaptive Lösung des Wegewahlproblems<br />

besteht darin, aus den potentiellen Wegen einen bestimmten Weg anhand<br />

eines fest vorgegebenen Algorithmus auszuwählen. Werden dabei als Eingabeparameter<br />

nur die Quell- <strong>und</strong> die Zieladresse des Datenpakets<br />

herangezogen, insbesondere resultieren unterschiedliche Netztopologien in unterschiedlichen<br />

Algorithmen. Diese Methode wird als deterministisches Routing<br />

bezeichnet.<br />

Eine andere Lösung des Wegewahlproblems besteht darin, den momentanen<br />

Zustand des Netzes hinsichtlich Komponentenausfälle oder Kanalüberlastungen<br />

in die Wegewahlentscheidung mit einzubeziehen. Solche Verfahren sind a<br />

priori nicht deterministisch, weil Ausfälle oder Überlastungen von Kanälen<br />

oder Knoten nicht vorhergesagt werden können. Sie werden als adaptives Routing<br />

bezeichnet.<br />

Adaptive Algorithmen haben den Vorteil, daß sie durch alternative Wegewahl<br />

den Datendurchsatz durch ein Verbindungsnetzwerk potentiell erhöhen,<br />

weil hochbelastete Strecken <strong>und</strong> Knoten umgangen werden können. Als Nachteil<br />

weisen sie im Vergleich zu den deterministischen Verfahren eine höhere<br />

Komplexität auf <strong>und</strong> sind deshalb häufig langsamer in der Abarbeitung.<br />

Für den Allgemeinfall kann nicht vorausgesagt werden, ob deterministisches<br />

oder adaptives Routing günstiger <strong>für</strong> Durchsatz <strong>und</strong> Latenz ist. Das jeweils geeignetere<br />

Verfahren hängt von der Netztopologie, der Verkehrsverteilung <strong>und</strong><br />

den Ansprüchen an die Fehlertoleranz ab.<br />

2.6.4 Flußsteuerung<br />

Statische oder dynamische, paketvermittelnde Netze mit dezentraler Verbindungssteuerung<br />

haben den unerwünschten Freiheitsgrad, daß es vorkommen<br />

kann, daß zur selben Zeit zwei oder mehr Datenpakete denselben Knotenausgang<br />

oder Kanal an einem Zwischenknoten benutzen wollen, weil sie unabhängig<br />

voneinander den gleichen Weg gewählt haben <strong>und</strong>/oder denselben Zielknoten<br />

anstreben. Da Kanäle physikalisch nur nacheinander Daten übertragen<br />

können, müssen in den Zwischenknoten Puffer installiert sein, um Pakete so-<br />

69


lange zwischenzuspeichern, bis die benötigte Ressource (Kanal, Ausgang etc.)<br />

wieder frei ist. Beim Zwischenspeichern muß der betreffende Knoten da<strong>für</strong> sorgen,<br />

daß seine Puffer nicht überlaufen, weil sonst Pakete verloren gehen. Die<br />

Gefahr eines Pufferüberlaufs ist immer dann gegeben, wenn die Verkehrsdichte<br />

inhomogen verteilt ist <strong>und</strong> sich die Datenpakete an wenigen Knoten häufen<br />

oder wenn man aus Kosten- oder Latenzzeitgründen darauf verzichtet hat, ein<br />

blockierungsfreies Netz zu verwenden. (Blockierungsfreie, dynamische Netze<br />

sind immer aufwendiger in der Konstruktion als nicht blockierungsfreie <strong>und</strong> haben<br />

eine größere Latenz).<br />

Andererseits können Ressourcenkonflikte auch von der <strong>parallel</strong>en Anwendung<br />

selbst herrühren, die auf dem Multiprozessor ausgeführt wird, sofern diese<br />

bestimmte Empfänger bevorzugt <strong>und</strong> auch dann anspricht, wenn sie momentan<br />

mit einer anderen Interprozessorkommunikation beschäftigt sind.<br />

Schließlich kann ein Pufferüberlauf vom Netz verursacht sein, wenn z.B. in<br />

einer unidirektionalen, statischen Netztopologie mehr Kanäle auf einen Knoten<br />

zulaufen als von ihm abgehen, so daß zwangsläufig Konzentrationseffekte auftreten,<br />

oder wenn ein dezentrales Routingverfahren mangels Kenntnis über die<br />

Routingentscheidung eines Nachbarknotens einem Datenpaket denselben Zwischenknoten<br />

wie der Nachbar zuweist, so daß dort mehrere Pakete zusammentreffen.<br />

All diese Fälle treten in der Praxis auf <strong>und</strong> müssen beachtet<br />

werden.<br />

Zur Lösung des Pufferüberlaufproblems kann entweder Leitungsvermittlung<br />

verwendet werden, weil diese durch stationäre Ressourcenallokation einen Ressourcenkonflikt<br />

vermeidet, oder man kann bei Verwendung von Paketvermittlung<br />

bei drohendem Überlauf den Zufluß neuer Daten durch eine zusätzliche<br />

Flußsteuerung (Flow Control) stoppen. Ein paketvermittelndes Netz mit<br />

Flußsteuerung erfordert, daß zwischen allen benachbarten Knoten <strong>für</strong> jedes<br />

übertragene Paket ein Flußsteuerungssignal in der Gegenrichtung übermittelt<br />

wird (Bild 2.27).<br />

Knoten<br />

i<br />

Daten=<br />

paket<br />

Fluß=<br />

steuerung<br />

Knoten<br />

i+1<br />

Bild 2.27: Verbindungsnetzwerk mit Flußsteuerung auf Paketbasis.<br />

Die Flußsteuerung kann entweder über eine spezielle Leitung (Strobe oder<br />

Data Acknowledge) oder bei bidirektionalen Netzen über ein spezielles Flußsteuerungspaket<br />

vorgenommen werden. Prinzipiell gibt es die drei Möglichkeiten<br />

des Store-and-Forward-, Virtual-Cut-Trough- <strong>und</strong> Wormhole-Routings, um<br />

Datentransport mit Flußsteuerung durchzuführen.<br />

70


2.6.5 Store-and-Forward Routing<br />

Beim Store-and-Forward Routing erfolgt die Flußsteuerung auf Paketbasis, d.h.<br />

Pakete können beim Durchgang durch das Netz gestoppt <strong>und</strong> nach Freiwerden<br />

belegter Ressourcen weitergeschickt werden. Das bedeutet, daß in jedem<br />

Schalt- oder Rechenknoten Pufferplatz <strong>für</strong> mindestens ein Paket vorhanden sein<br />

muß, um im Falle, daß der Nachbarknoten nicht datenaufnahmebereit ist, dieses<br />

zwischenzuspeichern. Da die Empfängerknoten in einem Netzwerk i.a. nicht direkt<br />

mit den Sendeknoten verb<strong>und</strong>en sind, das Ziel es aber ist, die Entstehung<br />

neuer Daten direkt an der Quelle zu beeinflussen, muß die Flußkontrolle, ebenso<br />

wie der Datentransport, indirekt über Zwischenknoten bzw. Schaltstufen im<br />

Netz abgewickelt werden.<br />

Ein negatives Acknowledge-Signal beispielsweise, das vom Knoten (i+1),<br />

der zugleich Empfänger einer Nachricht sein kann, an den Vorgängerknoten i<br />

ausgegeben wird, bewirkt, daß dieser die Pakete <strong>für</strong> den Empfängerknoten solange<br />

speichern muß, bis der Empfänger wieder aufnahmebereit ist. Sobald der<br />

Puffer von Knoten i überzulaufen droht, wird von diesem seinerseits ein Flußsteuerungssignal<br />

an dessen Vorgängerknoten (i-1) ausgegeben, worauf jener<br />

die Pakete <strong>für</strong> (i+1) speichern muß, usf. Dieser sog. Backpressure-Vorgang bewirkt<br />

schließlich, daß der Datensender nach einer gewissen Zeitverzögerung<br />

über eine Kette von Zwischenknoten ein negatives Acknowledge-Signal erhält<br />

<strong>und</strong> die Erzeugung neuer Pakete aussetzt, bis das Flußsteuerungssignal verschwindet.<br />

Dadurch wird die Paketentstehung an der Datenquelle bei Bedarf<br />

gestoppt. Vor <strong>und</strong> während der Ausbreitung des Flußsteuerungssignals vom<br />

Empfänger zum Sender können Datenpakete in der Gegenrichtung wandern<br />

<strong>und</strong> müssen nötigenfalls auf der Strecke dazwischen gepuffert werden. Der<br />

Wiederanlauf des Datentransports erfolgt in derselben Richtung wie das Stoppen,<br />

indem vom Datenempfänger das negative Acknowledge-Signal weggenommen<br />

wird. Durch eine Kette von Zwischenknoten wird dies dem Datensender<br />

mitgeteilt.<br />

Store-and-Forward Routing arbeitet im nicht blockierten Fall so, daß das Datenpaket<br />

von jedem Zwischenknoten erst komplett eingelesen (=store), bevor<br />

der Adreßteil des Pakets dekodiert wird. Danach wird, vorausgesetzt, daß das<br />

Acknowledge-Signal positiv ist <strong>und</strong> der Nachbarknoten nicht bereits der Empfänger<br />

der Nachricht darstellt, das Paket an einen geeigneten Nachbarknoten<br />

oder eine weitere Schaltstufe weitergegeben (=forward). Store-and-Forward<br />

gleicht dem Transportvorgang, wie er von einer Eimerkette durchgeführt wird<br />

(Bild 2.28), bei der Wassereimer zum Löschen eines Brandes von Person zu<br />

Person weitergereicht werden. Store-and-Forward darf jedoch nicht mit einer<br />

Pipeline-Übertragung verwechselt werden, die mit kleineren Elementen als mit<br />

Paketen arbeitet, so wie dies bei Wormhole-Routing beipielsweise der Fall ist.<br />

Bei der Datenübertragung ist die Latenzzeit sowohl proportional zur Paketlänge<br />

als auch zur Zahl der Zwischenstufen. Die Datenrate (Bandbreite) ist der Proportionalitätsfaktor.<br />

Die Bandbreite spiegelt sich in der Geradensteigung des<br />

korrespondierenden Raum-/Zeitdiagramms wieder (Bild 2.29).<br />

71


Daten=<br />

paket<br />

forward<br />

store<br />

forward<br />

store<br />

forward<br />

store<br />

Sender<br />

Acknowledge<br />

i-1<br />

Acknowledge<br />

i<br />

Acknowledge<br />

Empfän=<br />

ger<br />

Bild 2.28: Store-and-Forward Routing.<br />

Paket=<br />

position<br />

Datenrate<br />

Header<br />

Paket<br />

Empfänger<br />

Knoten i<br />

Knoten i-1<br />

Sender<br />

0 1 2 3 4<br />

Zeit<br />

Bild 2.29: Datenübertragung bei Store-and-Forward Routing.<br />

Store-and-Forward Routing ist relativ einfach zu implementieren, da nur jeweils<br />

zwei Knoten bzw. Schaltstufen <strong>für</strong> das Weiterreichen des Pakets erforderlich<br />

sind. Allerdings ist das Ein- <strong>und</strong> Ausspeichern der Pakete unnötig zeitraubend<br />

<strong>und</strong> trägt zur hohen Latenzzeit dieses Verfahrens bei. Darüberhinaus muß<br />

in jedem Knoten ausreichend Pufferplatz <strong>für</strong> den Fall eines negativen Acknowledge<br />

vorhanden sein. In <strong>Verbindungsnetzwerke</strong>n <strong>für</strong> Parallelrechner wird<br />

Store-and-Forward selten eingesetzt, weil große <strong>und</strong> schnelle Pufferspeicher so<br />

teuer sind wie die Cache-Speicher von RISC-Prozessoren.<br />

2.6.6 Virtual-Cut-Through Routing<br />

Virtual-Cut-Through Routing [Kermani79] stellt hinsichtlich der Latenzzeit<br />

eine deutliche Verbesserung gegenüber Store-and-Forward dar. Bei Virtual-<br />

Cut-Through Routing wird auf die temporäre Ein- <strong>und</strong> Ausspeicherung des Datenpakets<br />

verzichtet <strong>und</strong> unmittelbar nach dem Eintreffen der Paketadresse mit<br />

der Dekodierung <strong>und</strong> Wegeauswahl begonnen.<br />

Bei unbelegtem Ausgangskanal <strong>und</strong> positivem Acknowledge des Folgeknotens<br />

wird das einlaufende Paket "on-the-fly", d.h. schritthaltend mit dem<br />

Einlesen zum entsprechenden Ausgang befördert. Die Latenz ist dadurch proportional<br />

zur Headerlänge <strong>und</strong> zur Knotenzahl <strong>und</strong> fällt geringer als bei Storeand-Forward<br />

Routing aus, was man an dem steileren Geradenanstieg im Raum-<br />

/Zeitdiagramm nach Bild 2.30 sehen kann.<br />

72


Paket=<br />

position<br />

Empfänger<br />

Knoten i<br />

Knoten i-1<br />

Sender<br />

Datenrate<br />

Nutzdaten<br />

Header<br />

0 1 2 3 4<br />

Zeit<br />

Bild 2.30: Datenübertragung bei Virtual-Cut-Through Routing.<br />

Virtual-Cut-Through Routing erfordert in den Zwischenknoten bzw. Schaltstufen<br />

eine schnelle Adreßdekodier- <strong>und</strong> Wegewahllogik, um mit der Datenrate<br />

der Verbindungskanäle Schritt halten zu können.<br />

Bei belegten Ressourcen (Blockierungsfall) verhält sich Virtual-Cut-Through<br />

genauso wie Store-and-Forward, entsprechend muß auch hier ausreichend<br />

Pufferplatz im Knoten vorhanden sein. Ein Beispiel <strong>für</strong> die Verwendung von<br />

Virtual-Cut-Through Routing stellt der T3D-Rechner der Firma Cray dar, bei<br />

dem auf der Ebene des physikalischen Transports die Pakete in Einheiten von<br />

16 Bit unterteilt werden. Diese Einheiten heißen Physical Transfer Units.<br />

2.6.7 Wormhole Routing<br />

Wormhole-Routing [Dally87] ist bei nicht belegten Kommunikationsressourcen<br />

identisch mit Virtual-Cut-Through Routing: Sobald der Adreßteil eines Datenpakets<br />

im Knoten eingetroffen ist, wird das einlaufende Paket am entsprechenden<br />

Kanal wieder ausgegeben. Ebenso werden die Paketdaten in<br />

elementare Quanten von üblicherweise 1 oder 2 Byte <strong>für</strong> den Transport auf den<br />

Kanälen zerlegt. Der entscheidende Vorteil dieses Verfahrens liegt jedoch darin,<br />

daß im Blockadefall (fast) keine Pufferspeicher <strong>für</strong> die temporäre Datenhaltung<br />

erforderlich sind, weil die Flußsteuerung nicht auf Paketbasis, sondern auf<br />

Basis der wesentlich kleineren physikalischen Transporteinheiten (Phits) erfolgt,<br />

die man deshalb als flow control digits (Flits) bezeichnet.<br />

Bei Wormhole-Routing verteilt sich bei belegten Übertragungskanälen oder<br />

kurzzeitig nicht empfangsbereiten Knoten ein Datenpaket aufgr<strong>und</strong> eines Backpressure-Mechanismus<br />

auf alle Knoten, die auf dem Weg vom Sender zum<br />

Empfänger liegen. In jedem Knoten wird je ein Flit des Pakets gespeichert. Sobald<br />

der Knoten oder der Kanal, der den Stau verursacht hat, wieder frei ist, beginnen<br />

die vorderen Flits des Pakets sich ähnlich einer Ziehharmonika auseinanderzuziehen,<br />

während die hinteren Flits des Pakets noch darauf warten, daß<br />

der Stau sich auflöst.<br />

Das Zusammen- <strong>und</strong> Auseinanderziehen der Flits eines Datenpakets erinnert<br />

an die Art <strong>und</strong> Weise, wie sich ein Wurm fortbewegt, daher auch die Namensgebung<br />

Wormhole Routing.<br />

73


Da Flits aus nur ein oder zwei Bytes bestehen <strong>und</strong> keine Zieladresse enthalten,<br />

können Flits verschiedener Pakete nicht gemischt werden, so daß ein Flit, das<br />

in einem Knoten zwischengespeichert ist, den daran angeschlossenen Kommunikationskanal<br />

solange blockiert, bis es von diesem abtransportiert werden<br />

kann. Aus demselben Gr<strong>und</strong> ist die Implementierung virtueller Kanäle nur auf<br />

Paketbasis möglich. Ein einziges Datenpaket, das aus mehreren Flits besteht,<br />

kann somit eine Vielzahl von Kommunikationskanälen <strong>für</strong> längere Zeit besetzt<br />

halten, was einen Nachteil von Wormhole-Routing darstellt.<br />

Das gravierendste Problem bei Wormhole Routing ist, daß durch die exklusive<br />

Belegung der Kanäle, wenn sie von mehreren gleichzeitig stattfindenden<br />

Interprozessorkommunikationen vorgenommen wird, unter bestimmten Bedingungen<br />

eine Blockadesituation (Deadlock) entstehen kann, die in letzter<br />

Konsequenz den ganzen Parallelrechner zum Stillstand bringt. Deshalb sind zusätzliche<br />

Maßnahmen zur Deadlock-Vermeidung unbedingt erforderlich.<br />

Eine Deadlock-Situation kann auch bei den zuvor beschriebenen Verfahren<br />

von Store-and-Forward- <strong>und</strong> Virtual-Cut-Through-Routing auftreten, weil hier<br />

gegenseitige Pufferblockaden möglich sind. Deshalb ist bei der Anwendung jedes<br />

Routing-Verfahrens unbedingt die Deadlock-Problematik zu beachten.<br />

Dazu wurden eine Reihe spezieller Methoden entwickelt [Gopal85, Dally87],<br />

die im Kapitel über Routing-Verfahren <strong>für</strong> statische Netze erläutert werden.<br />

Insgesamt kann gesagt werden, daß bei Parallelrechnernetzen Wormhole-<br />

Routing aus Kosten- <strong>und</strong> Geschwindigkeitsgründen häufig eingesetzt wird.<br />

74


3 Statische <strong>Verbindungsnetzwerke</strong><br />

3.1 Einleitung<br />

<strong>Verbindungsnetzwerke</strong> werden in die zwei großen Kategorien der statischen<br />

<strong>und</strong> der dynamischen Netze eingeteilt. Bei statischen Netzen handelt es sich um<br />

Verbindungsstrukturen, die aus beliebigen mathematischen Graphen abgeleitet<br />

werden können <strong>und</strong> bei denen die Knoten Prozessoren oder Rechner darstellen<br />

<strong>und</strong> die Kanten die Verbindungen zwischen den Prozessoren bzw. Rechenknoten<br />

symbolisieren. Statische Netze werden auch als einstufig oder direkt<br />

bezeichnet, weil die Prozessoren ohne dazwischenliegende Schalter direkt miteinander<br />

verb<strong>und</strong>en sind. Aufgr<strong>und</strong> ihrer Herkunft von mathematischen Graphen<br />

gibt es, im Gegensatz zu den dynamischen Netzen, eine praktisch unbegrenzte<br />

Zahl möglicher statischer Verbindungsstrukturen.<br />

3.2 Übersicht<br />

Ein wichtiges Kennzeichen fast aller Graphen, die als statische Verbindungsstrukturen<br />

in Multiprozessoren oder Multirechnern verwendet werden,<br />

ist, daß sie auf wenigen, sehr einfachen Konstruktionsregeln basieren <strong>und</strong> bestimmte<br />

Symmetrieeigenschaften aufweisen. Die Gründe, warum regelmäßige<br />

<strong>und</strong> insbesondere symmetrische Topologien gegenüber irregulären <strong>und</strong> amorphen<br />

Strukturen bevorzugt werden, liegen darin, daß sich aus der Symmetrie<br />

eine Reihe von Vorteilen wie einfacheres Routing im Netz <strong>und</strong> leichtere Programmierbarkeit<br />

der Parallelrechner ergeben.<br />

Trotz der Vorteile symmetrischer Netze gibt es eine große Zahl von Topologien<br />

wie z.B. Gitter oder Bäume, die nicht im (graphentheoretischen Sinne)<br />

symmetrisch sind, aber dennoch Bedeutung erlangt haben, weil sie andere Vorzüge,<br />

wie z.B. eine leichte Überschaubarkeit oder einfache Erweiterbarkeit aufweisen.<br />

Diese mehr praktischen Aspekte haben in jüngster Zeit zunehmend an<br />

Bedeutung gewonnen.<br />

Generell werden bei statischen Netzen modulare Strukturen bevorzugt, weil<br />

durch Modularität auch große Netze durch Replikation vieler einfacher Gr<strong>und</strong>-<br />

Elemente aufgebaut werden können. Bekannte Beispiele da<strong>für</strong> sind das Gitter<br />

<strong>und</strong> der binäre Hypercubus, die aus Zeilen <strong>und</strong> Spalten bzw. aus kleineren Hypercube-Moduln<br />

aufgebaut werden können.<br />

Bei Gitter <strong>und</strong> Hypercube kommt zur Modularität noch die Rekursion als<br />

zweite Konstruktionsregel hinzu, die erst bei mehr als 3 Dimensionen wichtig<br />

wird. Ein (n+1)-dimensionaler Hypercubus beispielsweise entsteht durch Verdoppeln<br />

eines vorhandenen n-dimensionalen Moduls, wobei die korrespondierenden<br />

Knoten beider Module miteinander verb<strong>und</strong>en werden. Analog entsteht<br />

ein (n+1)-dimensionales Gitter durch Vervielfachen eines n-dimensionalen Gittermoduls,<br />

wobei die korrespondierenden Knoten der Replikate auf Geraden<br />

liegend verb<strong>und</strong>en werden.<br />

75


3.3 Typische statische Netze<br />

Das heutzutage am häufigsten verwendete statische Netz ist das zwei- oder<br />

dreidimensionale Gitter in der Variation mit oder ohne wrap-aro<strong>und</strong>-Enden,<br />

während früher der Hypercube [z.B. Harary88] eine dominierende Rolle spielte.<br />

Ein Gitter mit wrap-aro<strong>und</strong>-Enden wird auch als Torus bezeichnet. Die Intel<br />

Paragon- <strong>und</strong> die Cray T3D/E-Rechner beispielsweise enthalten eine Gittertopologie.<br />

Neben Gitter <strong>und</strong> Hypercube werden eine Vielzahl weiterer Topologien<br />

wie Ring, Sehnenring [Arden81], Baum, Cube-Connected-Cycles<br />

[Preparata79] oder systolische Felder [Chen90] in kommerziellen <strong>und</strong> Forschungs-Parallelrechnern<br />

eingesetzt. Die bekanntesten dieser Strukturen sind in<br />

Bild 3.1 dargestellt. Überblicksartig zusammengefaßt läßt sich folgendes über<br />

diese Topologien sagen:<br />

• Ringe sind ähnlich wie Busse topologisch einfache Strukturen. Sie sind jedoch<br />

nur <strong>für</strong> kleine Prozessorzahlen (≤32) geeignet. Eine Erweiterung der<br />

normalen Ringstruktur, die sowohl die Bandbreite als auch die Fehlertoleranz<br />

erhöht, ist die Sehnenringtopologie.<br />

• 3-dimensionale Gitter mit <strong>und</strong> ohne wrap-aro<strong>und</strong> Enden erfreuen sich u.a.<br />

wegen ihrer einfachen technischen Implementierung <strong>und</strong> guten Überschaubarkeit<br />

durch den Programmierer zunehmender Beliebtheit.<br />

• Für die Hypercube-Topologie wurden weltweit bereits viele <strong>parallel</strong>e Algorithmen<br />

entwickelt. Einer ihrer Vorteile, neben ihrem relativ einfachen Aufbau<br />

<strong>und</strong> den kurzen mittleren Knotenabständen, ist, daß sie fast alle statischen<br />

Topologien mit hoher Effizienz nachbilden können.<br />

• Cube-Connected-Cycles haben gegenüber Hypercuben den Vorteil, daß der<br />

Verzweigungsgrad pro Knoten unabhängig von der Dimension, d.h. der Anzahl<br />

der Rechenknoten im System ist.<br />

• Eine Stern-Topologie ist überall dort vorteilhaft, wo ein Broad-/Multicast,<br />

ein inverser Multicast oder eine Prozeßsynchronisation durchzuführen ist.<br />

• Bäume sind <strong>für</strong> viele Algorithmen <strong>und</strong> Datenstrukturen in speziellen Anwendungen<br />

wie z.B. <strong>verteilte</strong>n Datenbanken günstig.<br />

• Systolische Felder haben ihre eigene Bedeutung bei SIMD-Programmen der<br />

Muster- <strong>und</strong> Bildverarbeitung bzw. des Bildverstehens.<br />

Neben diesen populären Topologien existieren weitere wichtige statische Verbindungsstrukturen,<br />

die entweder aus theoretischen Gründen besonders interessant<br />

sind, wie der de Bruijn-Graph [Samatham91] <strong>und</strong> Star-Graph [Akers89],<br />

oder solche, die große praktische Bedeutung erlangt haben, weil sie in technischen<br />

<strong>Systeme</strong>n in größerer Stückzahl eingesetzt wurden, wie z.B. die Fat Tree-<br />

Topologie [Leiserson85] in der TMC CM-5. Ein zur Fat-Tree-Topologie ähnliches<br />

Konzept wird übrigens seit langem in der hierarchisch organisierten Verkabelung<br />

der Telefonvermittlungstechnik verwendet.<br />

76


Ring<br />

Sehnenring<br />

2D-Gitter<br />

.. . . .. . ..<br />

. ..<br />

. ..<br />

3D-Torus<br />

4D-Hypercube<br />

3D-Cube Connected Cycles<br />

vollständiger Baum Broadcast-Stern Systolisches Feld<br />

Bild 3.1: Einige der bekanntesten statischen Topologien.<br />

Weiterhin gibt es eine Reihe von Verbindungsstrukturen, die entwickelt wurden,<br />

um die Mängel beliebter Netze wie Bäume (rel. großer Durchmesser) <strong>und</strong><br />

Hyperwürfel (schwierige Skalierbarkeit) zu beheben bzw. abzumildern. Alle<br />

verbesserten Strukturen beruhen darauf, zusätzliche Verbindungen zwischen<br />

den Knoten einzufügen, die aber ihrerseits die Routing-Komplexität erhöhen.<br />

Zu diesen Strukturen zählen neben dem bereits erwähnten Fat Tree der Hypertree<br />

[Goodmann81] <strong>und</strong> der X-Tree [Despain78], die auf die Optimierung der<br />

Baumtopologie zielen sowie der Bridged Cube [Amawy90], Twisted Cube<br />

[Esfahania91] <strong>und</strong> Crossed Cube [Efe92], die der Verbesserung von Hyperwürfeln<br />

dienen. Eine Auswahl aus diesen verbesserten Topologien ist in Bild 3.2<br />

gezeigt.<br />

Schließlich sind aus der Graphentheorie verschiedene Gruppen von Graphen<br />

bekannt, wie z.B. die Moore-Graphen [Hoffman60, Delorme84], die Kneser-<br />

Graphen [Boll78] bzw. reduzierte Kneser-Graphen [Sied92], die Cayley-Graphen<br />

[Akers89] sowie die Balanced Incomplete Block Designs [Opatrny86], die<br />

Eingang in die Parallelrechnerarchitektur gef<strong>und</strong>en haben. Diese Topologien<br />

77


De Brujin-Graph<br />

Star-Graph<br />

Fat Tree<br />

X-Tree<br />

Hypertree<br />

Twisted Cube<br />

Bild 3.2: Fortgeschrittenere statische Topologien.<br />

weisen erheblich bessere graphentheoretische Eigenschaften auf als die üblichen<br />

Verbindungsstrukturen, werden jedoch bei kommerziellen Parallelrechnern<br />

bislang nicht eingesetzt. Teilweise sind sie noch Gegenstand der Forschung.<br />

Die reduzierten Kneser-Graphen haben beispielsweise den technischen<br />

Vorteil, daß die beiden Parameter Knotenzahl <strong>und</strong> Verzweigungsgrad unabhängig<br />

voneinander gewählt werden können. Einige Beispiele dieser "modernen"<br />

Verbindungsstrukturen zeigt Bild 3.3.<br />

Zu beachten ist, daß die aufgelisteten Graphengruppen keine Klassifikation<br />

im eigentlichen Sinne darstellen, da sie nicht orthogonal zueinander sind, sondern<br />

sich gegenseitig überlappen. So kann man beispielsweise zeigen, daß alle<br />

statischen Netze, die knotensymmetrisch sind, auch als Cayley-Graphen dargestellt<br />

werden können [Akers89].<br />

Den Cayley-Graphen ist aufgr<strong>und</strong> ihrer übergreifenden theoretischen Bedeutung<br />

ein eigenes Kapitel gewidmet, in dem Eigenschaften <strong>und</strong> Konstruktion<br />

78


Moore-Graph <strong>für</strong> N=10<br />

(= Petersen-Graph) Reduzierter Kneser-Graph (N=15)<br />

Cayley-Graph (N=8)<br />

Balanced Incomplete Block Design (N=9)<br />

Bild 3.3: Beispiele von Topologien mit besonderen graphentheorischen Eigenschaften.<br />

von Cayley-Graphen ausführlich erörtert werden. Auch die <strong>für</strong> fehlertolerante<br />

<strong>Systeme</strong> besonders interessanten Balanced Incomplete Block Designs werden<br />

in einem kurzen Kapitel näher erläutert, ebenso wie der Aufbau <strong>und</strong> die Eigenschaften<br />

der de Bruijn <strong>und</strong> Star-Graphen.<br />

Trotz der großen Fülle an Topologien, die <strong>für</strong> statische <strong>Verbindungsnetzwerke</strong><br />

in Frage kommen, sollte man nicht übersehen, daß sich alle Graphen von<br />

einer einzigen Topologie, nämlich dem vollständig vermaschten Graphen ableiten<br />

lassen, woraus sie durch Weglassen von Verbindungen entstanden sind.<br />

Bild 3.4 zeigt Beispiele <strong>für</strong> die Konstruktion einiger Topologien aus dem vollständig<br />

vermaschten Graphen, wie Ring, Gitter, Torus, Würfel, Barrel Shifter<br />

sowie verschiedene Variationen der Baumstruktur. Die alles enthaltende, voll<br />

vermaschte Struktur stellt zugleich den teuersten aller Graphen dar.<br />

3.4 Symmetrie bei statischen Netzen<br />

Es gibt viele Beispiele <strong>für</strong> Netzwerke, die im graphentheoretischen Sinne symmetrisch<br />

sind, wie z.B. die Torus- oder die Hypercube-Topologie, aber auch einige,<br />

die nicht dazu gehören, wie das zwei- oder mehrdimensionale Gitter beispielsweise.<br />

Genau betrachtet, existieren zwei verschiedene Arten von<br />

Symmetrie, nämlich die Kanten- <strong>und</strong> die Knotensymmetrie. Wird ein Graph als<br />

symmetrisch bezeichnet, meint man damit i.a. die Knotensymmetrie. Eng ver-<br />

79


vollständig vermaschter Graph<br />

Ring<br />

2 D-Matrix (2x4)<br />

2 D-Torus (2x4) 3 D-Würfel<br />

Baum X-Tree Hypertree Barrel Shifter<br />

Bild 3.4: Beispiele <strong>für</strong> die Ableitung von Topologien aus dem vollständig vermaschten Graphen.<br />

wandt mit der Symmetrie ist die Regelmäßigkeit (Regularität) eines Graphen.<br />

Beide Begriffe sind besonders wichtig <strong>und</strong> müssen daher definiert werden:<br />

Def. 3.1: Ein Graph heißt regelmäßig (regulär), wenn von jedem Knoten gleich<br />

viele Kanten ausgehen. Die Zahl der Kanten pro Knoten wird als Grad d des<br />

Graphen bezeichnet. Bei einem regelmäßigen Graphen ist der Grad konstant.<br />

Def. 3.2: Ein Graph heißt kantensymmetrisch, wenn es eine Abbildung f gibt,<br />

die angewandt auf jede Kante eines Graphen G einen Graphen G' liefert, der<br />

identisch zu G ist. Für diesen Fall heißt f eine Abbildung von G auf sich selbst<br />

oder Automorphismus von G <strong>und</strong> G' ist automorph zu G.<br />

Das bedeutet, daß die Topologie eines kantensymmetrischen Graphen von jeder<br />

Kante aus betrachtet gleich aussieht. Ein Beispiel <strong>für</strong> einen Automorphismus ist<br />

die Drehung jeder Kante um 90° nach rechts.<br />

Eine zur Kantensymmetrie analoge Definition existiert <strong>für</strong> den Begriff der<br />

Knotensymmetrie, bei dem die Knoten eines Graphen auf (andere) Knoten desselben<br />

Graphen abgebildet werden.<br />

80


Def. 3.3: Ein Graph heißt knotensymmetrisch, wenn es eine Abbildung g gibt,<br />

die angewandt auf jeden Knoten eines Graphen G einen identischen Graphen G'<br />

liefert; g ist ein Automorphismus von G.<br />

Beide Symmetrieformen treten unabhängig voneinander auf, so daß ein kantensymmetrischer<br />

Graph nicht knotensymmetrisch zu sein braucht <strong>und</strong> umgekehrt.<br />

Bild 3.5 zeigt zwei Beispiele <strong>für</strong> dieses Verhalten. In der Sechseck-Topologie<br />

von Bild 3.5a) wird jeder Knoten durch eine Drehung um 60° auf einen<br />

Nachbarknoten abgebildet. Für die Kanten dieses Graphen dagegen gibt es keinen<br />

solchen Automorphismus.<br />

Ebenfalls eine Drehung um 60° bildet im Stern von Bild 3.5b) jede Kante in<br />

ihre Nachbarkante ab. Diesmal haben die Knoten keine entsprechende Abbildung<br />

f, weil der zentrale Knoten in der Mitte des Sterns invariant bzgl. der Drehung<br />

ist. Die Figur b) kann auch deshalb nicht knotensymetrisch sein, weil der<br />

zentrale Knoten einen anderen Knotengrad hat als die äußeren Knoten.<br />

a) b)<br />

Bild 3.5: Zwei regelmäßige Graphen, die knotensymmetrisch, aber nicht kantensymmetrisch<br />

(a), bzw. kantensymmetrisch, aber nicht knotensymmetrisch sind (b).<br />

Wichtig ist noch festzustellen, daß aus der Symmetrie die Regelmäßigkeit des<br />

Graphen folgt. Dies ist eine <strong>für</strong> viele praktische Belange bedeutsame Tatsache<br />

(Satz 3.1).<br />

Satz 3.1: Ein knotensymmetrischer Graph ist zugleich regelmäßig, aber nicht<br />

umgekehrt.<br />

Eine notwendige, aber nicht hinreichende Bedingung <strong>für</strong> Knotensymmetrie ist,<br />

daß von allen Knoten gleich viele Kanten abgehen, d.h., daß der Grad des Graphen<br />

konstant ist. Knotensymmetrische Graphen haben eine Reihe günstiger<br />

Eigenschaften, wie z.B.:<br />

• Der Graph sieht aus der Sicht jedes Knoten gleich aus. Dies erleichtert die<br />

Programmierung der darauf basierenden Parallelrechner.<br />

• Der Verkehr wird (im Prinzip jedenfalls) gleichmäßig verteilt, weil es keine<br />

ausgezeichneten Knoten gibt.<br />

81


• Das Routing ist <strong>für</strong> jeden Prozessor gleich. Spezialfälle, wie z.B. Prozessoren<br />

am Rand eines Gitters etc., gibt es nicht. Dadurch entfallen Routing-Tabellen.<br />

• Auf jedem Prozessor kann derselbe <strong>parallel</strong>e Algorithmus ausgeführt werden,<br />

weshalb Anwendungen einfacher <strong>und</strong> übersichtlicher gestaltet werden<br />

können als im irregulären Fall.<br />

• Die Leistungsanalyse der Rechnerarchitektur <strong>und</strong> die Herstellbarkeit <strong>und</strong> Erweiterbarkeit<br />

des Netzwerks werden erleichtert.<br />

• Operationen wie Broadcast, Multicast <strong>und</strong> inverser Multicast, die in Hardware<br />

durch das Netzwerk ausgeführt werden, sind in einem einfach strukturierten<br />

Netz leichter zu implementieren.<br />

3.5 Metriken bei statischen Netzen<br />

Aufgr<strong>und</strong> ihrer Herkunft aus allgemeinen Graphen spielt die Graphentheorie<br />

bei statischen <strong>Verbindungsnetzwerke</strong>n eine wichtige Rolle. Insbesondere werden<br />

die dort gebräuchlichen Maße (Metriken), wie Durchmesser, mittlerer<br />

Knotenabstand, Knotenzusammenhang usw., auch auf statische <strong>Verbindungsnetzwerke</strong><br />

angewandt, um dadurch deren Eigenschaften besser voraussagen<br />

bzw. quantifizieren zu können. Neben den erwähnten Metriken sind noch die<br />

Maße mittlere Nachrichtendichte, Halbierungsbreite <strong>und</strong> Konnektivität <strong>für</strong> die<br />

Beurteilung statischer Netze wichtig.<br />

In einem statischen Netz erfolgt die Kommunikation zwischen zwei beliebigen<br />

Knoten über Zwischenknoten, wenn Sender <strong>und</strong> Empfänger einer Nachricht<br />

keine direkten Nachbarn sind. Der Weg der Nachricht durch das Netz wird<br />

als Pfad bezeichnet. Ein Pfad ist, mathematisch ausgedrückt, eine Folge von<br />

Kanten im Graphen des Netzes. Die Zahl der Kanten des Pfades ist ein Maß <strong>für</strong><br />

die Entfernung der kommunizierenden Knoten. Da es zwischen zwei Knoten in<br />

einem statischen Netz i.a. mehrere Pfade gibt, die auch verschieden lang sein<br />

können, verwendet man <strong>für</strong> die Definition des Abstandes a zwischen zwei Knoten<br />

das Minimum aller Pfadlängen zwischen dem betrachteten Knotenpaar. Der<br />

Knotenabstand wird auch als Distanz bezeichnet.<br />

Man geht davon aus, daß der Knotenabstand wesentlich die Latenzzeit der<br />

Kommunikation beeinflußt, d.h. daß mit zunehmender Distanz die Latenz ebenfalls<br />

zunimmt. Eine Obergrenze <strong>für</strong> die Latenz in einem Netz stellt die größtmögliche<br />

Distanz im Graphen dar, die als das Maximum aller kleinsten Pfadlängen<br />

zwischen zwei Knoten definiert ist. Diese Größe wird als Durchmesser<br />

k des Graphen bezeichnet. Der Durchmesser gibt an, wieviele Kanten eine<br />

Nachricht maximal passieren muß, um von einem Sender zum Empfänger zu<br />

gelangen, vorausgesetzt, es wird der jeweils kürzeste Weg gewählt. Die Zahl<br />

der Knoten, die bei Distanz k zwischen Sender <strong>und</strong> Empfänger höchstens liegen<br />

können, ist dabei gleich k-1.<br />

Da die maximale Distanz k nur eine Obergrenze <strong>für</strong> die Latenz L darstellt, gemäß<br />

der Beziehung L


ein genaueres Maß zur Hand haben. In diesen Fällen wird der mittlere Knotenabstand<br />

a verwendet, der als das arithmetische Mittel aller Pfadlängen definiert<br />

ist, die von den Nachrichten einer bestimmten Anwendung im Netz zurückgelegt<br />

werden müssen.<br />

Da die Verteilung der Nachrichten, <strong>und</strong> damit der Mittelwert der zurückzulegenden<br />

Pfadlängen, eine Funktion der Anwendung ist, läßt sich a <strong>für</strong> allgemeine<br />

<strong>parallel</strong>e Programme nur statistisch angeben, gemäß der Beziehung<br />

Gl. 3.1:<br />

k<br />

∑<br />

a = i⋅<br />

p i<br />

i = 1<br />

wobei p i der Prozentsatz derjenigen Nachrichten ist, die die Pfadlänge i haben.<br />

Unter den vereinfachenden Annahmen, daß die von den Nachrichten zurückgelegten<br />

Pfadlängen i gleichverteilt sind <strong>und</strong> daß es sich um ein symmetrisches<br />

Netz handelt, läßt sich Gl. 3.1 auf das Aufsummieren der Pfadlängen von 1 bis<br />

k zurückführen (k ist der Durchmesser):<br />

1<br />

Gl. 3.2: a' = ------------ i ⋅ n ,<br />

N – 1 ∑ i<br />

, 0 ≤ n i<br />

≤ N – 1<br />

i = 1<br />

wo N-1 die Zahl der Nachbarknoten zu einem beliebigen Bezugsknoten im Graphen<br />

ist, <strong>und</strong> n i die Zahl der Nachbarn mit Distanz i angibt. Für den Fall, daß es<br />

sich um nicht-symmetrische Graphen handelt, muß Gl. 3.2 so erweitert werden,<br />

daß jede Pfadlänge einzeln gezählt wird:<br />

k<br />

Gl. 3.3:<br />

a''<br />

k<br />

2<br />

=<br />

NN --------------------- ( – 1)<br />

∑ i ⋅ n , 0≤<br />

n i i<br />

≤ N – 1<br />

i = 1<br />

Es gibt dann (N-1)N/2 statt (N-1) Knotenpaare, deren Abstand zueinander betrachtet<br />

wird. In Gl. 3.3 wird dementsprechend nicht über (N-1) Distanzen wie<br />

in Gl. 3.2 summiert, sondern über N(N-1)/2 Entfernungen.<br />

Die Definition des mittleren Knotenabstandes gemäß Gl. 3.2 oder Gl. 3.3 enthält<br />

nicht mehr die spezifischen Charakteristika der <strong>parallel</strong>en Anwendung in<br />

Form der Verteilung p 1 , p 2 , p 3 , ... ,p k von den Pfadlängen 1, 2, 3,...,k der Interprozessorkommunikation,<br />

sondern berücksichtigt ausschließlich die Topologie<br />

des Verbindungsnetzwerks, auf dem die Anwendung ausgeführt wird. Beispielsweise<br />

ist die mittlere Entfernung a' einer beliebigen <strong>parallel</strong>en Anwendung,<br />

die auf einem Hypercube mit N=2 n Knoten berechnet wird, gleich n/<br />

2, was dem mittleren Knotenabstand des Hyperwürfels entspricht.<br />

Zur vergleichenden Beurteilung der Leistungsfähigkeit verschiedener Verbindungsstrukturen<br />

ist der mittlere Knotenabstand deshalb besonders geeignet,<br />

83


weil er technologieunabhängig ist. Im Einzelfall sind allerdings <strong>für</strong> das tatsächliche<br />

Verhalten eines Netzes Messungen der Bandbreite <strong>und</strong> Latenz unerläßlich,<br />

um netzunabhängige Parameter wie Nachrichtenlänge, Prozeß-Scheduling,<br />

Gerätetreiberlatenzen <strong>und</strong> Setup-Zeiten in einem genaueren Kommunikationsmodell<br />

berücksichtigen zu können.<br />

Im weiteren werden die anderen Maße, wie mittlere Nachrichtendichte, Halbierungsbreite<br />

<strong>und</strong> Konnektivität, die bei <strong>Verbindungsnetzwerke</strong>n häufig Verwendung<br />

finden, erläutert.<br />

Mittlere Nachrichtendichte<br />

Die mittlere Nachrichtendichte gibt an, wie viele Pakete oder Nachrichten pro<br />

Zeiteinheit auf einem Kanal (Link) transportiert werden. Dieses Maß gibt Auskunft<br />

über die Auslastung des Kanals <strong>und</strong> erlaubt, Schwachstellen im Netz, die<br />

durch ungleichmäßige Verkehrsverteilung entstanden sind, zu identifizieren.<br />

Unter der Voraussetzung, daß der Graph des Netzes kantensymmetrisch ist <strong>und</strong><br />

daß von allen Sendern gleich viele Pakete pro Zeiteinheit produziert werden,<br />

gilt der wichtige Satz, daß die mittlere Nachrichtendichte im Netz konstant ist.<br />

Halbierungsbreite<br />

Die Halbierungsbreite gibt die Mindestzahl der Kanten an, die entfernt werden<br />

müssen, damit ein Graph in zwei gleichgroße Hälften zerfällt (bzw. in (N-1)/2<br />

<strong>und</strong> (N+1)/2 Knoten, falls N ungerade). Beispielsweise ist die Halbierungsbreite<br />

eines Rings gleich zwei <strong>und</strong> die eines quadratischen, 2-D Gitters aus N Knoten<br />

gleich N .<br />

Die Halbierungsbreite kennzeichnet einerseits die Toleranz eines Netzes gegenüber<br />

Ausfällen von Kanälen <strong>und</strong> andererseits den maximalen Verkehr, der<br />

zwischen zwei Netzhälften entstehen kann, wenn diese verb<strong>und</strong>en sind. Zur<br />

Kennzeichnung des maximalen Verkehrs wird meistens eine Variante, die dimensionsbehaftete<br />

Größe Halbierungsbandbreite, verwendet, die durch Multiplikation<br />

der Halbierungsbreite mit der Übertragungskapazität eines Kanals<br />

entsteht. Sie wird üblicherweise in MHz oder GHz angegeben.<br />

Kantenkonnektivität<br />

Die Kantenkonnektivität, auch als Kantenzusammenhang bezeichnet, ist eine<br />

Verallgemeinerung der Halbierungsbreite <strong>und</strong> gibt die Mindestzahl der Kanten<br />

an, die entfernt werden müssen, damit ein Netz in zwei (i. a. verschieden große)<br />

Teile zerfällt. Sie kennzeichnet die Fehlertoleranz gegen Linkunterbrechungen.<br />

Analog dazu existiert das Maß des Knotenzusammenhangs, der die Mindestzahl<br />

der zu entfernenden Knoten darstellt.<br />

84


Knotenkonnektivität<br />

Der Knotenzusammenhang erlaubt, Aussagen über die Zahl der alternativen<br />

Wege durch das Netz anzugeben. Nach einem Theorem von Menger [Bondy76]<br />

ist der Knotenzusammenhang identisch mit der kleinsten Zahl knotenfremder<br />

Pfade zwischen einem Sender <strong>und</strong> einem Empfänger. (Die Pfade zwischen zwei<br />

Knoten heißen dann knotenfremd, wenn sie außer Sender <strong>und</strong> Empfänger keine<br />

gemeinsamen Knoten haben). Das Minimum der Zahl der knotenfremden Pfade<br />

zwischen allen Sender/Empfängerpaaren stellt gleichzeitig die Zahl alternativer<br />

Wege dar, die im Netz zwischen zwei Knoten existieren. Der kleinste Wert der<br />

Maße Kantenzusammenhang <strong>und</strong> Knotenzusammenhang, die <strong>für</strong> ein Netz gelten,<br />

wird auch als Konnektivität bezeichnet. Bei symmetrischen Netzen ist die<br />

Konnektivität meistens gleich der Zahl der Links pro Knoten.<br />

Zusammenfassend kann gesagt werden, daß die wichtigsten Metriken bei statischen<br />

Netzen die Knotenzahl, der Knotengrad, ihr Durchmesser bzw. mittlere<br />

Knotenabstand sowie die Konnektivität sind.<br />

3.6 Wichtige Netztopologien<br />

Zu den wichtigsten Netztopologien zählen der Stern, der Ring, das 2-dimensionale<br />

Gitter, der binäre Hypercube, das de Bruijn-Netz, die Cube-Connected-<br />

Cycles <strong>und</strong> der Star-Graph. In Tabelle 3.1 sind die Hauptmetriken dieser Netze<br />

wie Grad, Durchmesser, mittlerer Knotenabstand, Konnektivität <strong>und</strong> kleinstes<br />

Erweiterungsinkrement <strong>für</strong> je N Knoten angegeben [Varma94]<br />

Tabelle 3.1erlaubt einen Vergleich der Netztopologien bzgl. der angegebenen<br />

Metriken. Es wird ersichtlich, daß <strong>für</strong> eine gegebene Knotenzahl N jedes der<br />

acht Netze hinsichtlich der Kriterien Grad, Durchmesser, mittlerer Knotenabstand,<br />

Konnektivität <strong>und</strong> kleinste Erweiterungseinheit Vor- <strong>und</strong> Nachteile bietet,<br />

so daß aus graphentheoretischer Sicht kein optimales Netz existiert.<br />

Darüberhinaus sind <strong>für</strong> einen umfassenden Vergleich der aufgelisteten Netze<br />

noch andere Faktoren wie Kosten <strong>und</strong> Zuverlässigkeit sowie Integrationsmöglichkeit<br />

in VLSI mit zu berücksichtigen. Insbesondere bei der VLSI-<br />

Integration spielen praktische Gesichtspunkte wie die Zahl der Anschlußstifte<br />

des Chip-Gehäuses sowie die Zahl der Verbindungen zwischen verschiedenen<br />

integrierten Schaltungen eine wichtige Rolle, so daß die Wahl des "richtigen"<br />

Netzes weiter erschwert wird.<br />

Der Trend bei statischen <strong>Verbindungsnetzwerke</strong>n geht dahin, daß man 3-dimensionale<br />

Gitter, die eine geringe Ausdehnung in z-Richtung haben <strong>und</strong> keine<br />

wrap-aro<strong>und</strong>-Verbindungen aufweisen, gegenüber der Hypercube-Topologie<br />

bevorzugt. Zwar sind die Metriken bei "flachen" Gittern nicht besonders günstig,<br />

aber aus zwei Gründen ist diese Topologie trotzdem interessant:<br />

• Große Parallelrechner (>100 Prozessoren) benötigen ein nicht unerhebliches<br />

räumliches Volumen <strong>und</strong> sind in mehreren Modulgehäusen untergebracht.<br />

85


Netzwerk<br />

Grad<br />

d<br />

Durchmesser<br />

k<br />

mittlerer Knotenabstand<br />

Konnek.<br />

kleinste Erweiterung<br />

Stern<br />

(N>2)<br />

1 bzw.<br />

N - 1<br />

2<br />

--- ( N – 1) ≈ 2<br />

N<br />

2 1 1<br />

Ring<br />

(N>2)<br />

2<br />

N<br />

---<br />

2<br />

N 2<br />

--------------------<br />

4( N – 1)<br />

(<strong>für</strong> N gerade),<br />

N + 1<br />

------------ N ≈<br />

4<br />

--- 4<br />

(<strong>für</strong> N unger.)<br />

2 1<br />

2-D Gitter<br />

ohne<br />

wraparo<strong>und</strong><br />

2-D Gitter<br />

mit<br />

wraparo<strong>und</strong><br />

2( N – 1) N – 1<br />

4 ≈ 2<br />

2 N<br />

-------<br />

2<br />

N ⁄ 2<br />

4 ≈ 4<br />

2 N – 1<br />

Zeilen <strong>und</strong><br />

Spaltenerw.<br />

2 N – 1<br />

Zeilen <strong>und</strong><br />

Spaltenerw.<br />

Binärer<br />

Hyperkubus<br />

(N=2 n )<br />

n n<br />

n2 n – 1 – 1<br />

------------------------<br />

2 n – 1<br />

≈ n/2<br />

n<br />

N<br />

de Bruijn<br />

Graph<br />

(N = d k )<br />

2d k keine Angabe 2d (d+1) k -d k<br />

Cube-<br />

Connected-<br />

Cycles<br />

(N=nlog 2 n)<br />

3 (5/2) log 2 n-1 ≈ (7/4) log 2 n-3 3<br />

(n+1)·<br />

·log 2 (n+1)<br />

-n log 2 n<br />

Star-Graph<br />

(N=n!)<br />

n-1<br />

n<br />

≈<br />

( – ⁄ ) n +<br />

i = 1<br />

+(2/n)<br />

3 n 1 ) 2<br />

1<br />

∑ --<br />

i<br />

– 4<br />

n-1 n·n!<br />

Tabelle 3.1: Die wichtigsten Metriken häufig verwendeter statischer Netze.<br />

86


Aus verkabelungstechnischen <strong>und</strong> übertragungsmäßigen Gründen ist es dabei<br />

besser, auf die wrap-aro<strong>und</strong>-Verbindungen zu verzichten, weil diese relativ<br />

lang <strong>und</strong> entsprechend umständlich zu realisieren sind.<br />

• Dally [Dally90] konnte zeigen, daß sich unter einer bestimmten Randbedingung<br />

die Kategorie der k-nären Hyperwürfel, zu denen sowohl die Gitter als<br />

auch die binären Hyperkuben gehören, <strong>für</strong> kleine Dimensionszahlen günstiger<br />

verhält als <strong>für</strong> große. Das bedeutet <strong>für</strong> ein vorgegebenes N, daß Gitter gegenüber<br />

Hypercubes zu bevorzugen sind, weil dort die Dimensionszahl auch<br />

<strong>für</strong> große Prozessorzahlen niedrig gehalten werden kann. Die Randbedingung,<br />

unter der diese Aussage gilt, ist, daß bei beiden Topologien dieselbe<br />

Zahl von Leitungen verwendet wird. Da ein 2-D Gitter nur vier Leitungen<br />

von einem Knoten zu seinen Nachbarn benötigt, können dort die übrigen Leitungen<br />

zur Verbreiterung der Datenpfade verwendet werden, so daß die<br />

Bandbreite des Gitters bei gleicher Knotenzahl <strong>und</strong> gleichem Materialeinsatz<br />

<strong>für</strong> die Verkabelung größer als die des Hyperwürfels ist.<br />

3.6.1 Sterntopologie<br />

Sterne sind einfach strukturierte, aber dennoch nützliche Graphen. Eine Stern-<br />

Topologie ist überall dort vorteilhaft, wo ein Broad-/Multicast, ein inverser<br />

Multicast oder eine Prozeßsynchronisation häufig durchzuführen ist, so daß es<br />

sich lohnt, zusätzlich zu dem Netz, das zur Interprozessorkommunikation dient,<br />

noch einen Stern als zweite Netztopologie zu verwenden. Dies ist bei vielen<br />

<strong>parallel</strong>en Anwendungen, insbesondere aus dem Echtzeit- <strong>und</strong> Embedded Systems-Gebiet<br />

der Fall, weil dort häufig schnelle Prozeßsynchronisationen erforderlich<br />

sind, deren Signalisierung am besten direkt im Netz in Hardware implementiert<br />

wird [Richter95a]. Die Stern-Topologie wird als Kommunikations<strong>und</strong><br />

Rechentopologie <strong>für</strong> Master-Slave- bzw. Prozessorfarm-Architekturen<br />

eingesetzt, bei denen ein zentraler Prozessor (Master) Arbeitsaufträge an untergeordnete<br />

Prozessoren (Slaves) vergibt, bei denen wenig oder keine Interprozessorkommunikation<br />

zwischen den Slaves erforderlich ist, so daß der Master,<br />

über den alle Kommunikation laufen muß, verkehrsmäßig nicht überlastet wird.<br />

3.6.2 Baumtopologie<br />

Durch eine Erweiterung der Sternstruktur auf mehrere Ebenen entsteht die<br />

Baumtopologie, bei der Durchmesser <strong>und</strong> mittlerer Knotenabstand mit O(logN)<br />

wachsen. Bäume sind <strong>für</strong> viele rekursive Algorithmen gut geeignet <strong>und</strong> lassen<br />

sich darüberhinaus als sog. H-Bäume leicht in Silizium integrieren<br />

[Horowitz81]. Weiterhin sind Bäume <strong>für</strong> <strong>parallel</strong>e Datenstrukturen <strong>und</strong> Datenbanken<br />

vorteilhaft. Der Nachteil von Bäumen ist, daß bei gleich<strong>verteilte</strong>m<br />

Verkehr an der Basis die Verkehrsdichte an der Spitze des Baumes exponentiell<br />

ansteigen kann, weshalb die Fat Tree-, Hypertree- <strong>und</strong> X-Tree-Netze entwickelt<br />

wurden, um Datenverkehr in Querverbindungen umzuleiten.<br />

87


3.6.3 Ringtopologie<br />

Ringe werden in verschiedenen Kommunikationssystemen wie Token Ring<br />

oder SCI wegen ihrer Fehlertoleranz gegenüber Einzelstrangsystemen eingesetzt.<br />

Ein unidirektionaler Ring beispielsweise bietet aus topologischen wie<br />

elektrischen Gründen einen höheren Datendurchsatz als eine Kette oder ein<br />

Bus, da er mit angepaßten Übertragungsleitungen zwischen Sender <strong>und</strong> Empfänger<br />

betrieben werden kann. Ringtopologien werden beispielsweise bei dem<br />

Gigaring-Kommunikationssystem [Scott95] der Fa. Cray eingesetzt, das Vektor-Superrechner<br />

<strong>und</strong> Parallelrechner untereinander <strong>und</strong> mit der Peripherie mit<br />

einer Übertragungsgeschwindigkeit von ca. 1 GByte/s verbindet.<br />

Man muß in einem Ring zwei Betriebsweisen unterscheiden: Entweder zirkuliert<br />

zu einer Zeit nur ein Paket im Ring oder es kann auf jedem Ringsegment<br />

ein Paket unterwegs sein (=Slotted Ring Protocol). Im ersten Fall ist eine<br />

Arbitrierung der Zugriffswünsche notwendig, die dezentral sein muß, um skalierbar<br />

zu sein. Im letzten Fall steigt die Bandbreite mit der Zahl der Knoten.<br />

Der Ring wird also in einem gewissen Rahmen skalierbar.<br />

Da sowohl Durchmesser als auch mittlerer Knotenabstand mit O(N) steigen,<br />

sind Ringe ohne slotted ring Protokoll ähnlich wie Busse nur <strong>für</strong> kleine Prozessorzahlen<br />

(≤32) geeignet. Eine Erweiterung der normalen Ringstruktur, die sowohl<br />

die Bandbreite als auch die Fehlertoleranz erhöht, ist die Sehnenringtopologie.<br />

Einige gr<strong>und</strong>legende Artikel zu Ringen sind in [Saltzer81], [Raghaven81]<br />

<strong>und</strong> [Sylvester83] zu finden.<br />

3.6.4 Gittertopologie<br />

Historisch gesehen werden Gitter seit Jahrzehnten in verschiedenen kommerziellen<br />

<strong>Systeme</strong>n <strong>und</strong> Forschungs<strong>parallel</strong>rechnern verwendet, z.B. im ILLIAC<br />

IV-Rechner [Barens68], den Intel Touchstone- [Lillevik90] <strong>und</strong> Delta-Rechnern<br />

sowie deren Nachfolger Paragon <strong>und</strong> der MIT-J-Maschine [Dally92].<br />

Flache 3-dimensionale Gitter erfreuen sich u.a. wegen einfacher technischer<br />

Implementierung <strong>und</strong> leichter Überschaubarkeit durch den Programmierer zunehmender<br />

Beliebtheit. Insbesondere werden sie vorteilhaft zur Berechnung<br />

partieller Differentialgleichungen <strong>und</strong> <strong>für</strong> Algorithmen in der Signal- <strong>und</strong> Bildverarbeitung<br />

eingesetzt.<br />

Eine Besonderheit sind Stapel aus übereinandergesetzten 2-dimensionalen<br />

Gittern mit in z-Richtung zunehmendem Gitterabstand <strong>und</strong> abnehmender Knotenzahl.<br />

Sie werden als Pyramiden bezeichnet <strong>und</strong> <strong>für</strong> Multigrid-Algorithmen<br />

<strong>und</strong> zum maschinellen Bildverstehen benötigt.<br />

Gittertopologien gibt es ohne <strong>und</strong> mit wrap-aro<strong>und</strong>-Verbindungen. Im letzteren<br />

Fall heißen sie Torus. Tori sind knotensymmetrisch, während Gitter ohne<br />

88


wrap-aro<strong>und</strong>-Verbindungen diese Eigenschaft nicht haben. Tori mit der Einschränkung<br />

einer konstanten Zahl k von Knoten in jeder ihrer n-Dimensionen<br />

werden auch als k-näre n-Kuben [Dally90] bezeichnet. Bei k-nären n-Kuben<br />

gibt es die beiden Möglichkeiten, daß die wrap-aro<strong>und</strong>-Verbindungen entweder<br />

uni- oder bidirektional sind. Nach Öffnen der wrap-aro<strong>und</strong>-Verbindungen sind<br />

nur noch bidirektionale Datenpfade möglich, damit jeder Knoten von jedem anderen<br />

aus erreichbar bleibt. In diesem Falle entstehen aus den k-nären n-Kuben<br />

n-dimensionale Gitter mit der Kantenlänge k pro Dimension. Andererseits sind<br />

binäre Hypercuben als Spezialfall k = 2 in topologisch unveränderten k-nären<br />

n-Kuben enthalten. Die Genealogie der Gitter <strong>und</strong> Hypercuben ist in Bild 3.6<br />

dargestellt.<br />

n-dimensionale Tori der<br />

Ausdehnung k =<br />

k-näre n-Kuben<br />

unidirektionale<br />

wrap-aro<strong>und</strong>-<br />

Verbindungen<br />

bidirektionale<br />

wrap-aro<strong>und</strong>-<br />

Verbindungen<br />

Beschränkung auf<br />

k = 2<br />

Öffnen der wraparo<strong>und</strong>-Verbindungen<br />

binäre Hypercuben<br />

der Größe 2 n<br />

n-dimensionale Gitter<br />

der Ausdehnung k<br />

Bild 3.6: Zusammenhang zwischen Tori, Gitter <strong>und</strong> Hyperkuben.<br />

Ein n-dimensionales Gitter mit k Knoten pro Dimension wird rekursiv aus k<br />

einzelnen (n-1)-dimensionalen Gittern konstruiert, indem man je k korrespondierende<br />

Knoten aus den verschiedenen Gittern mit Geraden verbindet. (Für<br />

Tori werden Ringe benötigt). Um den mittleren Knotenabstand im Gitter zu<br />

verbessern, wurden verschiedene Varianten vorgeschlagen, die "Abkürzungen"<br />

ermöglichen. Dazu zählen die Einführung eines oder mehrerer globaler Busse<br />

[Stout83] oder die Anbringung von Bussen [Prasanna87] oder Bäumen<br />

[Huang85] in jeder Zeile <strong>und</strong> Spalte des Gitters. Weiterhin werden neben Quadraten<br />

als geometrische Gr<strong>und</strong>elemente auch Sechsecke verwendet [Chen90].<br />

3.6.5 Hypercube-Topologie<br />

Obwohl die Hypercube-Topologie bereits im Jahre 1963 vorschlagen wurde<br />

[Squire63], konnte der erste funktionsfähige Hypercube-Rechner erst 20 Jahre<br />

später realisiert werden [Seitz85]. Seitdem wurden Hypercubes in einer Vielzahl<br />

von Maschinen eingesetzt, <strong>und</strong> es werden weltweit viele <strong>parallel</strong>e Algorithmen<br />

<strong>für</strong> die Hypercube-Topologie entwickelt [Miller88]. Einer der großen<br />

89


Vorteile von Hypercuben, neben ihrem relativ einfachen Aufbau <strong>und</strong> den kurzen<br />

mittleren Knotenabständen, ist, daß sie fast alle statischen Topologien mit<br />

hoher Effizienz nachbilden können (Emulation durch "Einbettung").<br />

Einen binären, n-dimensionalen Hypercube mit N=2 n Knoten erhält man entweder<br />

rekursiv, indem man zwei (n-1)-dimensionale Hyperwürfel an den korrespondierenden<br />

Knoten verbindet (Bild 3.7a) oder konstruktiv, indem man N<br />

Symbole (Adressen) zu je n Bits bildet <strong>und</strong> diejenigen Symbole verbindet, die<br />

sich jeweils in einem Bit unterscheiden (Bild 3.7b) [Saad88].<br />

0D-Würfel<br />

1D-Würfel<br />

0010<br />

0000<br />

0011<br />

0001<br />

0100<br />

0110<br />

0101<br />

0111<br />

2D-Würfel<br />

3D-Würfel<br />

1100<br />

1110 1111<br />

1101<br />

4D-Würfel<br />

1000<br />

1001<br />

1010 1011<br />

4D-Würfel<br />

a) rekursive Erzeugung<br />

b) konstruktive Erzeugung<br />

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

Wie bereits erwähnt, sind binäre Hypercuben Spezialfälle der k-nären n-Kuben.<br />

So entsteht beispielsweise ein 3-dimensionaler Würfel aus einem 3-dimensionalen<br />

Torus, der wiederum einen k-nären n-Kubus <strong>für</strong> k=2 <strong>und</strong> n=3 darstellt.<br />

Mit der Hypercube-Topologie sind auch Nachteile verb<strong>und</strong>en. Ein Nachteil<br />

liegt z.B. darin, daß die Zahl der Kanten pro Knoten mit der Dimension n ansteigt.<br />

Um dieses Problem zu umgehen, wurden die Cube-Connected-Cycles<br />

entwickelt [Preparata79]. Darin wird jeder Knoten eines n-dimensionalen binären<br />

Hyperkubes durch einen Ring von n Knoten ersetzt. Jede vormalige Kante<br />

eines Hyperkubenknotens ist dann mit einem der Ringknoten verb<strong>und</strong>en, so<br />

daß der Grad der Cube-Connected-Cycle-Topologie auf drei fixiert ist <strong>und</strong> nicht<br />

mehr von der Dimension abhängt.<br />

Ein anderer Nachteil betrifft die schwierige Realisierung der Hypercube-Topologie<br />

bei Rechnern, die mehrere Gehäuse umfassen, da aufgr<strong>und</strong> der starken<br />

inneren Vermaschung des Graphen die Gehäuse nicht unabhängig voneinander<br />

verkabelt werden können. Diesen Nachteil gibt es bei den meisten anderen Topologien<br />

ebenfalls, mit Ausnahme von 2 bzw. 3-D Gittern.<br />

90


3.6.6 De Bruijn-Topologie<br />

De Bruijn-Topologien [Samatham91] sind in der Wissenschaft in den letzten<br />

Jahren aufgr<strong>und</strong> ihrer rekursiven Konstruktionsweise, ihres geringen Durchmessers,<br />

der großen Halbierungsbreite sowie besonderer Symmetrieeigenschaften<br />

interessant geworden. Sie eignen sich speziell zur Implementierung<br />

von Sortieralgorithmen <strong>und</strong> <strong>für</strong> die schnelle Fouriertransformation. Darüberhinaus<br />

sind sie in der Lage, alle <strong>für</strong> Hypercuben entworfene Algorithmen effizient<br />

durch Emulation der Hypercube-Topologie auszuführen.<br />

Konstruktion eines de Bruijn-Graphen<br />

Der n-dimensionale de Bruijn-Graph zur Basis b besteht aus b n Knoten <strong>und</strong><br />

b n+1 gerichteten Kanten, die pro Knoten mit "0","1",...,"b-1" beschriftet werden.<br />

Jeder Knoten erhält eine n-stellige Adresse a n a n-1 ,..,a 1 zur Zahlenbasis b zu<br />

seiner Identifikation. Dann verläuft <strong>für</strong> b = 2 (binärer de Bruijn-Graph) eine gerichtete<br />

Kante von Knoten K = a n a n-1 ,..,a 1 zu Knoten K', wenn dessen Adresse<br />

entweder lautet: K 0 ' = a n-1 ,...,a 1 0 oder K 1 ' = a n-1 ,...,a 1 1. Für b>2 ergibt sich <strong>für</strong><br />

K':<br />

K 0 ' = a n-1 ,...,a 1 0 oder K 1 ' = a n-1 ,...,a 1 1 u.s.w. bis K b-1 ' = a n-1 ,...,a 1 (b-1).<br />

Das heißt, zwei Knoten sind genau dann miteinander verb<strong>und</strong>en (benachbart),<br />

wenn die Adresse eines der beiden Knoten durch Linksverschieben aus der<br />

Adresse des anderen Knoten hervorgeht. An die Position der niedrigstwertigen<br />

Stelle (LSD) folgt nach der Linksverschiebung eines von b möglichen Ziffern<br />

0,1,...,(b-1) nach, die höchstwertige Stelle (MSD) geht verloren. Aufgr<strong>und</strong> dieser<br />

Vorschrift werden bei jedem de Bruijn-Graphen die Knoten mit den Nummern<br />

0 <strong>und</strong> 2 n -1 mit sich selbst verb<strong>und</strong>en.<br />

Allgemein verlaufen von jedem Knoten K = a n a n-1 ,..,a 1 genau b gerichtete<br />

Kanten (Pfeile) zu dessen Nachbarn<br />

K 0 ' = a n-1 ,...,a 1 0, K 1 ' = a n-1 ,...,a 1 1 ,..., K b-1 ' = a n-1 ,...,a 1 (b-1),<br />

die entsprechend der niedrigstwertigen Ziffer von K i ' (0≤i≤b-1) die Aufschrift<br />

"i" tragen. Bild 3.8 zeigt die Konstruktion des gerichteten de Bruijn-Graphen<br />

<strong>für</strong> den Fall N = 8 <strong>und</strong> b = 2.<br />

Beim binären de Bruijn-Graphen entspringen von jedem Knoten zwei Kanten,<br />

<strong>und</strong> auf jeden Knoten laufen zwei Kanten zu. Ein Knoten K = a n a n-1 ,..,a 1 erhält<br />

genau dann einen Pfeil von einem Knoten K'', wenn <strong>für</strong> dessen Adresse entweder<br />

K 0 '' = 0a n a n-1 ,..,a 2 oder K 1 '' = 1a n a n-1 ,..,a 2 gilt,<br />

<strong>und</strong> wenn bei der nachfolgenden Linksverschiebung von K 0 '' <strong>und</strong> K 1 '' das Bit<br />

91


001<br />

1<br />

011<br />

0<br />

000<br />

1<br />

0<br />

0<br />

1<br />

010 1 101<br />

1 0<br />

0<br />

0<br />

1<br />

1<br />

0<br />

111<br />

1<br />

100<br />

0<br />

110<br />

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

a 1 des Knotens K als LSB bei K 0 '' bzw. K 1 '' nachrückt. Wegen des zuvor Gesagten<br />

tragen die Pfeile, die auf K zulaufen, die Aufschrift „a 1 ", was bei binären<br />

de Bruijn-Graphen entweder „0" oder „1" sein kann. Für b>2 kann a 1 die<br />

Werte "0","1",...,"b-1" annehmen.<br />

Das wesentliche Konstruktionsmerkmal des de Bruijn-Graphen ist das nichtzyklische<br />

Linksverschieben von Ziffern (bzw. Adreßbits <strong>für</strong> b=2). Seine Konstruktion<br />

ist mit der Konstruktion des Shuffle Exchange-Graphen verwandt, den<br />

man durch Komplementierung ε des LSB bzw. zyklische Linksverschiebung σ<br />

erhält, gemäß der beiden Permutationsfunktionen:<br />

ε ( a n<br />

a n – 1<br />

, …,<br />

a ) a 1<br />

= , a n n –<br />

, …,<br />

a 1 1<br />

<strong>und</strong><br />

σ ( a n<br />

a n – 1<br />

,…,<br />

a ) 1<br />

= a .<br />

n –<br />

, …,<br />

a 1 1<br />

a n<br />

Die Darstellung des Shuffle Exchange-Graphen ist in Bild 3.9a gezeigt.<br />

a)<br />

000<br />

001<br />

010 011<br />

100<br />

101<br />

110<br />

111<br />

b)<br />

00<br />

01<br />

10<br />

11<br />

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

Beim binären Shuffle Exchange-Graphen sind die beiden Exchange-Knoten E 0<br />

<strong>und</strong> E 1 mit<br />

E 0 = a n a n-1 ,..,a 2 0 <strong>und</strong> E 1 = a n a n-1 ,..,a 2 1<br />

92


mit den Knoten<br />

N 0 ' = a n-1 ,..,a 2 0a n bzw. N 1 ' = a n-1 ,..,a 2 1a n<br />

verb<strong>und</strong>en (E 0 mit N 0 ' <strong>und</strong> E 1 mit N 1 '), die wiederum zueinander keine Exchange-Knoten<br />

sind. Faßt man in einem binären Shuffle Exchange-Graphen je<br />

zwei Exchange-Knoten E 0 <strong>und</strong> E 1 zu einem einzigen Knoten E zusammen, erhält<br />

man daraus im korrespondierenden de Bruijn-Graphen einen Knoten K <strong>und</strong><br />

es gilt: E = K = a n a n-1 ,..,a 2 .<br />

Die Verschmelzung aller Exchange-Knotenpaare eines Shuffle-Exchange<br />

Graphen aus 2 n Knoten, liefert einen de Bruijn-Graphen aus 2 n-1 Knoten (Bild<br />

3.9b). Diesen Zusammenhang kann man als zweite Möglichkeit zur Konstruktion<br />

von de Bruijn-Graphen benutzen.<br />

Eine dritte Konstruktionsmöglichkeit <strong>für</strong> binäre de Bruijn-Graphen besteht<br />

darin, daß man einen de Bruijn-Graphen G der Größe N/2 = 2 n-1 auf die doppelte<br />

Größe erweitert. Die Verdopplung erfolgt so, daß man die 2 n Kanten des<br />

Graphen G durch Knoten ersetzt, während seine ursprünglichen Knoten entfallen,<br />

so daß man im neuen Graphen G' insgesamt 2 n Knoten erhält. G' heißt dann<br />

Kantengraph von G. Der entscheidende Schritt bei diesem Verfahren ist, daß<br />

man aus je zwei benachbarten Kanten in G, die einen Pfad der Länge zwei bilden,<br />

eine neue Kante in G' formt. In Bild 3.10a ist ein de Bruijn-Graph <strong>für</strong> N/2<br />

= 2 gezeigt, aus dem ein (N = 4)-Graph konstruiert wird. In Bild 3.10b sind die<br />

beiden ursprünglichen Knoten grau, die neuen Knoten schwarz gezeichnet. Bild<br />

3.11c zeigt das Resultat.<br />

Die rekursive Konstruktion des de Bruijn-Graphen besteht also aus drei Schritten:<br />

• Plazieren von neuen Knoten auf den Kanten von G (In Bild 3.10b schwarz<br />

dargestellt)<br />

• In dem daraus entstehenden Zwischengraphen werden je zwei benachbarte<br />

Kanten eines Pfades der Länge zwei zu einer neuen gerichteten Kante zusammengefaßt<br />

(ebenfalls schwarz in Bild 3.10b dargestellt)<br />

• Weglassen der Knoten <strong>und</strong> Kanten von G (Bild 3.10c).<br />

3.6.7 Star Graph-Topologie<br />

Star-Graphen zählen zu den relativ neuen Verbindungsstrukturen. Genau wie<br />

Hypercuben <strong>und</strong> de Bruijn-Graphen besitzen Star-Graphen [Akers89] eine rekursive<br />

Struktur <strong>und</strong> eine Reihe von Symmetrieeigenschaften. Darüberhinaus<br />

weist der Star-Graph bei geringem Knotengrad einen relativ kleinen Durchmesser<br />

auf, was ihn interessant <strong>für</strong> <strong>Verbindungsnetzwerke</strong> <strong>für</strong> Parallelrechner<br />

macht. In den letzten Jahren sind eine Reihe von Algorithmen <strong>für</strong> den Star-Graphen<br />

entworfen worden, die als sehr effizient gelten.<br />

93


a)<br />

b)<br />

c)<br />

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

Konstruktion des Star-Graphen<br />

Zur Konstruktion von Star-Graphen geht man von einer Menge von n verschiedenen<br />

Elementen aus, die als Symbole bezeichnet werden. Jedes Symbol<br />

wird durch eine Ziffer zur Zahlenbasis n repräsentiert. Im ersten Schritt wird ein<br />

Startvektor erzeugt, indem man eine beliebige Aneinanderreihung (Sequenz)<br />

von n Symbolen bildet. Im zweiten Schritt wird eine bestimmte Permutationsregel<br />

auf die Symbolsequenz angewandt, um daraus eine neue Sequenz zu erzeugen,<br />

auf die wiederum dieselbe Regel angewandt wird, usf. So entsteht eine<br />

Menge mit Sequenzen von Symbolen (Vektoren) als Elementen, die untereinander<br />

verschieden sein müssen. Die Permutationsregel wird als Generator bezeichnet,<br />

<strong>und</strong> die Elemente der Sequenzmenge werden mit den Knoten eines<br />

ungerichteten Graphen identifiziert. Die Sequenzen adressieren die Knoten im<br />

Graphen, da es gemäß Voraussetzung keine zwei gleichen Sequenzen gibt.<br />

Im letzten Schritt der Konstruktion von Star-Graphen werden dann zwei<br />

Knoten im Graphen miteinander verb<strong>und</strong>en, wenn der eine Knoten durch Permutation<br />

der Symbolsequenz aus dem anderen Knoten hervorgegangen ist.<br />

Wichtig ist festzustellen, daß die Star-Graphen eine Untermenge der Cayley-<br />

Graphen [Akers89] sind, die wiederum auf einigen Sätzen aus der Gruppentheorie<br />

basieren (Cayley-Graphen werden im nächsten Kapitel behandelt).<br />

Zur Erzeugung des speziellen Star-Graphen wird als Permutationsregel die<br />

Butterfly-Permutation verwendet. Die Butterfly-Permutation β i zur Zahlenbasis<br />

n ist im Gegensatz zur Verwendung bei dynamischen Netzen definiert als:<br />

Def. 3.4: β i<br />

( a n<br />

a n – 1<br />

…a n – ( i–<br />

1)<br />

…a 2<br />

a 1<br />

) = a n – ( i – 1)<br />

a n – 1<br />

…a n<br />

…a 2<br />

a 1<br />

,<br />

wobei a k<br />

∈ { 0, 1, …,<br />

n – 1}<br />

ist. Die Butterfly-Permutation β i tauscht in der Sequenz<br />

a n ,...,a 1 das erste Symbol (a n ) mit dem i. Symbol aus (i≤n), weshalb sie<br />

auch als Transposition bezeichnet wird. Durch eine Transposition kann man ein<br />

Symbol in einer Sequenz an jede Position transportieren, so daß die Anzahl un-<br />

94


terschiedlicher Sequenzen, die durch fortlaufende Transpositionen erzeugt werden<br />

können, identisch ist mit der Zahl der Kombinationen von n Elementen zur<br />

r-ten Klasse (mit Berücksichtigung der Anordnung <strong>und</strong> ohne Wiederholungen).<br />

Diese Zahl ist <strong>für</strong> r = n gleich n! Ein Star-Graph besteht deshalb aus n! Knoten,<br />

wobei jeder Knoten (n-1) Nachbarknoten hat, die durch Transposition des 1.<br />

Symbols mit den übrigen (n-1) Symbolen entstanden sind.<br />

Der Grad des Star-Graphen ist somit ebenfalls gleich (n-1). Die Gesamtzahl<br />

seiner Kanten beträgt n!(n-1)/2, da von jedem der n! Knoten (n-1) Kanten weggehen<br />

<strong>und</strong> je zwei Knoten eine gemeinsame Kante haben (=Divisor 2).<br />

Beispiel:<br />

Aus der Menge {1, 2, 3} <strong>und</strong> der Startsequenz 123 entsteht durch Transposition<br />

die Menge {123, 213, 312, 132, 231, 321} aus 6 Elementen. Der dazu gehörende<br />

Star-Graph ist ein Ring <strong>und</strong> in Bild 3.11 gezeigt. Zu beachten ist, daß der<br />

nächstgrößere Star-Graph bereits 24 Knoten umfaßt <strong>und</strong> eine wesentlich komplexere<br />

Struktur aufweist. Seine Topologie ist in Bild 3.2 des Kapitels "Typische<br />

statische Netze" dargestellt. Der darauffolgende Star-Graph umfaßt 120<br />

Knoten <strong>und</strong> ist zeichnerisch nur noch schwer darstellbar.<br />

123<br />

321<br />

213<br />

231<br />

312 132<br />

Bild 3.11: Star-Graph mit N = 6 Knoten.<br />

3.7 Skalierbarkeit <strong>und</strong> Emulation von Netzen<br />

Für die praktische Anwendung statischer Netze spielen häufig zwei pragmatische<br />

Faktoren eine wichtige Rolle. Der erste Faktor ist die leichte Erweiterbarkeit<br />

(Skalierbarkeit) eines Netzes, die möglichst kostengünstig <strong>und</strong> mit geringem<br />

Aufwand verb<strong>und</strong>en sein sollte, <strong>und</strong> der zweite Faktor betrifft die<br />

Portierbarkeit eines gegebenen <strong>parallel</strong>en Algorithmus auf einen anderen Parallelrechner<br />

mit unterschiedlicher Verbindungstopologie. Obwohl beide Faktoren<br />

starken Bezug zur Praxis haben, ist gerade hier die Graphentheorie besonders<br />

wichtig. Für die Skalierbarkeit ist das graphentheoretisch berechenbare<br />

kleinste Netzinkrement entscheidend, das hinzugefügt werden muß, um das je-<br />

95


weils nächstgrößere Netz zu erhalten. Für die Portierung ist die Frage wichtig,<br />

inwieweit ein Graph durch einen anderen Graphen nachgeahmt (emuliert) werden<br />

kann. Im folgenden Abschnitt werden diese Faktoren näher untersucht.<br />

Zur Beurteilung der Skalierbarkeit eines Netzes ist die Berechnung des<br />

kleinstmöglichen Netzinkrements vorzunehmen. Dabei zeigt es sich, daß die<br />

kleinste Zahl hinzuzufügender Knoten, die zur topologischen Vollständigkeit<br />

eines Graphen notwendig ist, von Graph zu Graph stark schwankt. Während es<br />

beim Ring noch ausreicht, nur einen Knoten hinzuzufügen, sind beim Star-Graphen<br />

bereits n ⋅ n! Knoten notwendig.<br />

Natürlich kann auch eine kleinere Knotenzahl als das Netzinkrement zur<br />

Netz- bzw. Rechnererweiterung verwendet werden, die beispielsweise dem verfügbaren<br />

Budget entspricht. Dann allerdings muß man eine erhöhte Routing-<br />

Komplexität sowie eine mögliche Sättigung einzelner Kanäle aufgr<strong>und</strong> ungleichmäßiger<br />

Verkehrsaufteilung <strong>und</strong> zusätzlichen Mehraufwand beim Algorithmenentwurf<br />

in Kauf nehmen.<br />

Neben dem kleinsten Knoteninkrement spielen <strong>für</strong> die Skalierbarkeit noch<br />

eine Rolle, wie sich die Effizienz der Verbindungstopologie bei zunehmender<br />

Knotenzahl verhält. Ein Indikator <strong>für</strong> die Effizienz ist die Latenzzeit, die wiederum<br />

mit dem Netzdurchmesser gekoppelt ist. Ein zweidimensionales Gitter<br />

aus N Knoten beispielsweise hat mit O ( N)<br />

ein kleines Inkrement, weil nur<br />

eine Gitterzeile <strong>und</strong> -spalte neu hinzugefügt werden muß. Allerdings wächst der<br />

Durchmesser ebenfalls mit O ( N)<br />

, so daß große Gitter im Vergleich zum Hypercube,<br />

der mit O(logN) wächst, nur <strong>für</strong> Anwendungen mit hoher Datenlokalität<br />

effizient sind.<br />

Die Latenz beim Hypercube steigt relativ langsam an. Hyperkuben haben<br />

also auch bei hohen Prozessorzahlen große Effizienz. Ihr Nachteil liegt darin,<br />

daß <strong>für</strong> jede Erweiterung eines gegebenen Hyperkuben die Knotenzahl verdoppelt<br />

werden muß, was von einer bestimmten Größe an zu teuer wird. Zusätzlich<br />

muß bei einer Erweiterung ein neuer Netzwerkanschluß an jedem Knoten angebracht<br />

werden, was in der Praxis nachteilig ist, da dies entweder Stillstandszeiten<br />

des Rechner wegen Umbauarbeiten oder von Anfang an freie Steckplätze<br />

im Rechner, d.h. höhere Mehrkosten erfordert.<br />

Zusammenfassend ist zur Skalierbarkeit zu sagen, daß es die "ideale" Topologie<br />

mit geringem Inkrement bei gleichzeitig geringer Latenz nicht gibt, so<br />

daß in der Praxis der bestmögliche Kompromiß aus einander widersprechenden<br />

Forderungen gef<strong>und</strong>en werden muß, was eine Abwägung im konkreten Einzelfall<br />

bedeutet.<br />

Die zweite, <strong>für</strong> die Praxis wichtige Frage lautet, wie gut ein Graph einen anderen<br />

Graphen nachbilden (emulieren) kann. Der Vorteil der Emulation eines<br />

Graphen durch einen anderen liegt darin, daß man Programme, die <strong>für</strong> den einen<br />

Graphen, z.B. <strong>für</strong> ein Gitter, geschrieben sind, auf einen anderen Graphen,<br />

z.B. einem Hypercube, unverändert ausführen kann. Dadurch werden Kosten<br />

<strong>für</strong> eine Neukodierung eingespart, weil trotz der Vielzahl existierender Topologien<br />

<strong>und</strong> deren spezifischer <strong>parallel</strong>er Programmierung eine Wiederverwendung<br />

einmal vorhandener Applikation möglich wird.<br />

96


Für die Emulation wird die Topologie eines Gastgraphen G auf einen Wirtsgraphen<br />

H so abgebildet, daß alle Knoten von G auf Knoten von H zu liegen kommen.<br />

Dadurch wird jede Kante von G auf einen Pfad, d.h. auf eine oder mehrere<br />

nachfolgende Kanten von H transformiert. Ein Maß, das Auskunft über die<br />

Qualität der Abbildung gibt, ist die Verlangsamung, die eine Anwendung bei<br />

der Ausführung auf dem Wirtsgraphen H erfährt. Eine gute Abbildung bzw. ein<br />

gut geeigneter Wirtsgraph bedeutet <strong>für</strong> eine <strong>parallel</strong>e Anwendung eine nur geringfügige<br />

Verlangsamung. Je geringer die Verlangsamung, umso größer ist die<br />

Effizienz der Emulation. Die Verlangsamung hängt von drei Faktoren ab:<br />

• Von der sog. Knotenlast, die als die Zahl von Gastknoten definiert ist, die maximal<br />

auf einem Wirtsknoten zu liegen kommen.<br />

• Von der Länge des längsten Pfades, auf den eine beliebige Kante von G abgebildet<br />

wird. Diese Länge wird als Dilatation (Dehnung) bezeichnet.<br />

• Vom Maximum der Zahl der Kanten von G, die auf dieselbe Kante in H abgebildet<br />

werden, sich also eine Wirtskante teilen müssen. Dieses Maximum<br />

kennzeichnet den Andrang (Congestion) bzw. den Füllungsgrad an dieser<br />

Kante.<br />

Von R. Koch [Koch89] wurde gezeigt, daß ein Graph G, der mit Last L, Dilatation<br />

D <strong>und</strong> Andrang C von einem Wirtsgraphen emuliert wird, eine Verlangsamung<br />

S erfährt, die von der Ordnung O(L+D+C) ist. Für den Fall S = 1<br />

beispielsweise besteht kein Unterschied zwischen der Ausführung auf G oder<br />

auf H. Wenn dagegen die Zahl der Knoten von G größer als die Zahl der Knoten<br />

von H, dann muß, bei gleicher Rechengeschwindigkeit der Knoten in G <strong>und</strong> H,<br />

S>1 sein.<br />

Eine der bei der Emulation interessantesten Fragen ist, wie groß S höchstens<br />

werden muß, damit G von H emuliert werden kann. Diese Frage kann bislang<br />

nicht allgemein beantwortet werden. Sie ist noch Gegenstand der Forschung.<br />

Ein anderes Maß <strong>für</strong> die Güte der Emulation ist die Effizienz E, die hier als<br />

Def. 3.5:<br />

E<br />

=<br />

T G<br />

N<br />

-------------- G<br />

T H<br />

N H<br />

definiert wird, wobei T G <strong>und</strong> N G die Ausführungszeit bzw. Knotenzahl des<br />

Gastgraphen <strong>und</strong> T H <strong>und</strong> N H die Ausführungszeit <strong>und</strong> Knotenzahl des Wirtsgraphen<br />

sind. Die Effizienz ist also das Verhältnis der mit den Knotenzahlen<br />

gewichteten Ausführungszeiten. Mit der Effizienz eng verknüpft ist die Expansion<br />

der Knotenzahl, die als das Verhältnis N H /N G definiert ist. Für die Expansion<br />

X gilt:<br />

Gl. 3.4:<br />

X ⋅ S⋅<br />

E = 1<br />

Die Gl. 3.4 kann als Normierungsbedingung <strong>für</strong> X, S oder E verwendet werden.<br />

Es hat sich herausgestellt, daß binäre Hyperkuben gut geeignet zur Emulation<br />

fast aller Topologien sind. Insbesondere kann ein Hyperkubus effizient Ringe,<br />

97


Gitter <strong>und</strong> Bäume einbetten, <strong>für</strong> die eine Vielzahl <strong>parallel</strong>er Anwendungen existieren.<br />

Die drei genannten Topologien sind in der <strong>parallel</strong>en Programmierung besonders<br />

gebräuchlich. Auf Gittern beispielsweise können sehr gut partielle Differentialgleichungen,<br />

Matrixoperationen <strong>und</strong> Mehrgitterverfahren berechnet<br />

werden können. Auf Bäumen sind alle Teile-<strong>und</strong>-Herrsche-Algorithmen (Divide<br />

and Conquer) leicht implementierbar. Der Ring schließlich wird wegen seiner<br />

Einfachheit <strong>und</strong> seinen geringen Kosten besonders bei kleinen Parallelrechnern<br />

bzw. <strong>verteilte</strong>n <strong>Systeme</strong>n verwendet. Ein guter Überblick zur Emulationsfähigkeit<br />

des Hypercubes ist z.B. in [Leighton92] zu finden.<br />

3.8 Das Grad-Durchmesser-Problem<br />

<strong>Verbindungsnetzwerke</strong> gelten vom topologischen Standpunkt aus als gut, wenn<br />

sie bei gegebener Knotenzahl N einen möglichst geringen Durchmesser k <strong>und</strong><br />

einen kleinen Knotengrad d haben, weil dann Latenzzeit <strong>und</strong> die Zahl der Netzanschlüsse,<br />

die den Hauptkostenfaktor in einem statischen Netz darstellen, minimal<br />

sind. Die Frage dabei ist, wie klein d <strong>und</strong> k bei gegebener Knotenzahl<br />

überhaupt werden können. Mit dieser Fragestellung verwandt ist die Frage, wie<br />

viele Knoten N man bei gegebenem Durchmesser k <strong>und</strong> Knotengrad d maximal<br />

miteinander verbinden kann. Das letztere wird als das (d, k)-Problem bezeichnet.<br />

In der Mathematik wird das Grad-Durchmesser-Problem bei Graphen seit<br />

langem untersucht [Elspas64, Imase85, Opatrny85]. Eine umfassende, endgültige<br />

Lösung des Problems ist zur Zeit nicht in Sicht. Die besten bekannten Verfahren<br />

zur Erzeugung guter Graphen sind heuristischer Natur [Bermond84].<br />

Eine obere Grenze <strong>für</strong> N(d, k) ist nach [Delorme84] gegeben durch:<br />

Gl. 3.5:<br />

dd ( – 1) k – 2<br />

Ndk ( , ) ≤ ------------------------------ , <strong>für</strong> d > 2<br />

d – 2<br />

Gl. 3.5 wird als Moore-Grenze bezeichnet. Interessant ist, daß die heute gebräuchlichen<br />

Graphen weit von der Moore-Grenze entfernt sind. Ein Hyperkubus<br />

mit d = k = 4 beispielsweise hat 16 Knoten, während nach Moore 161 Knoten<br />

möglich sein müßten!<br />

Das Problem ist allerdings, daß man nicht weiß, wie man Graphen mit der<br />

Moore-Knotenzahl konstruiert <strong>und</strong> daß nur sehr wenige Graphen überhaupt bekannt<br />

sind, wie z.B. der Petersen Graph, die diese Obergrenze tatsächlich erreichen.<br />

Mittlerweile wurde sogar gezeigt, daß es aus prinzipiellen Gründen nur<br />

wenige Moore-Graphen geben kann [Sied92]. Trotzdem ist die Moore-Grenze<br />

eine gute Orientierungshilfe, die motiviert, "bessere" Graphen zu finden.<br />

98


3.9 BIBD-Graphen<br />

Eine Möglichkeit, Graphen kleinen Durchmessers <strong>und</strong> großer Fehlertoleranz zu<br />

konstruieren, stellen die Balanced Incomplete Block Designs (BIBD) dar, die<br />

bereits 1971 vorgeschlagen wurden [Hagelb71, Opatrny86, Skillicorn88].<br />

BIBD-Graphen liegen bzgl. ihres Durchmessers, Knotengrades <strong>und</strong> der Zahl<br />

der miteinander verb<strong>und</strong>enen Knoten näher an der Moore-Grenze als eine Reihe<br />

anderer Graphen. Beispielsweise besteht ein BIBD-Graph mit Grad 10 <strong>und</strong><br />

Durchmesser 4 aus 1001 Knoten. Der Vergleich mit einem Hyperkubus aus<br />

1024 Knoten zeigt, daß der Durchmesser beim Hyperkubes bei gleichem Knotengrad<br />

mehr als doppelt so groß ist (K = 10).<br />

Zur Konstruktion von BIBDs werden im ersten Schritt, ähnlich wie beim<br />

Star-Graphen, Kombinationen von n Symbolen zur r-ten Klasse gebildet. Der<br />

Unterschied zum Star-Graphen besteht u.a. darin, daß die Kombinationen nicht<br />

als Sequenzen (Vektoren) repräsentiert werden, sondern als Mengen, weil die<br />

Anordnung der Symbole hier keine Rolle spielt. Genauso wie beim Star-Graphen<br />

sind Wiederholungen von Symbolen in derselben Menge nicht erlaubt.<br />

Ein BIBD kann somit maximal ⎛n⎞<br />

Mengen enthalten, die als Blöcke bezeichnet<br />

werden (Daher auch die Namensgebung).<br />

⎝r⎠<br />

Zusätzlich gilt bei der Konstruktion von BIBD-Graphen noch die Randbedingung,<br />

daß, summiert über alle Mengen, jedes Symbol, jedes Paar von Symbolen,<br />

jedes Tripel, Quadrupel, usw. von Symbolen genau sooft in den erzeugten<br />

Blöcken enthalten sein muß, wie man zuvor vereinbart hat. Durch diese Zusatzbedingung<br />

wird die Zahl der Blöcke, aus denen ein BIBD besteht, i.d.R.<br />

wesentlich reduziert. Wenn S die Zahl der Symbole angibt <strong>und</strong> wenn jedes<br />

Symbol insgesamt α mal in Mengen mit r Elementen enthalten ist, dann gilt <strong>für</strong><br />

die Zahl B der Blöcke:<br />

Gl. 3.6:<br />

B<br />

=<br />

αS<br />

------<br />

r<br />

Sind beispielsweise <strong>für</strong> ein BIBD die Symbole 1,2,...,9 gegeben <strong>und</strong> sollen daraus<br />

alle Kombinationen mit drei Elementen gewonnen werden, die jedes Symbol<br />

4 mal <strong>und</strong> jedes Symbolpaar 1 mal enthalten, dann lautet das Resultat:<br />

{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},<br />

{1,6,8}, {2,4,9}, {3,5,7}, was 12 Blöcke ergibt.<br />

Im nächsten Schritt werden zur Konstruktion eines BIBD-Graphen die Symbole<br />

der Blöcke mit den Knoten eines Graphen identifiziert. Die Symbolnummer<br />

gibt dabei die Knotenadresse an (im Beispiel 1 bis 9). Die Verbindungen<br />

zwischen den Knoten werden durch die Elemente der Blöcke definiert.<br />

Block {1,2,3} bedeutet beispielsweise "Verbinde Knoten 1 mit 2 <strong>und</strong> diesen mit<br />

Knoten 3". In Bild 3.12 ist der BIBD-Graph des Beispiels abgebildet.<br />

BIBD-Graphen haben trotz ihrer herausragenden Eigenschaften bzgl. Durchmesser<br />

<strong>und</strong> Fehlertoleranz auch Nachteile. Zum einen ist bislang nicht bekannt,<br />

99


1 2 3<br />

4<br />

5<br />

6<br />

7 8 9<br />

Bild 3.12: Beispiel eines BIBD-Graph <strong>für</strong> N = 9.<br />

<strong>für</strong> welche Kombinationen von S, r, B <strong>und</strong> α es BIBD-Graphen überhaupt gibt.<br />

Zum anderen ist das Routing in BIBDs relativ aufwendig, weil die Knoten über<br />

komplexe Regeln miteinander verb<strong>und</strong>en sind <strong>und</strong> weil der Grad des Graphen<br />

nicht konstant ist. Im Beispiel hat der Knoten 5 den Grad 8, während der Knoten<br />

1 den Grad 4 aufweist. Das bedeutet, daß BIBD-Graphen nicht knotensymmetrisch<br />

sind.<br />

3.10 Routing in statischen Netzen<br />

Die Definition des Routing-Begriffs <strong>und</strong> die Gr<strong>und</strong>lagen der Wegewahl wurden<br />

bereits erläutert. In diesem Kapitel geht es um die verschiedenen Routing-Methoden,<br />

die in statischen Netzen eingesetzt werden. Generell unterscheidet man<br />

bei statischen Netzen zwischen deterministischen <strong>und</strong> adaptiven sowie zwischen<br />

verklemmungsfreien <strong>und</strong> deadlock-trächtigen Routing-Methoden. Es<br />

wird gezeigt, wie man mit Hilfe spezieller Deadlock-Tests feststellen kann, ob<br />

die gewählte Routing-Methode <strong>für</strong> ein gegebenes Netz verklemmungsfrei ist.<br />

3.10.1 Deterministisches Routing<br />

Bei deterministischen Routing-Verfahren werden zur Bestimmung des Netzpfades<br />

nur die Adressen von Sender <strong>und</strong> Empfänger verwendet, andere Informationen<br />

wie z.B. die Verkehrsbelastung im Netz gehen in die Berechnung<br />

nicht ein. Daher rühren auch die synonymen Bezeichnungen Oblivious- bzw.<br />

Fixed-Path-Routing.<br />

Das Wesentliche beim deterministischen Routing ist, daß entweder aus der<br />

Zieladresse oder aus der Differenz von Ziel- <strong>und</strong> Herkunftsadresse ein in der<br />

Regel einfaches Wegschema ermittelt wird, das <strong>für</strong> jede Netztopologie spezi-<br />

100


fisch ist. Die gebräuchlichsten deterministischen Routing-Verfahren sind das x-<br />

y-z- <strong>und</strong> das e-Cube Routing.<br />

x-y-z-Routing<br />

Beim x-y-z-Routing, das in einem 3-dimensionalen Gitter bzw. einem 3-D Torus<br />

abläuft, wird die Sender- <strong>und</strong> Empfängeradresse in einer Koordinatendarstellung<br />

P(x,y,z) ausgedrückt, <strong>und</strong> zur Wegewahl werden die Koordinatendifferenzen<br />

zwischen Sender <strong>und</strong> Empfänger berechnet. Wenn S = (s x , s y , s z )<br />

<strong>und</strong> E = (e x , e y , e z ) die Sende- bzw. Empfangsadressen repräsentieren, dann erhält<br />

man aus D = (d x , d y , d z ) = (e x -s x , e y -s y , e z -s z ) die Information, wieweit Sender<br />

<strong>und</strong> Empfänger entlang der einzelnen Koordinatenachsen voneinander entfernt<br />

sind. Ein Datenpaket, das ausgehend vom Sender die Abstände d x , d y , d z<br />

im Netz zurücklegt, erreicht nach (d x +d y +d z ) Schritten den Empfänger.<br />

Beim x-y-z-Routing wandert das Paket zuerst um die Differenz d x entlang der<br />

x-Achse, dann um d y entlang der y-Achse <strong>und</strong> schließlich um d z entlang der z-<br />

Achse, bis das Ziel erreicht ist. Ist eine Differenz kleiner Null, muß in absteigender<br />

Koordinatenrichtung vorangeschritten werden. Dieses Schema läßt sich<br />

auf beliebig viele Dimensionen ausdehnen.<br />

Das x-y-z-Routing ist aufgr<strong>und</strong> der vorgegebenen Abfolge bei der Auswertung<br />

der Koordinatendifferenzen (zuerst x, dann y dann z) ein deterministisches<br />

Verfahren <strong>und</strong> kann mit geringem Aufwand in den Rechenknoten implementiert<br />

werden.<br />

Bezüglich der Wegewahl unterscheidet sich die Torustopologie vom Gitter<br />

insofern, als daß beim Torus die Differenz in jeder Koordinatenrichtung nicht<br />

größer als die Hälfte des entsprechenden Abstandes im Gitter werden kann. Das<br />

bedeutet <strong>für</strong> das x-y-z-Routing im Torus, daß auch dann, wenn die Koordinatendifferenz<br />

positiv ist, in negativer Koordinatenrichtung vorangeschritten<br />

wird, sofern der Empfänger dadurch schneller erreichbar ist. D.h., daß beim x-<br />

y-z-Torus-Routing der räumlich kürzeste Weg aus zwei Alternativen (rechts<br />

oder links im Kreis) gewählt wird.<br />

Beispiel:<br />

In einem Torus seien in x-Richtung 8 Knoten kreisförmig verb<strong>und</strong>en <strong>und</strong> die<br />

Koordinatendifferenz d x sei gleich +7. Dann wird beim x-y-z-Torus-Routing<br />

ein Datenpaket in negativer x-Richtung um |7-8| = |-1| Knoten zum Ziel hin bewegt,<br />

da |-1| < +7 ist.<br />

e-Cube Routing<br />

Ein dem x-y-z-Routing entsprechendes Routing-Schema läßt sich auch <strong>für</strong> die<br />

Hypercube-Topologie aufstellen <strong>und</strong> trägt dann den Namen e-Cube Routing. In<br />

einem Hyperkubus werden die Knoten üblicherweise so durchnumeriert, daß<br />

sich benachbarte Knoten um genau ein Bit unterschieden, was analog zu einer<br />

101


Koordinatendifferenz von 1 bei benachbarten Gitter- oder Torusknoten ist. Anstelle<br />

der P(x, y, z)-Koordinatendarstellung wird im Hypercube eine binäre<br />

Knotenadressierung der Art<br />

S = s n s n-1 ...s 1 <strong>und</strong> E = e n e n-1 ...e 1 (s i , e i ∈{0, 1})<br />

<strong>für</strong> die Sender- <strong>und</strong> Empfängeradressen gewählt. In diesem Fall haben zwei<br />

Knoten S, E, deren Adressen sich um zwei Bits unterscheiden, einen gemeinsamen<br />

Nachbarn (Zwischenknoten), der sich um jeweils ein Bit von S <strong>und</strong> E unterscheidet.<br />

Die Entfernung von S <strong>und</strong> E im Hypercube ist also gleich zwei. Entsprechend<br />

hat ein Knotenpaar (S, E) mit i (0 < i ≤ n) unterschiedlichen Bits die<br />

Entfernung i, so daß ein Paket i Schritte benötigt, um von S nach E zu kommen.<br />

Weiterhin gibt es <strong>für</strong> zwei beliebige Adreßbits s j , e j (1 ≤ j ≤ n) nur die beiden<br />

Möglichkeiten, daß sie entweder gleich oder ungleich sein können. Im ungleichen<br />

Fall wird beim e-Cube Routing das Paket von seiner momentanen Position<br />

zu demjenigen Nachbarn geschickt, der sich in genau diesem Bit unterscheidet.<br />

Für den Fall, daß s j <strong>und</strong> e j <strong>für</strong> ein bestimmtes j gleich sind, erfolgt keine Bewegung<br />

in der Dimension j. Im Schritt j+1 werden die Bits e j+1 <strong>und</strong> s j+1 miteinander<br />

verglichen, d.h. der beschriebene Vorgang wird nacheinander <strong>für</strong> alle<br />

Adreßbits von S <strong>und</strong> E durchgeführt.<br />

Beispiel:<br />

Gegeben sei in einem 4-dimensionalen Hypercube ein Sender-/Empfängerpaar<br />

mit S = 0000 <strong>und</strong> E = 1111. Nach dem e-Cube Routing ergibt sich daraus der<br />

Pfad 0000->0001->0011->0111->1111, den ein Datenpaket vom Sender zum<br />

Empfänger zurücklegen muß. Der Weg durch das Netz ist durch die vorgegebene<br />

Reihenfolge der Dimensionen (LSB First) eindeutig.<br />

3.10.2 Adaptives Routing<br />

Das Ziel von adaptivem Routing ist es, den Datendurchsatz durch ein Netz zu<br />

steigern <strong>und</strong> eventuelle Netzdefekte durch alternative Wegewahl zu umgehen.<br />

Die bei Netzfehlern durch den Einsatz von adaptivem Routing erzielbare Fehlertoleranz<br />

ist <strong>für</strong> viele Anwendungen wichtig <strong>und</strong> deshalb wird in diesen Fällen<br />

adaptives gegenüber deterministischem Routing bevorzugt.<br />

Der Datendurchsatz eines Netzes wird bei adaptivem Routing dadurch erhöht,<br />

daß verkehrsmäßig stark belastete Knoten <strong>und</strong> Kanäle (Hot Spots) seltener<br />

als Routing-Pfade verwendet werden als wenig belastete. Die Wartezeiten<br />

an den Hot Spots werden dadurch so klein wie möglich gehalten, weil der Verkehr<br />

gleichmäßig verteilt wird. Auf der anderen Seite bedeutet die Umgehung<br />

hochbelasteter Knoten in der Regel auch eine größere Pfadlänge durch das<br />

Netz, so daß die Latenz der Datenpakete, die einen Umweg beschreiten, zunimmt.<br />

Die Annahme beim adaptiven Routing ist, daß Umwege sich lohnen, Pakete<br />

also trotz des Umwegs schneller zum Empfänger gelangen, als wenn sie an ei-<br />

102


nem verkehrsreichen Knoten warten würden. Diese Annahme ist jedoch nicht<br />

immer gerechtfertigt. Ebenso wird die potentielle Zeitersparnis, die bei einem<br />

adaptiven Routing-Verfahren zu gewinnen ist, durch die Ausführungszeit des<br />

Verfahrens teilweise wieder aufgezehrt, da es komplexer als deterministisches<br />

Routing ist <strong>und</strong> deshalb mehr Zeit benötigt.<br />

Adaptives Routing bedeutet immer ein Abwägen zwischen dem damit verb<strong>und</strong>enen<br />

höheren Aufwand <strong>und</strong> dem erzielbaren Gewinn. Glass <strong>und</strong> Ni<br />

[Glass92] beispielsweise haben gezeigt, daß in einem 16x16 Gitter ein einfaches<br />

x-y-Routing-Schema gegenüber adaptiven Verfahren überlegen ist. Deshalb<br />

kann man nicht sagen, daß Adaptivität in jedem Fall besser geeignet ist,<br />

vielmehr muß im Einzelfall abgewogen werden. In den meisten praktischen<br />

Fällen wird nicht analytisch sondern durch Simulation die Tauglichkeit eines<br />

Verfahrens geprüft. Dazu werden die wichtigsten Netzparameter von Bandbreite<br />

<strong>und</strong> Latenz <strong>für</strong> verschiedene Verkehrsanforderungen simulativ ermittelt.<br />

Ein einfaches Beispiel <strong>für</strong> eine verkehrsabhängige Routing-Methode ist das<br />

adaptive x-y-z- bzw. e-Cube Routing.<br />

Adaptives x-y-z- <strong>und</strong> e-Cube Routing<br />

Sowohl beim x-y-z- als auch beim e-Cube Routing gibt es die Möglichkeit, die<br />

Reihenfolge der Dimensionen, entlang denen ein Paket transportiert wird, flexibel<br />

zu handhaben <strong>und</strong> zwar dergestalt, daß eine Dimension nur dann beschritten<br />

werden darf, wenn der dazugehörende Kanal frei ist. Dadurch werden<br />

die Wartezeiten verkürzt, die beim Durchgang durch das Netz an belegten Netzressourcen<br />

entstehen. Dies wird als adaptives x-y-z- bzw. e-Cube Routing bezeichnet.<br />

Ist beim adaptiven x-y-z- bzw. e-Cube Routing der Kanal einer benötigten<br />

Dimension zu einem bestimmten Zeitpunkt belegt, wird das Paket auf<br />

einem anderen Kanal einer anderen Dimension eingespeist, der zu diesem Zeitpunkt<br />

frei ist <strong>und</strong> der ebenfalls <strong>für</strong> den Pfad des Pakets benötigt wird. Dadurch<br />

kann die Latenzeit verkürzt <strong>und</strong> der Datendurchsatz gesteigert werden, weil die<br />

zu übertragenden Pakete in den Puffern der Knoten nur solange gespeichert<br />

werden müssen, bis ein beliebiger Kanal aus der Menge der zulässigen Kanäle<br />

frei ist. Darüberhinaus können mit adaptivem x-y-z- <strong>und</strong> e-Cube Routing defekte<br />

Kanäle <strong>und</strong> Zwischenknoten umgangen werden.<br />

3.10.3 Allgemeine, adaptive Routing-Verfahren<br />

Zur Durchführung von adaptivem Routing gibt es mehrere Möglichkeiten, die<br />

man hinsichtlich der Parameter Weglänge, Wegewahl <strong>und</strong> Rückverfolgung<br />

(Backtracking) unterscheidet. Dementsprechend kann man <strong>für</strong> adaptive Routing-Verfahren<br />

eine Gliederung, wie sie in Bild 3.13 gezeigt ist, angeben.<br />

Jeder der drei Parameter kann zwei Zustände annehmen, so daß insgesamt 8<br />

verschiedene Routing-Varianten existieren. Dabei ist die Weglänge l ein Maß<br />

<strong>für</strong> die Zahl der Zwischenknoten K, die bis zum Empfänger durchlaufen werden<br />

müssen, gemäß l = K +1. Die Wegewahl kennzeichnet die Zahl der alternativen<br />

103


Pfade zwischen einem beliebigen Sender-/Empfängerpaar, <strong>und</strong> der Rückverfolgungsparameter<br />

klassifiziert, ob beim Routing-Verfahren Backtracking erlaubt<br />

ist. Im folgenden werden alle drei Parameter näher erläutert.<br />

adaptive Pfadfindung<br />

(Wegelenkung)<br />

Weglänge Wegewahl Rückverfolgung<br />

minimal<br />

nicht minimal<br />

eingeschränkt<br />

nicht eingeschränkt<br />

ja<br />

nein<br />

Bild 3.13: Gliederung der adaptiven Routing-Methoden.<br />

Wegewahl<br />

Ein Maß <strong>für</strong> die Adaptivität eines Routing-Verfahrens ist die Zahl der alternativen<br />

Pfade, die aufgr<strong>und</strong> des Routing-Schemas in einer bestimmten Topologie<br />

gewählt werden können. Beim n-dimensionalen, adaptiven x-y-z-Routing im<br />

Gitter beispielsweise kann man, ebenso wie beim adaptiven e-Cube Routing im<br />

Hypercube, im ersten Routing-Schritt von den i Koordinatendifferenzen eines<br />

Sender-/Empfängerpaares, die ungleich Null sind, eine Koordinate auswählen<br />

<strong>und</strong> das Paket entlang dieser Richtung schicken. Für den zweiten Routing-<br />

Schritt verbleiben noch (i-1) ungleiche Dimensionen zur Auswahl, <strong>für</strong> den 3.<br />

Schritt (i-2) Möglichkeiten usw., so daß es bei beiden Verfahren insgesamt i!<br />

Möglichkeiten gibt, in welcher Reihenfolge die Dimensionen beschritten werden<br />

können. Damit existieren auch i! verschiedene Pfade zwischen Sender <strong>und</strong><br />

Empfänger, die darüber hinaus alle gleich lang sind. Deswegen können x-y-z<br />

bzw. e-Cube Routing bzgl. der Pfadzahl als gleichwertig bezeichnet werden.<br />

Aus technischen Gründen kann es manchmal sinnvoll sein, die Adaptivität,<br />

d.h. die Zahl alternativer Pfade einzuschränken, um so ein Routing-Verfahren<br />

leichter implementierbar zu machen oder um potentielle Verklemmungen<br />

(Deadlocks) zu vermeiden. Man spricht deshalb entweder von eingeschränkter<br />

oder von nicht eingeschränkter Wegewahl. Üblicherweise stehen auch bei partieller<br />

Adaptivität noch genügend Wegewahlalternativen zur Verfügung, um<br />

den Netzdurchsatz zu erhöhen oder Fehlertoleranz zu erzielen.<br />

Weglänge<br />

Adaptive Routing-Verfahren werden dann als minimal bezeichnet, wenn alle<br />

Wege zugleich kürzeste Pfade zwischen Sender <strong>und</strong> Empfänger sind. Das heißt,<br />

104


daß bei minimalem, adaptivem Routing Umwege nicht erlaubt sind. Beispiele<br />

<strong>für</strong> wegminimales Routing sind das adaptive x-y-z- oder e-Cube Routing. Erlaubt<br />

man Umwege (nicht minimales Routing), steigt die Zahl der alternativen<br />

Pfade in der Regel erheblich an.<br />

Backtracking<br />

Bei adaptivem Routing kann es auch sinnvoll sein, eine Wiederaufnahme bzw.<br />

Rückverfolgung (Backtracking) bereits eingeschlagener Wege vorzunehmen,<br />

die folgendermaßen abläuft: Ein Datenpaket wird solange weitertransportiert,<br />

bis es an einem Knoten K n ankommt, an dem es warten müßte. Um die Wartezeit<br />

zu vermeiden, wird das Paket um einen oder mehrere Knoten auf dem Weg<br />

zurückgeschickt, auf dem es gekommen ist (von K n zurück zu K n-1 , K n-2 ,...).<br />

Von einem der Vorgängerknoten K n-i (i>0) wird es zu einem anderen Knoten<br />

transportiert, der ohne Wartezeit erreichbar <strong>und</strong> gemäß des Backtracking-Verfahrens<br />

zulässig ist, weil er ebenfalls zum Empfänger führt. Das bedeutet, daß<br />

adaptives Routing mit Backtracking eine nicht wegminimale Routing-Methode<br />

darstellt, weil Rückwege zugelassen sind.<br />

Sobald ein Rückweg eingeschlagen wird, entfernt sich das Paket vorübergehend<br />

vom Empfänger, deshalb wird Backtracking auch als nicht-progressives<br />

Routing bezeichnet. Bei wegminimalem Routing dagegen ist jeder Schritt, der<br />

von einem Paket ausgeführt wird, in Richtung des Empfängers (=progressives<br />

Routing).<br />

3.10.4 Das Deadlock-Problem<br />

Generell müssen sowohl deterministische als auch adaptive Routing-Methoden<br />

erst hinsichtlich ihres Deadlock-Potentials analysiert werden, bevor sie in der<br />

Praxis angewandt werden. Bei adaptivem Routing wird durch die a priori nicht<br />

festgelegte Wegewahl die Gefahr einer Verklemmung noch verschärft.<br />

Auftreten von Deadlocks<br />

Verklemmungen können bei paketvermittelnden Netzen in allen Netztopologien<br />

<strong>und</strong> bei allen Routing-Verfahren wie Store-and-Forward-, Virtual-Cut-<br />

Through- oder Wormhole Routing auftreten. Wenn eine Verklemmung vorkommt,<br />

sind gleichzeitig drei verschiedene Bedingungen eingetreten:<br />

• Eine Interprozessorkommunikation hat eine Ressource wie einen Kanal oder<br />

einen Puffer <strong>für</strong> eine gewisse Zeit exklusiv belegt.<br />

• Eine zweite Interprozessorkommunikation benötigt zur Durchführung ihres<br />

Datenaustauschs die unter 1. belegte Ressource. (Als belegte Ressourcen gelten<br />

dabei volle Puffer oder Kanäle, die keine Daten mehr aufnehmen können,<br />

weil sie gerade Pakete von anderen Kommunikationen speichern bzw. übertragen.)<br />

105


• Die erste Interprozessorkommunikation kann nur dann terminieren, wenn die<br />

zweite Kommunikation terminiert hat, bis dahin wird die eingangs belegte<br />

Ressource blockiert.<br />

Durch das Zusammentreffen dieser drei Bedingungen tritt eine zyklische<br />

Wartesituation ein, die Kennzeichen jedes Deadlocks ist. In Bild 3.14 ist eine<br />

Deadlock-Situation aufgr<strong>und</strong> belegter Puffer exemplarisch dargestellt. In diesem<br />

Beispiel kann keiner der Knoten seine Daten senden, weil die benötigten<br />

Empfangspuffer erst frei werden, nachdem die Daten abgeschickt sind. Das Abschicken<br />

wird jedoch dadurch verhindert, daß kein Empfangspuffer zur Verfügung<br />

steht, wodurch sich der Kreis schließt.<br />

Situation:<br />

Alle Puffer<br />

belegt<br />

K<br />

n<br />

o<br />

t<br />

e<br />

n<br />

beabsichtigter<br />

Transfer: 1->2<br />

negatives<br />

Acknowledge<br />

beabsichtigter<br />

Transfer: 2->1<br />

K<br />

n<br />

o<br />

t<br />

e<br />

n<br />

Situation:<br />

Alle Puffer<br />

belegt<br />

1<br />

negatives<br />

Acknowledge<br />

2<br />

Bild 3.14: Verklemmungssituation aufgr<strong>und</strong> belegter Puffer.<br />

Zu beachten ist, daß eine Verklemmung nach Bild 3.14 bei all denjenigen Knoten<br />

eines beliebigen Graphen auftreten kann, die zueinander benachbart sind<br />

<strong>und</strong> bidirektional Daten austauschen wollen <strong>und</strong> die keine getrennten Sende<strong>und</strong><br />

Empfangspuffer haben, so daß es sich nicht um eine auf eine bestimmte Topologie<br />

beschränkte Situation handelt.<br />

Im Falle des Wormhole-Routings gibt es zur beschriebenen Verklemmungssituation<br />

eine analoge Konstellation, bei der nicht Puffer sondern Kanäle die belegte<br />

Ressource darstellen. In Bild 3.15 beispielsweise möchte Knoten 1 ein<br />

Datenpaket zu Knoten 3 schicken, während Knoten 3 gleichzeitig ein Paket zu<br />

Knoten 1 übertragen will. Gemäß Wormhole-Routing wird von Knoten 1 das<br />

erste Flit in Richtung Empfänger (Knoten 3) abgeschickt <strong>und</strong> dadurch der Kanal<br />

von 1 nach 2 <strong>für</strong> diese Kommunikation belegt. Dasselbe geschieht bei Knoten<br />

3 bzgl. des Kanals von 3 nach 2. Die Flits beider Kommunikationen treffen<br />

sich im Zwischenknoten 2 <strong>und</strong> können nicht weiter, weil die benötigten Kanäle<br />

durch die jeweils andere Kommunikation belegt sind. Wiederum ist die geschilderte<br />

Verklemmungssituation nicht von der Topologie abhängig, sondern kann<br />

überall auftreten.<br />

Anhand der geschilderten, einfachen Deadlock-Situationen wird bereits deutlich,<br />

daß die Deadlock-Vermeidung einen wichtigen Punkt darstellt.<br />

Die geschilderten Fälle wechselseitig blockierter Puffer bzw. Kanäle lassen<br />

sich auf alle Konstellationen erweitern, bei denen mehr als zwei Interprozessorkommunikationen<br />

einander blockieren, so daß dadurch ein zirkulares War-<br />

106


Knoten<br />

1<br />

Knoten<br />

2<br />

Knoten<br />

3<br />

Transfer 1->3 Transfer 3->1<br />

Kanal 1->2<br />

ist durch Flit<br />

1->3 belegt<br />

Kanal 3->2<br />

ist durch Flit<br />

3->1 belegt<br />

(gestrichelt)<br />

Bild 3.15: Verklemmung aufgr<strong>und</strong> belegter Kanäle.<br />

ten entsteht. In Bild 3.16 werden exemplarisch 4 Knoten gezeigt, die im Kreis<br />

auf freie Puffer warten. In diesem Beispiel möchte Knoten 1 zu Knoten 2, 2 zu<br />

3, 3 zu 4 <strong>und</strong> dieser wiederum zu Knoten 1 übertragen. Da alle Puffer voller<br />

Sendedaten sind <strong>und</strong> keine getrennte Sende- <strong>und</strong> Empfangsspeicher existieren,<br />

kann kein Knoten die Daten des Nachbarknotens aufnehmen.<br />

Situation: Alle Puffer voll<br />

Knoten<br />

1<br />

Transfer: 1->2<br />

neg. Ack.<br />

Knoten<br />

2<br />

Transfer:<br />

4->1<br />

neg. Ack.<br />

neg. Ack.<br />

Transfer:<br />

2->3<br />

Knoten<br />

4<br />

neg. Ack.<br />

Transfer: 3->4<br />

Knoten<br />

3<br />

Bild 3.16: Verklemmung aufgr<strong>und</strong> zirkularen Wartens auf belegte Puffer.<br />

Auch hier gibt es eine zu Bild 3.16 analoge Situation, bei der nicht Puffer, sondern<br />

Kanäle beteiligt sind, <strong>und</strong> die bei Wormhole-Routing immer dann auftreten<br />

kann, wenn eine Kommunikation einen Kanal als Teilstrecke eines Pfades<br />

reserviert, während die übrigen Kanäle, die zur Komplettierung des Pfades notwendig<br />

sind, nicht erhältlich sind, weil sie von anderen Kommunikationen belegt<br />

sind. Diese wiederum können ihre Pfade deshalb nicht freigeben, weil sie<br />

den reservierten Pfad <strong>für</strong> die Komplettierung ihrer Kommunikationen benötigen<br />

(kreisförmiges Warten). Der geschilderte Deadlock-Kreis ist in Bild 3.17<br />

exemplarisch <strong>für</strong> 4 Knoten dargestellt.<br />

In Bild 3.17 belegt Knoten 1 den Kanal von Knoten 1 zu Knoten 2, um den<br />

Transfer 1->3 durchzuführen, sobald der Kanal von Knoten 2 zu Knoten 3 frei<br />

ist. Genauso verhalten sich die Knoten 2, 3 <strong>und</strong> 4 mit den Kanälen von 2 nach<br />

3, 3 nach 4 <strong>und</strong> 4 nach 1, so daß kein Transfer durchgeführt werden kann, weil<br />

jeder ein Teil der Ressourcen des anderen belegt.<br />

Der geschilderte Fall nach Bild 3.17 kann bei Leitungsvermittlung immer<br />

dann auftreten, wenn eine neue Verbindung durch Reservierung von Teil-<br />

107


Knoten<br />

1<br />

Transfer: 1->3<br />

neg. Ack.<br />

Knoten<br />

2<br />

Transfer:<br />

4->2<br />

neg. Ack.<br />

neg. Ack.<br />

Transfer:<br />

2->4<br />

Knoten<br />

4<br />

neg. Ack.<br />

Transfer: 3->1<br />

Knoten<br />

3<br />

Bild 3.17: Verklemmung aufgr<strong>und</strong> zirkularen Wartens auf reservierte Kanäle.<br />

strecken aufgebaut wird. Ebenso möglich ist das Eintreten dieser Situation bei<br />

Paketvermittlung mit Wormhole-Routing, da jedes Flit eines Pakets solange einen<br />

Kanal belegt, bis das erste Flit des Pakets auf dem vordersten Kanal in der<br />

Kette weiter transportiert werden kann.<br />

Zum geschilderten zyklischen Warten gemäß Bild 3.16 oder Bild 3.17 existiert<br />

noch die Variante, daß die Übertragungsrichtung gespiegelt sein kann.<br />

Aus einem kreisförmigen Warten im Uhrzeigersinn wird dann ein Zyklus im<br />

Gegenuhrzeigersinn, wie es in Bild 3.18 <strong>für</strong> den Fall von vier Knoten dargestellt<br />

ist.<br />

1 2<br />

4<br />

3<br />

Bild 3.18: Verklemmung in gespiegelter Reihenfolge.<br />

Wichtig ist festzustellen, daß es sich bei allen gezeigten Beispielen nicht um<br />

den Spezialfall einer bestimmten, kreisförmigen Netztopologie handelt, sondern<br />

um alle Kreise, die sich in einen beliebigen Graphen einbetten lassen.<br />

Zirkulares Warten kann um so schwerer erkannt werden, je mehr Knoten am<br />

Warten beteiligt sind. Prinzipiell ist die Knotenzahl nicht begrenzt; viele Knoten<br />

sind jedoch sehr unwahrscheinlich. Bei adaptiven nicht wegminimalen<br />

Wormhole-Routing-Verfahren kann zusätzlich der Fall auftreten, daß ein Knoten<br />

sich selbst blockiert, indem die Flits eines Pakets, die von dem Knoten ausgehen,<br />

einen "Kreis schlagen" <strong>und</strong> sich ein "früheres" <strong>und</strong> ein "späteres" Flit<br />

desselben Pakets an dem Knoten treffen <strong>und</strong> in die gleiche Richtung wollen.<br />

Als Schlußfolgerung aus den gezeigten Fallstudien lassen sich drei Sätze über<br />

Deadlocks aufstellen:<br />

108


Satz 3.2: Solange in einem Netz keine vollen Puffer bzw. keine exklusiv belegten<br />

Kanäle existieren, sind Verklemmungen nicht möglich.<br />

Satz 3.3: Volle Puffer oder belegte Kanäle sind dann Deadlock-trächtig, wenn<br />

ein kreisförmiges (zyklisches) Warten auf Pufferplatz oder Kanalkapazität<br />

stattfinden kann.<br />

Satz 3.4: An einem Deadlock können eine beliebige Zahl (1,2,...,n) von Kommunikationen<br />

beteiligt sein.<br />

Diese Sätze haben ein gewisse Praxisrelevanz bei der Verhinderung von Deadlocks.<br />

Im allgemeinen wird man jedoch versuchen, ein a priori verklemmungsfreies<br />

Routing-Verfahren auszuwählen.<br />

Verhinderung von Deadlocks<br />

Nach der Darstellung, unter welchen Bedingungen Verklemmungen auftreten<br />

können, geht es nun um Methoden zu ihrer Vermeidung. Es zeigt sich, daß die<br />

Verhinderung einer Verklemmung, die durch zyklisches Warten auf Kanäle<br />

oder Puffer verursacht wird, nur <strong>für</strong> den Spezialfall von zwei einander blokkierenden<br />

Knoten leicht zu bewerkstelligen ist, bei mehr als zwei Knoten jedoch<br />

besondere Gegenmaßnahmen erfordert.<br />

Die "Zweier"-Verklemmung nach Bild 3.14 läßt sich leicht durch getrennte<br />

Sende- <strong>und</strong> Empfangspuffer vermeiden, weil durch diese Maßnahme auch dann<br />

noch Daten von Nachbarknoten entgegengenommen werden können, wenn die<br />

Sendepuffer voll sind. Analog kann man die Verklemmung nach Bild 3.15<br />

durch die Einführung getrennter Hin- <strong>und</strong> Rückkanäle lösen. Beim zyklischen<br />

Fall der Vierer-Verklemmung (Bild 3.16) hingegen führen einfache Maßnahmen<br />

nicht mehr zum Ziel, wie folgende Konstellation zeigt:<br />

Vier mit getrennten Sende- <strong>und</strong> Empfangspuffern versehene <strong>und</strong> im Kreis geschaltete<br />

Knoten versuchen, Daten zum jeweils übernächsten Nachbarn zu<br />

übertragen. Dazu ist es notwendig, daß die Daten in einem Zwischenknoten von<br />

dem Empfangspuffer in den Sendepuffer transferiert <strong>und</strong> von dort abgeschickt<br />

werden können. Die Situation nach Bild 3.19 ist jedoch so, daß die Daten solange<br />

nicht transferiert werden können, wie der Sendepuffer seinerseits belegt<br />

ist <strong>und</strong> auf einen freien Empfangspuffer im Nachbarknoten wartet. Durch die<br />

zyklische Verbindung wartet jeder Knoten mit dem Transferieren vom Sendezum<br />

Empfangspuffer, bis der Nachbarknoten seinen Empfangspuffer frei<br />

macht, was nie der Fall ist.<br />

Die in Bild 3.19 gezeigte Verklemmung läßt sich vermeiden, wenn es in jedem<br />

Knoten genauso viele Sende- <strong>und</strong> Empfangspuffer gibt, wie aufeinander wartende<br />

Knoten, also in diesem Fall je vier Puffer.<br />

Man kann zeigen, daß die Einführung von vier virtuellen Kanälen, die das<br />

Multiplexen voneinander unabhängiger Transfers auf demselben physikalischen<br />

Kanal erlauben, eine zu Bild 3.19 analoge Deadlock-Situation, die durch<br />

109


Pakete <strong>für</strong> 3<br />

Transfer 1->3<br />

Pakete von 2 T<br />

1<br />

4<br />

R<br />

neg. Ack.<br />

Transfer<br />

2->4<br />

Pakete <strong>für</strong> 4<br />

Situation:<br />

Alle Puffer aller<br />

Knoten sind voll.<br />

neg. Ack.<br />

neg. Ack.<br />

T<br />

R<br />

Pakete <strong>für</strong> 2<br />

Pakete von 1<br />

Transfer<br />

4->2<br />

Pakete <strong>für</strong> 1<br />

Pakete von 3<br />

T<br />

R<br />

2<br />

neg. Ack.<br />

Transfer 3->1<br />

3<br />

T<br />

R<br />

Pakete von 4<br />

Bild 3.19: Verklemmung trotz getrennter Sende- <strong>und</strong> Empfangspuffer.<br />

das Warten auf freie Kanäle entsteht, ebenfalls verhindern kann. Diese Resultate<br />

lassen sich auf Deadlock-Kreise von mehr als 4 Knoten verallgemeinern:<br />

Satz 3.5: Eine hinreichende Bedingung zur Vermeidung von Verklemmungen<br />

in einem Netz ist, daß es genauso viele freie virtuelle Kanäle pro physikalischem<br />

Kanal bzw. genauso viele freie Puffer pro Knoten gibt, wie im Netz<br />

Kommunikationen existieren, die zirkular zusammengehören.<br />

Leider wird in großen Netzen die benötigte Puffer- bzw. Kanalzahl schnell zu<br />

groß <strong>für</strong> eine praktische Implementierung dieser Methode, so daß Lösungsansätze<br />

dieser Art nur dann erfolgreich sind, wenn es gelingt, die notwendige Puffer-<br />

bzw. Kanalzahl zu reduzieren. Dies ist mit Hilfe von sog. Puffer- bzw. Kanalreservierungsverfahren<br />

möglich, die im nächsten Abschnitt beschrieben<br />

werden. Die Reservierungsmethoden resultieren in a priori verklemmungsfreien<br />

Routing-Verfahren, die entweder nach dem Store-and-Forward- oder<br />

nach dem Wormhole-Prinzip arbeiten.<br />

Deadlock-freies Store-and-Forward Routing<br />

Historisch gesehen wurden die Verfahren <strong>für</strong> Deadlock-freies, deterministisches<br />

Store-and-Forward Routing zuerst <strong>für</strong> Weitverkehrsnetze (WANs) entwickelt<br />

<strong>und</strong> später auf Netze <strong>für</strong> Parallelrechner übertragen. Den meisten Methoden<br />

dieser Art liegt das Prinzip zugr<strong>und</strong>e, daß man Datenpakete in<br />

verschiedene Klassen einteilt <strong>und</strong> daß die Pakete beim Transfer von einem<br />

Knoten zum nächsten in die nächsthöhere Pufferklasse wechseln. Dies wird als<br />

Pufferreservierungsschema bezeichnet <strong>und</strong> dient dazu, die notwendige Pufferzahl<br />

<strong>für</strong> verklemmungsfreies Übertragen möglichst klein zu halten.<br />

Das einfachste verklemmungsfreie Pufferreservierungsschema, ist das sog.<br />

Hop-Schema [Toueg79, Merlin81, Gunther81], das die Zahl der Zwischen-<br />

110


schritte, die ein Paket im Netz zurückgelegt hat, als Zuordnungskriterium von<br />

Paketklassen zu Pufferklassen benützt: Nach k Zwischenschritten wird ein Paket,<br />

das von der Flußsteuerung (Flow Control) gestoppt wurde, in die k. Pufferklasse<br />

eines Zwischenknotens eingespeichert. Dadurch wird ein Paket bei seinem<br />

Weg durch das Netz bei jedem Zwischenstopp in die jeweils nächsthöhere<br />

Pufferklasse eingespeichert. Da 0 ≤ k ≤ d gilt, wobei d der Durchmesser des<br />

Netzwerks ist, müssen nach dem Hop-Schema (d+1) verschiedene Pufferklassen<br />

in jedem Knoten vorhanden sein, um Deadlocks zu vermeiden. Es gilt also<br />

<strong>für</strong> die Zahl K p der im Knoten benötigten Pufferplätze:<br />

Gl. 3.7: K p = d + 1<br />

Können Pakete mehr Zwischenschritte zurücklegen, als das Netz groß ist (k ><br />

d), weil Umwege beim Routing erlaubt sind, dann ist die Zahl der Pufferklassen<br />

entsprechend größer.<br />

Die Pufferklassenzahl läßt sich weiter reduzieren, indem man die Knoten<br />

ebenfalls in Klassen einteilt <strong>und</strong> als Zwischenschritte nur diejenigen zählt, die<br />

von einer höheren in eine niedrigere Knotenklasse führen. Dieses verbesserte<br />

Verfahren heißt Negative-Hop-Schema [Gopal85]. Die Klassenzerlegung der<br />

Knoten eines Graphen ist eine relativ komplexe Angelegenheit, die mit dem<br />

Vierfarbenproblem bei Landkarten verwandt ist: Man färbt benachbarte Knoten<br />

mit verschiedenen Farben so ein, daß insgesamt möglichst wenig Farben benötigt<br />

werden. Knoten gleicher Farbe gehören zur selben Klasse. Jeder Klasse ist<br />

eine Nummer zugeordnet, so daß definiert ist, wann ein Übergang von einer höheren<br />

Knotenklasse in eine niedere erfolgt (="negativer" Übergang). Nach k<br />

solchen negativen Übergängen wird das Paket in die Pufferklasse k eingespeichert.<br />

Bei dem Negative-Hop-Schema wird ein Paket bei seinem Weg durch das<br />

Netz bei jedem Zwischenstopp entweder in einen Puffer einer höheren (positiver<br />

Übergang) oder niedrigeren Pufferklasse (negativer Übergang) eingespeichert.<br />

Wenn es insgesamt m Knotenklassen in einem Netz gibt, dann sind in einer<br />

Sequenz von hintereinander ausgeführten Übergängen maximal (m-1) Übergänge<br />

von einer höheren in eine niedere Knotenklasse möglich. Der m. Übergang,<br />

der in der Sequenz ausgeführt wird, muß positiv sein, da er nur von einer<br />

niederen zu einer höheren Knotenklasse führt kann. Der Prozentsatz der negativen<br />

Übergänge an der Gesamtzahl aller Übergänge beträgt somit höchstens<br />

m<br />

------------<br />

– 1<br />

. Werden in einem beliebigen Netz von einem Paket k Übergänge ausgeführt,<br />

kann somit die Zahl k neg der negativen Übergänge den Wert ------------k<br />

m<br />

m – 1<br />

m<br />

nicht überschreiten. Sind beim Routen keine Umwege erlaubt, ist k ≤ d, <strong>und</strong> es<br />

ergibt sich <strong>für</strong> die Zahl der neg. Übergänge k neg des Negative-Hop-Schemas:<br />

111


Gl. 3.8:<br />

m – 1<br />

k neg<br />

≤ ------------d < d + 1<br />

m<br />

m – 1<br />

Da 0 ≤ k neg<br />

≤ ------------d gilt, ist die Zahl der Puffer, die bei diesem Verfahren<br />

m<br />

<strong>für</strong> Deadlock-Freiheit benötigt wird:<br />

Gl. 3.9:<br />

m – 1<br />

k p<br />

= ------------d + 1<br />

m<br />

Sind auch adaptive Routing-Verfahren mit Backtracking etc. zugelassen, ist<br />

k>d möglich <strong>und</strong> <strong>für</strong> diesen Fall gilt <strong>für</strong> die Zahl k p der Pufferklassen:<br />

Gl. 3.10:<br />

m – 1<br />

k p<br />

= ------------k + 1<br />

m<br />

(allgemeines Netz).<br />

Der Einsparungseffekt beim Negative-Hop-Schema kann <strong>für</strong> m = 2 bis<br />

max. 50% gegenüber dem normalen Hop-Reservierungsschema betragen.<br />

Die Frage, die nun untersucht werden soll, ist, wie klein k p höchstens werden<br />

kann, damit das Store-and-Forward Routing-Schema verklemmungsfrei bleibt.<br />

Diese Frage korreliert mit der Aufgabenstellung, wie viele Farben maximal benötigt<br />

werden, um in einem beliebigen Graphen je zwei benachbarte Knoten<br />

verschieden färben zu können. Diese Frage läßt sich nicht allgemein beantworten,<br />

aber man kann zeigen, daß in Ringen, n-dimensionalen Gittern <strong>und</strong> Hyperkuben<br />

m = 2 Farben (Knotenklassen) ausreichend sind. Dies kann man sich anhand<br />

von Bild 3.20 veranschaulichen:<br />

1<br />

0 1<br />

0<br />

0<br />

1 0<br />

1<br />

0<br />

0<br />

1<br />

1<br />

1<br />

1<br />

0<br />

0<br />

1<br />

1<br />

0<br />

0<br />

0<br />

1<br />

1<br />

1<br />

1<br />

0<br />

0<br />

0<br />

0<br />

1<br />

1<br />

0<br />

0<br />

1<br />

1<br />

0<br />

0<br />

1<br />

Bild 3.20: Zerlegung von Ringen, Gittern <strong>und</strong> Hyperkuben in die Knotenklassen 0 <strong>und</strong> 1.<br />

Unter der Randbedingung von zwei Knotenklassen lassen sich <strong>für</strong> diese drei<br />

Topologien verbesserte Werte <strong>für</strong> die Zahl benötigter Pufferklassen angeben,<br />

wenn man zusätzlich berücksichtigt, daß der Durchmesser d eines n-dimensionalen<br />

Gitters aus p Knoten pro Dimension d = n (p-1) beträgt <strong>und</strong> daß <strong>für</strong> den<br />

Hypercube bezüglich des Durchmessers d = n gilt. Damit benötigen diese Topologien<br />

nach Gl. 3.10 die folgende Zahl von Pufferklassen <strong>für</strong> Verklem-<br />

112


mungsfreiheit:<br />

Gl. 3.11:<br />

k np ( – 1)<br />

p<br />

= ------------------- + 1<br />

2<br />

(Gitter)<br />

Gl. 3.12:<br />

Im bidirektionalen Ring aus p Knoten ist d<br />

Gl. 3.13:<br />

k p<br />

n<br />

-- + 1 (Hypercube)<br />

2<br />

, so daß gilt:<br />

k p<br />

= 1<br />

-- p , (bidirektionaler Ring)<br />

2 2 -- + 1<br />

<strong>und</strong> <strong>für</strong> den unidirektionalen Ring hat man (d = p-1) <strong>und</strong> somit:<br />

=<br />

Gl. 3.14: : k p<br />

= p – 1<br />

----------- + 1 (unidirektionaler Ring).<br />

2<br />

Zusammenfassend kann gesagt werden, daß alle Netze, die auf Store-and-Forward<br />

Routing basieren, durch die Anwendung des Hop- oder Negative-Hop-<br />

Pufferreservierungschemas verklemmungsfrei werden, vorausgesetzt, daß eine<br />

ausreichende Anzahl von Pufferklassen vorhanden ist. Beim Negative-Hop-<br />

Schema sind soviele Pufferklassen ausreichend, wie in Gl. 3.10 angegeben. Die<br />

Zahl der zur Berechnung benötigten Knotenklassen hängt von der jeweiligen<br />

Netztopologie ab.<br />

Möchte man wissen, ob ein bestimmtes Pufferreservierungsschema <strong>für</strong> eine<br />

vorgegebene Netztopologie eine verklemmungsfreie Kommunikation erlaubt,<br />

kann man einen sog. Verklemmungstest durchführen.<br />

3.10.5 Deadlock-Test <strong>für</strong> Store-and-Forward Routing<br />

Für jedes vorgegebene Netz, das Daten nach der Store-and-Forward-Methode<br />

transportiert, läßt sich mit Hilfe eines Verklemmungstests überprüfen, ob das im<br />

Netz verwendete Pufferreservierungsschema Deadlock-gefährdet ist oder ob<br />

Verklemmungen nie auftreten können. Der Verklemmungstest wird durchgeführt,<br />

indem man den sog. Pufferabhängigkeitsgraphen des Netzwerkes erstellt.<br />

Der Test beruht auf folgendem wichtigen Satz von Gunter [Gunter81]:<br />

Satz 3.6: In einem Netz mit Store-and-Forward Routing kann dann <strong>und</strong> nur<br />

dann eine Verklemmung entstehen, wenn der Pufferabhängigkeitsgraph, der<br />

nach dem jeweiligen Pufferreservierungsschema erstellt wurde, einen gerichteten<br />

Kreis enthält.<br />

=<br />

p<br />

--<br />

2<br />

113


Der Pufferabhängigkeitsgraph ist ein gerichteter Graph, der folgendermaßen<br />

konstruiert wird: Jede Pufferklasse eines Netzknotens wird im Pufferabhängigkeitsgraphen<br />

durch einen Knoten repräsentiert; die Kanten des Graphen<br />

werden von den Übergängen gebildet, die ein Paket nach dem vorgegeben Routing-Schema<br />

von einem Knotenpuffer zum Nachbarpuffer durchführen kann.<br />

Der Verklemmungstest über Pufferabhängigkeitsgraphen soll am Beispiel eines<br />

Rings erläutert werden.<br />

Unidirektionaler Ring <strong>und</strong> Hop-Schema<br />

Die Verklemmungsfreiheit eines unidirektionalen Rings aus 4 Knoten, bei dem<br />

die Pufferklassen nach dem Hop-Schema vergeben wurden, kann mit Hilfe des<br />

Satzes von Gunter getestet werden. Bei der Erstellung des Pufferabhängigkeitsgraphen<br />

ist zu beachten, daß bei der Topologie des Beispiels ein Paket<br />

nach höchstens drei Übergängen am Ziel angekommen ist, weil die maximale<br />

Entfernung in einem unidirektionalen Ring aus vier Knoten d = 3 beträgt.<br />

Daraus berechnen sich nach dem Hop-Schema d+1 = 4 Pufferklassen. Weiterhin<br />

muß berücksichtigt werden, daß von jedem Knoten ein neues Paket in den<br />

Ring eingespeist werden kann. Der zum Ring gehörende Pufferabhängigkeitsgraph<br />

ist in Bild 3.21 dargestellt.<br />

Knoten 1<br />

0<br />

1<br />

2<br />

3<br />

Knoten 2<br />

0<br />

1<br />

2<br />

3<br />

Knoten 3<br />

0<br />

1<br />

2<br />

3<br />

Knoten 4<br />

0<br />

1<br />

2<br />

3<br />

Bild 3.21: Pufferabhängigkeitsgraph im unidirektionalen Ring (Hop-Schema).<br />

Da Bild 3.21 keine geschlossenen Kreise enthält, ist das Hop-Schema mit vier<br />

Pufferklassen <strong>für</strong> das Beispiel des 4-Knoten-Rings verklemmungsfrei. Das Resultat<br />

läßt sich auf Ringe beliebiger Größe übertragen, wenn mit zunehmender<br />

Ringgröße die Zahl der Pufferklassen nach der im vorigen Kapitel angegebenen<br />

Formel k p = d + 1 berechnet wird. Weiterhin behält das Resultat auch bei allen<br />

Topologien seine Gültigkeit bei, die aus Ringen bestehen oder in die Ringe eingebettet<br />

sind.<br />

Unidirektionaler Ring <strong>und</strong> Negative-Hop-Schema<br />

Als zweites Beispiel eines Verklemmungstests soll der Pufferabhängigkeitsgraph<br />

<strong>für</strong> die Ringtopologie mit Negative-Hop-Schema erstellt werden. Dazu<br />

114


wird die benötigte Pufferklassenzahl nach k p<br />

= p – 1<br />

----------- + 1 bestimmt, was 3<br />

2<br />

Pufferklassen <strong>für</strong> den unidirektionalen Ring aus vier Knoten ergibt. Daraus erhält<br />

man den Pufferabhängigkeitsgraph nach Bild 3.22.<br />

Knoten 1<br />

Klasse 0<br />

0<br />

1<br />

2<br />

Knoten 4<br />

Klasse 1<br />

0<br />

1<br />

2<br />

Knoten 2<br />

Klasse 1<br />

0<br />

1<br />

2<br />

Knoten 3<br />

Klasse 0<br />

0<br />

1<br />

2<br />

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

Bezüglich der Verklemmungsfreiheit gilt dieselbe Argumentation wie <strong>für</strong> das<br />

Hop-Schema, d.h. daß aus der Kreisfreiheit des Graphen Verklemmungsfreiheit<br />

beim Routing resultiert. Ringe mit mehr als 4 Knoten sind dann verklemmungsfrei,<br />

wenn die Zahl der Pufferklassen wie oben angegeben berechnet wird.<br />

Ebenso läßt sich das Resultat auf alle Graphen anwenden, die aus Ringen aufgebaut<br />

sind. Zu beachten ist, daß das Ergebnis auch auf ringbasierte Topologien<br />

ausgedehnt werden kann, die in andere Graphen, wie z.B. einem Hypercube,<br />

eingebettet sind.<br />

3.10.6 Deadlock-freies, deterministisches Wormhole Routing<br />

Wormhole Routing ist hinsichtlich der Verklemmungsfreiheit eine besonders<br />

schwer zu handhabende Routing-Methode. Da<strong>für</strong> sind zwei Gründe maßgebend.<br />

• Für den Fall, daß entweder der Empfänger eines Datenpakets oder ein an der<br />

Wegstrecke zum Empfänger liegender Zwischenknoten temporär nicht daten=<br />

aufnahmebereit ist, wird bei Wormhole Routing definitionsgemäß in jedem<br />

Zwischenknoten ein Flit des Pakets gespeichert. Da darüberhinaus die<br />

Flits verschiedener Pakete bei der Übertragung auf einem Kanal nicht gemischt<br />

werden können, belegt ein Flit, das von der Flußsteuerung gestoppt<br />

wird, nicht nur den Pufferplatz im Zwischenknoten, sondern auch den vom<br />

Zwischenknoten abgehenden Kanal. Pakete bestehen aus vielen Flits <strong>und</strong> belegen<br />

somit bei Flußsteuerungsstop eine Vielzahl aufeinanderfolgender Kanäle<br />

exklusiv <strong>für</strong> sich.<br />

115


• Werden in einem Netzwerk von der Flußsteuerung mehrere Pakete gestoppt,<br />

kann es nach der Freigabe des Datentransports zu einer gegenseitigen Verklemmung<br />

kommen. Die Verklemmung tritt dann auf, wenn die Pakete einen<br />

oder mehrere Kanäle zur Zwischenspeicherung ihrer Flits belegen <strong>und</strong> wenn<br />

Flits verschiedener Pakete wechselseitig einen Kanal benötigen, den ein Flit<br />

des jeweils anderen Pakets belegt hat. Die geschilderte Verklemmungssituation<br />

kann auf mehr als zwei Datenpakete erweitert werden, wenn diese kreisförmig<br />

aufeinander warten.<br />

Da bei hoher Verkehrsdichte häufig entweder der Empfänger oder ein Zwischenknoten<br />

kurzzeitig nicht Daten aufnahmebereit sind, haben Netze mit<br />

Wormhole Routing ein hohes Deadlock-Potential <strong>und</strong> entsprechende Vorbeugemaßnahmen<br />

müssen getroffen werden.<br />

Die Situation ist vergleichbar mit der gegenseitigen Verklemmung, die durch<br />

Warten auf wechselseitig belegte Puffer entsteht <strong>und</strong> die in Netzen mit Storeand-Forward<br />

Routing beschrieben wurde. Aufgr<strong>und</strong> dieser Analogie wurde die<br />

Idee geboren, die Methoden, die bei Store-and-Forward-Netzen entwickelt<br />

wurden, auf Wormhole-Netze zu übertragen. Der Beweis <strong>für</strong> die Richtigkeit<br />

dieses Vorgehens wurde von Boppana <strong>und</strong> Chalasani geliefert [Boppana93a].<br />

Danach kann man bei Wormhole-Netzen Kanalreservierungsschemata einsetzen,<br />

die analog zu den Pufferreservierungsschemata bei Store-and-Forward-<br />

Netzen sind. Insbesondere entspricht der (räumlichen) Unterteilung der Knotenpuffer<br />

in mehrere, kleine Puffer verschiedener Klassen eine (zeitliche) Unterteilung<br />

der Übertragungskanäle in mehrere virtuelle Kanäle kleinerer Bandbreite.<br />

Die virtuellen Kanäle werden im Zeitscheibenverfahren (Multiplex) auf einem<br />

physikalischen Kanal übertragen. Dabei ist zu beachten, daß die Zeitscheibe,<br />

die jedem virtuellen Kanal zur Verfügung steht, so groß sein muß, wie ein<br />

Paket <strong>für</strong> den Transfer seiner Flits benötigt, da Pakete komplett übertragen werden<br />

müssen. Die Verwaltung der Übertragungszeit erfolgt auf Paketbasis, weil<br />

Flits im Netzwerk keine autonomen Verwaltungseinheiten darstellen, weshalb<br />

sich Flits verschiedener Pakete nicht mischen dürfen.<br />

Weiterhin ist in jedem Knoten <strong>für</strong> jeden virtuellen Kanal ein Pufferplatz <strong>für</strong><br />

jeweils ein Flit zu reservieren, so daß es ebenso viele Flit-Puffer wie virtuelle<br />

Kanäle gibt. Bei aktivierter Flußkontrolle muß das zu übertragende Flit in demjenigen<br />

Puffer zwischengespeichert werden, der dem zu übertragenden Paket<br />

zugeordnet ist. Die Flit-Puffer eines Knotens werden dazu in verschiedene Pufferklassenklassen<br />

eingeteilt, die mit den virtuellen Kanälen korrespondieren.<br />

Die Analogien zwischen den Puffern in Store-and-Forward-Netzen <strong>und</strong> den<br />

Kanälen bei Wormhole Routing gehen über das bereits Gesagte hinaus. Boppana<br />

<strong>und</strong> Chalasani [Boppana93a] konnten zeigen, daß aus jedem verklemmungsfreien<br />

Pufferreservierungsschema ein Reservierungsschema <strong>für</strong> virtuelle Kanäle<br />

konstruiert werden kann, das ebenfalls verklemmungsfrei ist, vorausgesetzt,<br />

daß im Pufferreservierungsschema kein Übergang von einer höheren Pufferklasse<br />

in eine niedere Klasse erlaubt ist. Da diese Randbedingung von praktisch<br />

allen Pufferreservierungsschemata eingehalten wird, lassen sich fast genauso<br />

viele Kanal- wie Pufferreservierungsschemata konstruieren.<br />

116


Dally <strong>und</strong> Seitz [Dally87] zeigten schließlich, daß Verklemmungen in einem<br />

Wormhole-Netz nur dann auftreten können, wenn der dazu gehörende Kanalabhängigkeitsgraph<br />

nicht kreisfrei ist. Der Kanalabhängigkeitsgraph ist das<br />

Analogon zum Pufferabhängigkeitsgraphen <strong>und</strong> wird <strong>für</strong> ein gegebenes Netz<br />

bestimmter Topologie folgendermaßen gewonnen:<br />

Im Kanalabhängigkeitsgraphen stellt jeder Knoten einen virtuellen Kanal<br />

dar, <strong>und</strong> je zwei Knoten V 1 <strong>und</strong> V 2 sind dann gerichtet miteinander verb<strong>und</strong>en,<br />

wenn ein Paket, das auf einem virtuellen Kanal (=Knoten V 1 ) ankommt, gemäß<br />

dem verwendeten Kanalreservierungsschema auf dem anderen virtuellen Kanal<br />

(=Knoten V 2 ) weitergeschickt werden kann.<br />

Unidirektionaler Ring <strong>und</strong> Negative-Hop-Schema<br />

Im folgenden wird als Beispiel <strong>für</strong> die Sätze von Boppana <strong>und</strong> Chalasani bzw.<br />

Dally <strong>und</strong> Seitz ein Kanalreservierungsschema <strong>für</strong> den unidirektionalen Ring<br />

aus 4 Knoten hergeleitet, der blockierungsfrei Daten über Wormhole Routing<br />

überträgt. Wie beim Negative-Hop-Pufferreservierungsschema, das bei Storeand-Forward<br />

Routing angewandt wird, werden im ersten Schritt des Verfahrens<br />

die Knoten des Rings in die Klassen 0 <strong>und</strong> 1 eingeteilt. Im zweiten Schritt werden<br />

entsprechend zu den Pufferklassen virtuelle Kanäle verschiedener Klassen<br />

gebildet. Zu beachten ist dabei, daß folgende Regel gilt: Beim Kanalreservierungsschema<br />

wechselt ein Paket von Kanalklasse a zur "höheren" Klasse b,<br />

wenn es von einem Knoten der Klasse 1 zu einem Knoten der Klasse 0 übertragen<br />

wird (=negativer Übergang). Bei einem positiven Übergang bleibt das Paket<br />

in derselben Kanalklasse.<br />

Im Gegensatz zu den drei Pufferklassen des Negative-Hop-Schemas, die <strong>für</strong><br />

verklemmungsfreien Datenverkehr im unidirektionalen Store-and-Forward-<br />

Ring aus 4 Knoten nötig waren, sind hier nur zwei Kanalklasssen a <strong>und</strong> b erforderlich.<br />

Der Gr<strong>und</strong> liegt darin, daß im Beispiel die maximale Entfernung drei<br />

Kanalübertragungen <strong>und</strong> zwei Zwischenknoten beträgt, wobei an dem einen<br />

Zwischenknoten ein positiver <strong>und</strong> an dem anderen Zwischenknoten ein negativer<br />

Übergang stattfindet. Nur beim Zwischenknoten mit dem negativen Übergang<br />

muß die Kanalklassse gewechselt werden, so daß insgesamt 2 Kanalklassen<br />

ausreichen. Der unidirektionale Ring <strong>und</strong> sein dazu gehöriger Kanalabhängigkeitsgraph<br />

sind in Bild 3.23 dargestellt.<br />

Da in Bild 3.23 keine geschlossenen Kreise existieren, ist das zum Negative-<br />

Hop-Schema analoge Kanalreservierungsschema verklemmungsfrei. Wiederum<br />

läßt sich das Resultat auf Ringe beliebiger Größe erweitern, wenn die Anzahl<br />

der Kanalklassen entsprechend der Pufferklassenzahl des Negative-Hop-<br />

Schemas berechnet wird. Ebenso sind alle Netze mit Wormhole Routing <strong>und</strong><br />

entsprechender Kanalklassenzahl verklemmungsfrei, die aus Ringen aufgebaut<br />

sind.<br />

Dally <strong>und</strong> Seitz [Dally87] verbesserten dieses Ergebnis <strong>für</strong> den Fall von k-nären<br />

n-Kuben, die aus Wrap Aro<strong>und</strong>-Verbindungen in Form von unidirektionalen<br />

Ringen bestehen <strong>und</strong> die ein spezielles von Dally <strong>und</strong> Seitz entwickeltes<br />

Wormhole Routing-Verfahren benützen. Sie zeigten, daß unter diesen Randbe-<br />

117


a<br />

b<br />

0<br />

b<br />

a<br />

a<br />

b<br />

1->0<br />

b<br />

a<br />

1<br />

1<br />

0->1<br />

0->1<br />

a<br />

b<br />

0<br />

b<br />

a<br />

a<br />

b<br />

1->0<br />

b<br />

a<br />

Bild 3.23: Unidirektionaler Ring mit zwei Kanalklassen <strong>und</strong> Kanalabhängigkeitsgraph.<br />

dingungen zwei Kanalklassen <strong>für</strong> Verklemmungsfreiheit ausreichen. Dies ist<br />

insofern bemerkenswert, als daß die Kanalklassenzahl unabhängig von der<br />

Ringgröße ist.<br />

3.10.7 Deadlock-freies, adaptives Store-and-Forward Routing<br />

Bei adaptivem Store-and-Forward Routing muß man unterscheiden, ob beim<br />

Weg durch das Netz Umwege, wie sie z.B. beim Backtracking entstehen können,<br />

erlaubt sind oder nicht. Adaptive Store-and-Forward Verfahren mit minimaler<br />

Weglänge können über die bekannten Pufferreservierungsschemata verklemmungsfrei<br />

betrieben werden, sofern ihr Pufferabhängigkeitsgraph kreisfrei<br />

ist <strong>und</strong> genügend Pufferklassen vorhanden sind.<br />

Ist eine jedoch nicht-minimale Weglänge erlaubt, kann das Hop-, Negative-<br />

Hop- oder ein anderes Pufferreservierungsschema nicht eingesetzt werden, weil<br />

ein Paket eine nicht vorhersagbare Zahl von Zwischenknoten passieren kann,<br />

so daß sich die Anzahl der Pufferklassen nicht bestimmen läßt. Dementsprechend<br />

basieren Store-and-Forward-Routingverfahren wie das sog. Chaos-<br />

Routing [Konstantin91], die zugleich nicht-minimal, adaptiv <strong>und</strong> verklemmungsfrei<br />

sind, nicht auf Reservierungschemata. Sie enthalten entweder Zufallselemente,<br />

die eine Ursache-Wirkung-Beziehung, wie sie bei Deadlocks<br />

existieren, aufheben, oder sie beruhen auf separaten Gegenmaßnahmen zur<br />

Deadlock-Vermeidung.<br />

Chaos Routing<br />

Chaos-Routing ist eine Kombination von Store-and-Forward Routing, Deflection<br />

Routing [Baran64], das im nächsten Abschnitt erläutert wird, <strong>und</strong> zentraler<br />

Pufferung; virtuelle Kanäle werden nicht verwendet. Jeder Knoten hat <strong>für</strong><br />

jeden physikalischen Kanal einen Puffer <strong>für</strong> je ein Sende- <strong>und</strong> ein Empfangspaket.<br />

Zusätzlich gibt es noch einen <strong>für</strong> alle Kanäle gemeinsamen FIFO-Puffer<br />

mit Platz <strong>für</strong> mehrere Pakete. Solange bei keinem Knoten ein Kanal belegt ist,<br />

wandern die Pakete deterministisch gemäß Store-and-Forward durch das Netz.<br />

118


Sobald ein Sendekanal <strong>für</strong> ein Paket nicht zur Verfügung steht, wird dieses in<br />

dem zentralen FIFO-Speicher zwischengelagert. Parallel dazu wird das vorderste<br />

Paket des FIFOs ausgelesen <strong>und</strong> auf dem gewünschten Sendekanal gegeben,<br />

sofern dieser frei ist. Ist über längere Zeit kein Kanal frei, droht auch der Zentralspeicher<br />

voll zu werden. Dann wird diesem ein zufällig ausgewähltes Paket<br />

entnommen <strong>und</strong> es auf irgendeinem freien Kanal abgeschickt, um wieder Pufferplatz<br />

zu gewinnen (Aufgr<strong>und</strong> dieses Zufallelements kam die Namensgebung<br />

Chaos-Routing zustande).<br />

Chaos Routing ist verklemmungfrei, weil jeder Knoten stets in der Lage ist,<br />

ein neues Paket aufzunehmen, denn seine Puffer laufen nie über. Es ist aber<br />

auch frei von ewig kreisenden Paketen, weil es sehr unwahrscheinlich ist, daß<br />

ein <strong>und</strong> dasselbe Paket mehrere Male dem zentralen FIFO zufällig, d.h. außerhalb<br />

der Reihe entnommen wird, um es auf einem ebenso zufällig ausgewählten<br />

Kanal weiterzuschicken.<br />

Deflection Routing<br />

Ein anderes nicht-wegminimales, adaptives <strong>und</strong> verklemmungsfreies Routing-<br />

Verfahren ist das Deflection Routing, das auch als Hot Potatoe Routing bezeichnet<br />

wird. Bei diesem Verfahren wird die Methode angewandt, daß anstelle<br />

eines besetzten Sendekanals, der <strong>für</strong> den Weitertransport benötigt wird, ein beliebiger<br />

andere Kanal, der gerade frei ist, zum Abschicken des Pakets dient.<br />

Trotz dieses starken Zufallselements, das dem Hot Potatoe Routing auch seinen<br />

Namen gab, ist dieses Verfahren unter bestimmten Bedingungen<br />

[Greenberg92] effizient bei der Datenübertragung. Beim Deflection Routing<br />

gelangt ein Paket deshalb zum Ziel, weil bei jedem Zwischenknoten, den das<br />

Paket auf seinem (zufälligen) Weg durch das Netz passiert, erneut versucht<br />

wird, das Paket die richtige Richtung, d.h. zum Empfänger hin zu transportieren.<br />

Allerdings kann es bei Deflection Routing passieren, daß ein Paket beliebig<br />

lange im Netz kreist, was als Livelock bezeichnet wird, sofern nicht entsprechende<br />

Gegenmaßnahmen getroffen sind, z.B. in der Art, daß in die falsche<br />

Richtung geschickte Pakete gegenüber "normalen" Paketen bevorzugt werden.<br />

3.10.8 Deadlock-freies, adaptives Wormhole Routing<br />

Bei adaptivem Wormhole Routing muß wie bei Store-and-Forward Routing unterschieden<br />

werden, ob nicht-minimale Wege erlaubt sind oder nicht. wegminimale<br />

Verfahren können über Reservierungen von virtuellen Kanälen verklemmungsfrei<br />

gemacht werden, allerdings ist hier die benötigte Kanalzahl<br />

wesentlich höher als bei deterministischen Verfahren. Bei nicht eingeschränkter<br />

Wegewahl, d.h. voller Adaptivität steigt bei einigen Wormhole-Verfahren<br />

[Linder91, Boppana93b] die Zahl der virtuellen Kanäle exponentiell an,<br />

obwohl sie wegminimal sind, wie Tabelle 3.2 zeigt. Damit sind diese Methoden<br />

in der Praxis zu aufwendig <strong>für</strong> eine Implementierung.<br />

119


Anzahl virtueller Kanäle k-närer n-Kubus n-dimensionales Gitter<br />

bei unidirektionalen Links n+1 -<br />

bei bidirektionalen Links 2 n (pro Richtung) 2 n-1 (pro Richtung)<br />

Tabelle 3.2: Zahl der benötigten virtuellen Kanäle bei Deadlock-freien, adaptiven Wormhole<br />

Routing-Verfahren nach Linder <strong>und</strong> Boppana [Linder91, Boppana93b].<br />

Es gibt jedoch nicht-wegminimale Wormhole Routing-Verfahren, die mit geringem<br />

Aufwand implementierbar sind <strong>und</strong> die deadlockfrei arbeiten. Sie beruhen<br />

auf dem sog. Turn-Modell, das die Beweglichkeit eines Pakets in einem<br />

Netz gezielt einschränkt <strong>und</strong> dadurch sowohl Deadlocks als auch eine aufwendige<br />

Implementierung vermeidet.<br />

Turn-Modell<br />

Im folgenden soll exemplarisch ein nicht-wegminimales, Deadlock-freies, adaptives<br />

Wormhole Routing-Verfahren <strong>für</strong> den Spezialfall von n-dimensionalen<br />

Gittern erläutert werden, das keine virtuellen Kanäle benötigt. Es basiert auf der<br />

Beobachtung, daß im regelmäßigen Gitter zyklische Deadlocks dann vermieden<br />

werden können, wenn man <strong>für</strong> die Pakete bestimmte Richtungswechsel<br />

ausschließt [Stricker91].<br />

In Bild 3.24a sind die beiden Deadlock-Szenarien dargestellt, die es prinzipiell<br />

gibt: Der Deadlock-Kreis im Uhrzeiger- <strong>und</strong> im Gegenuhrzeigersinn. Zusätzlich<br />

sind in Bild 3.24b die Richtungswechsel gezeigt, die Datenpakete machen<br />

müssen, um diese Kreise zu erzeugen.<br />

Nach dem Turn-Modell von Glass <strong>und</strong> Ni [Glass92] genügt es <strong>für</strong> ein Paket in<br />

einem ebenen Gitter, einen Richtungswechsel sowohl im Uhrzeigersinn, z.B. in<br />

Ostsüdrichtung, als auch im Gegenuhrzeigersinn, z.B. Nordwestrichtung, auszuschließen,<br />

um Deadlocks zu vermeiden. Dies ist eine einfache <strong>und</strong> zugleich<br />

wirkungsvolle Methode der Deadlock-Vermeidung.<br />

Eine Konsequenz dieses Modells ist beispielsweise, daß bei Wormhole Routing<br />

Sende- <strong>und</strong> Empfangsknoten voneinander verschieden sein müssen, da Pakete<br />

nicht zum Ursprungsknoten zurückkehren können. Dies ist außer <strong>für</strong> Testzwecke<br />

auch nicht nötig.<br />

Zu beachten ist weiterhin, daß die in Bild 3.24a abgebildeten Deadlock-Kreise<br />

vom Prinzip her topologieunabhängig sind, da bei allen Netzen, in die man<br />

Kreise eingebetten kann, auch Verklemmungen entstehen können.<br />

Das Turn-Modell kann auf mehr als 2 Raumdimensionen erweitert werden. Die<br />

Erweiterung auf n-dimensionale Gitter erfolgt dergestalt, daß man berücksichtigt,<br />

daß in einem n-dimensionalen Gitter n(n-1) ebene Kreise möglich sind,<br />

die jeweils aus vier 90-Grad Richtungswechseln bestehen.<br />

Der Gr<strong>und</strong> <strong>für</strong> den Faktor n(n-1) liegt darin, daß man 2 Dimensionen pro<br />

Kreis benötigt <strong>und</strong> daß <strong>für</strong> die erste Dimension n <strong>und</strong> <strong>für</strong> die zweite (n-1) Mög-<br />

120


1 2<br />

1 2<br />

a)<br />

4<br />

3<br />

4<br />

3<br />

Nordost<br />

Ostsüd<br />

Westsüd<br />

Nordwest<br />

b)<br />

Westnord<br />

Südwest<br />

Südost<br />

Ostnord<br />

Bild 3.24: Die beiden Deadlock-Szenarien (a) <strong>und</strong> ihre Richtungswechsel in der Ebene (b).<br />

lichkeiten zur Etablierung des Kreises zur Verfügung stehen. Dabei muß man<br />

einen Unterschied bzgl. der Reihenfolge der Dimensionen machen: Die Ebene,<br />

die durch das Dimensionpaar (i, j) definiert ist, unterscheidet sich von der (j, i)-<br />

Ebene (i, j = x,y,z,...) darin, daß sie die entgegengesetzte Kreisrichtung repräsentiert<br />

(positiver bzw. negativer Umlaufsinn). Glass <strong>und</strong> Ni [Glass92] zeigten,<br />

daß es zur Verklemmungsfreiheit genügt, in jedem der n(n-1) Kreise einen einzigen<br />

Richtungswechsel auszuschließen.<br />

Der Ausschluß bestimmter Richtungswechsel kann auf verschiedene Arten<br />

erfolgen. Eine einfache Methode ist das sog. Negative First-Verfahren.<br />

Negative First-Verfahren<br />

Das Verfahren soll anhand des Falles erläutert werden, daß man im 2-D Gitter<br />

den Ostsüd- <strong>und</strong> den Nordwestwechsel ausschließen möchte. Dazu wird das<br />

Routing-Verfahren in zwei getrennten Phasen durchgeführt. In der ersten Phase<br />

werden Datenpakete nur in negativer, d.h. in (-x)- <strong>und</strong> (-y)-Richtung <strong>und</strong> in der<br />

zweiten Phase nur in positiver Richtung (+x) <strong>und</strong> (+y) übertragen. Die Ostsüd<strong>und</strong><br />

Nordwestwechsel lassen sich auch als (+x-y)- bzw. (+y-x)-Wechsel beschreiben,<br />

woran man erkennen kann, daß diese Wechsel eine Routing-Reihenfolge<br />

erfordern würden, die zuerst in positiver <strong>und</strong> dann in negativer Richtung<br />

abläuft. Aufgr<strong>und</strong> des vorgebenen umgekehrten Ablaufs sind die unerwünschten<br />

Richtungswechsel unterb<strong>und</strong>en.<br />

In Bild 3.25 ist als zweites Beispiel ein ebenes Gitter gezeigt, auf das das Negative<br />

First-Verfahren angewandt wird. Es ist darin die Menge der potentiell<br />

wählbaren Kanäle zwischen den Knoten 1 <strong>und</strong> 2 eingezeichnet, wobei die (-x)-<br />

bzw. (-y)-Phase des Routing-Verfahrens auf einen Paketübergang begrenzt ist.<br />

Je nach Verkehrsbelastung im Gitter kann an jedem Zwischenknoten auf dem<br />

121


Weg vom Sender zum Empfänger ein Kanal ausgewählt werden. Nordwest<strong>und</strong><br />

Ostsüdwechsel sind, wie man sich überzeugen kann, nicht vorhanden.<br />

Dementsprechend können auch keine Deadlock-Zyklen existieren.<br />

4<br />

3<br />

2<br />

2<br />

1<br />

1<br />

y<br />

0<br />

0<br />

1<br />

2<br />

3<br />

4<br />

x<br />

Bild 3.25: Routingpfade nach dem Negative First-Verfahren im ebenen Gitter.<br />

Das dem Negative First-Verfahren zugr<strong>und</strong>e liegende Prinzip läßt sich folgendermaßen<br />

beschreiben:<br />

• Zuerst wird das Paket vom Sendeknoten um n (n = 0, 1, 2,..) (negative) Wechsel<br />

vom Zielknoten entfernt.<br />

• Danach strebt das Paket in der minimalen Zahl von (positiven) Wechseln auf<br />

den Empfängerknoten zu.<br />

Die Bewegung des Datenpakets kann mit einem Pendel vergleichen werden,<br />

das in der 1. Phase des Verfahrens vom Startknoten ausgelenkt wird <strong>und</strong> in der<br />

2. Phase in Richtung des Zielknotens zurückschwingt. Das bedeutet, daß nur die<br />

negative Phase dem Datenpaket Gelegenheit gibt, sich vom Ziel zu entfernen,<br />

sofern die Verkehrssituation das erfordert. Rückwege wie beim Backtracking<br />

sind nicht möglich.<br />

Im Beispiel nach Bild 3.25 sind S(1|2) <strong>und</strong> E(3|3) die Koordinaten des Sendebzw.<br />

Empfangsknotens in der x-y Ebene. Die Position der größtmöglichen Ablenkung,<br />

die am Ende der 1. Phase erreicht wird, hat die Koordinaten S'(0|2)<br />

3<br />

bzw. S'(1|1). Daraus erhält man einen Differenzvektor D = E – S' = ⎛ ⎞<br />

⎝1⎠<br />

2<br />

bzw. D = ⎛ ⎞ , um den das Paket in der 2. Phase voranschreiten muß. Es spielt<br />

⎝3⎠<br />

keine Rolle, in welcher Reihenfolge die Übergänge in (+x)- <strong>und</strong> (+y)-Richtung<br />

durchgeführt werden.<br />

122


n-dimensionales Negative First-Verfahren<br />

Das Negative First-Verfahren läßt sich auf n Dimensionen erweitern. In einem<br />

k-nären, n-dimensionalen Gitter ohne Wrap Aro<strong>und</strong>-Enden seien S = s n s n-<br />

1 ,...,s 1 der Sende- <strong>und</strong> E = e n e n-1 ,...,e 1 der Empfangsknoten, wobei S <strong>und</strong> E in<br />

Koordinatenschreibweise zur Zahlenbasis k (0 ≤ s i ,s j < k) dargestellt sind, <strong>und</strong><br />

die i-te Ziffer die Koordinate entlang der i-ten Dimension angibt. Mit S' sei der<br />

maximale Pendelausschlag am Ende der ersten Phase bezeichnet, wobei <strong>für</strong> S'<br />

gelten soll: S' = s n 's n-1 ',...,s 1 '. Dann ist die Zahl der Schritte, die in der zweiten<br />

Phase des Verfahrens in jeder Dimension bis zum Zielknoten zurückgelegt werden<br />

muß:<br />

⎛ e n<br />

– s' n ⎞<br />

⎜<br />

⎟<br />

⎜e n – 1<br />

– s' n – 1 ⎟<br />

Gl. 3.15: D = ⎜<br />

⎟ .<br />

⎜ … ⎟<br />

⎜<br />

⎟<br />

⎝ e 1<br />

– s' 1 ⎠<br />

Wiederum spielt die Reihenfolge der Dimensionen <strong>und</strong> die Zahl der Schritte innerhalb<br />

einer Dimension keine Rolle. Was zählt ist, daß am Ende der 2. Phase<br />

die notwendige Zahl der Schritte in jeder Dimensionen zurückgelegt ist. Für S'<br />

sind die folgenden Bedingungen zu erfüllen:<br />

Gl. 3.16: ( s ,<br />

i<br />

' ≤ s i<br />

∧ s i<br />

' ≤ e i<br />

)<br />

d.h. S' darf nicht "rechts" bzw. "oberhalb" von Sender <strong>und</strong> Empfänger sein.<br />

Wegminimales Negative First-Verfahren<br />

n<br />

∧<br />

i = 1<br />

Das Turn-Modell in Kombination mit dem Negative First-Verfahren läßt sich<br />

auch als Deadlock-freie, adaptive Routingmethode mit minimaler Weglänge<br />

betreiben. In Bild 3.25 beispielsweise sind die Koordinatendifferenzen in x-<br />

<strong>und</strong> y-Richtung zwischen Knoten 2 <strong>und</strong> Knoten 1 positiv, so daß in diesem Fall<br />

die Zahl der Paketübergänge der negativen Phase auf Null reduziert werden<br />

könnte. Jeder der verbleibenden Pfade ist dann zugleich wegminimal. Im Allgemeinfall<br />

kann der Empfängerknoten auch "links" bzw. "unterhalb" des Sendeknotens<br />

liegen, so daß die negative Phase unbedingt erforderlich ist. Generell<br />

muß <strong>für</strong> Wegminimalität die Zahl der Paketübergänge in der negativen Phase<br />

in jeder Dimension so gewählt werden, daß das Ziel in der positiven Phase mit<br />

der kleinsten Zahl von Schritten erreicht werden kann.<br />

123


p-cube Routing<br />

Wenn das Turn-Modell zusammen mit dem Negative First-Verfahren auf binäre<br />

n-Kuben als einem Spezialfall k-närer, n-dimensionaler Gitter angewandt<br />

wird, spricht man vom p-cube Routing [Glass92]. Die Weglänge beim p-cube<br />

Routing kann wahlweise minimal oder nicht minimal sein.<br />

Beispiel:<br />

Sei S = 101 die binäre Adresse eines Sendeknotens in einem 3-D Kubus <strong>und</strong> E<br />

= 010 die Adresse des Empfängers, dann ist <strong>für</strong> wegminimales Routing eine<br />

Negativphase der Länge 2 <strong>und</strong> eine Positivphase der Länge 1 erforderlich, um<br />

vom Sender zum Empfänger zu gelangen, da die Bits der Wertigkeit 2 2 <strong>und</strong> 2 0<br />

von 1 auf 0 (negative Richtung) <strong>und</strong> das 2 1 Bit von 0 auf 1 (positive Richtung)<br />

geändert werden müssen. Dazu sind die beiden Pfade 101->001->000->010<br />

bzw. 101->100->000->010 alternativ geeignet.<br />

Bei nicht-wegminimalem p-cube Routing können die Routing-Phasen länger<br />

als minimal nötig dauern. Ein Beispiel da<strong>für</strong> lautet: S = 111, E = 110, Pfad: 111-<br />

>011->010->110. S' ist hier 010.<br />

Numerierungs-Routing<br />

Eine dritte Möglichkeit, bestimmte Richtungswechsel auszuschließen, besteht<br />

darin, die Kanäle einer gegebenen Topologie auf eine besondere Art zu numerieren<br />

[Dally87]. Die Numerierung erfolgt so, daß jeder erlaubte Richtungswechsel<br />

einem Übergang von einem Kanal mit niedriger Nummer zu einem Kanal<br />

mit höherer Nummer entspricht. Übergänge von höheren zu niedrigeren<br />

Kanalnummern sind nicht erlaubt. Jeder Knoten darf nur einmal besucht werden,<br />

Rückwege wie beim Backtracking sind verboten, Sende- <strong>und</strong> Zielknoten<br />

müssen verschieden sein. Ein Pfad zwischen Sender <strong>und</strong> Empfänger besteht bei<br />

diesem Verfahren aus einer streng monoton steigenden Sequenz von Kanalnummern,<br />

wodurch die "schädlichen" Richtungswechsel ausgeklammert<br />

<strong>und</strong> Verklemmungsfreiheit garantiert wird.<br />

Wichtig ist festzustellen, daß es <strong>für</strong> sehr viele Topologien eine solche Numerierung<br />

gibt. Umgekehrt ist die Blockierungsfreiheit einer bestimmten Topologie<br />

dadurch bewiesen, daß das Numerierungsschema möglich ist [Dally87].<br />

In Bild 3.26 ist eine Numerierung <strong>für</strong> ein ebenes Gitter [Varma94] <strong>und</strong> in Bild<br />

3.27 <strong>für</strong> einen 3-dimensionalen Würfel [Varma94] gezeigt, bei denen durch Befolgen<br />

der Übergangsregel bestimmte Richtungswechsel ausgeschlossen sind.<br />

Voraussetzung <strong>für</strong> Verklemmungsfreiheit ist bei beiden Beispielen, daß in den<br />

Knoten getrennte Sende- <strong>und</strong> Empfangspuffer <strong>für</strong> je ein Flit vorhanden sind.<br />

Der Vorteil des Numerierungsverfahrens gegenüber dem Negative First-Verfahren<br />

liegt darin, daß keine zwei verschiedenen Phasen durchlaufen werden<br />

müssen. Diese Routing-Methode ist dadurch schneller, sie erfordert jedoch eine<br />

Initialisierungzur Festlegung der Kanalnumerierung.<br />

124


3<br />

10<br />

17<br />

2<br />

44<br />

45 9<br />

4<br />

37 30<br />

38 16 31 23 24<br />

11 18<br />

1<br />

43<br />

46 8<br />

5<br />

36 29<br />

39 15<br />

12<br />

32 22<br />

19<br />

25<br />

keine<br />

<strong>und</strong><br />

Richtungswechsel<br />

0<br />

42<br />

47 7<br />

6<br />

35 28<br />

40 14 33 21 26<br />

13 20<br />

41 34<br />

27<br />

Bild 3.26: Verklemmungsfreies Routing im 2-D Gitter durch spezielle Kanalnumerierung.<br />

110<br />

0<br />

111<br />

4<br />

5<br />

5<br />

14 0<br />

1 1 5<br />

100<br />

0<br />

4<br />

010 1 011<br />

3 2 3 4 4 4<br />

2<br />

1<br />

1<br />

2<br />

000 001<br />

3<br />

keine<br />

<strong>und</strong><br />

Richtungswechsel<br />

Bild 3.27: Verklemmungsfreies Routing im 3-D Würfel durch Numerierung.<br />

125


3.11 Theorie statischer Graphen<br />

(Cayley-Graphenmodell)<br />

3.11.1 Einleitung<br />

Im Jahre 1989 wurde von S. B. Akers <strong>und</strong> B. Krishnamurthy [Akers89] eine<br />

Theorie der statischen Netze veröffentlicht, die einen bedeutenden Fortschritt<br />

auf diesem Gebiet darstellt. Eine Vielzahl bekannter sowie zukünftiger Graphen,<br />

die knotensymmetrisch sind, können nach dieser Theorie einheitlich spezifiziert<br />

werden. Die Theorie basiert darauf, daß man die Elemente spezieller<br />

algebraischer Gruppen, der sog. Permutationsgruppen, mit den Knoten eines<br />

symmetrischen Graphen identifiziert, ähnlich, wie dies bereits bei der Konstruktion<br />

des Star-Graphen gezeigt wurde. In dieser Sichtweise sind zwei Knoten<br />

dann miteinander verb<strong>und</strong>en, wenn ihre korrespondierenden Gruppenelemente<br />

durch Permutation auseinander hervorgehen.<br />

Der Vorteil der einheitlichen Darstellung aller knotensymmetrischen Graphen<br />

nach der Methode von Akers <strong>und</strong> Krishnamurthy liegt darin, daß man im<br />

voraus aus den Eigenschaften von Permutationsgruppen auf die Eigenschaften<br />

vieler knotensymmetrischer Graphen schließen kann. Damit muß man Sätze<br />

über knotensymmetrische Graphen unterschiedlicher Topologie nicht mehr einzeln<br />

beweisen, sondern kann topologieübergreifende Aussagen über eine ganze<br />

Graphenklasse machen. Dies ist der entscheidende Fortschritt dieser Theorie.<br />

Die Theorie von Akers <strong>und</strong> Krishnamurthy besteht aus zwei Teilen. In dem<br />

ersten Teil werden die sog. Cayley-Graphen vorgestellt, die auf Permutationsgruppen<br />

beruhen. Damit lassen sich nicht nur solche bekannte Graphen wie<br />

Barrelshifter, Hypercube <strong>und</strong> Cube-Connected-Cycles auf Cayley-Graphen zurückführen,<br />

sondern es können auch neue Graphen wie Star-Graph, Bubble-<br />

Sort-Graph, Pancake-Graph [Akers89] usw. erzeugt werden. In einem zweiten,<br />

allgemeinen Teil der Theorie werden die Cayley-Graphen so erweitert, daß<br />

damit alle knotensymmetrischen Graphen erfaßt werden können.<br />

Die Forschungsarbeiten auf dem Gebiet der Cayley-Graphen wurden von<br />

Akers <strong>und</strong> Krishnamurthy nicht abgeschlossen, sondern erst initiiert. Es ist zu<br />

erwarten, daß aus der Theorie der Cayley-Graphen weitere Topologien <strong>und</strong><br />

Graphen besonderer Eigenschaften gef<strong>und</strong>en werden.<br />

Leider sind zum Verständnis der speziellen <strong>und</strong> der allgemeinen Cayley-Graphentheorie<br />

gewisse Kenntnisse der mathematischen Gruppentheorie erforderlich,<br />

so daß die Arbeit von Akers <strong>und</strong> Krisnamurthy nicht leicht zugänglich<br />

ist. Der Aufwand <strong>für</strong> die Einarbeitung in diese Theorie ist jedoch aufgr<strong>und</strong> deren<br />

Bedeutung gerechtfertigt. Im folgenden wird deshalb eine knapp gefaßte<br />

Darstellung desjenigen Teils der Gruppentheorie gegeben, der <strong>für</strong> Cayley-Graphen<br />

unbedingt benötigt wird. Zur Vertiefung der mathematischen Gr<strong>und</strong>lagen<br />

der Cayley-Graphen wird darüberhinaus z.B. auf [Böhme92] verwiesen. Zur<br />

Ergänzung ist weiterhin eine Darstellung der Graphentheorie, wie sie z.B. in<br />

[Chartrand93] enthalten ist, empfehlenswert.<br />

126


3.11.2 Gruppentheorie <strong>für</strong> Cayley-Graphen<br />

Definition einer Gruppe<br />

Zur Definition algebraischer Gruppen beginnt man mit der Definition von algebraischen<br />

Strukturen:<br />

Def. 3.6: Algebraische Strukturen sind nichtleere Mengen M, sog. Träger, mit<br />

mindestens einer algebraischen Verknüpfung *, <strong>für</strong> die gilt: *:(a,b)→a*b ∈M<br />

(mit a,b∈M).<br />

D.h., die Verknüpfung zweier Elemente einer Trägermenge gibt wieder ein Element<br />

der Trägermenge. Diese Eigenschaft wird auch als die Abgeschlossenheit<br />

von M bezüglich der Verknüpfung * bezeichnet. Auf einer algebraischen Struktur<br />

läßt sich eine Halbgruppe definieren:<br />

Def. 3.7: Die algebraische Struktur (H, *) heißt Halbgruppe, wenn * bzgl. M<br />

abgeschlossen ist <strong>und</strong> wenn gilt:<br />

∧<br />

a, b,<br />

c∈<br />

M<br />

[( a ⋅ b) ⋅ c = a ⋅ ( b ⋅ c)<br />

]<br />

(=assoziativ).<br />

Beispiele <strong>für</strong> assoziative Verknüpfungen sind die Addition bzw. die Multiplikation<br />

der natürlichen Zahlen. Entsprechend sind (N,+) <strong>und</strong> (N,·) zwei Halbgruppen.<br />

Aus der Halbgruppe folgt durch die Hinzunahme weiterer Eigenschaften<br />

die Definition einer Gruppe:<br />

Def. 3.8: Die algebraische Struktur (G,*) heißt Gruppe, wenn außer der Abgeschlossenheit<br />

<strong>und</strong> der Assoziativität noch ein neutrales Element e <strong>und</strong> ein inverses<br />

Element a -1 existiert, <strong>für</strong> die gilt:<br />

e<br />

∨ ∧ ( e ⋅ a = a⋅<br />

e = a)<br />

<strong>und</strong> ∧ ∨ ( a – 1 ⋅ a = a ⋅ a – 1 = e)<br />

.<br />

∈ G<br />

a ∈ G<br />

a ∈ G<br />

a – 1 ∈ G<br />

(∨ heißt: "Es existiert genau ein".) Aus der Definition des neutralen Elements<br />

e resultiert die Definition des inversen Elements a -1 . Daraus folgt wiederum,<br />

daß die Gleichung a ⋅ x = b die Lösung x = a – 1 ⋅ b hat. Zusätzliche Eigenschaften<br />

kennzeichnen höhere algebraische Strukturen.<br />

Def. 3.9: Eine Gruppe heißt Abelsche oder kommutative Gruppe, wenn zusätzlich<br />

das Kommutativgesetz ( a ⋅ b = b ⋅ a)<br />

gilt.<br />

∧<br />

a,<br />

b∈<br />

G<br />

127


Für nicht Abelsche Gruppen gilt das Kommutativgesetz nur <strong>für</strong> die Spezialfälle<br />

a*e=e*a <strong>und</strong> a*a -1 =a -1 *a. Beispiele <strong>für</strong> kommutative Gruppen sind die ganzen<br />

positiven <strong>und</strong> negativen Zahlen bzgl. der Addition (Z,+) mit e = 0 <strong>und</strong> a -1 = -a<br />

sowie die rationalen Zahlen ohne die Null bzgl. der Multiplikation (Q \ 0,·)mit<br />

e = 1 <strong>und</strong> a -1 = 1/a.<br />

Nach der Definition mathematischer Gruppen geht es nun darum, eine allgemeine<br />

Darstellung <strong>für</strong> endliche Gruppen (=Gruppen mit endlich vielen Elementen)<br />

zu finden, da Cayley-Graphen endlich viele Knoten haben. Für diesen<br />

Zweck erweisen sich Permutationen von Zahlenanordnungen als besonders<br />

nützlich, deshalb wird im folgenden der Begriff der Permutation in der Gruppentheorie<br />

<strong>und</strong> verschiedene Permutationsschreibweisen erläutert.<br />

Definitionen von Permutationen<br />

Aus der Kombinatorik ist der Begriff der Permutationen bereits bekannt. Dort<br />

heißt jede Anordnung von n Elementen eine Permutation dieser Elemente, wobei<br />

die Anzahl aller Permutationen von n Elementen gleich<br />

1 ⋅2 ⋅3 ⋅ … ⋅ n = n! ist. In der Gruppentheorie wird eine Permutation zusätzlich<br />

als Abbildung interpretiert. Die Permutation 321 beispielsweise, die aus der<br />

"natürlichen" Anordnung 123 entstanden ist, definiert in der Gruppentheorie<br />

die zyklische Abbildung 1→ 3, 2 → 2,<br />

3 → 1. Permutationsabbildungen sind<br />

<strong>für</strong> die Gruppentheorie deshalb wichtig, weil sie die Konstruktion endlicher<br />

Gruppen ermöglichen <strong>und</strong> deren Darstellung vereinfachen. Somit müssen zum<br />

Verständnis der Cayley-Graphen die Permutationsfunktionen näher erläutert<br />

werden.<br />

Für die Spezifikation von Permutationen gibt es verschiedene Möglichkeiten,<br />

die sich jeweils <strong>für</strong> einen bestimmten Zweck besonders eignen. Die übersichtlichste<br />

Darstellungsform <strong>für</strong> die Permutation<br />

p: M → M mit 1 → p( 1) , 2 → p( 2)<br />

, …,<br />

n → p( n)<br />

ist die Matrizenschreibweise<br />

p<br />

=<br />

⎛ 1<br />

⎝p( 1)<br />

2<br />

p( 2)<br />

…<br />

…<br />

n ⎞ ,<br />

pn ( ) ⎠<br />

bei der zugeordnete Elemente jeweils untereinander stehen. Die Matrizenschreibweise<br />

ist folgendermaßen zu lesen: Die Zahl 1 (= 1. Element in der 1.<br />

Zeile der Matrix) wird abgebildet auf, d.h. ersetzt durch p(1), die Zahl 2 wird<br />

ersetzt durch p(2), 3 durch p(3), usw. Die Matrizenschreibweise definiert Permutationen<br />

also als die Abbildung der geordneten Zahlenfolge 1,2,3,.. auf Permutationen<br />

dieser Folge.<br />

128


Aufgr<strong>und</strong> der Tatsache, daß Permutationen bijektiv, d.h. umkehrbar eindeutig<br />

sind, folgt:<br />

∧<br />

i,<br />

j∈<br />

M ∧ i≠<br />

j<br />

pi () ≠ pj ().<br />

Die Matrizenschreibweise läßt sich auch als Tabelle bzw. als Adresse-Inhaltsbeziehung<br />

interpretieren, bei der die erste Zeile das Suchkriterium (=Adresse)<br />

darstellt <strong>und</strong> die zweite Zeile den dazu gehörenden Inhalt. In dieser Interpretation<br />

ist es nicht notwendigerweise erforderlich, daß die Adressen in aufsteigender<br />

Reihenfolge sortiert sind, sondern sie können ihrerseits permutiert sein.<br />

Ein Beispiel <strong>für</strong> eine sortierte Permutation ist:<br />

p<br />

=<br />

⎛1 2 3 4⎞<br />

.<br />

⎝4 1 2 3⎠<br />

Ein Beispiel <strong>für</strong> eine unsortierte Permutation lautet:<br />

p'<br />

=<br />

⎛2 1 4 3⎞<br />

.<br />

⎝1 4 3 2⎠<br />

Beide Permutationen sind zueinander identisch.<br />

Eine Variante der Matrizenschreibweise ist die Vektorschreibweise, bei der<br />

die zweite Zeile der sortierten Matrix als Vektor geschrieben wird. Beispielsweise<br />

ist p = (4123) die Vektorschreibweise der oben angegeben, sortierten Permutation.<br />

Aus der Matrizendarstellung läßt sich als weitere Darstellungsform die Zyklenschreibweise<br />

ableiten, die <strong>für</strong> das obige Beispiel p = (1432) lautet <strong>und</strong> die<br />

trotz identischer äußerer Form von der Vektorschreibweise zu unterschieden<br />

ist. Um Verwechslungen zu vermeiden, wird deshalb im weiteren nur die Zyklenschreibweise<br />

<strong>und</strong> nicht die Vektorschreibweise verwendet. Der Unterschied<br />

zwischen Vektor- <strong>und</strong> Zyklenschreibweise besteht darin, daß bei der<br />

Vektorschreibweise die Elemente der sortierten Zahlenfolge 1, 2, 3, ..., bzw. 0,<br />

1, 2, 3, ... durch die Elemente eines Vektors ersetzt werden, während bei der Zyklenschreibweise<br />

die Elemente des Zyklus auf sich selbst abgebildet (ersetzt)<br />

werden.<br />

Die Zyklenschreibweise p = (1432) wird gelesen als: "Ziffer 1 wird ersetzt<br />

durch, d.h. abgebildet auf Ziffer 4, Ziffer 4 wird ersetzt durch Ziffer 3, Ziffer 3<br />

wird ersetzt durch Ziffer 2 <strong>und</strong> Ziffer 2 wird im Sinne einer Modulo-Beziehung<br />

ersetzt durch Ziffer 1." Aufgr<strong>und</strong> der Modulo-Beziehung rührt auch die Namensgebung<br />

Zyklenschreibweise.<br />

Im Allgemeinfall sind in der Zyklenschreibweise auch kurze Zyklen von z.B.<br />

von nur einem oder zwei Elementen sowie die Aneinanderreihungen von Zyklen<br />

erlaubt. Die Permutation<br />

129


p<br />

=<br />

⎛1 2 3 4 5⎞<br />

⎝1 3 2 5 4⎠<br />

läßt sich beispielsweise durch das "Produkt" der Zweierzyklen p = (1)(23)(45)<br />

ausdrücken. Die Reihenfolge der Zyklen spielt hier keine Rolle, weil die Zyklen<br />

ziffernfremd sind, d.h. keine Ziffer taucht mehrfach auf. Üblicherweise werden<br />

Einerzyklen weggelassen <strong>und</strong> Zweierzyklen als Vertauschung oder auch als<br />

Transposition bezeichnet. Zyklen mit zwei oder mehr Elementen heißen zyklische<br />

Vertauschung - ein Begriff der u.a. aus der Geometrie von Dreiecken bekannt<br />

ist.<br />

Zyklische Vertauschung von Elementen<br />

Als Beispiel einer zyklischen Vertauschung sollen die Ziffern 123 <strong>und</strong> die Permutation<br />

(123) betrachtet werden. Das Resultat der Permutation lautet 231 <strong>und</strong><br />

wird gelesen: "2 wird ersetzt durch 3, 3 wird ersetzt durch 1 <strong>und</strong> 1 wird ersetzt<br />

durch 2". Dies entspricht einer zyklischen Linksverschiebung der Ziffern um<br />

eine Stelle. Eine entsprechende Rechtsverschiebung mit dem Resultat 312 wird<br />

durch die Permutation (132) hervorgerufen.<br />

In Bild 3.28 ist die zyklische Verschiebung am Beispiel der Dreiecksvertauschung<br />

dargestellt. Bei der Dreiecksvertauschung ist zu beachten, daß die Rotation<br />

der Ziffern im Uhrzeigersinn eine zyklische Abbildung (Ersetzung) im<br />

Gegenuhrzeigersinn bedeutet.<br />

wird<br />

abgebildet auf<br />

vorher:<br />

1<br />

2 3<br />

wird<br />

abgebildet auf<br />

wird<br />

abgebildet auf<br />

nachher:<br />

2<br />

3 1<br />

Bild 3.28: Zyklische Dreiecksvertauschung.<br />

Eine technische Anwendung der zyklischen Vertauschung stellt ein zum Ring<br />

rückgekoppeltes Schieberegisters dar, wie es bereits im 1. Kapitel vorgestellt<br />

wurde. Die Wirkung eines nach links schiebenden Schieberegisterrings läßt<br />

sich mit Hilfe der Permutation p L = (123...n) beschreiben. Die entsprechende<br />

Permutation <strong>für</strong> die Rechtsverschiebung um eine Stelle lautet:<br />

p R =(1n (n-1) ... 3 2).<br />

130


Verkettungen von Permutationen<br />

Die Hintereinanderausführung mehrer Permutationen wird als Verkettung bezeichnet.<br />

Der Gr<strong>und</strong>, warum es Sinn macht, Permutationen zu einem "Produkt"<br />

zu verküpfen, liegt in folgendem Satz über die Verkettung mehrerer Permutationen<br />

[Böhme92]:<br />

Satz 3.7: Jede Permutation von wenigstens zwei Elementen läßt sich als "Produkt"<br />

(nicht notwendigerweise ziffernfremder) Zweierzyklen (Transpositionen)<br />

darstellen.<br />

Beispiel:<br />

Zur Erläuterung dieses Satzes soll die Permutation p 1 = (1234) dienen, die eine<br />

Abbildung der Ziffern 1234 auf die Ziffern 2341 bewirkt. Dasselbe Resultat<br />

läßt sich auch durch das Produkt p 2 = (12)(13)(14) erzielen, das aus nicht ziffernfremden<br />

Zyklen besteht, weil die Ziffer 1 dreimal verwendet wird.<br />

Bei Produkten aus nicht ziffernfremden Zyklen sind die Transpositionen<br />

streng geordnet von links nach rechts auszuführen. In obigem Beispiel wird somit<br />

die Ziffer 1 durch die Permutation p 2 über ein dreimaliges Vertauschen von<br />

links nach rechts "weitergereicht", <strong>und</strong> die übrigen Ziffern werden um eine Position<br />

nach links versetzt.<br />

Als zweites Beispiel eines Produkts aus nicht ziffernfremden Zyklen soll der<br />

nach links (Gegenuhrzeigersinn) schiebende Registerring dienen. Er läßt sich<br />

als das Produkt p L =(12)(13)...(1n) spezifizieren. Das entsprechende, nicht ziffernfremde<br />

Produkt <strong>für</strong> den nach rechts schiebenden Registerring lautet: p R = (n<br />

(n-1)) (n (n-2))...(n 1).<br />

Zu beachten ist, daß die Zweierzyklen-Spezifikation im Gegensatz zur Matrizen-<br />

oder Zyklenschreibweise nicht eindeutig ist. So läßt sich beispielsweise<br />

(123) sowohl als (12)(13) als auch als (23)(21) schreiben. Beim letztgenannten<br />

Zweierzyklus wird zuerst die Ziffer 3 auf ihren endgültigen Platz transportiert<br />

<strong>und</strong> danach 1 <strong>und</strong> 2 vertauscht.<br />

Die fehlende Eindeutigkeit erlaubt, ein <strong>und</strong> dieselbe Permutation durch Produkte<br />

verschiedener Transpositionen auszudrücken. Es zeigt sich jedoch, daß<br />

<strong>für</strong> eine bestimmte Permutation die Anzahl der sie erzeugenden Transpositionen<br />

stets entweder gerade oder ungerade ist [Böhme92].<br />

Beispielsweise hat die Permutation p = (123) = (12)(13) = (23)(21) in beiden<br />

Produkten eine geradzahlige Anzahl von Transpositionen, während die Permutation<br />

q = (1234) = (41)(42)(43) = (12)(13)(14) = (23)(24)(21) = (34)(31)(32)<br />

in Produkte ungeradzahlig vieler Produktterme zerlegbar ist.<br />

Permutationsschreibweise <strong>für</strong> Cayley-Graphen<br />

Für Cayley-Graphen ist es das Ziel, eine besonders kompakte Darstellung der<br />

Permutationen zu verwenden. Dazu wird die Matrizenschreibweise dahinge-<br />

131


hend modifiziert, daß die erste Zeile der Matrix weggelassen <strong>und</strong> die zweite<br />

1 2 3 4<br />

Zeile ohne Klammern geschrieben wird. Aus p = ⎛<br />

⎞<br />

⎝4 1 2 3⎠<br />

beispielsweise wird so 4123. Diese Schreibweise ist sehr ähnlich der Vektorschreibweise,<br />

nur unterliegt sie nicht deren Einschränkungen bzgl. der Verknüpfung<br />

von Vektoren. Die kompakte Darstellungsform kann ebenfalls als Positions-/Inhaltsbeziehung<br />

interpretiert werden. Die Deutung gemäß einer<br />

Positions-/Inhaltsbeziehung erlaubt, die Verknüpfung mehrerer Permutationen<br />

zu einem Produkt einfach durchzuführen <strong>und</strong> deshalb wird sie <strong>für</strong> die Spezifikation<br />

von Cayley-Graphen eingesetzt.<br />

Beispiel:<br />

Die Permutation 4123 ist folgendermaßen zu lesen: "Auf die Position 1, d.h.<br />

ganz links kommt die Ziffer 4, auf die Position 2 die Ziffer 1, auf die Position<br />

3 die Ziffer 2, usw." Ein anderes Beispiel ist die Permutation 123..n, bei der Ziffer<br />

<strong>und</strong> Adreßposition identisch sind.<br />

Konstruktion endlicher Gruppen<br />

Weil die Cayley-Graphen endliche Gruppen repräsentieren, geht es nach der<br />

Definition von Permutationen, deren Schreibweisen <strong>und</strong> Verknüpfungen nun<br />

darum, zu zeigen, daß man aus Permutationen endliche Gruppen konstruieren<br />

kann. Um dies besser einzusehen, wird im ersten Schritt eine spezielle Gruppe<br />

definiert, die aus Permutationen als Elementen besteht. Im zweiten Schritt wird<br />

die Analogie (Isomorphismus) zwischen Permutationsgruppen einerseits <strong>und</strong><br />

allen endlichen Gruppen andererseits gezeigt. Daraus ergibt sich im dritten<br />

Schritt nach einem Satz, daß alle endliche Gruppen auf Permutationsgruppen<br />

zurückgeführt werden können.<br />

Konstruktion einer Permutationsgruppe<br />

Für die Konstruktion einer Permutationsgruppe muß eine Verknüpfungsoperation<br />

zwischen den Elementen einer Menge, die in diesem Fall Permutationen<br />

sind, definiert werden. Als Verknüpfungsoperation eignet sich die Verkettung,<br />

d.h. Hintereinanderausführung von Permutationen. Da Permutationen in der<br />

Gruppentheorie als Abbildungen gedeutet werden, greift man <strong>für</strong> die Definition<br />

der Verkettung auf die Definition von ineinandergeschachtelten Abbildungen<br />

zurück. Dabei gilt, daß die Verkettung "°" zweier Permutationen p ° q von<br />

rechts nach links ausgeführt wird, so daß p ° q = p(q) ist. (Lies: "p verknüpft q<br />

ist gleich p angewandt auf q").<br />

Beispielsweise liefert die Verkettung von<br />

p ⎛1 2 3 4⎞<br />

1 2 3 4<br />

= <strong>und</strong> q = ⎛<br />

⎞<br />

⎝4 1 2 3⎠<br />

⎝3 4 1 2⎠<br />

132


das Resultat<br />

p ° q = ⎛1 2 3 4⎞.<br />

⎝2 3 4 1⎠<br />

Die Verkettung erfolgt, indem man jede Ziffer in der zweiten Zeile von q als<br />

Adresse in der ersten Zeile von p auffaßt. Die Verkettung entspricht somit einem<br />

zweimaligen Tabellennachschlagen bzw. einer indirekten Adressierung.<br />

Aufgr<strong>und</strong> dieser Definition ergibt sich, daß auch mehrfache Verkettungen möglich<br />

sind.<br />

Neben der Matrizenschreibweise eignet sich die kompakte Schreibweise von<br />

Permutationen besonders gut <strong>für</strong> die Ausführung einer Verkettung, wie man an<br />

dem Produkt p ° q =4123° 3412=2341 sehen kann.<br />

Ein zweites Beispiel <strong>für</strong> die Ausführung einer Verkettung lautet:<br />

p ° q = 4213 ° 3412 = 1342.<br />

Dies wird folgendermaßen gelesen: "Position 1 wird ersetzt durch Ziffer 3 (q-<br />

Term), Position 3 wird ersetzt durch Ziffer 1 (p-Term)". Daraus ergibt sich in<br />

der Position 1 des Resultats die Ziffer 1. Die zweite Ziffer des Resultats berechnet<br />

sich zu: "Position 2 wird ersetzt durch Ziffer 4 (q-Term), Position 4 wird ersetzt<br />

durch Ziffer 3 (p-Term)". Daraus ergibt sich die Ziffer 3 in der Position 2<br />

des Resultats. Die dritte Ziffer des Resultats resultiert aus: "Position 3 wird ersetzt<br />

durch Ziffer 1 (q-Term), Position 1 wird ersetzt durch Ziffer 4 (p-Term)".<br />

Daraus ergibt sich die Ziffer 4 in der Position 3 des Resultats, u.s.w.<br />

Nach der Einführung des Verkettungsoperators kann man folgenden Satz angeben<br />

[Böhme92], der sagt, wie man eine Permutationsgruppe konstruiert:<br />

Satz 3.8: Die Menge (P,°) aller n! Permutationen einer Menge M von n Elementen<br />

bildet eine Gruppe bzgl. der Verkettung ° als Verknüpfung. Die Permutationsgruppe<br />

heißt symmetrische Gruppe S n .<br />

Die symmetrische Gruppe S n ist abgeschlossen bzgl. der Verkettung "°" <strong>und</strong> hat<br />

das neutrale Element "1 2 3 .. n". Zu jeder Permutation p existiert das korrespondierende<br />

inverse Element p -1 . Darüberhinaus gilt das Assoziativgesetz <strong>für</strong><br />

die Verkettung dreier Permutationen.<br />

Isomorphismus zwischen der Permutationsgruppe S n <strong>und</strong> allen übrigen<br />

Gruppen<br />

Es läßt sich ein Zusammenhang zwischen den Permutationselementen von S n<br />

<strong>und</strong> den Elementen beliebiger anderer endlicher Gruppen G herstellen, indem<br />

man eine isomorphe 4 Abbildung ρ von S n auf G definiert. Dabei gilt folgender<br />

wichtiger Satz [Böhme92]:<br />

4.<br />

isomorph heißt "gleichgestaltig", d.h. die Eigenschaften von S n werden durch die Abbildung ρ nicht<br />

verändert.<br />

133


Satz 3.9: Jede endliche Gruppe G ist einer Permutationsgruppe isomorph (läßt<br />

sich durch Permutationen darstellen).<br />

Dieser Satz wird als Darstellungssatz nach Cayley bezeichnet <strong>und</strong> erklärt, warum<br />

Permutationen in der Gruppentheorie besonders bedeutsam sind. Aus diesem<br />

Gr<strong>und</strong> wählten auch Akers <strong>und</strong> Krishnamurthy die Bezeichnung „Cayley-<br />

Graphen" <strong>für</strong> ihre Theorie aus.<br />

Bei Cayley-Graphen spielen die sog. Untergruppen einer Gruppe eine wichtige<br />

Rolle <strong>und</strong> sollen deshalb im folgenden erläutert werden.<br />

Untergruppen einer Gruppe<br />

Def. 3.10: Eine Gruppe (U,°) heißt Untergruppe der Gruppe (G,°), wenn U Teilmenge<br />

von G ist <strong>und</strong> <strong>für</strong> U die Gruppenaxiome (Abgeschlossenheit, neutrales<br />

<strong>und</strong> inverses Element sowie Assoziativität) erfüllt sind.<br />

Zur Konstruktion von Untergruppen kann man folgende Sätze [Böhme92] heranziehen:<br />

Satz 3.10: Ist ∅ ≠ U ⊂ G, so ist (U,°) genau dann Untergruppe von (G,°),<br />

wenn U bzgl. ° abgeschlossen ist <strong>und</strong> jedes Element a ∈ U sein Inverses wieder<br />

in U hat: ∈ .<br />

Aus Satz 3.10 folgt, daß (U,°) ein neutrales Element hat <strong>und</strong> assoziativ ist, wenn<br />

(U,°) abgeschlossen ist <strong>und</strong> die inversen Elemente existieren. Man kann zeigen,<br />

daß (U,°) sogar dann Untergruppe von (G,°) ist, wenn nur die Abgeschlossenheit<br />

gegeben ist, denn bei den Permutationen folgen aus der Abgeschlossenheit<br />

die übrigen Gruppenaxiome. Deshalb gilt:<br />

Satz 3.11: Ist ∅ ≠ U ⊂ G, so ist (U,°) genau dann Untergruppe von (G,°), wenn<br />

U bzgl. ° abgeschlossen ist.<br />

Beispiel:<br />

a – 1 U<br />

Ein Beispiel <strong>für</strong> die Anwendung von Satz 3.11 bildet die Menge der "geraden"<br />

Permutationen A n , die aus einer geradzahligen Anzahl von Transpositionen bestehen.<br />

Sie stellen eine Untergruppe zu S n dar, weil die Verkettung zweier Permutationen<br />

mit gerader Zyklenzahl wieder eine gerade Permutation liefert, also<br />

abgeschlossen ist. Die geradzahligen Permutationen A n heißen auch alternierende<br />

Gruppe. Beispielsweise lautet die alternierende Gruppe A 3 zur<br />

symmetrische Gruppe S 3 : A 3 = {(1), (12)(13), (31)(32)}. Die Abgeschlossenheit<br />

von A 3 läßt sich durch Ausführung aller Verkettungen leicht überprüfen.<br />

Ferner gelten die folgenden wichtigen Sätze über Untergruppen [Böhme92],<br />

die die Konstruktion von Untergruppen erleichtern:<br />

134


Satz 3.12: Jede Permutationsgruppe ist Untergruppe einer symmetrischen<br />

Gruppe.<br />

Satz 3.13: Bei endlichen Gruppen ist die Anzahl der Elemente einer Untergruppe<br />

stets Teiler der Anzahl der Elemente der Gruppe (=Satz v. Lagrange).<br />

So hat beispielsweise A 3 genau 3 Elemente, <strong>und</strong> die Zahl 3 teilt die 3!=6 Elemente<br />

von S 3 ohne Rest.<br />

Mit dem in den vorigen Kapiteln erläuterten Basiswissen über Gruppentheorie<br />

kann man jetzt die Konstruktion von Cayley-Graphen angeben.<br />

3.11.3 Definition von Cayley-Graphen<br />

Die Idee von Akers <strong>und</strong> Krishnamurthy war es, Permutationen aus S n mit den<br />

Knoten eines Graphen zu identifizieren, <strong>und</strong> die Kanten des Graphen als die<br />

Verkettung " ° " zweier Permutationen aufzufassen. Daraus resultierten die Cayley-Graphen,<br />

deren erweitertes Modell sogar die einheitliche Konstruktion aller<br />

knotensymmetrischen Graphen erlaubt. Zur Definition von Cayley-Graphen<br />

werden spezielle Permutationen, die sog. Generatoren, verwendet, die es erlauben,<br />

Untergruppen von S n zu erzeugen. Diese wiederum sind folgendermaßen<br />

definiert:<br />

Def. 3.11: Die Permutationen<br />

p 1<br />

, p 2<br />

, …,<br />

p m<br />

∈ S n<br />

( m < n)<br />

heißen Generatoren<br />

von U, wenn sie durch Verknüpfung ° eine Untergruppe (U, ° ) von S n oder S n<br />

selbst erzeugen. Es gilt dann: ( U , ° ) ⊆ S n<br />

<strong>und</strong> m < U .<br />

Zu U gehören die Generatoren selbst sowie alle zwei- <strong>und</strong> mehrfachen Verknüpfungen<br />

von Generatoren, sofern sie unterschiedliche Elemente liefern:<br />

U<br />

=<br />

m<<br />

n<br />

∪<br />

i = 1<br />

{ p i<br />

}<br />

m < n<br />

∪<br />

∪ { p i° p j, } ∪ { p i° p j° p k}<br />

∪ …<br />

ij , = 1<br />

Damit lautet die Definition der Cayley-Graphen:<br />

m<<br />

n<br />

ijk , , = 1<br />

Def. 3.12: Die Elemente einer durch Generatoren erzeugten Untergruppe<br />

( U , ° ) ⊆ S n von S n sind die Knotenines Cayley-Graphen. Es führt genau dann<br />

eine gerichtete Kante von Knoten u i<br />

∈ U zu Knoten u j<br />

∈ U( 1 ≤ i,<br />

j≤<br />

U ),<br />

wenn es einen Generator p k<br />

∈ U( 1 ≤ k ≤ m < U ) gibt, so daß gilt: u i°p k<br />

= u j<br />

.<br />

∪<br />

135


3.11.4 Konstruktion von Cayley-Graphen<br />

Das erste Problem bei der Konstruktion von Cayley-Graphen stellt die Wahl der<br />

Generatoren dar. Dies soll hier nicht erörtert werden, sondern es wird auf die<br />

entsprechende Literatur verwiesen [Akers84]. Unter der vereinfachenden Annahme,<br />

daß die Generatoren eines zu erzeugenden symmetrischen Graphen bereits<br />

bekannt sind, gibt es zwei Möglichkeiten, diesen zu konstruieren.<br />

Bei der ersten Methode werden die Generatoren solange sowohl untereinander<br />

als auch mit sich selbst verknüpft, bis durch die Verkettungen keine neuen<br />

Permutationselemente mehr entstehen. Dabei sind Mehrfachverknüpfungen<br />

von Permutationen zugelassen. Die daraus entstehende Untergruppe U von S n<br />

ist dann bzgl. der Verkettung abgeschlossen. Jedes Permutationselement wird<br />

mit einem Knoten des Graphen identifiziert, <strong>und</strong> je zwei Knoten sind miteinander<br />

verb<strong>und</strong>en, wenn einer der gegebenen m Generatoren einen Knoten des<br />

Knotenpaares auf den anderen Knoten abbilden kann.<br />

Nach dieser Methode sind bei großen Knotenzahlen relativ viele Verkettungen<br />

durchzuführen, damit alle Knoten erzeugt <strong>und</strong> die Eigenschaft der Abgeschlossenheit<br />

erzielt wird, so daß die Methode in der Praxis nur zur Konstruktion<br />

von Cayley-Graphen geringer Knotenzahl geeignet ist.<br />

Die zweite Methode besteht darin, mit einem der m Generatoren zu beginnen<br />

<strong>und</strong> ihn als Startknoten <strong>für</strong> den zu konstruierenden Graphen zu betrachten. Danach<br />

werden durch Verkettung des Generators mit sich selbst <strong>und</strong> den übrigen<br />

(m-1) Generatoren alle m Nachbarknoten des Startknotens erzeugt, <strong>und</strong> der<br />

Startknoten wird mit jedem seiner Nachbarknoten durch eine gerichtete Kante<br />

verb<strong>und</strong>en. Schließlich wird rekursiv von jedem Nachbarknoten aus derselbe<br />

Vorgang wiederholt. Sobald zwei gleiche Permutationen entstehen, werden sie<br />

zu einem gemeinsamen Knoten verschmolzen. Das Verfahren terminiert, sobald<br />

jeder Knoten mit m Nachbarn verb<strong>und</strong>en ist.<br />

3.11.5 Spezielle Eigenschaften von Cayley-Graphen<br />

Abschließend folgen noch einige Sätze [Akers89] über Eigenschaften von Cayley-Graphen,<br />

die ihre Konstruktion erleichtern.<br />

Satz 3.14: Ein Cayley-Graph vom Grad m wird durch eine von m Generatoren<br />

p 1<br />

, p 2<br />

, …,<br />

p m<br />

∈ S n<br />

( m < n)<br />

erzeugte Untergruppe der symmetrischen Gruppe<br />

S n spezifiziert.<br />

Cayley-Graphen sind dann ungerichtete Graphen, wenn Satz 3.15 gilt:<br />

Satz 3.15: Ein Cayley-Graph ist ungerichtet, wenn es <strong>für</strong> je zwei benachbarte<br />

Knoten u i<br />

, u j<br />

∈ U zwei Generatoren p k<br />

, p l<br />

∈ U gibt, so daß gilt: u i° p k<br />

= u j<br />

<strong>und</strong> u j° p l<br />

= u i<br />

.<br />

136


Der Satz 3.15 sagt, daß es bei einem ungerichteten Cayley-Graphen zu jeder gerichteten<br />

Kante eine Kante in Gegenrichtung geben muß, so daß man die anti<strong>parallel</strong>en<br />

Kanten zu einer ungerichteten Kante zusammenfassen kann. Weiterhin<br />

folgt aus Satz 3.15:<br />

Satz 3.16: Ein Cayley-Graph aus S n ist ungerichtet, wenn es <strong>für</strong> je zwei benachbarte<br />

Knoten u i<br />

, u j<br />

∈ U zwei Generatoren p k<br />

, p l<br />

∈ U gibt, so daß gilt:<br />

– 1<br />

p k<br />

= p l<br />

. Die Permutation p l heißt inverser Generator zu p k .<br />

Beweis: Man multipliziere die Gl. u j°p l<br />

= u i<br />

von rechts mit p l<br />

≠ e , dann kann<br />

man u j auflösen nach u j<br />

= u – 1<br />

i °p l<br />

. Dies setzt man ein in u i° p k<br />

= u j<br />

, worauf<br />

man u i° p k<br />

= u i ° p l 1 bzw. –<br />

=<br />

1 erhält.<br />

Zur Vereinfachung der Konstruktion von ungerichteten Cayley-Graphen<br />

reicht es deshalb, nur eine Kante von einem Knoten zu seinem Nachbarn ohne<br />

Rückrichtung zu berechnen.<br />

3.11.6 Beispiele <strong>für</strong> Cayley-Graphen<br />

Im folgenden werden drei Konstruktionsbeispiele <strong>für</strong> Cayley-Graphen dargestellt,<br />

die alle knotensymmetrisch ist, nämlich der Barrel Shifter, ein 3-D-Würfel<br />

<strong>und</strong> die Cube Connected Cycles in drei Dimensionen. Jeder Graph erfordert<br />

einen eigenen Satz von Generatoren.<br />

Barrel Shifter<br />

Um den Graphen eines Barrel-Shifters zu erzeugen, bei dem jeder Knoten mit<br />

seinen linken <strong>und</strong> rechten Nachbarn <strong>und</strong> dem gegenüberliegenden Knoten Daten<br />

austauschen kann, geht man von folgenden Generatoren aus: p 1 = 1324,<br />

p 2 = 2143 <strong>und</strong> p 3 = 4321.<br />

Daraus werden zur Erzeugung der Knoten des Graphen die 3 2 Verkettungen<br />

p ij = p i<br />

° p j (1 ≤ i, j ≤ 3) berechnet: p 1<br />

° p 1 = 1234, p 1<br />

° p 2 = 3142, p 1<br />

° p 3 = 4231,<br />

p 2<br />

° p 2 = 1234, p 2<br />

° p 1 = 2413, p 2<br />

° p 3 = 3412, p 3<br />

° p 3 = 1234, p 3<br />

° p 1 = 4231,<br />

p 3<br />

° p 2 = 3412.<br />

Dann wird aus p 1 , p 2 , p 3 <strong>und</strong> ihren Verkettungen die Menge U aller verschiedener<br />

Elemente gebildet: U = {1324, 2143, 4321, 1234, 2413, 4231, 3142,<br />

3412}. Wie man durch die Berechnung endlich vieler Verkettungen zeigen<br />

kann, ist U bzgl. "°" abgeschlossen <strong>und</strong> dadurch eine Untergruppe von S 4 (siehe<br />

dazu Satz 3.11). Jedes Element u i<br />

∈ U( 1 ≤ i ≤8)<br />

stellt deshalb einen Knoten<br />

in einem Cayley-Graphen dar. Weiterhin teilt nach dem Satz von Lagrange<br />

(Satz 3.13) die Ordnung von U die Ordnung von S 4 . Dies ist erfüllt, weil 4!/8 =<br />

3 ist.<br />

137


Im nächsten Schritt werden zur Erzeugung der Kanten des Barrel-Shifters die<br />

Verkettungen u i<br />

° p 1 , u i<br />

° p 2 , u i<br />

° p 3 ( 1 ≤ i ≤ 8)<br />

gebildet. Zur Verdeutlichung<br />

der Konstruktion sind in Bild 3.29 alle daraus entstehenden 24 gerichteten Kanten<br />

graphisch dargestellt.<br />

Bild 3.29 läßt sich auch dadurch erzeugen, daß man z.B. das Element 1234<br />

als Startknoten wählt <strong>und</strong> dessen Nachbarknoten (1324, 4321 <strong>und</strong> 2143)<br />

konstruiert. Von dort aus werden deren Nachbarknoten erzeugt (3142, 3412,<br />

4231 <strong>und</strong> 2413), so daß man alle Knoten in nur zwei Schritten gewinnen kann.<br />

Bei diesem Verfahren sind dann alle Kanten gef<strong>und</strong>en, wenn jeder Knoten m=3<br />

Nachbarn hat.<br />

p8<br />

p1p1<br />

1234<br />

p8p2<br />

p1<br />

1324<br />

p8p1<br />

p8p3<br />

p2p2<br />

2143<br />

p2<br />

p4p2<br />

p1p2<br />

p1p3<br />

p2p3<br />

p6p1<br />

p2p1<br />

p4<br />

3142<br />

p4p3<br />

p6p3<br />

2413<br />

p6<br />

p7p2<br />

p4p1<br />

p7p3<br />

p5p2<br />

p5p3<br />

p6p2<br />

p3p3<br />

p7<br />

3412<br />

p7p1<br />

p3p1<br />

4231<br />

p5<br />

p3p2<br />

4321<br />

p3<br />

p5p1<br />

Bild 3.29: Erzeugung eines Barrel Shifters als Cayley-Graph.<br />

Die Generatoren in Bild 3.29 sind zu sich selbst invers, da p 1<br />

° p 1 = p 2<br />

° p 2 =<br />

p 3<br />

° p 3 = 1234 = e ist. Deshalb gibt es zu jedem Generator einen inversen Generator,<br />

<strong>und</strong> man kann man je zwei gerichtete, anti<strong>parallel</strong>e Kanten zu einer ungerichteten<br />

Kante zusammenfassen <strong>und</strong> erhält so den endgültigen Barrel Shifter<br />

<strong>für</strong> 8 Knoten gemäß Bild 3.30.<br />

138


1234<br />

p1 1324<br />

p2 2143<br />

3142<br />

2413<br />

p1 = 1324<br />

p2 = 2143<br />

p3 = 4321<br />

3412<br />

4231<br />

4321<br />

Bild 3.30: Ungerichteter Cayley-Graph aus S 4 als Barrel Shifter.<br />

p3<br />

In den weiteren Beispielen wird auf den Zwischenschritt zur Erzeugung gerichteter<br />

Kanten verzichtet <strong>und</strong> die ungerichtete Darstellung bevorzugt, da sich<br />

im folgenden je zwei anti<strong>parallel</strong>e Kanten zu einer ungerichteten Kante zusammenfassen<br />

lassen.<br />

3-D Würfel<br />

Der 3-dimensionale Würfel wird als Cayley-Graph wie im vorigen Beispiel,<br />

aber mit den Generatoren p 1 = 213456, p2 = 124356 <strong>und</strong> p3 = 123456 erzeugt.<br />

Diese Permutationen erzeugen eine Untergruppe von S 4 mit 8 Elementen, die<br />

in Bild 3.31 zusammen mit ihren Verknüpfungen dargestellt sind. Auch hier<br />

sind die Generatoren zu sich selbst invers.<br />

p3<br />

213456 124356 123465<br />

214356<br />

p2<br />

p1 = 213456<br />

p2 = 124356<br />

p3 = 123456<br />

Bild 3.31: 3-D Würfel als Cayley-Graph von S 6 .<br />

p1<br />

139


Wichtig ist festzustellen, daß alle mehrdimensionalen Würfel (Hypercuben)<br />

ebenfalls als Cayley-Graphen darstellbar sind.<br />

3-D Cube-Connected-Cycles<br />

Zur Konstruktion der 3-D Cube-Connected-Cycles werden die Generatoren p 1<br />

= 2143, p 2 = 1342 <strong>und</strong> p 3 = 1423 verwendet. Diese Generatoren erzeugen nicht<br />

eine Untermenge von S 4 , sondern S 4 selbst. Der Graph besteht deshalb aus 4! =<br />

24 Knoten. Um alle 24 Knoten zu erhalten, muß man mehrfache Verknüpfungen<br />

der Art p 1 ° p 2 ° p 3 usw. durchführen. In Bild 3.32 ist der korrespondierende<br />

Graph dargestellt (nur die Generatoren sind eingezeichnet).<br />

Auch höherdimensionale Cube-Connected-Cycles können als Cayley-Graphen<br />

dargestellt werden.<br />

Die Beispiele haben gezeigt, daß die Wahl der Generatoren der entscheidende<br />

Punkt bei konkreten Cayley-Graphen darstellt. Bislang sind Generatoren nur<br />

<strong>für</strong> eine begrenzte Zahl statischer Topologien bekannt.<br />

p3<br />

p2<br />

p1<br />

p1 = 2143<br />

p2 = 1342<br />

p3 = 1423<br />

Bild 3.32: 3-D Cube-Connected-Cycles als Cayley-Graph von S 4 .<br />

3.11.7 Routing in Cayley-Graphen<br />

Das Routing-Problem ist <strong>für</strong> die Graphengruppe der Cayley-Graphen prinzipiell<br />

gelöst. Das heißt, daß die Frage, auf welchem Weg ein Datenpaket in einem<br />

beliebigen Cayley-Graphen von einem Sende- zu einem Empfangsknoten gelangt,<br />

sich allgemein beantworten läßt.<br />

Leider ist das im weiteren dargestellte Routing-Verfahren [Akers89] relativ<br />

kompliziert, so daß in der Praxis die bekannten, einfacheren Verfahren nach<br />

wie vor ihre Berechtigung haben. Trotzdem ist es wichtig zu wissen, daß es ein<br />

allgemein anwendbares Routing-Verfahren gibt, das auch bei zukünftigen Cayley-Graphen,<br />

die noch erf<strong>und</strong>en werden, gilt. Das Verfahren beruht darauf,<br />

daß man jeden Pfad in einem Cayley-Graphen auf einen Standardfall zurück-<br />

140


führen kann, nämlich auf den Pfad von einem beliebigen Startknoten zu dem<br />

Knoten, der von dem neutralen Element e repräsentiert wird.<br />

Aufgr<strong>und</strong> der Definition der Cayley-Graphen sind zwei Knoten a 1 <strong>und</strong> a 2 im<br />

Graphen (U,°) dann miteinander verb<strong>und</strong>en, wenn es einen Generator g 1 aus<br />

(U,°) gibt, der a 1 auf a 2 gemäß a 1 ° g 1 = a 2 abbildet. Ein Pfad von einem Knoten<br />

a 1 zu einem nicht benachbarten Knoten a n entspricht einer Sequenz S 1 von (n-<br />

1) Generatoren g 1 , g 2 ,...,g n-1 , die den Knoten a 1 auf a 2 , a 2 auf a 3 , a 3 auf a 4 usw.<br />

bis a n-1 auf a n abbilden.<br />

Da die Knoten a 1 <strong>und</strong> a n beliebige Knoten eines Cayley-Graphen sind, können<br />

sie mit den Sende- <strong>und</strong> Empfangsknoten einer beliebigen<br />

Interprozessorkommunikation identifiziert werden. Das <strong>für</strong> alle Cayley-Graphen<br />

gleiche Routing-Problem besteht deshalb darin, die Sequenz S 1 zu bestimmen.<br />

Dazu wird eine isomorphe, d.h. gestaltserhaltende Abbildung des Graphen<br />

– 1<br />

auf sich selbst durchgeführt. Mit Hilfe der Permutation a wird der<br />

Startknoten a 1 auf a 1 ' = a 1<br />

° a -1 n<br />

∈ U<br />

n , der Zielknoten a n auf das neutrale Element e<br />

<strong>und</strong> alle dazwischenliegenden Knoten a 2 ,...,a n-1 auf andere Knoten von (U, °)<br />

abgebildet. Die genannten isomorphen Abbildungen sind in jedem Cayley-Graphen<br />

möglich, weil (U, °) aufgr<strong>und</strong> seiner Gruppeneigenschaft abgeschlossen<br />

ist <strong>und</strong> weil ein neutrales <strong>und</strong> ein inverses Element existieren. Im ersten Schritt<br />

des <strong>für</strong> alle Cayley-Graphen gültigen Verfahrens wird das Routing von a 1 zu a n<br />

somit auf das Routing von a<br />

'<br />

1 zu e zurückgeführt.<br />

Im zweiten Schritt wird zunächst S 2 als eine Sequenz von Permutationen<br />

g 1 ' = g 1<br />

° a n -1 , g 2 ' = g 2<br />

° a n -1 , usw. bis g n-1 ' = g n-1<br />

° a n -1 (g i '∈U)<br />

betrachtet, <strong>für</strong> die gilt: a 1 ' ° S 2 = e. S 2 ist also ein Pfad von a 1 ' zu e. Nach der<br />

Rückführung des Routing-Problems auf einen Standardfall kann man die Abbildung<br />

a als das Sortieren der Permutation a ' 1<br />

' → e<br />

1 interpretieren, da das Ergebnis<br />

der Abbildung die Zifferfolge 1234... darstellt. Das Routing-Problem<br />

a 1<br />

' → e läßt sich aus diesem Gr<strong>und</strong>e in ein Sortierproblem umwandeln, das<br />

durch Ordnen der Ziffern von a 1 ' = a 1<br />

° a<br />

-1<br />

n mit Hilfe von g 1 ', g 2 ',..., g n-1 ' gelöst<br />

werden kann.<br />

Im dritten Schritt wird die Sequenz S 2 unter Berücksichtigung der Randbedingung,<br />

daß S 2 als Pfad in (U, °) existieren muß, mit Hilfe bekannter Sortieralgorithmen<br />

wie Bubble Sort etc. bestimmt.<br />

Im letzten Schritt werden die Elemente g i ' von S 2 mit Hilfe von g i ' ° a n = g i<br />

auf Generatoren von (U, °) zurückabgebildet, womit die Sequenz S 1 = g 1 ,<br />

g 2 ,...,g n-1 gef<strong>und</strong>en <strong>und</strong> das Routing-Problem a 1<br />

' → allgemein gelöst ist.<br />

a n<br />

141


3.11.8 Allgemeine Eigenschaften von Cayley-Graphen<br />

Die Eigenschaften, die im folgenden in knapper Form als Definitionen <strong>und</strong> Sätze<br />

in Anlehnung an die Arbeit von Akers <strong>und</strong> Krisnamurthy [Akers89] aufgelistet<br />

werden, gelten <strong>für</strong> alle Topologien, die sich als Cayley-Graphen beschreiben<br />

lassen. Dazu zählen nicht nur die Graphen der meisten statischen Netze,<br />

sondern auch spezielle Topologien wie Star-Graph, Bubble Sort-Graph <strong>und</strong><br />

Pancake-Graph, die erst durch das gruppentheoretische Konzept der Cayley-<br />

Graphen bekannt wurden. Die wichtigste Eigenschaft aller Cayley-Graphen ist<br />

die der Knotensymmetrie:<br />

Satz 3.17: Jeder Cayley-Graph ist knotensymmetrisch.<br />

Zu beachten ist, daß die Umkehrung des Satzes nicht gilt. Der Petersen Graph<br />

[König35] beispielsweise ist zwar symmetrisch, läßt sich jedoch nicht als Cayley-Graph<br />

darstellen. Dies ist erst im erweiterten Cayley-Graphenmodell möglich.<br />

Knotensymmetrie erlaubt ein einfaches Routing, da es keine ausgezeichneten<br />

Knoten gibt, sowie eine, im Prinzip jedenfalls, gleichmäßige Kantenauslastung,<br />

weil jeder Knoten gleich viele Kanten aufweist. Insbesondere läßt sich ein <strong>für</strong><br />

alle Cayley-Graphen einheitliches Routing-Schema aufstellen, das im vorigen<br />

Kapitel erläutert wurde.<br />

Die zweite Form von Symmetrie, die in einem Graphen auftreten kann, ist die<br />

Kantensymmetrie. Zur Feststellung, ob ein Cayley-Graph kantensymmetrisch<br />

ist, dient der folgende Satz:<br />

Satz 3.18: Ein Cayley-Graph (U, °), der durch die Menge M von Generatoren<br />

mit M = { g 1<br />

, g 2<br />

, …,<br />

g m<br />

}( m < n)<br />

als Untergruppe von S n ( U ⊆ S n<br />

) bestimmt<br />

ist, ist kantensymmetrisch, wenn es <strong>für</strong> jedes Paar g i , g j eine Permutation<br />

p(g i ,g j ) ∈S n gibt, die g i auf g j <strong>und</strong> M auf M abbildet.<br />

Beispiele kantensymmetrischer Cayley-Graphen sind der Hypercube <strong>und</strong> der<br />

Star-Graph.<br />

Wichtig ist die Anwort auf die Frage, wie Cayley-Graphen einer bestimmten<br />

Größe aus kleineren Cayley-Graphen zusammengesetzt werden können (rekursive<br />

Konstruktion). Zur Beantwortung dieser Frage müssen zwei neue Begriffe<br />

eingeführt werden:<br />

Def. 3.13: Ein Cayley-Graph heißt hierarchisch, wenn seine Generatoren dergestalt<br />

in einer Sequenz g 1<br />

, g 2<br />

, …,<br />

g m<br />

angeordnet werden können, daß <strong>für</strong> jedes<br />

i ( 1 ≤ i ≤ m) der Generator g i nicht Element der Untergruppe ist, die von<br />

den ersten (i-1) Generatoren g 1<br />

, g 2<br />

, …,<br />

g i – 1<br />

erzeugt wird.<br />

142


Wenn die Voraussetzung der Hierarchie gegeben ist, gilt der folgenden Satz<br />

bzgl. der Zusammensetzung großer Cayley-Graphen aus kleineren:<br />

Satz 3.19: Jeder hierarchische Cayley-Graph läßt sich rekursiv konstruieren.<br />

Die hierarchische Konstruktion ist seit langem <strong>für</strong> den Hypercube, einem Spezialfall<br />

der Cayley-Graphen, bekannt. Doch <strong>für</strong> Cayley-Graphen gibt es eine<br />

noch strengere Form der Hierarchie:<br />

Def. 3.14: Ein Cayley-Graph heißt streng hierarchisch, wenn er <strong>für</strong> jede beliebige<br />

Generatorsequenz hierarchisch ist.<br />

Der n-dimensonaler Hypercube beispielsweise kann entlang jeder Dimension<br />

in zwei (n-1)-dimensionale Hypercuben zerlegt werden. Deshalb ist er, ebenso<br />

wie der Star-Graph, streng hierarchisch.<br />

Cayley-Graphen haben gemäß Satz 3.20 bzgl. der Fehlertoleranz optimale<br />

Eigenschaften, weshalb sie ursprünglich auch entwickelt wurden.<br />

Satz 3.20: Hierarchische Cayley-Graphen sind maximal fehlertolerant, d.h. bei<br />

einem Cayley-Graphen vom Grad m können bis zu m-1 Kanten entfernt werden,<br />

ohne daß der Graph in zwei Teile zerfällt.<br />

Der Satz 3.20 ist in der Praxis bedeutend, weil er sagt, daß Cayley-Graphen sich<br />

ähnlich gut wie BIBD-Graphen bzgl. der Fehlertoleranz verhalten.<br />

3.11.9 Erweiterung des Cayley-Graphenmodells<br />

Die Erweiterung des Cayley-Graphen Modells erlaubt, alle statischen <strong>Verbindungsnetzwerke</strong>,<br />

die knotensymmetrisch sind, als Cayley-Graph zu definieren.<br />

Für die Erweiterung des Cayley-Graphenkonzepts ist es notwendig, weitere Definitionen<br />

<strong>und</strong> Sätze aus der Gruppentheorie anzugeben [Böhme92]:<br />

Def. 3.15: Zerlegt man eine Menge A in paarweise disjunkte, nicht leere Teilmengen<br />

A i , so heißen die Teilmengen eine „Klassenzerlegung" von A, gemäß:<br />

A<br />

=<br />

n<br />

∪ A i<br />

∧ ∧ [ A i<br />

∩ A j<br />

= ∅ ∧ A i<br />

≠ ∅]<br />

.<br />

i = 1<br />

n<br />

i,<br />

j<br />

i ≠ j<br />

Def. 3.16: Verknüpft man alle Elemente einer Untergruppe (U, °) der Gruppe G<br />

von links mit einem festen Gruppenelement , so heißt die entstehende Teilmenge<br />

A g<br />

= g°U = { x x = g°u ∧ u ∈ U}<br />

eine linke Nebenklasse von (U, °).<br />

Eine entsprechende Verknüpfung von rechts heißt rechte Nebenklasse von<br />

(U °).<br />

143


Die praktische Bedeutung der linken bzw. rechten Nebenklassen liegt in folgendem<br />

Satz:<br />

Satz 3.21: Die Vereinigung aller linken (rechten) Nebenklassen A i einer Untergruppe<br />

der Gruppe G ist eine Klassenzerlegung von G: G = .<br />

Nach der Definition der Nebenklassen einer Untergruppe, kann man den Zusammenhang<br />

zwischen Nebenklassen <strong>und</strong> Cayley-Graphen angegeben:<br />

Satz 3.22: Die linken (rechten) Nebenklassen einer Untergruppe von G sind<br />

Knoten von Subgraphen des Cayley-Graphen von G.<br />

Beispiel:<br />

n<br />

∪ A i<br />

i = 1<br />

Gegeben seien die Generatoren p 1 = 213, p 2 = 321, p 3 = 132. Daraus wird die<br />

Gruppe (G, °) mit G = {e, p 1 , p 2 , p 3 , p 4, p 5 } <strong>und</strong> e = 123, p 4 = 312, p 5 = 231<br />

erzeugt, die identisch zu S 3 ist ( G ⊆ S 3<br />

). Gewählt wird die Untergruppe (U, °),<br />

mit U = {e, p 1 }. Damit werden die linken Nebenklassen von (U, °) bestimmt:<br />

e ° U = U, p 1<br />

° U={p 1 , e}, p 2<br />

° U={p 2 , p 5 }, p 3<br />

° U={p 3 , p 4 }, p 4<br />

° U={p 4 , p 3 },<br />

p 5<br />

° U={p 5 , p 2 }. Die Klassenzerlegung von G lautet somit:<br />

G = A 1<br />

∪ A 2<br />

∪ A 3<br />

mit A 1<br />

= { e,<br />

p 1<br />

}, A 2<br />

= { p 2<br />

, p 5<br />

},<br />

A 3<br />

= { p 3<br />

, p 4<br />

} .<br />

In Bild 3.33 sind der korrespondierende Cayley-Graph <strong>und</strong> die Knoten der linken<br />

Nebenklassen eingezeichnet, die drei Subgraphen in Form einfacher Geraden<br />

definieren.<br />

Mit den dargestellten Definitionen <strong>und</strong> Sätzen kann man das erweiterte Cayley-<br />

Graphen Modell angeben [Akers89]:<br />

Satz 3.23: Jeder knotensymmetrische Graph G läßt sich als Quotient G=Z/N i<br />

zweier Cayley-Graphen Z <strong>und</strong> N i (Z) darstellen. N i (Z) wird durch die Knoten<br />

der i-ten linken Nebenklasse einer Untergruppe von Z bestimmt.<br />

Zur Erläuterung des erweiterten Cayley-Graphen Modells ist folgendes zu sagen:<br />

• N i (Z) ist der Graph, der aus der i-ten linken Nebenklasse von Z entsteht <strong>und</strong><br />

damit ein Subgraph von Z.<br />

• Der Quotient Z <strong>und</strong> N i berechnet sich so, daß die von N i definierten Subgraphen<br />

von Z zu jeweils einem (Sammel)knoten zusammengefaßt, d.h. kontrahiert<br />

werden. Dabei bleiben die Kanten, die von den Subgraphen ausgehen<br />

oder auf ihnen enden, nach der Kontraktion erhalten <strong>und</strong> entspringen bzw. enden<br />

anschließend auf den Sammelknoten.<br />

144


A1<br />

e<br />

p1<br />

p2<br />

A2<br />

p4<br />

p5<br />

A3<br />

p3<br />

Bild 3.33: Cayley-Graph von S 3 mit Subgraphen A 1 , A 2 , A 3 .<br />

Beispiel:<br />

Die Quotientenbildung zweier Graphen wird exemplarisch anhand des Cayley-<br />

Graphen von S 3 gezeigt. Die symmetrische Gruppe S 3 (in Bild 3.34a dargestellt)<br />

wird durch die Subgraphen der linken Nebenklassen einer Untergruppe<br />

von S 3 "dividiert" (Bild 3.34b), worauf man den Quotienten G (Bild 3.34c) erhält.<br />

Dabei werden je zwei benachbarte Knoten des Sechsecks von S 3 auf einen<br />

Sammelknoten kontrahiert, so daß der Quotientengraph aus drei Sammelknoten<br />

besteht. Parallel verlaufende Kanten werden schließlich zu einer Kante<br />

zusammengefaßt so daß man ein einfaches Dreieck als Quotientengraph erhält<br />

(c).<br />

e<br />

e<br />

p1<br />

p2<br />

p1<br />

p2<br />

p4<br />

p5<br />

p4<br />

p5<br />

p3<br />

p3<br />

a)<br />

b) c)<br />

Bild 3.34: Reduktion von S 3 (a) durch die Subgraphen aller linken Nebenklassen einer Untergruppe<br />

von S 3 (b) zum Quotientengraph (c).<br />

145


4 Dynamische <strong>Verbindungsnetzwerke</strong><br />

4.1 Einleitung<br />

Mehrstufige Netze, die man auch als dynamische oder indirekte Netze bezeichnet,<br />

bestehen aus Schaltern, die in Netzstufen organisiert sind. Sie benötigen<br />

definitionsgemäß mindestens eine Schalterstufe, um Daten vom Sender<br />

zum Empfänger zu übermitteln. In der Technik haben mehrstufige Netze auf<br />

verschiedenen Gebieten Bedeutung erlangt: Als Koppelnetz in den Vermittlungseinrichtungen<br />

der Telekommunikation zur Verschaltung von Telefon- <strong>und</strong><br />

Datenanschlüssen, als Switch bei Arbeitsplatzrechnern zur LAN- oder WAN-<br />

Vernetzung <strong>und</strong> als Verbindungsnetzwerk in der Rechnerarchitektur zur Kopplung<br />

von Prozessoren oder Rechenknoten.<br />

Speziellere Anwendungsgebiete <strong>für</strong> mehrstufige Netze sind in den Experimenten<br />

der Hochenergie- <strong>und</strong> Plasmaphysik zu finden, die dynamische Netze<br />

zur rekonfigurierbaren Erfassung von Daten nützen, die von physikalischen <strong>und</strong><br />

technischen Sensoren aus z.B. einem Plasma herrühren [Hertweck90]. Des weiteren<br />

werden sie in der Automatisierungstechnik zur Steuerung <strong>und</strong> Regelung<br />

komplexer technischer Anlagen eingesetzt, bei denen die Steuerung auf <strong>parallel</strong>er<br />

Rechentechnik beruht <strong>und</strong> wo eine flexible Verschaltung von Rechenknoten<br />

<strong>und</strong> Stellgliedern erforderlich ist [Richter95a].<br />

Historisch gesehen wurden zuerst in der Telekommunikation die Funktion,<br />

der Aufbau <strong>und</strong> die Eigenschaften mehrstufiger Netze beschrieben. Danach<br />

wurden die Topologien in die <strong>parallel</strong>e Rechentechnik übernommen <strong>und</strong> weiterentwickelt.<br />

Neuere dynamische Netze zeichnen sich zumeist durch verbesserte<br />

Eigenschaften wie kleinerer mittlerer Durchmesser, höhere Fehlertoleranz,<br />

usw. aus.<br />

Insgesamt kann man sagen, daß die Entwicklung mehrstufiger Netze bis heute<br />

nicht abgeschlossen ist. Dementsprechend schwierig ist es, eine Theorie aufzustellen,<br />

die alle dynamischen Netze einheitlich beschreibt. Man kann jedoch<br />

die Kategorie der dynamischen Netze anhand ihrer unterschiedlichen Stufenzahl<br />

in verschiedene Gruppen einteilen.<br />

Das Konzept der Banyan-Netze [Lipovski87] beschreibt die Unterklasse derjenigen<br />

Netzwerke, die logN-Stufen umfassen. (N ist die Zahl der Ein- <strong>und</strong><br />

Ausgänge). Die Klasse der Benes-Netze [Benes65], die aus (2logN-1) Stufen<br />

bestehen, zeichnen sich dadurch aus, bei Leitungsvermittlung blockierungsfrei<br />

durch Umordnen interner Wege zu sein [Lee85]. Die Datenmanipulatornetze<br />

[Feng74] schließlich bestehen aus (logN+1) Stufen, die aus speziellen Schaltelementen<br />

aufgebaut sind. Darüberhinaus existieren noch einige Sonderformen<br />

dynamischer Netze wie der Kreuzschienenverteiler <strong>und</strong> das Clos-Netz<br />

[Clos53], die aus einer bzw. drei Schaltstufen bestehen. Das einfachste dynamische<br />

Netz stellt der Kreuzschienenverteiler dar.<br />

146


Ebenso unterschiedlich wie die Stufenzahl der dynamischen Netze ist deren<br />

mathematische Beschreibung. Banyan-Netze lassen sich mit Hilfe graphentheoretischer<br />

Methoden erzeugen <strong>und</strong> beschreiben, die Benes-Netze benötigen<br />

Gruppentheorie oder Restklassenarithmetik, <strong>und</strong> die Datenmanipulatornetze<br />

erfordern spezielle Hilfsmittel wie das binäre, voll red<strong>und</strong>ante<br />

Zahlensystem 0, 1 <strong>und</strong> 1 [Parker84]. Das Routing im Clos-Netz läßt sich noch<br />

verhältnismäßig einfach über Matrizenrechnung beschreiben. Gleichwohl können<br />

allen dynamischen Netzen typübergreifende Eigenschaften zugeordnet<br />

werden.<br />

4.2 Allgemeiner Aufbau dynamischer Netze<br />

Im Unterschied zu den statischen Netzen wie Gitter, Hyperkube usw., bei denen<br />

die Knoten des Netzgraphen Prozessoren oder Rechner darstellen, repräsentieren<br />

die Knoten in dynamischen Netzen Schalter ohne Rechenfunktion. Die Prozessoren<br />

oder Rechenknoten werden an die Ein- <strong>und</strong> Ausgänge des mehrstufigen<br />

Netzes angeschlossen <strong>und</strong> sind nicht ein Teil desselben.<br />

Jeder Rechenknoten ist von jedem anderen direkt, d.h. ohne Umwege, über<br />

Zwischenknoten erreichbar. Deshalb ist die Latenz beim Datentransport in der<br />

Regel deutlich geringer als bei statischen Netzen, was dynamische Netze <strong>für</strong><br />

Hochgeschwindigkeitsanwendungen prädestiniert. Bei der nicht-blockierungsfreien<br />

Kategorie der Banyan-Netze können jedoch, wie bei statischen Netzen<br />

auch, a priori nicht vorhersagbare Verzögerungen auftreten, sofern die paketvermittelnde<br />

Betriebsart gewählt wurde <strong>und</strong> ein hohes Verkehrsaufkommen<br />

vorliegt. Die Verzögerungen entstehen dadurch, daß zum Pakettransport eine<br />

Sequentialisierung konkurrierender Datenübertragungen vorgenommen wird.<br />

Sie hat zur Folge, daß paketvermittelnde Banyan-Netze bei Echtzeitanwendungen<br />

besondere Sicherheitsmaßnahmen erfordern.<br />

Benes-Netze werden überwiegend leitungsvermittelnd <strong>und</strong> mit zentralem<br />

Routing betrieben <strong>und</strong> haben deshalb garantierte Durchlaufzeiten. Datenmanipulatornetze<br />

wurden ursprünglich <strong>für</strong> die schnelle Manipulation von Bitfeldern<br />

entwickelt <strong>und</strong> dienen primär nicht zum Datentransport. Clos-Netz <strong>und</strong> Kreuzschienenverteiler<br />

sind in allen Einsatzgebieten zu finden <strong>und</strong> sind, obwohl sie<br />

die ältesten dynamischen Netze darstellen, aktueller denn je, da sie kleine <strong>und</strong><br />

konstante Latenzen aufweisen.<br />

Mehrstufige Netze unterscheiden sich untereinander in der Art der Leitungsführung<br />

zwischen den Schaltern. Die Verdrahtung der Stufen bestimmt<br />

die Netztopologie <strong>und</strong> stellt neben dem Wegewahlalgorithmus <strong>und</strong> der Zahl der<br />

vom Netz realisierbaren Verbindungen ein wesentliches Kennzeichen eines dynamischen<br />

Netzes dar. Häufig ist die Verdrahtung nicht über das ganze Netz<br />

hinweg einheitlich, sondern ändert sich von Stufe zu Stufe.<br />

Zur formalen Beschreibung von Netztopologien werden Permutationsfunktionen<br />

verwendet, die entweder als mathematische Funktion, als Matrix oder in<br />

der Zyklen- bzw. Zweierzyklenschreibweise spezifiziert werden können. In allen<br />

Fällen wird das Netzwerk dadurch abstrahiert, daß man es als eine Abbil-<br />

147


dung eines Eingabevektors auf einen Ausgabevektor auffaßt. Im folgenden<br />

werden die wichtigsten Permutationsfunktionen erläutert, auf denen dynamische<br />

Netze beruhen.<br />

4.3 Permutationsfunktionen <strong>für</strong> dynamische<br />

Netzwerke<br />

Zur Definition der Permutationsfunktionen muß zuerst eine Numerierung der<br />

Ein- <strong>und</strong> Ausgänge des Netzes durchgeführt werden, die üblicherweise von 0<br />

bis N-1 fortlaufend erfolgt. Dann werden alle Eingangs- bzw. Ausgangsadressen<br />

in einen Eingabevektor I <strong>und</strong> einen Ausgabevektor O zusammengefaßt.<br />

Der Ausgabevektor O wird durch Anwendung der Permutationsfunktion f, die<br />

vom Netz durchgeführt wird, auf jedes Element von I erzeugt:<br />

Gl. 4.1:<br />

O<br />

= (f(0), f(1), ... , f(N-1)).<br />

Da die Zahl N der Ein- <strong>und</strong> Ausgänge eines Netzes häufig als Zweierpotenz<br />

(N =2 n ) gewählt wird, ist es günstig, die Numerierung ebenfalls bzgl. der Zahlenbasis<br />

2 durchzuführen. In diesem Fall werden die Numerierungen der Ein<strong>und</strong><br />

Ausgänge als binäre Adressen bezeichnet.<br />

Sei I ein Netzeingang (I Element von I ) <strong>und</strong> O ein Netzausgang (O Element<br />

von O ), dann lauten deren binäre Darstellung:<br />

Gl. 4.2: I = i n i n-1 ,...,i 1 , bzw. O = o n o n-1 ,...,o 1 ,<br />

mit i j ,o j ∈ {0,1}, n = 1, 2, 3,..., log 2 N. Der Parameter n kodiert über N = 2 n die<br />

Netzgröße, d.h. die Zahl der Ein- <strong>und</strong> Ausgänge. Die von der Verdrahtung der<br />

k-ten Netzstufe durchgeführte Permutation f k läßt sich auch darstellen als O =<br />

f k (I).<br />

Sind f 1 , f 2 ,...,f k die Permutationsfunktionen der Stufen 1 bis k, dann kann man<br />

die Funktion f des Netzes durch die Einzelpermutationen beschreiben:<br />

Gl. 4.3: O = f() I = f k<br />

( f k – 1<br />

(…( f 2<br />

( f 1<br />

() I ))…)) = f 1<br />

f 2<br />

…f k<br />

() I .<br />

Damit kann man die <strong>für</strong> Verbindungsnetze typischen Verdrahtungen zwischen<br />

den Stufen angeben. Man muß beim Ausdruck f 1 f 2 ...f k (I) unbedingt beachten,<br />

daß die Permutationen von links nach rechts ausgeführt werden. Dies ist im Gegensatz<br />

zum Verkettungsoperator ° der Cayley-Graphen!<br />

148


4.3.1 Perfect Shuffle-Permutation<br />

Das bei dynamischen Netzen am häufigsten verwendete Verdrahtungsschema<br />

ist die Perfect Shuffle-Permutation σ, die von Stone 1971 [Stone71] erstmals in<br />

die Disziplin der Parallelverarbeitung eingeführt wurde. Bei der Perfect Shuffle-Permutation<br />

erhält man den Ausgang O eines Eingangs I durch folgende<br />

Funktion:<br />

⎧ 2I <strong>für</strong> 0 ≤ I < N⁄<br />

2 ⎫<br />

Gl. 4.4: O = σ()<br />

I = ⎨<br />

⎬,<br />

⎩( 2I + 1) MOD N <strong>für</strong> N ⁄ 2 ≤ I < N⎭<br />

vorausgesetzt, daß N gerade ist. (Für ungerades N ist σ nicht definiert!). D.h.,<br />

σ entspricht einer Multiplikation der Eingangsadressen um den Faktor 2, um die<br />

dazugehörenden Ausgangsadressen zu erhalten.<br />

Die etwas umständliche Darstellung nach Gl. 4.4 kann man <strong>für</strong> N=2 n vereinfachen,<br />

indem man die Multiplikation mit 2 durch eine zyklische Rotation der<br />

Bits von I um eine Position nach links ersetzt:<br />

σ<br />

nn−1 1 n−1 1 n<br />

Gl. 4.5: I = i i ,..., i ⎯ ⎯ → O = i ,..., i i .<br />

Die Perfect Shuffle-Permutation ist in Bild 4.1 <strong>für</strong> n = 4 graphisch dargestellt.<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

σ 0110<br />

i n i n-1<br />

,..., i i 0111<br />

2 1 1000<br />

i i ,..., n-1 n-2<br />

i i<br />

1001<br />

1<br />

n 1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

Bild 4.1: Die Perfect Shuffle-Permutation.<br />

Anhand der graphischen Repräsentation der Perfect Shuffle-Permutation erkennt<br />

man, daß beim Shuffle-Verdrahtungsschema alle Eingänge der oberen<br />

Hälfte (0 ≤ I < N/2) auf geradzahlige Ausgänge abgebildet werden, während die<br />

Eingänge der unteren Hälfte (N/2 ≤ I < N) auf ungeradzahlige Ausgänge zu liegen<br />

kommen. Dieses Schema ist identisch mit dem Vorgang des Mischens beim<br />

Kartenspielen, bei dem ein Kartenstapel in zwei (gleich große) Hälften geteilt<br />

wird, <strong>und</strong> Karten aus oberer <strong>und</strong> unterer Hälfte im Sinne einer "Verzahnung"<br />

abwechselnd aufeinander gelegt werden.<br />

149


4.3.2 Butterfly-Permutation<br />

Das zweite <strong>für</strong> dynamische Netze wichtige Verdrahtungsschema ist die Butterfly-Permutation.<br />

Bei der Butterfly Permutation β wird in der binären Darstellung<br />

von I die letzte (n.) Stelle mit der 1. Stelle ausgetauscht, d.h. das Most<br />

Significant Bit wird durch das Least Significant Bit ersetzt <strong>und</strong> umgekehrt:<br />

β<br />

Gl. 4.6: I = inn i −1,..., i1 ⎯ →O = i1in−<br />

1,...<br />

, i2in.<br />

Dieser Vorgang ist in Bild 4.2 <strong>für</strong> n=4 exemplarisch gezeigt. Die Butterfly-Permutation<br />

realisiert ähnlich wie die Shuffle-Permutation eine Durchmischung<br />

der Verbindungen in zwei Gruppen, abhängig davon, ob die Eingangsadresse<br />

der Verbindung gerade oder ungerade ist.<br />

i n i n-1<br />

i 1<br />

i i n-1<br />

,..., i i<br />

n<br />

1 2<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

,..., i 2<br />

β n<br />

0000<br />

Bild 4.2: Die Butterfly-Permutation.<br />

i n i n-1 ,..., i 2<br />

i ρ 1 n<br />

i 1<br />

i 2 ,..., i n-1 i n<br />

Bild 4.3: Die Reversal-Permutation.<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

150


Die von der schnellen Fouriertransformation bekannte Reversal-Permutation ρ,<br />

bei der die Reihenfolge der Bits von I gespiegelt wird, spielt bei dynamischen<br />

<strong>Verbindungsnetzwerke</strong>n fast keine Rolle. Sie wird hier gezeigt (Bild 4.3), um<br />

die Vielfalt der potentiellen Verdrahtungsmöglichkeiten zu demonstrieren.<br />

Variationen der Gr<strong>und</strong>permutationen<br />

Zu den beiden Gr<strong>und</strong>permutationen von Shuffle <strong>und</strong> Butterfly gibt es 2 Varianten,<br />

die man ebenfalls häufig in mehrstufigen Netzen als Verdrahtungsschema<br />

findet. Diese Varianten entstehen durch Spiegelung der normalen Shuffle-<br />

Verdrahtung (sog. inverser Shuffle σ -1 ) <strong>und</strong> durch die Beschränkung der Permutationsfunktionen<br />

auf niederwertige Adreßbits von I (sog. Subshuffle). Für<br />

die Butterfly-Permutation gilt, daß die Umkehrfunktion aufgr<strong>und</strong> der Spiegelsymmetrie<br />

mit dem normalen Butterfly identisch ist, so daß sich hieraus keine<br />

neue Verdrahtung ergibt, wohl aber aus der Beschränkung auf niederwertige<br />

Adreßbits.<br />

Die inverse Perfect Shuffle-Permutation σ -1 läßt sich als Divison von I durch<br />

zwei wie folgt definieren:<br />

Gl. 4.7: σ – 1 ⎧ I ⁄ 2<br />

<strong>für</strong> I gerade ⎫<br />

() I = ⎨<br />

⎬.<br />

⎩( ( I – 1) ⁄ 2) + ( N ⁄ 2)<br />

<strong>für</strong> I ungerade⎭<br />

Wiederum ist N als durch 2 teilbar vorausgesetzt. In binärer Schreibweise erhält<br />

man σ -1 durch zyklische Rechtsrotation der Bits von I um eine Stelle:<br />

−1<br />

σ<br />

nn−1 1 1 nn−1 2<br />

Gl. 4.8: I = i i ,..., i ⎯⎯⎯ →O = i i i ,..., i .<br />

Der Graph der inversen Perfect Shuffle-Permutation ist in Bild 4.4 exemplarisch<br />

<strong>für</strong> n = 4 dargestellt.<br />

0000 0000<br />

0001 0001<br />

0010 0010<br />

0011 0011<br />

0100 0100<br />

0101 0101<br />

σ −1<br />

0110 0110<br />

i n i n-1<br />

,..., i i 0111 0111<br />

2 1 1000 1000<br />

i i ,..., 1 n<br />

i i<br />

1001<br />

3 2<br />

1001 1010 1010<br />

1011 1011<br />

1100 1100<br />

1101 1101<br />

1110 1110<br />

1111 1111<br />

Bild 4.4: Der Graph der inversen Perfect Shuffle-Permutation.<br />

151


Die Anwendung der Gr<strong>und</strong>permutationen σ <strong>und</strong> β auf Teile der Adreßbits von<br />

I, d.h. auf die unteren (LSB) oder oberen (MSB) k Bits resultieren in den Subshuffle-<br />

<strong>und</strong> Supershuffle-Funktionen σ uk <strong>und</strong> σ ok sowie in den entsprechenden<br />

Butterfly-Funktion β uk <strong>und</strong> β ok . (Die Indizes u <strong>und</strong> o stehen <strong>für</strong> "unten" bzw.<br />

"oben"). Diese verallgemeinerten Permutationen, die k als Parameter haben,<br />

lauten gemäß :<br />

Def. 4.1:<br />

σuk<br />

( inn i<br />

− 1,..., ik+ 1ikk i<br />

−1,..., i21 i ) ⎯⎯⎯<br />

→( inn i<br />

− 1,..., ik+ 1ik−1..., i21<br />

i ik)<br />

σok<br />

( ii ,..., i i ,..., ii) ⎯⎯⎯<br />

→( i ,..., i ii ,..., ii)<br />

nn−1 n−( k−1) n−k 21 n−1 n−( k−1)<br />

nn−k<br />

21<br />

βuk<br />

( ii<br />

nn−1,..<br />

., ik+ 1ikik−1,..., i21 i ) ⎯⎯⎯<br />

→( inin− 1..., ik+ 11<br />

i ik−<br />

1,..., i2ik)<br />

βok<br />

( i i ,..., i i ,..., i i ) ⎯⎯⎯<br />

→( i i ,..., i i ,..., i i )<br />

n n−1 n−( k−1) n−k 21 n−( k−1)<br />

n−1 n n−k<br />

21<br />

Für dynamische Netze sind ausschließlich Permutationen der niederwertigen<br />

Bits interessant, da σ ok <strong>und</strong> β ok keine echte "Durchmischung" der Leitungsbündel<br />

bewirken, wie man sich anhand des Graphen von σ o2 veranschaulichen<br />

kann (Bild 4.5). Aus diesem Gr<strong>und</strong>e werden im weiteren nur die Subshufflebzw.<br />

Subbutterfly-Permutationen σ uk <strong>und</strong> β uk betrachtet, die vereinfachend als<br />

σ k <strong>und</strong> β k bezeichnet werden. (Achtung: Bei den Star-Graphen ist β k anders definiert!)<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

σ o2<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

Bild 4.5: Die Supershuffle-Funktion <strong>für</strong> n=4 <strong>und</strong> k=2.<br />

Zu den Subshuffle- bzw. Subbutterfly-Permutationen σ k <strong>und</strong> β k können auch<br />

die inversen Abbildungen definiert werden. Dies ist in Def 4.2 zusammenfassend<br />

dargestellt.<br />

152


Je nach Parameter k ergeben die Subshuffle-Funktionen völlig unterschiedliche<br />

Verdrahtungen, wie man in Bild 4.6 anhand von σ k mit k = 4, 3 <strong>und</strong> 2 sehen<br />

kann (n = 4). In Bild 4.7 ist derselbe Sachverhalt zur Erläuterung <strong>für</strong> die Subbutterfly-Funktion<br />

β k gezeigt.<br />

Def. 4.2:<br />

σ<br />

( i i ,..., i i i ,..., i i ) k<br />

nn− 1 k+ 1 kk−1 21 ⎯ ⎯→( inn i − 1,..., ik+ 1ik−1..., i21<br />

i ik)<br />

σ<br />

−1<br />

( inn i ,..., ik ikk<br />

i ,..., i i ) k<br />

− 1 + 1 −1 21 ⎯⎯⎯<br />

→( inn i − 1,..., ik+ 11 i ikk<br />

i −1,..., i2)<br />

βk<br />

= β<br />

( ii nn−1,...,<br />

i i i i i k<br />

− 1<br />

k + 1 k k −1,..., 21) ⎯⎯⎯ ⎯→( inn i − 1..., ik + 11 i ik −1,..., i2ik<br />

)<br />

Zusammenfassend kann man sagen, daß sich aus den dargestellten Permutationen<br />

σ k <strong>und</strong> β k <strong>und</strong> ihren inversen Abbildungen σ k -1 <strong>und</strong> β k -1 alle "klassischen"<br />

logN-Netze im Sinne eines Baukastensystems erzeugen lassen. Wenn<br />

man zusätzlich noch die Reversal-Permutation erlaubt, lassen sich damit auch<br />

die Signalflußgraphen aller Formen der FFT konstruieren.<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

σ4<br />

σ3<br />

σ2<br />

Bild 4.6: Die Subshuffle-Funktion σ k <strong>für</strong> k = 4, 3 <strong>und</strong> 2 (n = 4).<br />

Die Subshuffle-Funktionen σ k <strong>und</strong> β k stellen bereits eine Verallgemeinerung<br />

der Gr<strong>und</strong>permutationen σ <strong>und</strong> β dar, doch ist die Zahl potentieller Erweiterungsmöglichkeiten<br />

damit noch nicht erschöpft. Ein Gr<strong>und</strong>, nach noch umfassenderen<br />

Definitionen <strong>für</strong> σ <strong>und</strong> β zu suchen, liegt darin, das relativ grobe<br />

Raster der erlaubten Zahl von Netzein- <strong>und</strong> -ausgängen zu überwinden <strong>und</strong> eine<br />

feinere Abstufung der Netzgröße zu erreichen. Für σ k <strong>und</strong> β k gilt bzgl. der Zahl<br />

N der Ein- <strong>und</strong> Ausgänge:<br />

N = 2 n , (n ganz),<br />

was bedeutet, daß <strong>für</strong> jede Netzerweiterung die Zahl der Netzanschlüsse verdoppelt<br />

werden muß.<br />

153


0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

0000 0000<br />

0001 0001<br />

0010 0010<br />

0011 0011<br />

0100 0100<br />

0101 0101<br />

0110 0110<br />

0111 0111<br />

1000 1000<br />

1001 1001<br />

1010 1010<br />

1011 1011<br />

1100 1100<br />

1101 1101<br />

1110 1110<br />

1111 1111<br />

β 4<br />

0000 0000<br />

0001 0001<br />

0010 0010<br />

0011 0011<br />

0100 0100<br />

0101 0101<br />

0110 0110<br />

0111 0111<br />

1000 1000<br />

1001 1001<br />

1010 1010<br />

1011 1011<br />

1100 1100<br />

1101 1101<br />

1110 1110<br />

1111 1111<br />

β 3<br />

β 2<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

Bild 4.7: Die Subbutterfly-Funktionen β κ <strong>für</strong> k = 4, 3 <strong>und</strong> 2 (n = 4).<br />

Bei einer anderen Art der Verallgemeinerung von σ <strong>und</strong> β wird zugelassen, daß<br />

die Permutationen auf alle Netze übertragen werden können, deren Größe N<br />

sich als Produkt zweier Zahlen k <strong>und</strong> s (k, s ganz) darstellen läßt, was eine wesentlich<br />

feinere Unterteilung erlaubt. D.h. in diesem Fall gilt:<br />

N=ks, (k, s ganz).<br />

Die daraus resultierenden Permutationen werden im Kapitel über das Clos-Netz<br />

[Clos53] vorgestellt. An dieser Stelle wird eine dritte Erweiterungsmöglichkeit<br />

von σ <strong>und</strong> β vorgenommen, die darauf beruht, daß beliebige Zahlenbasen b<br />

(b≥2) erlaubt sind, so daß gilt:<br />

N = b n , (b, n ganz, b≥2)<br />

Diese Variante gestattet ebenfalls ein feineres Raster von Netzgrößen sowie<br />

Einsparungen bzgl. der aufzuwendenen Schalter, aus denen die dynamischen<br />

Netze bestehen.<br />

Verallgemeinerte Gr<strong>und</strong>permutationen<br />

Moderne Nachfolger der klassischen Netze wenden die Gr<strong>und</strong>permutationen<br />

<strong>und</strong> ihre Umkehrungen auf Zahlenbasen b≥2 an. Dadurch kann man weitere Topologien<br />

erhalten, die beim Einsatz in mehrstufigen Netzen in neuen Eigenschaften<br />

wie einer geringeren Stufenzahl resultieren. Die Stufenzahl sinkt<br />

von n1=log2N auf n2=logbN, was beispielsweise bei 1024 Ein- <strong>und</strong> Ausgängen<br />

<strong>und</strong> b=2 bzw. 4 eine Halbierung der Stufenzahl bedeutet.<br />

Der Übergang auf eine allgemeine Zahlenbasis bedeutet <strong>für</strong> den Netzaufbau,<br />

daß anstelle von Kreuzschaltern Kreuzschienenverteiler der Größe bxb verwendet<br />

werden. Die Definitionen der Permutationen bleiben im Prinzip erhalten,<br />

nur das Wort "Bit" muß durch "Ziffer" ersetzt werden. Die Bitverschiebung<br />

wird deshalb durch eine Ziffernverschiebung abgelöst. Beispielsweise gilt in einer<br />

ternären Darstellung <strong>für</strong> I <strong>und</strong> O:<br />

154


Gl. 4.9:<br />

I=(i n i n-1 ,...,i 1 ), bzw. O=(o n o n-1 ,...,o 1 ), mit i j ,o j ∈{0,1,2},<br />

wobei sich die Perfect Shuffle-Permutation wie folgt berechnet:<br />

Gl. 4.10:<br />

O b 3<br />

=<br />

= σ( I b = 3<br />

) = i n – 1<br />

i n – 2<br />

, …,<br />

i 1<br />

i n<br />

mit o j<br />

∈ {, 01,<br />

2}<br />

Entsprechend erhält man die inverse Perfect Shuffle-Permutation durch zyklisches<br />

Schieben der Ziffern von I um eine Position nach rechts. Die Butterfly-<br />

Funktion β k,b wird durch Austauschen der 1. (LSB) <strong>und</strong> k. Ziffer gewonnen,<br />

<strong>und</strong> ρ k,b entspricht der Spiegelung der unteren (LSB) k Ziffern zur Basis b. Der<br />

Graph der ternären <strong>und</strong> der quaternären Shuffle-Permutation ist in Bild 4.8 <strong>für</strong><br />

den Fall von N = 9, b=3 <strong>und</strong> k=2 sowie N=16 , b=4 <strong>und</strong> k = 2 gezeigt.<br />

Schließlich soll noch erwähnt werden, daß <strong>für</strong> k = 2 <strong>und</strong> beliebiges b die<br />

Shuffle-, Butterfly- <strong>und</strong> Reversal-Permutationen identisch sind, da bei zweiziffrigen<br />

Zahlen das Tauschen, zyklisches Verschieben <strong>und</strong> Spiegeln der Reihenfolge<br />

der Adreßbits von I zum gleichen Resultat führt. Für k>2 sind jedoch<br />

alle Permutationen verschieden.<br />

00<br />

01<br />

02<br />

10<br />

11<br />

12<br />

20<br />

21<br />

22<br />

σ<br />

2<br />

<strong>für</strong> b=3<br />

00<br />

01<br />

02<br />

10<br />

11<br />

12<br />

20<br />

21<br />

22<br />

00<br />

01<br />

02<br />

03<br />

10<br />

11<br />

12<br />

13<br />

20<br />

21<br />

22<br />

23<br />

30<br />

31<br />

32<br />

33<br />

σ<br />

2 <strong>für</strong> b=4<br />

00<br />

01<br />

02<br />

03<br />

10<br />

11<br />

12<br />

13<br />

20<br />

21<br />

22<br />

23<br />

30<br />

31<br />

32<br />

33<br />

Bild 4.8: Der Graph der ternären <strong>und</strong> quaternären Shuffle-Permutation <strong>für</strong> N = 9, b=3 <strong>und</strong> k=2<br />

bzw. N=16 , b=4 <strong>und</strong> k = 2.<br />

Algebra der Permutationen<br />

Die zuvor definierten Funktionen können miteinander verkettet <strong>und</strong> darauf eine<br />

Algebra der Permutationen aufgebaut werden. Beispielsweise ist die Verkettung<br />

zweier Shuffle-Permutationen σ n definiert als:<br />

Def. 4.3:<br />

O<br />

2 = σ n<br />

( σ n<br />

() I ) = ( σ n<br />

⋅ σ n<br />

)() I = σ n()<br />

I<br />

155


Häufig läßt man den Operanden bei Permutationsfunktionen weg, so daß man<br />

Def 4.3 auch kürzer schreiben kann als:<br />

2<br />

Def. 4.4: σ n<br />

( σ n<br />

) = σ n<br />

⋅ σ n<br />

= σ n<br />

.<br />

Bei der Verkettung allgemeiner Permutationen π 1 , π 2 wird von links nach<br />

rechts fortschreitend die Gesamtpermutation gemäß Def 4.5 berechnet:<br />

Def. 4.5: π 2<br />

( π 1<br />

) = π 1<br />

⋅ π 2<br />

.<br />

Nach der Definition der Verkettungsoperation werden einige Sätze über Permutationen<br />

angegeben. Der erste Satz lautet[Hockney85]:<br />

Satz 4.1: = σ k π uk<br />

σ k .<br />

π ok<br />

In Satz 4.1 ist π ok<br />

eine beliebige Permutationsfunktion, die auf die k oberen<br />

Bits einer binären Adresse angewandt wird; π uk<br />

ist dieselbe Permutation angewandt<br />

auf die k unteren Bits. Nach diesem Satz ist eine Bitmanipulation der<br />

k oberen Bits identisch mit einer Manipulation der k unteren Bits, wenn diese<br />

zuvor durch k-faches, zyklisches Linksschieben nach unten <strong>und</strong> anschließendes<br />

Rechtsschieben wieder nach oben gebracht werden.<br />

Im allgemeinen sind bei dynamischen Netzen nur die unteren Bits einer Eingangs-<br />

oder Ausgangsadresse interessant, so daß der Index o bzw. u zur Unterscheidung<br />

nicht benötigt wird. Unter σ k beispielsweise versteht man im weiteren<br />

das k-fache Produkt von σ uk . (σ ok wird nicht mehr gebraucht.)<br />

Besonders interessant sind die algebraischen Zusammenhänge zwischen verschiedenen<br />

Permutationen, die man in weiteren Sätzen ausdrücken kann:<br />

– 1<br />

σ k<br />

k – 1<br />

σ k<br />

Satz 4.2: = .<br />

Dieser Satz besagt, daß (k-1)-faches Linksschieben identisch mit einmaligem<br />

Rechtsschieben ist. Der folgende Satz erlaubt, die Shuffle-Permutation durch k<br />

verkettete Butterfly-Permutationen zu ersetzen:<br />

Satz 4.3: σ k<br />

= β 1<br />

β 2<br />

…β k<br />

.<br />

Analoges gilt <strong>für</strong> die Reversal-Funktion:<br />

Satz 4.4: ρ k<br />

= σ 1<br />

σ 2<br />

…σ k<br />

.<br />

Daneben gibt es noch einige einfache Sätze über das Verhalten der Permutationen<br />

bei Spiegelungen:<br />

–<br />

156


Satz 4.5: = ,<br />

Satz 4.6: = ,<br />

sowie einige Definitionen über Spezialfälle von Permutationen, die in arithmetischen<br />

Ausdrücken eine Vereinfachung gestatten:<br />

Def. 4.6: = i, β 1<br />

= i,<br />

ρ 1<br />

= i ,<br />

wobei i die identische Abbildung ist. Neben der Verdrahtung der Schaltstufen,<br />

die durch Permutationsfunktionen ausgedrückt werden, sind noch die Netzschalter<br />

von Bedeutung.<br />

4.4 Schalter in dynamischen Netzen<br />

4.4.1 Schalteraufbau<br />

– 1<br />

β k<br />

– 1<br />

ρ k<br />

σ 1<br />

β k<br />

ρ k<br />

Die Schalter in den Stufen dynamischer Netze bestehen überlicherweise aus<br />

Schaltelementen der Art, wie sie in Bild 4.9a dargestellt sind. Sie haben jeweils<br />

zwei Ein- <strong>und</strong> Ausgänge, die entweder <strong>parallel</strong> oder gekreuzt gesetzt werden<br />

können. Aus diesem Gr<strong>und</strong>e werden die Schaltelemente auch als Kreuzschalter<br />

bezeichnet. Die Aufgabe eines Kreuzschalters ist es, ein an einem Eingang anliegendes<br />

Datenpaket zu einem der beiden Schalterausgänge zu transferieren.<br />

Für die Steuerung der Funktionen "=" <strong>und</strong> "x" wird ein Steuerbit C benötigt,<br />

dessen Wert angibt, ob der Schalter <strong>parallel</strong> (C = 0) oder gekreuzt (C = 1) gesetzt<br />

werden soll. Die Steuerinformation des Schalters wird anhand des gewählten<br />

Routing-Schemas berechnet. Bei Paketvermittlung wird die Schalterstellung<br />

in der Regel von jedem Schalter selbständig gemäß der Zieladresse des<br />

Pakets bestimmt. Bei Leitungsvermittlung existiert eine zentrale Routing-Instanz<br />

zum Verbindungsaufbau.<br />

Das Kardinalproblem bei Kreuzschaltern ist, daß es Routing-Konflikte gibt,<br />

wenn gleichzeitig an beiden Eingängen eines Schalters Daten anliegen, die zum<br />

selben Ausgang transferiert werden sollen. In diesem Fall wird bei Paketvermittlung<br />

eine Sequentialisierung des Transfers vorgenommen, indem eines der<br />

beiden Pakete am Eingang gepuffert wird, bis der gewünschte Ausgang wieder<br />

frei ist. Bei Leitungsvermittlung erkennt die zentrale Routing-Instanz den Resourcen-Konflikt<br />

<strong>und</strong> kann bei Netzen, die durch Umordnen interner Wege<br />

blockierungsfrei sind, einen alternativen Pfad durch das Netz finden.<br />

Zu beachten ist, daß Routing-Konflikte dann vermieden werden können,<br />

wenn zwei gleichzeitig an den Eingängen anliegende Datenpakete komplementäre<br />

Ausgänge <strong>für</strong> den Weitertransport benötigen. Auf dieser Tatsache beruhen<br />

auch die blockierungsfreien Routing-Algorithmen der Leitungsvermittlung.<br />

157


Eine Erweiterung des Funktionsumfangs von Kreuzschaltern ist dann gegeben,<br />

wenn neben den beiden Standardschalterstellungen "=" <strong>und</strong> "x" zusätzlich ein<br />

Broadcast vom einem der Eingänge zu beiden Ausgängen geschaltet werden<br />

kann. Dann spricht man von Kreuzschaltern mit Broadcastfunktion oder von<br />

2x2-Schaltern. Für den Broadcast muß unterschieden werden, ob die Information<br />

vom oberen oder unteren Eingang dupliziert werden soll. Zur Steuerung<br />

der vier Funktionen "=", "x", , werden zwei Steuerbits benötigt, wie dies<br />

in Bild 4.9b dargestellt ist.<br />

Steuerung<br />

C = 0<br />

Steuerung<br />

C = 1<br />

a)<br />

Eingang<br />

0<br />

1<br />

0<br />

1<br />

Ausgang<br />

0<br />

1<br />

1 0<br />

b)<br />

Steuerung<br />

C = 00<br />

0<br />

0<br />

Steuerung<br />

C = 01<br />

0<br />

Steuerung<br />

C = 10<br />

1 0 0<br />

Steuerung<br />

C = 11<br />

0<br />

1<br />

1<br />

1<br />

1<br />

0<br />

1<br />

0<br />

1 1<br />

Bild 4.9: Kreuzschalter ohne <strong>und</strong> mit Broadcast (a bzw. b).<br />

Die volle Verschaltungsmöglichkeit, die zwischen zwei Eingängen <strong>und</strong> zwei<br />

Ausgängen prinzipiell möglich ist, liegt dann vor, wenn der 2x2-Schalter in<br />

Form einer Schaltmatrix aus vier Ein/Aus-Schaltern implementiert ist (Bild<br />

4.10). In diesem Fall liegt ein Kreuzschienenverteiler der Größe 2x2 vor.<br />

Steuerung<br />

C=C C C C<br />

3 2 1 0<br />

Eingang<br />

a<br />

b<br />

C 3<br />

C 2<br />

C 1 C 0<br />

c<br />

d<br />

Ausgang<br />

Bild 4.10: Ein Kreuzschienenverteiler als 2x2-Schalter<br />

Beim Kreuzschienenverteiler kann als neue Funktionalität jeder Ein- <strong>und</strong> Ausgang<br />

von der Verdrahtung, die zwischen den Stufen besteht, abgetrennt werden,<br />

indem der dazugehörige Schalter auf "aus" gestellt wird. Da ein Schalter entweder<br />

offen oder geschlossen ist, sind vier Bit Steuerinformation nötig, um die<br />

verschiedenen Zustände zu kodieren. Zu beachten ist, daß bei Verbindungs-<br />

158


netzwerken nur 8 statt der 16 möglichen Schalterzustände sinnvoll sind, da mindestens<br />

ein Eingang Daten auf einen Ausgang übertragen muß, da diese sonst<br />

verloren gehen. Die Verschaltungsmöglichkeiten des Kreuzschienenverteilers<br />

der Größe 2x2 sind in Tabelle 4.1 angegeben. Die mit "k.V." <strong>und</strong> "n.e." angegeben<br />

Zustände brauchen nicht kodiert zu werden. Zur Reduzierung der Zahl<br />

der Steuerbits können deshalb die 8 erlaubten Zustände von Tabelle 4.1 in 3<br />

statt 4 Bits verschlüsselt werden. Bei dynamischen Netzen sind auch Schalter<br />

mit mehr als zwei Ein- <strong>und</strong> Ausgängen möglich <strong>und</strong> sinnvoll. Für den Allgemeinfall<br />

von Schaltern mit f Ein- <strong>und</strong> s Ausgängen werden Kreuzschienenverteiler<br />

verwendet, da diese jeden Eingang mit jedem Ausgang verbinden können<br />

(Bild 4.11).<br />

C 1<br />

C 0<br />

00 01 10 11<br />

0 = offen<br />

00<br />

k.V. b->d b->c b->c,d<br />

1 =<br />

geschlossen<br />

01<br />

a->d n.e. a->d; b->c n.e.<br />

k.V. = keine<br />

Verbindung<br />

n.e. = nicht<br />

erlaubt<br />

C 3<br />

C 2<br />

10<br />

a->c a->c; b->d n.e. n.e.<br />

11<br />

a->c,d<br />

n.e.<br />

n.e.<br />

n.e.<br />

Tabelle 4.1: Die Verbindungsmöglichkeiten eines 2x2 Kreuzschienenverteilers.<br />

4.4.2 Schalterfunktion<br />

Die Funktion eines Kreuzschalters nach Bild 4.9a läßt sich mathematisch beschreiben.<br />

Ist der Schalter auf <strong>parallel</strong>en Durchgang gesetzt (C = 0), gilt <strong>für</strong> die<br />

Ausgangsadresse O eines Datenpakets, das am Eingang I des Kreuzschalters<br />

anliegt:<br />

Gl. 4.11: O = o 1<br />

= I = i 1<br />

.<br />

Für den gekreuzten Durchgang (C = 1) muß man die Schalterfunktion mit Hilfe<br />

der Exchange-Permutation ε beschreiben, die folgendermaßen definiert ist:<br />

159


1<br />

. . .<br />

1<br />

2<br />

. . .<br />

2<br />

Eingänge<br />

. . . . . . . . . . . .<br />

. . .<br />

f<br />

. . .<br />

s<br />

Ausgänge<br />

Bild 4.11: fxs-Schalter aus einem Kreuzschienenverteiler.<br />

Gl. 4.12: O = o 1<br />

= ε( I = i 1<br />

) = i 1<br />

,<br />

d.h., ε komplementiert das LSB von I. Die Schalterfunktion E(i 1 ,C) wird damit:<br />

⎧<br />

i 1<br />

<strong>für</strong> C = 0<br />

⎫<br />

Gl. 4.13: Ei ( 1<br />

, C)<br />

= ⎨<br />

⎬.<br />

⎩i 1<br />

<strong>für</strong> C = 1⎭<br />

Dies läßt sich äquivalent mit Hilfe von Boolscher Algebra formulieren:<br />

Gl. 4.14: Ei ( 1<br />

, C) = i 1<br />

Exor C ,<br />

wobei Exor die Exclusiv-Oder-Operation ist.<br />

4.4.3 Schaltersteuerung<br />

Die nächste Frage, die untersucht werden soll, ist, wie das Steuerbit C berechnet<br />

werden kann. Im Falle des sog. Destination Tag Routings wird von jedem<br />

Schalter, der von einem Datenpaket durchlaufen wird, anhand der Zieladresse<br />

des Pakets das Steuerbit berechnet. Insbesondere wird vom k-ten Schalter das<br />

Bit o k der Zieladresse O ausgewertet, wobei die Schalternummer k je nach<br />

Netztopologie entweder vom Netzeingang oder vom Netzausgang aus gezählt<br />

wird.<br />

Nach diesem Routing-Schema wird <strong>für</strong> o k = 0 der obere (= gerade) Ausgang<br />

des Schalters <strong>und</strong> <strong>für</strong> o k = 1 der untere (= ungerade) <strong>für</strong> die Transferierung des<br />

Datenpakets verwendet. In Abhängigkeit von o k <strong>und</strong> unter Berücksichtigung<br />

davon, ob das Datenpaket am oberen oder unteren Eingang des Schalters anliegt<br />

160


(i 1 = 0 oder i 1 = 1), muß der Schalter entweder <strong>parallel</strong> oder gekreuzt gesetzt<br />

werden. Man kann die Funktion eines Kreuzschalters, wie in Tabelle 4.2 dargestellt,<br />

spezifizieren:<br />

i 1<br />

o k O C<br />

00 0 (gerade) 0 ('=')<br />

01 1 (ungerade) 1 ('x')<br />

10 0 (gerade) 1 ('x')<br />

11 1 (ungerade) 0 ('=')<br />

Tabelle 4.2: Funktion eines Kreuzschalters.<br />

Aus der Spezifikation der Schalterfunktion ergibt sich <strong>für</strong> das Steuerbit C folgende<br />

Gleichung:<br />

Gl. 4.15: C = i k Exor o k .<br />

Mit Gl. 4.14 folgt daraus <strong>für</strong> E( i 1 ,C):<br />

Gl. 4.16: E(i 1 ,C) = i k Exor (i k Exor o k ) = o k .<br />

D.h. E( i 1 ,C) wird zu:<br />

Gl. 4.17: E(i 1 ,C) = E(i 1 , o k ) = o k ,<br />

hängt also nicht mehr von i 1 <strong>und</strong> C ab. Dies ist ein wichtiges Resultat, weil es<br />

bedeutet, daß die Routing-Funktion eines Kreuzschalters beim Destination Tag<br />

Routing darin liegt, das LSB der Eingangsadresse I des Datenpakets durch das<br />

Bit o k der Zieladresse O auszutauschen. Die Schalterfunktion E(i 1 , o k ) eines<br />

Kreuzschalters bewirkt damit folgende Abbildung:<br />

1 k<br />

Gl. 4.18: I = i i ,..., i i ⎯⎯⎯ ⎯ →O = i i ,..., i o .<br />

4.4.4 Schaltergruppen<br />

Ei ( , o )<br />

nn−1 2 1 nn−1 2<br />

Zum Schluß sei noch der Spezialfall behandelt, daß die Schalter einer Netzstufe<br />

eine Gruppe bilden <strong>und</strong> daß alle Schalter der Gruppe gleichartig gesetzt werden.<br />

In Bild 4.12 sind 4 Schalter gezeigt, die synchron gemäß des Steuerbits C gesetzt<br />

werden. Schaltergruppen dieser Art finden in den sog. Data-Manipulator-<br />

Netzen [Feng74] Verwendung, die noch behandelt werden.<br />

Für C = 1 stehen die Schalter auf "x". Für diesen Fall gilt <strong>für</strong> die Exchange-<br />

Permutation ε, die von den Kreuzschaltern durchgeführt wird:<br />

k<br />

161


Steuerung<br />

C<br />

E<br />

i<br />

n<br />

g<br />

ä<br />

n<br />

g<br />

e<br />

A<br />

u<br />

s<br />

g<br />

ä<br />

n<br />

g<br />

e<br />

Bild 4.12: Steuerung aller Kreuzschalter einer Schaltstufe mit einem Steuerbit C.<br />

Gl. 4.19: O = o n<br />

o n – 1<br />

, …, o 1<br />

= ε( I = i n<br />

i n – 1<br />

, …,<br />

i 1<br />

) = i n<br />

i n – 1<br />

, …,<br />

i 1<br />

.<br />

Der Graph von ε ist in Bild 4.13 <strong>für</strong> n = 3 gezeigt.<br />

000<br />

001<br />

010<br />

011<br />

100<br />

101<br />

110<br />

111<br />

000<br />

001<br />

010<br />

011<br />

100<br />

101<br />

110<br />

111<br />

Bild 4.13: Die Exchange-Permutation ε <strong>für</strong> n=3.<br />

Sind in einer Netzstufe Schalter mit jeweils 2 k ( k ≥ 1 ) Ein- <strong>und</strong> Ausgängen eingebaut,<br />

die gleichzeitig entweder <strong>parallel</strong> oder gekreuzt werden müssen, erfolgt<br />

von ε κ die Komplementierung des k-ten. Bit gemäß Gl. 4.20:<br />

Gl. 4.20:<br />

O = o n<br />

o n – 1<br />

, …, o 1<br />

= ε k<br />

( I = i n<br />

i n – 1<br />

, …,<br />

i k<br />

, …,<br />

i ) = i n<br />

i n – 1<br />

, …,<br />

i k<br />

, …, i1<br />

.<br />

Die dazu gehörende Permutation ist in Bild 4.14a <strong>für</strong> n = 3, k = 2 <strong>und</strong> in Bild<br />

4.14b <strong>für</strong> k = 3 gezeigt, <strong>und</strong> ihre Schalterrealisierung ist in Bild 4.15 dargestellt.<br />

4.5 Die klassischen logN-Netze<br />

4.5.1 Einleitung<br />

Zu den in diesem Buch als "klassische logN-Netze" bezeichneten <strong>Verbindungsnetzwerke</strong><br />

gehören das Banyan-Netz [Goke73], das Omega-Netz [La-<br />

1<br />

162


000<br />

001<br />

010<br />

011<br />

100<br />

101<br />

110<br />

111<br />

000 000<br />

001 001<br />

010 010<br />

011 011<br />

100 100<br />

101 101<br />

110 110<br />

111 111<br />

a) b)<br />

000<br />

001<br />

010<br />

011<br />

100<br />

101<br />

110<br />

111<br />

Bild 4.14: Die allgemeine Exchange Permutation ε κ <strong>für</strong> k = 2, n = 3 (a) <strong>und</strong> k = 3 (b).<br />

Steuerung C<br />

Steuerung C<br />

4x4<br />

8x8<br />

4x4<br />

a)<br />

b)<br />

Bild 4.15: 4x4- <strong>und</strong> 8x8-Schalter <strong>für</strong> die Permutationen nach Bild 4.14.<br />

wrie75], das Flip-Netz [Batcher76], der Indirect Binary n-Cube [Pease77], der<br />

Generalized Cube [Siegel78] <strong>und</strong> das Baseline-Netz [Wu80a]. Diese Netze<br />

wurden in der genannten Reihenfolge in weniger als einem Jahrzehnt erf<strong>und</strong>en.<br />

Die bereits vor 1973 bekannten Clos- [Clos53] <strong>und</strong> Benes-Netze [Benes65]<br />

zählen in diesem Sinne nicht zu den logN-Netzen, weil sie aus 3 bzw. aus<br />

(2logN-1) Stufen bestehen.<br />

Die logN-Netze haben eine Reihe interessanter Eigenschaften, z.B. sind ihre<br />

Topologien bis auf eine Reversal-Stufe am Ein- oder Ausgang identisch mit den<br />

Signalflußgraphen der verschiedenen Formen der Fast Fourier Transformation<br />

(FFT). Sie bestehen weiterhin aus der kleinsten Zahl von Stufen, die <strong>für</strong> die Erreichbarkeit<br />

jedes Ausgangs von einem beliebigen Eingang notwendig ist, was<br />

bedeutet, daß man von jedem Eingang einen vollständigen Binärbaum zu allen<br />

Ausgängen konstruieren kann.<br />

Alle logN-Netze lassen sich aus den im vorigen Kapitel beschriebenen<br />

Kreuzschaltern sowie den Verdrahtungsschemata der Shuffle-, inversen Shuffle-<br />

oder Butterfly-Permutation aufbauen. Sie bestehen in jeder Stufe aus (N/2)<br />

2x2-Schaltern, bei insgesamt log 2 N Stufen. Zwar können logN-Netze jeden<br />

Eingang i mit jedem Ausgang j (i, j = 0,1,...,N-1 = 2 n -1) verbinden, jedoch nicht<br />

<strong>für</strong> alle Eingänge gleichzeitig, weshalb sie auch als nicht-blockierungsfreie<br />

Netze bezeichnet werden. Diese Terminologie stammt aus der Zeit, als <strong>Verbindungsnetzwerke</strong><br />

ausschließlich zur Leitungsvermittlung eingesetzt wurden.<br />

Heutzutage werden die logN-Netze in der Regel im Modus der Pa-<br />

163


ketvermittlung betrieben, was es erforderlich macht, daß an jedem Kreuzschaltereingang<br />

ein Paketpuffer vorhanden ist, der im Blockierungsfall Daten zwischenspeichert.<br />

Traditionell wird bei Leitungsvermittlung eine zentrale Wegewahl<br />

durchgeführt, während die modernere Paketvermittlung mit dezentralem<br />

Routing arbeitet.<br />

4.5.2 Shuffle-Exchange- <strong>und</strong> Omega-Netz<br />

Das erste Beispiel eines klassischen logN-Netzes, das hier erläutert werden soll,<br />

ist das von Duncan Lawrie 1975 erf<strong>und</strong>ene Omega-Netz [Lawrie75]. Die <strong>für</strong><br />

das Omega-Netz erforderlichen Vorarbeiten hatte H. Stone [Stone71] bereits<br />

vier Jahre früher mit dem einstufigen Shuffle-Exchange-Netz geleistet, das in<br />

Bild 4.16 dargestellt ist. Stone zeigte, daß in einem Multiprozessor, der ein solches<br />

Netz zur Kopplung der Rechenknoten hat, jeder Knoten mit jedem anderen<br />

in höchsten n = log 2 N Schritten verb<strong>und</strong>en werden kann (N = 2 n ist die Zahl der<br />

Prozessoren). Dazu müssen die Daten, die von einem Sendeprozessor zu einem<br />

Empfangsprozessor geschickt werden sollen, in einer mehrfachen Rückkopplung<br />

bis zu n-mal im Netz zirkulieren, d.h. vom Ausgang des Netzes zum Eingang<br />

zurückgespeist werden, bis sie mit Hilfe geeignet eingestellter Schalter<br />

den Zielprozessor erreichen.<br />

σ 4<br />

Eingänge<br />

Ausgänge<br />

Rückkopplung<br />

Bild 4.16: Das Shuffle-Exchange-Netzwerk nach H. Stone <strong>für</strong> N = 16 Ein-/Ausgänge.<br />

Der Vorteil der einstufigen Shuffle-Exchange-Anordnung besteht in der effizienten<br />

Ausnutzung der eingesetzten Hardware. Ihr Nachteil liegt darin, daß kein<br />

Pipelining bei der Dateneinspeisung möglich ist, da jeder Datentransport n aufeinanderfolgende<br />

Iterationen benötigt.<br />

D. Lawrie ersetzte die n-fache Zirkulation im einstufigen Shuffle-Exchange-<br />

Netz durch eine Kaskade von n hintereinander geschalteten Stufen gemäß Bild<br />

4.17 <strong>und</strong> erhielt so das Omega-Netz.<br />

Die Definition des allgemeinen Omega-Netzes aus n=log2N Stufen lautet:<br />

164


0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

MSB<br />

zuerst<br />

σ 4<br />

σ 4<br />

σ 4<br />

σ 4<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

Bild 4.17: Das Omega-Netz nach Lawrie <strong>für</strong> N = 16 Ein-/Ausgänge.<br />

Def. 4.7:<br />

Omega-Netz:<br />

Ω n<br />

=<br />

( σ n° E)n<br />

Das Omega-Netz ist auch heute noch interessant, weil es aus mehreren gleichartigen<br />

Stufen besteht, was seine Herstellung im Sinne eines modularen Aufbaus<br />

erleichtert <strong>und</strong> verbilligt. Alle anderen klassischen Netze haben eine von<br />

Stufe zu Stufe wechselnde Verdrahtung.<br />

Routing im Omega-Netz<br />

Für den Fall, daß das Omega-Netz in Paketvermittlung betrieben wird, erhält jedes<br />

Datenpaket die binäre Adresse des Zielprozessors als Routing-Information.<br />

Beim Durchgang durch einen Schalter wird entschieden, ob das Paket den<br />

Schalter am oberen oder unteren Ausgang verläßt. Beim Omega-Netz bedeutet<br />

"0" oberer, d.h. gerader Ausgang <strong>und</strong> "1" ungerader Ausgang. Die Adreßbits<br />

werden in der Reihenfolge ihrer Wertigkeit von den einzelnen Schalterstufen<br />

ausgewertet. Die erste Stufe am Eingang des Omega-Netzes wertet das höchstwertige<br />

Bit (MSB) <strong>und</strong> die letzte (n.) Stufe am Ausgang das niedrigstwertige<br />

Bit (LSB) der Zieladresse aus. In Bild 4.17 wird als Beispiel der Pfad von Eingang<br />

2 (binär 0010) zu Ausgang 13 (1101) bestimmt. Die Routing-Entscheidungen<br />

der einzelnen Schalter lassen sich zu der Sequenz "unten, unten, oben,<br />

unten" zusammenfassen.<br />

Da jeder Netzschalter bzw. jedes Datenpaket seine Routing-Entscheidung<br />

selbständig trifft, spricht man auch von der Self-Routing-Eigenschaft des Omega-Netzes.<br />

Self-Routing ist bei <strong>Verbindungsnetzwerke</strong>n außerordentlich günstig,<br />

da man ohne zentrale Instanz zur Bestimmung der Pfade zwischen Sender<br />

<strong>und</strong> Empfänger auskommt. Eine Zentralisierung würde neben zusätzlichem<br />

schaltungstechnischen Aufwand einen Engpaß bezüglich der Skalierbarkeit der<br />

Netzgröße darstellen.<br />

165


Im folgenden soll erläutert werden, warum das Omega-Netz über Self-Routing<br />

verfügt. Wenn I = (i n i n-1 ,...,i 1 ) <strong>und</strong> O = (o n o n-1 ,...,o 1 ) die vertikale Position<br />

eines Datenpakets am Ein-/ bzw. Ausgang des Netzes ist, dann wird das Paket<br />

beim Durchgang durch das Netz so nach oben oder unten bewegt, wie es der<br />

Zieladresse O entspricht.<br />

Zunächst wird durch die 1. Shuffle-Exchange-Stufe eine zyklische Linksrotation<br />

der Bits von I gemäß I->I' = (i n-1 ,...,i 1 i n ) vorgenommen. Dann wird das<br />

LSB von I' durch das höchstwertige Bit (MSB) von O im 2x2-Schalter ersetzt,<br />

da der Schalter anhand des MSB(O) entscheidet, ob das Datenpaket die Stufe<br />

am geraden (O=0) oder ungeraden Ausgang (O=1) verläßt, d.h. I->I'->I'' = (i n-<br />

1 ,...,i 1 o n ). Derselbe Vorgang wiederholt sich in der 2. Stufe <strong>für</strong> das darauffolgende<br />

Bit (LSB+1), so daß man I (2) = (i n-2 ,...,i 1 o n o n-1 ) hat.<br />

Nach Durchlaufen aller n Stufen sind in den Schaltern sämtliche Herkunftsbits<br />

von I durch Zielbits von O ersetzt. Zusätzlich haben die n Shuffle-Verdrahtungen<br />

da<strong>für</strong> gesorgt, daß das MSB von O, das in der 1. Stufe auf der LSB-Position<br />

von I eingesetzt wurde, nach der letzten Stufe bis zur MSB-Position vorgerückt<br />

ist (nach jeder Stufe um eine Position). Die niederwertigen Bits (LSB<br />

<strong>und</strong> folgende) von O durchlaufen weniger Shuffle-Stufen, da sie im Netz erst<br />

später durch einen entsprechenden Schalter in die Adresse von I eingesetzt werden.<br />

Damit werden sie auch weniger nach links verschoben - das (MSB-1)-te<br />

Bit z.B. um (n-1) Stellen - <strong>und</strong> dadurch entsprechend ihrer Wertigkeit an die<br />

richtige Position von I gerückt. Nach n Stufen ist I (n) = (o n o n-1 ,...,o 1 ) = O, womit<br />

der Zielprozessor erreicht ist.<br />

Der Self-Routing-Vorgang läßt sich <strong>für</strong> das Omega-Netz formal auch anders<br />

beschreiben, indem man die Bits von I <strong>und</strong> O zu einem gemeinsamen Bitfeld B<br />

der Länge 2n mit B = (i n i n-1 ,...,i 1 o n o n-1 ,...,o 1 ) gruppiert. Dann schiebt man ein<br />

Fenster, d.h. eine Blende der Länge n um jeweils eine Bitposition über B, beginnend<br />

mit dem MSB, so daß nacheinander die Werte (i n i n-1 ,...,i 1 ), (i n-<br />

1,...,i 1 o n ), (i n-2 ,...,i 1 o n o n-1 ),...,(i 1 o n o n-1 ,...,o 2 ), (o n o n-1 ,...,o 1 ) sichtbar werden.<br />

Die Folge der Werte bestimmt den Pfad P des Datenpakets durch das Netz. Dabei<br />

ist vorausgesetzt, daß die Ein- <strong>und</strong> Ausgänge aller Stufen fortlaufend von 0<br />

bis N-1 numeriert sind. Jede Nummer entspricht einer Adresse aus n Bits, die<br />

durch Ausblenden aus dem 2n Bits langen Feld B gewonnen wird.<br />

In Bild 4.17 ist als Beispiel der Weg von 2->13 eingezeichnet. Für das Routing<br />

bedeutet dies: B = (00101101); P = ((0010), (0101), (1011), (0110),<br />

(1101)). Das Bitfeld wird auch als Pfadidentifikator (Path Identifier) bezeichnet.<br />

Beim Vergleich der Pfadidentifikatoren, die von zwei verschiedenen Datenpaketen<br />

herrühren, kann man oft feststellen, daß es einen oder mehrere gleichlautende<br />

Sequenzen gibt, die in den Bitfeldern an derselben Position beginnen.<br />

In Bild 4.18 ist <strong>für</strong> das Beispiel eines 16x16 Omega-Netzes das 4 Bit lange Fenster<br />

der Pfadidentifikatoren zweier Datenpakete gezeigt, das nach der 3. Netzstufe<br />

eine Übereinstimmung der Bitsequenzen zeigt (Ausgang 6).<br />

Diese Fälle bedeuten eine Konfliktsituation (Kollision), weil die beiden Datenpakete<br />

beim gleichzeitigen Durchgang durch das Netz am Ausgang 6 der<br />

166


vorletzten Stufe kollidieren würden. Im Beispiel nach Bild 4.18 sollen gleichzeitig<br />

Daten von 2->13 <strong>und</strong> von 0->12 transportiert werden, was in der Doppelbelegung<br />

des Ausgangs 6 resultiert.<br />

An diesem Beispiel kann man erkennen, daß das Omega-Netz, <strong>und</strong> mit ihm<br />

alle klassischen Netze, zwar die Eigenschaft der vollständigen Erreichbarkeit<br />

haben, aber nicht <strong>für</strong> alle Eingänge gleichzeitig, d.h., sie sind nicht blockierungsfrei.<br />

Ihr Vorteil ist, daß sie aus der kleinstmöglichen Zahl von Stufen bestehen,<br />

so daß sie besonders kostengünstig sind.<br />

4.5.3 Das Flip-Netz<br />

00101101<br />

00001100<br />

Bild 4.18: Kollision zweier Pfade im Omega-Netz.<br />

Nach dem Omega-Netz wurden innerhalb kurzer Zeit weitere Netze bekannt.<br />

Beispielsweise veröffentlichte K. Batcher [Batcher76] ein Jahr nach Lawrie ein<br />

gespiegeltes Omega-Netz, das er Flip-Netz nannte. Durch die Spiegelung sind<br />

beim Flip-Netz die Shuffle- durch die Unshuffle Permutationen ersetzt <strong>und</strong> die<br />

Reihenfolge von Verdrahtungsstufe <strong>und</strong> Schalterstufe vertauscht (Bild 4.19).<br />

0010<br />

1101<br />

LSB<br />

zuerst<br />

σ 4<br />

-1 σ 4<br />

-1 σ 4<br />

-1 σ 4<br />

-1<br />

Bild 4.19: Das Flip-Netz nach Batcher <strong>für</strong> N = 16.<br />

Die Definition des allgemeinen Flip-Netzes lautet:<br />

Def. 4.8:<br />

Flip-Netz:<br />

F n<br />

Ω – 1 – 1<br />

= = ( E°σ n<br />

) n<br />

167


Eine interessante Anwendung des Flip-Netzes liegt darin, als Verdrahtung <strong>für</strong><br />

einen dedizierten FFT-Rechner zu fungieren, da die Flip-Netztopologie mit<br />

dem Signalflußgraphen der Pease FFT [Pease65] bis auf eine Reversal-Permutation<br />

in der Eingangsstufe identisch ist (Bild 4.20). Für diese spezielle Anwendung<br />

wäre es allerdings erforderlich, daß die Schalter des Flip-Netzes<br />

durch Addier-/Multiplizierwerke ersetzt werden, die die Elementaroperationen<br />

der FFT ausführen können, was bedeutet, daß das Netz seine Schalterfunktion<br />

verliert <strong>und</strong> zu einer statischen Topologie aus Rechenwerken wird.<br />

Es ist kein Zufall, daß die FFT <strong>und</strong> die logN-Netze ähnlich aufgebaut sind.<br />

Über den genauen Zusammenhang zwischen FFT-Signalflußgraphen <strong>und</strong><br />

<strong>Verbindungsnetzwerke</strong>n kann man sich in [Parker80] näher informieren.<br />

Weiterhin eignet sich das Flip-Netz aufgr<strong>und</strong> seiner Topologie zur <strong>parallel</strong>en<br />

Matrixtransposition <strong>und</strong> anderen Matrizenoperationen. In Bild 4.21 ist die<br />

Transposition einer [4,4]-Matrix mit Hilfe einer inversen Perfect Shuffle-Permutation<br />

exemplarisch dargestellt. Erstmalig verwendet wurde das Flip-Netzwerk<br />

im STARAN-Rechner [Batcher76, Batcher77].<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

4<br />

4<br />

4<br />

0<br />

4<br />

6<br />

7<br />

Reversal Unshuffle Unshuffle Unshuffle Unshuffle<br />

a<br />

b<br />

k<br />

c<br />

d<br />

0<br />

0<br />

2<br />

2<br />

4<br />

4<br />

6<br />

c = a + bw k<br />

d = a - bw k<br />

w = e 2πi/16<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

Bild 4.20: Signalflußgraph der Pease FFT <strong>für</strong> 16 Punkte.<br />

Routing im Flip-Netz<br />

Entsprechend der zum Omega-Netz gespiegelten Topologie erfolgt das Routing<br />

beim Flip-Netz so, daß in der 1. Stufe das LSB der Zieladresse ausgewertet wird<br />

<strong>und</strong> in der letzten Stufe das MSB. Die Art der Auswertung ist identisch zum<br />

Omega-Netz, d.h. <strong>für</strong> i j = 0 wird der gerade (obere) <strong>und</strong> <strong>für</strong> i j = 1 der ungerade<br />

Ausgang des Kreuzschalters der Stufe j gewählt.<br />

168


1,1<br />

2,1<br />

3,1<br />

4,1<br />

1,2<br />

2,2<br />

3,2<br />

4,2<br />

1,3<br />

2,3<br />

3,3<br />

4,3<br />

1,4<br />

2,4<br />

3,4<br />

4,4<br />

1,1<br />

3,1<br />

1,2<br />

3,2<br />

1,3<br />

3,3<br />

1,4<br />

3,4<br />

2,1<br />

4,1<br />

2,2<br />

4,2<br />

2,3<br />

4,3<br />

2,4<br />

4,4<br />

1,1<br />

1,2<br />

1,3<br />

1,4<br />

2,1<br />

2,2<br />

2,3<br />

2,4<br />

3,1<br />

3,2<br />

3,3<br />

3,4<br />

4,1<br />

4,2<br />

4,3<br />

4,4<br />

Bild 4.21: Transposition einer [4,4]-Matrix mit Hilfe von Unshuffle-Permutationen.<br />

4.5.4 Indirect Binary n-Cube Netz<br />

Wiederum ein Jahr später (1977) propagierte M. Pease [Pease77] den Indirect<br />

Binary n-Cube (Bild 4.22), der von der statischen Hypercube-Topologie abgeleitet<br />

wurde. Der Vorteil des Indirect Binary n-Cubes ist, daß er, im Gegensatz<br />

zum Hypercube, bei N=2 n Prozessoren mit nur einer statt der üblichen n<br />

Netzwerkschnittstellen (Ports) pro Prozessor auskommt. Dieser Einsparungseffekt<br />

wurde dadurch erzielt, daß n Schritte durch das Netz nötig sind, um zu einem<br />

anderen Prozessor zu gelangen, während im Hypercube-Array n Nachbarn<br />

eines Prozessors in einem Schritt erreichbar sind.<br />

0010<br />

1101<br />

LSB<br />

zuerst<br />

β 2<br />

β 3<br />

β 4 σ 4<br />

-1<br />

Bild 4.22: Der Indirect Binary n-Cube (N=16).<br />

Die Definition des allgemeinem Indirect Binary n-Cube lautet:<br />

Def. 4.9:<br />

Indirect Binary n-Cube:<br />

– 1<br />

IC n<br />

= Eβ 2<br />

Eβ 3<br />

⋅… ⋅Eβ n<br />

Eσ n<br />

169


Routing im Indirect Binary n-Cube<br />

In Bild 4.22 ist als Routing-Beispiel der Pfad von Eingang 0010 zu Ausgang<br />

1101 eingezeichnet, der so bestimmt wird, daß in der 1. Stufe das LSB der Zieladresse<br />

O ausgewertet wird, in der 2. Stufe das LSB+1 usw. Wiederum bedeutet<br />

"0" oberer, d.h. gerader <strong>und</strong> "1" unterer, d.h. ungerader Schalterausgang.<br />

Das Netz nach Bild 4.22 arbeitet damit wie in Bild 4.23 dargestellt. Dieses<br />

Ei (<br />

iiii<br />

1, o1)<br />

β<br />

4321⎯⎯⎯⎯→iiio<br />

1⎯⎯2<br />

→<br />

Ei ( o<br />

iioi<br />

2, 2)<br />

β<br />

43 12⎯⎯⎯⎯→iioo<br />

3<br />

43 1 2⎯⎯→<br />

Ei ( o<br />

i4o2oi<br />

3, 3)<br />

β<br />

1 3 ⎯⎯⎯⎯→i4o2oo<br />

4<br />

1 3 ⎯⎯→<br />

−<br />

4 4 4 1<br />

Ei ( , o)<br />

σ<br />

oooi 3 2 1 4 ⎯⎯⎯⎯→oooo<br />

3 2 1 4 ⎯⎯⎯<br />

→<br />

oooo 4 3 2 1 = O<br />

Bild 4.23: Funktion eines 16x16 Indirect Binary n-Cube.<br />

Schema läßt sich auf Netze beliebiger Zweierpotenzen erweitern, wie Bild 4.24<br />

zeigt<br />

Ei (<br />

1, o1)<br />

β2<br />

I = i i ,..., i i ⎯⎯⎯⎯→i i ,..., i o ⎯ ⎯→<br />

nn−1 21 nn−1 2 1<br />

Ei (<br />

2, o2)<br />

nn−1,..., oi<br />

1 2<br />

⎯⎯⎯ ⎯→<br />

...<br />

ii<br />

Ei (<br />

n−1, on−1)<br />

βn<br />

io ,..., ooi ⎯⎯⎯⎯⎯⎯→io ,..., ooo ⎯⎯→<br />

n n−2 2 1 n−1 n n−2 2 1 n−1<br />

o<br />

Ei (<br />

n, on) σ<br />

n<br />

n−1on−2,..., o2o1in<br />

⎯ →on− 1on−2,...,<br />

o2o1on<br />

oo o ,..., oo = O<br />

n n−1 n−2 2 1<br />

⎯⎯ ⎯ ⎯⎯⎯<br />

→<br />

Bild 4.24: Funktion eines Indirect Binary n-Cube mit 2 n Ein- <strong>und</strong> Ausgängen.<br />

−1<br />

Man sieht anhand der Darstellung von Bild 4.24, daß in der letzten Stufe anstelle<br />

einer nochmaligen β n -Verdrahtung eine Unshuffle-Permutation σ n<br />

-1<br />

durchgeführt wird. Die Aufgabe von σ n -1 liegt u.a. darin, da<strong>für</strong> zu sorgen, daß<br />

bei <strong>parallel</strong>em Durchgang der Kreuzschalter ein beliebiger Eingangsschalter<br />

der Adresse i (i = 0,1,..,n-1) mit dem Ausgangsschalter derselben Adresse<br />

verb<strong>und</strong>en ist. Ein zurückgesetzter Indirect Binary n-Cube, bei dem alle Schalter<br />

auf "=" stehen, verbindet deshalb ebenso wie ein Omega- oder ein Flip-Netz,<br />

alle Eingänge direkt mit den korrespondierenden Ausgängen derselben Adresse.<br />

170


4.5.5 Vergleich Indirect Binary n-Cube <strong>und</strong> Hypercube<br />

Es besteht bezüglich der Wegewahl ein Isomorphismus zwischen dem Indirect<br />

Binary n-Cube, der ein dynamisches Netz darstellt, mit dem Hypercube, einer<br />

statischen Netztopologie. Der Zusammenhang zwischen beiden Netzen liegt<br />

darin, daß die Schalter im Indirect Binary n-Cube mit ihrer Exchange-Funktion,<br />

ähnlich wie die Knoten im Hypercube mit ihrer Routing-Funktion, jedes Bit i k<br />

einer Adresse I = (i n i n-1 ,...,i k ,...,i 1 ) durch das binäre Komplement NOT(i k ) ersetzen<br />

können, indem der Schalter, an dem die Adresse I anliegt, auf "x" gestellt<br />

wird.<br />

So kann beispielsweise der Eingang (0000) eines Indirect Binary n-Cubes die<br />

vier Ausgänge (0001)=1, (0010)=2, (0100=4, (1000)=8 durch Kreuzen eines<br />

Schalters in der 1., 2., 3. oder 4. Stufe erreichen (Bild 4.25a). Genauso kommt<br />

man von den Eingängen 1, 2, 4 <strong>und</strong> 8 des Indirect Binary n-Cubes zum Ausgang<br />

0, indem Schalter der 1., 2., 3. oder 4 Stufe auf "x" gestellt werden (Bild 4.25b).<br />

Analog kann man im 4-dimensionalen Hypercube die vier Nachbarn eines<br />

Prozessors I = i 3 i 2 i 1 i 0 durch Komplementieren der Adreßbits i k (k=0,..,3) erreichen.<br />

Dieser Sachverhalt ist in Bild 4.26 gezeigt. Die Analogie zwischen Hyperkuben<br />

<strong>und</strong> Indirect Binary n-Cuben gilt <strong>für</strong> Netze beliebiger Größe <strong>und</strong> läßt<br />

sich im Prinzip auch auf die anderen logN-Netze übertragen, da sie, wie noch<br />

gezeigt wird, zueinander äquivalent sind.<br />

4.5.6 Alternative Numerierung der Verdrahtung<br />

Die bislang verwendete, von oben nach unten fortlaufende Numerierung zur<br />

Kennzeichnung der Ein- <strong>und</strong> Ausgänge der Netze ist nicht die einzig mögliche<br />

Numerierungsweise. Bild 4.27 zeigt einen Indirect Binary n-Cube, bei dem die<br />

Leitungen so numeriert wurden, daß der Permutationseffekt der Verdrahtung<br />

zwischen den Stufen verdeckt wird. Dazu wird die Adresse einer Leitung eines<br />

Schalterausgangs auf den Eingang des Nachfolgeschalters der nächsten Stufe<br />

übertragen. Zusätzlich wird, wie bereits beim normalen Numerierungschema<br />

üblich, die Adresse am Eingang eines Schalters zum Ausgang desselben Schalters<br />

durchgeschleift, so als ob der Schalter auf "=" stünde. Das daraus resultierende<br />

Numerierungsschema ist in Bild 4.27 <strong>für</strong> N = 8 gezeigt.<br />

Am Ende der letzten Stufe in Bild 4.27 sind die Adressen deshalb wieder gemäß<br />

0, 1, 2,...,N-1 geordnet, weil die Eingangsadressen sortiert sind. Dies wird auf<br />

die Ausgänge übertragen, wenn alle Schalter <strong>parallel</strong> gesetzt sind.<br />

Im alternativen Numerierungsschema läßt sich die Funktion des Indirect Binary<br />

n-Cube leichter graphisch darstellen, wie man anhand der Beispiele von Bild<br />

4.28 sehen kann.<br />

Im Fall a) in Bild 4.28 bleiben die Adreßbits von I unverändert, während in<br />

den Fällen b) <strong>und</strong> c) das LSB bzw. MSB von I komplementiert wird. Entsprechend<br />

sind die am Netz anliegenden Datenpakete gemäß (ab), (cd) bzw.<br />

(ac) <strong>und</strong> (bd) vertauscht.<br />

Anwendungen der Topologie des Indirect Binary n-Cube liegen, ähnlich wie<br />

beim Flip-Netz, in der festverdrahteten Ausführung der Fast Fourier-Transfor-<br />

171


0<br />

1. Stufe 2. Stufe 3. Stufe 4. Stufe<br />

0 0 0 0<br />

1 2 4<br />

8<br />

0<br />

1<br />

2<br />

4<br />

a)<br />

8<br />

0<br />

1<br />

2<br />

4<br />

0 0 0 0<br />

1 2 4<br />

8<br />

0<br />

b)<br />

8<br />

β<br />

2<br />

β<br />

3<br />

β<br />

4<br />

σ<br />

4<br />

-1<br />

Bild 4.25: Verbinden von Eingang 0 mit Ausgängen 1,2,4 oder 8 (a) <strong>und</strong> umgekehrt (b).<br />

0110 0111<br />

1110 1111<br />

0100<br />

0101<br />

1100<br />

1101<br />

0010 0011<br />

1010 1011<br />

0000 0001<br />

1000<br />

1001<br />

Bild 4.26: Adressierung im Hypercube.<br />

mation, da die Netztopologie bis auf eine Reversal-Permutation am Anfang mit<br />

dem Signalflußgraphen der Cooley-Tukey-Variante der FFT identisch ist (Bild<br />

4.29).<br />

Analog zum Flip-Netz müssen auch hier die Schalter durch Addier-/Multiplizierwerke<br />

ersetzt <strong>und</strong> die Topologie als statisches Netz aufgefaßt werden, um<br />

einen FFT-Prozessor zu erhalten. Weiterhin kommen <strong>für</strong> den Indirect Binary n-<br />

172


0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

0<br />

2<br />

1<br />

3<br />

4<br />

6<br />

5<br />

7<br />

0<br />

2<br />

1<br />

3<br />

4<br />

6<br />

5<br />

7<br />

0<br />

4<br />

1<br />

5<br />

2<br />

6<br />

3<br />

7<br />

0<br />

4<br />

1<br />

5<br />

2<br />

6<br />

3<br />

7<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

Bild 4.27: Alternatives Numerierungsschema im Indirect Binary n-Cube.<br />

Eingang<br />

Pakete<br />

a 0<br />

Ausgang<br />

Pakete<br />

0 a<br />

Eingang<br />

Pakete<br />

a 0<br />

Ausgang<br />

Pakete<br />

0 a<br />

Ausgang<br />

Pakete<br />

0 a<br />

a)<br />

b<br />

c<br />

1<br />

2<br />

1<br />

2<br />

b<br />

c<br />

c<br />

b<br />

2<br />

1<br />

2<br />

1<br />

c<br />

b<br />

1<br />

2<br />

b<br />

c<br />

d<br />

3<br />

3<br />

d<br />

d<br />

3<br />

3<br />

d<br />

3<br />

d<br />

b)<br />

a<br />

b<br />

c<br />

d<br />

0<br />

1<br />

2<br />

3<br />

0<br />

1<br />

2<br />

3<br />

b<br />

a<br />

d<br />

c<br />

b<br />

d<br />

a<br />

c<br />

0<br />

2<br />

1<br />

3<br />

0<br />

2<br />

1<br />

3<br />

b<br />

d<br />

a<br />

c<br />

0<br />

1<br />

2<br />

3<br />

b<br />

a<br />

d<br />

c<br />

a<br />

0<br />

0<br />

a<br />

a<br />

0<br />

0<br />

c<br />

0<br />

c<br />

c)<br />

b<br />

c<br />

1<br />

2<br />

1<br />

2<br />

b<br />

c<br />

c<br />

b<br />

2<br />

1<br />

2<br />

1<br />

a<br />

d<br />

1<br />

2<br />

d<br />

a<br />

d<br />

3<br />

3<br />

d<br />

d<br />

3<br />

3<br />

b<br />

3<br />

b<br />

β 2<br />

σ 2<br />

-1<br />

Bild 4.28: Beispiele eines Indirect Binary n-Cube bei alternativer Numerierung.<br />

Cube all diejenigen Anwendungen bevorzugt in Frage, bei denen sich der<br />

Graph der Anwendung in eine Hypercube-Topologie einbetten läßt, wie es z.B.<br />

<strong>für</strong> Gitter oder Bäume der Fall ist, da sich dann ein vereinfachtes Routing-Schema<br />

ergibt.<br />

4.5.7 Generalized Cube<br />

Wenn man die Topologie des Indirect Binary n-Cube spiegelt, erhält man den<br />

Generalized Cube (Bild 4.30), der von Siegel <strong>und</strong> Smith im Jahre 1978 vorgeschlagen<br />

wurde [Siegel78]. Die Definition des Generalized Cube lautet:<br />

– 1<br />

IC n<br />

Def. 4.10: Generalized Cube: = σ n<br />

Eβ n<br />

Eβ n – 1<br />

⋅… ⋅Eβ 2<br />

E .<br />

173


0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

0<br />

2<br />

4<br />

6<br />

0<br />

2<br />

4<br />

6<br />

0<br />

4<br />

0<br />

4<br />

0<br />

4<br />

0<br />

4<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

Bild 4.29: Signalflußgraph der Cooley-Tukey FFT (N = 16).<br />

C 1 C 0 C 1 C0 C 1 C0 C 1 C 0<br />

0010<br />

1101<br />

σ<br />

MSB<br />

β<br />

4 zuerst 4<br />

β 3<br />

β 2<br />

Bild 4.30: Der Generalized Cube <strong>für</strong> 16 Ein-/Ausgänge.<br />

Im Generalized Cube sind <strong>für</strong> die Schalter alle 4 Schaltmöglichkeiten erlaubt,<br />

die in zwei Bits C 0 C 1 codiert werden. Diese Möglichkeiten sind, neben <strong>parallel</strong>em<br />

<strong>und</strong> gekreuztem Durchgang, der untere <strong>und</strong> obere Broadcast, bei dem<br />

einer der beiden Eingänge auf die Ausgänge dupliziert wird. Aufgr<strong>und</strong> dieser<br />

erweiterten Möglichkeiten kam auch die Namensgebung Generalized Cube zustande.<br />

Selbstverständlich ist auch bei allen anderen logN-Netzen aufgr<strong>und</strong> ihrer<br />

Äquivalenz ein Broadcast durch Einbau der erweiterten Schalterfunktionalität<br />

erreichbar. Für den Fall des Omega-Netzes wurde die erweiterte<br />

Schalterfunktionalität von D. Lawrie erstmalig eingeführt.<br />

174


Routing im Generalized Cube<br />

Die mathematische Beschreibung des Routing-Vorgangs ist <strong>für</strong> das 16x16 Netz<br />

in Bild 4.31 dargestellt. Sie kann auf beliebiges N erweitert werden.<br />

σ4 Ei ( 4, o4)<br />

iiii 4321⎯<br />

⎯→iiii<br />

3214⎯⎯⎯ ⎯→<br />

β4 Ei ( 3, o3)<br />

ii 321 io4⎯⎯→o4213<br />

i ii ⎯⎯⎯⎯→<br />

β3 Ei ( 2, o2)<br />

oiio 421 3⎯⎯→ooii<br />

4 312⎯⎯⎯ ⎯→<br />

β2 Ei ( 1, o1)<br />

ooio 4 31 2⎯⎯→oooi<br />

4 3 2 1⎯⎯⎯⎯→<br />

oooo 4 3 2 1=<br />

O<br />

Bild 4.31: Routing im 16x16 Generalized Cube.<br />

Beim Generalized Cube wird, da er durch Spiegelung aus dem Indirect Binary<br />

n-Cube entstanden ist, in der 1. Stufe das MSB der Zieladresse ausgewertet.<br />

Zwar ist die Butterfly-Permutation invariant gegenüber Spiegelungen, aber die<br />

Reihenfolge der Stufen wird durch die Spiegelung umgedreht, so daß sich auch<br />

beim Routing die Sequenz der relevanten Adreßbits umkehrt. Entsprechend<br />

lauten die Routing-Entscheidungen <strong>für</strong> das in Bild 4.30 eingezeichnete Routing-Beispiel:<br />

"Unten, unten, oben, unten".<br />

4.5.8 Baseline-Netz<br />

Zwei Jahre nach der Publikation des Generalized Cubes wurde das Baseline-<br />

Netz durch C. Wu <strong>und</strong> T. Feng bekannt gemacht [Wu80a], das aus theoretischen<br />

<strong>und</strong> praktischen Gründen besonders interessant ist, da es rekursiv definiert<br />

werden kann <strong>und</strong> über ein besonders anschauliches Routing verfügt. Rekursive<br />

Konstruktion heißt in diesem Fall, daß ein Baseline-Netz der Größe<br />

NxN aus zwei halb so großen Baseline-Netzen der Größe (N/2) x (N/2) zusammengesetzt<br />

werden kann <strong>und</strong> diese wiederum aus vier Netzen der Größe (N/4)<br />

x (N/4) usw., wobei die Teilnetze jeweils über eine Unshuffle-Verdrahtung verb<strong>und</strong>en<br />

sind. Diese Regel gilt solange, bis die Teilnetze die Größe 2x2 erreicht<br />

haben, also einzelne Kreuzschalter darstellen. Zur Veranschaulichung der rekursiven<br />

Konstruktionsweise ist der 1. Rekursionsschritt <strong>für</strong> ein Baseline-Netz<br />

der Größe NxN in Bild 4.32 dargestellt.<br />

Die sich aus der Anwendung obiger Konstruktionsregel ergebende Topologie<br />

ist in Bild 4.33 <strong>für</strong> N = 16 zusammen mit einem Routing-Beispiel gezeigt. Die<br />

Definition des allgemeinen Baseline-Netzes lautet:<br />

– 1 – 1<br />

– 1<br />

Def. 4.11: Baseline-Netz: BL n = Eσ n Eσn – 1 ⋅ … ⋅ Eσ 2 E .<br />

175


Eingänge<br />

0<br />

1<br />

2<br />

3<br />

N-2<br />

N-1<br />

.<br />

.<br />

.<br />

N/2 x N/2<br />

Baseline<br />

Netz<br />

N/2 x N/2<br />

Baseline<br />

Netz<br />

Ausgänge<br />

0<br />

1<br />

.<br />

.<br />

.<br />

N/2-1<br />

N/2<br />

N/2+1<br />

.<br />

.<br />

.<br />

N-1<br />

Bild 4.32: Rekursive Konstruktion eines Baseline-Netzes.<br />

Der rekursive Aufbau bewirkt eine Selbstähnlichkeit der Topologie, wie man<br />

sie von Fraktalen her kennt <strong>und</strong> die durch die rekursive Konstruktion zustande<br />

kommt. Daß es sich beim Baseline-Netz trotzdem um kein Fraktal handelt, liegt<br />

daran, daß die Konstruktionsregel bei 2x2-Schaltern als den kleinsten Schaltelementen<br />

abbrechen muß, so daß die Strukturen nicht beliebig verfeinert werden<br />

können.<br />

0010<br />

1101<br />

MSB<br />

zuerst<br />

σ-1<br />

σ-1 σ-1<br />

4 3 2<br />

Bild 4.33: Das Baseline-Netzwerk nach Wu <strong>und</strong> Feng.<br />

Die Rekursion hat weiterhin zur Folge, daß das Baseline-Netz aus voneinander<br />

unabhängigen Teilnetzen besteht, die wiederum aus verschiedenen Subnetzen<br />

entstanden sind. Aufgr<strong>und</strong> der Getrenntheit der Teilnetze existiert kein Pfad<br />

<strong>und</strong> damit auch keine Routing-Möglichkeit zwischen den Subnetzen derselben<br />

Rekursionsstufe. Dadurch ist das Routing im Baseline-Netz besonders einfach<br />

<strong>und</strong> anschaulich:<br />

In der ersten Stufe wird anhand der Zieladresse darüber entschieden, ob das<br />

Datenpaket in die obere oder untere Hälfte der Ausgänge transportiert werden<br />

soll. In der zweiten Stufe wird festgelegt, in welches Viertel das Paket wandert.<br />

176


In der 3. Stufe wird das Ziel bis auf Achtel genau plaziert, usw. Nach log 2 N<br />

Schritten ist auf diese Weise einer von N=2 n Ausgängen ausgewählt.<br />

Die beschriebene Intervallschachtelung arbeitet nach der Methode der sukzessiven<br />

Approximation, die in vielen Bereichen der Technik angewandt wird.<br />

Das der sukzessiven Approximation zugr<strong>und</strong>eliegende Prinzip ist "divide et impera"<br />

bzw. "Teile <strong>und</strong> Herrsche", das besagt, daß man ein komplexes Problem<br />

solange zu teilen hat, bis es aus genügend kleinen Elementen besteht, so daß seine<br />

Lösung trivial wird. Im Falle des Baseline-Netzes wird der Adreßbereich der<br />

Ausgänge solange durch Halbieren verkleinert, bis nach log 2 N Schritten ein<br />

einziger Ausgang, nämlich der gewünschte, übrigbleibt.<br />

Die Topologie des Baseline-Netzes hat einen technischen Vorteil, der die<br />

Realisierung großer Netze vereinfacht. Bei großen Netzen ist die Vermaschung<br />

der Verdrahtung zwischen den Stufen ein Problem, da die Verdrahtung i.a. über<br />

mehrere Platinen oder sogar mehrere Gehäuse hinweg durchgeführt werden<br />

muß, was entsprechende Kabellängen <strong>und</strong> Steckverbinder erfordert. Beim Baseline-Netz<br />

hingegen halbieren sich die Kabellängen von Stufe zu Stufe, da das<br />

Netz aus immer kleineren Teilnetzen besteht, zwischen denen keine Leitung<br />

verlegt werden muß. Deshalb verläuft die Verdrahtung auch bei großen Baseline-Netzen<br />

bereits nach wenigen Stufen lokal, d.h. innerhalb derselben Platine<br />

oder desselben Moduls, <strong>und</strong> die Steckverbinder zwischen den Moduln können<br />

entfallen. Das Baseline-Netz hat jedoch trotz seiner Vorzüge in der Praxis bislang<br />

keine große Anwendung erfahren.<br />

Routing im Baseline-Netz<br />

Wie bereits erläutert, wird beim Routing in jeder Stufe des Baseline-Netzes ein<br />

Bit der Zieladresse ausgewertet, angefangen vom MSB in der 1. Stufe bis zum<br />

LSB in der letzten Stufe. Die Funktionsweise <strong>für</strong> das Beispiel nach Bild 4.33 ist<br />

in Bild 4.34 angegeben. Wiederum kann das Routing-Schema auf beliebige<br />

Netzgrößen erweitert werden.<br />

−<br />

1 4 4 1<br />

4321 432 4<br />

−<br />

2 3 3 1<br />

4432 443 3<br />

−<br />

3 2 2 1<br />

4 3 4 3 4 3 4 2<br />

Ei ( , o)<br />

4 3 2 4 4 3 2 1<br />

iiii<br />

oiii<br />

ooii<br />

Bild 4.34: Funktion des Baseline-Netzes (N = 4).<br />

Ei ( , o)<br />

σ<br />

⎯⎯⎯⎯→iiio<br />

⎯⎯⎯<br />

→<br />

Ei ( , o)<br />

σ<br />

⎯⎯⎯⎯→oiio<br />

⎯⎯⎯<br />

→<br />

Ei ( , o)<br />

σ<br />

⎯⎯⎯⎯→ooio<br />

⎯⎯⎯<br />

→<br />

4 1<br />

oooi ⎯⎯⎯⎯ →oooo = O<br />

177


4.5.9 Inverses Baseline-Netz<br />

Genau wie es zum Omega-Netz <strong>und</strong> zum Indirect Binary n-Cube eine gespiegelte<br />

Topologie als Gegenstück gibt, kann auch ein inverses Baseline-Netz definiert<br />

werden. Seine Definition lautet:<br />

– 1<br />

BL n<br />

Def. 4.12: inverses Baseline-Netz: = Eσ 2<br />

Eσ 3<br />

⋅ … ⋅ Eσ n<br />

E .<br />

Routing im inversen Baseline-Netz<br />

Im gespiegelten Baseline-Netz wird bei der Wegewahl in der 1. Stufe das MSB<br />

ausgewertet, da sich durch die Spiegelung sowohl die Topologie der Verdrahtung<br />

als auch die Reihenfolge der Stufen umgekehrt, so daß sich beide Transformationen<br />

wieder aufheben. Das gespiegelte Baseline-Netz stellt bzgl. der<br />

Routing-Reihenfolge der Adreßbits ein Ausnahme dar, da gespiegelte <strong>und</strong> nicht<br />

gespiegelte Netztopologie gleich behandelt werden. Die Funktion des inversen<br />

Baseline-Netzes ist <strong>für</strong> N =16 in Bild 4.35 angegeben. Sie gilt analog <strong>für</strong> N>16.<br />

Die Topologie des Netzes ist in Bild 4.36 zu sehen.<br />

iiii<br />

iioi<br />

iooi<br />

Ei (<br />

1, o4)<br />

σ2<br />

⎯⎯⎯⎯→iiio<br />

⎯ ⎯→<br />

4321 432 4<br />

Ei (<br />

2, o3)<br />

σ3<br />

⎯⎯⎯ ⎯→iioo<br />

⎯ ⎯→<br />

43 42 43 4 3<br />

Ei (<br />

3, o2)<br />

σ4<br />

⎯⎯⎯ ⎯→iooo<br />

⎯ ⎯→<br />

4 4 3 3 4 4 3 2<br />

Ei (<br />

4, o1)<br />

4 3 2 4 4 3 2 1<br />

oooi ⎯⎯⎯⎯ →oooo = O<br />

Bild 4.35: Funktion des inversen Baseline-Netzes (N = 16).<br />

0010<br />

1101<br />

MSB<br />

zuerst<br />

σ 2<br />

σ 3<br />

σ 4<br />

Bild 4.36: Inverses Baseline-Netz.<br />

178


4.5.10 Banyan-Butterfly<br />

Das erste "klassische" logN-Netz war nicht das Omega-Netz aus dem Jahre<br />

1975, sondern das Banyan-Netz von 1973, das von L. R. Goke <strong>und</strong> G. J. Lipovski<br />

[Goke73] beschrieben wurde. Deren Veröffentlichung hat eine besondere<br />

Bedeutung, weil darin nicht nur eine spezielle Topologie, sondern eine ganze<br />

Klasse von Netzen beschrieben wird, die die bereits vorgestellten logN-Netze<br />

als Untermenge enthält. Der Name "Banyan" wurde nach einem ostindischen<br />

Feigenbaum gewählt, dessen Äste waagrecht <strong>und</strong> diagonal verlaufen <strong>und</strong> der an<br />

die Verdrahtung von <strong>Verbindungsnetzwerke</strong>n erinnern soll. Zur Klasse der Banyan-Netze<br />

zählen nach der Definition von Goke <strong>und</strong> Lipovski alle<br />

Verbindungsstrukturen, bei denen es genau einen Weg von jedem Eingang zu<br />

jedem Ausgang gibt. Dazu gehören neben den bereits vorgestellten logN-Netzen<br />

auch Kreuzschienenverteiler, Busse <strong>und</strong> Baumtopologien.<br />

Die Klasse der Banyan-Netze ist über die Eigenschaft der Pfadeindeutigkeit<br />

<strong>und</strong> nicht über eine bestimmte Topologie definiert. Entsprechend umfaßt sie<br />

Netze ganz unterschiedlicher Struktur. Jedoch gibt die Definition keine Anleitung,<br />

wie man diejenigen Topologien finden kann, die die Eigenschaft der Pfadeindeutigkeit<br />

erfüllen.<br />

Bevor in einem späteren Kapitel weitere Eigenschaften der Banyan-Netze beschrieben<br />

werden, soll hier ein spezieller Vertreter der Banyan-Kategorie vorgestellt<br />

werden, der häufig als Synonym <strong>für</strong> diese Klasse gilt <strong>und</strong> der zu den<br />

"klassischen" logN-Netzen zu rechnen ist. Wegen der Butterfly-Verdrahtungen,<br />

aus denen dieses Netz besteht, wird es auch als Butterfly-Banyan oder<br />

kurz als Butterfly bezeichnet. Der Graph dieses Netzes ist <strong>für</strong> N = 16 in Bild<br />

4.37 dargestellt.<br />

0010<br />

1101<br />

o 2<br />

zuerst<br />

β<br />

2<br />

β<br />

3<br />

β<br />

4<br />

Bild 4.37: Der Butterfly-Banyan (N = 16).<br />

Man sieht, daß Butterfly- <strong>und</strong> Indirect Binary n-Cube-Topologie bis auf eine<br />

Unshuffle-Stufe am Ausgang identisch sind. Der Butterfly hat jedoch aufgr<strong>und</strong><br />

seiner fehlenden Unshuffle-Stufe ebenso wie das Baseline-Netz nicht die Ei-<br />

179


genschaft der anderen klassischen logN-Netze, daß jeder Eingang i (i =<br />

0,1,2,...,N-1) mit dem korrespondierenden Ausgang i verb<strong>und</strong>en ist, wenn alle<br />

Schalter auf <strong>parallel</strong>en Durchgang gesetzt sind. Die Definition eines allgemeinen<br />

Butterfly-Netzes lautet:<br />

Def. 4.13: Butterfly-Netz: BF n<br />

= Eβ 2<br />

Eβ 3<br />

⋅… ⋅Eβ n<br />

E .<br />

Butterfly-Netze sind ein Spezialfall der sog. SW-Banyans, die in einem späteren<br />

Kapitel ausführlich erläutert werden.<br />

Routing im Butterfly-Netz<br />

Die Wegewahl im Butterfly-Netz ist untypisch <strong>für</strong> die Klasse der logN-Netze.<br />

Im Butterfly-Netz mit 16 Ein- <strong>und</strong> Ausgängen, wie in Bild 4.37 beispielsweise,<br />

wird abweichend zu den bisherigen Netzen in der 1. Stufe das Bit o 2 mit der<br />

Wertigkeit 2 1 der Ausgangssadresse O, d.h. das (LSB+1)-te Bit <strong>für</strong> das Routing<br />

ausgewertet. In den darauffolgenden Stufen werden nacheinander die Bits o 3 ,<br />

o 4 , o 1 , <strong>für</strong> die Wegewahl herangezogen. Dieses Netz funktioniert so, wie es in<br />

Bild 4.38 dargestellt ist.<br />

Ei o<br />

nn−1 2 1 nn−1 2 2<br />

(<br />

1, 2)<br />

β2<br />

ii ,..., ii⎯⎯⎯⎯→ii ,..., io ⎯⎯→<br />

Ei (<br />

2, o3)<br />

β3<br />

ii ,..., oi ⎯⎯⎯ ⎯→ii ,..., oo ⎯⎯→<br />

nn−1 2 2 nn−1 2 3<br />

Ei (<br />

3, o4)<br />

β4<br />

ii ,..., ooi ⎯⎯⎯ ⎯→ii ,..., ooo ⎯ ⎯ →<br />

nn−1 3 2 3 nn−1 3 2 4<br />

...<br />

Ei o<br />

n n−1 3 2 n−1 n n−1 3 2<br />

Ei (<br />

n<br />

, o1<br />

)<br />

n n−1 3 2 n<br />

n n−1 2 1<br />

(<br />

n−1, n)<br />

βn<br />

io ,..., ooi ⎯⎯⎯⎯⎯→io ,..., ooo ⎯ ⎯→<br />

oo ,..., ooi ⎯⎯⎯ ⎯ →oo ,..., oo = O<br />

Bild 4.38: Funktion des allgemeinen Butterfly-Netzes.<br />

n<br />

Die Anomalie beim Routing rührt daher, daß beim Butterfly-Netz, ebenso wie<br />

bei allen anderen Netzen, die keine Verdrahtung nach der letzten Schalterstufe<br />

haben, in dieser Stufe das LSB der Zieladresse ausgewertet werden muß, um<br />

zwischen geradem <strong>und</strong> ungeradem Schalterausgang zu entscheiden. Diese<br />

Randbedingung gilt unabhängig davon, welches Bit in der 1. Stufe <strong>für</strong> die Routing-Entscheidung<br />

relevant ist <strong>und</strong> welche Topologie das Netz aufweist.<br />

Zwar hat auch das inverse Butterfly-Netz keine Verdrahtungsstufe nach der<br />

letzten Schalterreihe, es kann aber in der 1. Stufe aufgr<strong>und</strong> der zweifachen<br />

Spiegelung von Topologie <strong>und</strong> Stufenreihenfolge dasselbe Bit, wie das nicht<br />

gespiegelte Baseline-Netz auswerten, so daß die Anomalie dort nicht auftritt.<br />

Beim Butterfly-Netz ist es aufgr<strong>und</strong> seiner Topologie nicht möglich, in der 1.<br />

180


Stufe das MSB oder LSB auszuwerten, da die gespiegelte- <strong>und</strong> die nicht gespiegelte<br />

Butterfly-Permutation identisch sind <strong>und</strong> sich demzufolge Topologiespiegelung<br />

<strong>und</strong> Stufenreihenfolgespiegelung nicht kompensieren können.<br />

4.5.11 Inverser Butterfly<br />

Der inverse Butterfly (Bild 4.39) hat eine dem Baseline-Netz verwandte Struktur<br />

<strong>und</strong> benötigt wie dieses das MSB der Zieladresse in der 1. Stufe zum Routen<br />

der Pakete. Entsprechend kann man hier die Wegewahl ebenfalls nach dem<br />

Prinzip der sukzessiven Approximation durchführen, da in jeder Stufe die Menge<br />

möglicher Zieladressen halbiert wird. Die Wegewahl beim inversen Butterfly<br />

ist analog zu den übrigen logN-Netzen <strong>und</strong> läßt sich deshalb nicht durch<br />

Spiegelung aus dem Butterfly-Netz ableiten. Seine Definition lautet:<br />

– 1<br />

BF n<br />

Def. 4.14: inverses Butterfly-Netz: = Eβ n<br />

Eβ n – 1<br />

⋅… ⋅ Eβ 2<br />

E .<br />

0010<br />

1101<br />

MSB<br />

zuerst<br />

β 4<br />

β 3<br />

β 2<br />

Bild 4.39: Inverser Butterfly (n = 16).<br />

4.5.12 Zusammenfassung<br />

In Tabelle 4.3 sind die Definitionsgleichungen der klassischen logN-Netze zur<br />

besseren Übersicht zusammengefaßt. Des weiteren findet man in Tabelle 4.4<br />

die <strong>für</strong> die Wegewahl nach dem Destination Tag-Verfahren relevanten Routing-Bits<br />

aufgelistet. In Bild 4.40 schließlich ist exemplarisch <strong>für</strong> alle Netze das<br />

Routing-Schema der Baseline-Topologie dargestellt.<br />

Nach der Definition der logN-Netze geht es im nächsten Kapitel um deren topologische<br />

<strong>und</strong> funktionale Äquivalenz.<br />

181


Netzname<br />

Definition<br />

Omega -Netz<br />

Ω n<br />

=<br />

( σ n° E)n<br />

Flip - Netz<br />

Indirect Binary n - Cube<br />

F n<br />

Ω – 1 – 1<br />

= = ( E°σ n<br />

) n<br />

– 1<br />

IC n<br />

= Eβ 2<br />

Eβ 3<br />

⋅ … ⋅ Eβ n<br />

Eσ n<br />

Generalized Cube<br />

– 1<br />

IC n<br />

=<br />

σ n<br />

Eβ n<br />

Eβ n – 1<br />

⋅… ⋅Eβ 2<br />

E<br />

Baseline - Netz<br />

– 1 – 1<br />

1<br />

BL n = Eσ n Eσn – 1 ⋅ … ⋅ Eσ 2<br />

– E<br />

inverses Baseline - Netz<br />

– 1<br />

BL n<br />

=<br />

Eσ 2<br />

Eσ 3<br />

⋅ … ⋅ Eσ n<br />

E<br />

Butterfly - Netz<br />

BF n<br />

= Eβ 2<br />

Eβ 3<br />

⋅… ⋅Eβ n<br />

E<br />

inverses Butterfly - Netz<br />

– 1<br />

BF n<br />

=<br />

Eβ n<br />

Eβ n – 1<br />

⋅… ⋅ Eβ 2<br />

E<br />

Tabelle 4.3: Definitionsgleichungen der klassischen logN-Netze<br />

Netztopologie<br />

Butterfly: o 2<br />

Baseline: MSB<br />

Indirect Binary n-Cube: LSB<br />

Omega: MSB<br />

gespiegelte Topologie<br />

inverser Butterfly: MSB<br />

inverser Baseline: MSB<br />

Generalized n-Cube: MSB<br />

Flip: LSB<br />

Tabelle 4.4: Relevante Routing-Bits der 1. Stufe (MSB = Most Significant Bit der Zieladresse<br />

O, LSB = Least Significant Bit, i 2 = Bit der Zieladresse O mit Wertigkeit 2 1 )<br />

4.6 Äquivalenz der klassischen logN-Netze<br />

4.6.1 Einleitung<br />

Seit dem Bekanntwerden der ersten logN-Netze zu Beginn der siebziger Jahre<br />

wurde auch die Frage untersucht, inwieweit die verschiedenen Topologien untereinander<br />

zusammenhängen. Gemäß der Arbeit von Goke <strong>und</strong> Lopovski<br />

182


iiii<br />

oiii<br />

ooii<br />

Bild 4.40: Funktion des Baseline-Netzes (N = 4).<br />

−<br />

1 4 4 1<br />

Ei ( , o)<br />

σ<br />

⎯⎯⎯⎯→iiio<br />

⎯⎯⎯<br />

→<br />

4321 432 4<br />

−<br />

2 3 3 1<br />

Ei ( , o)<br />

σ<br />

⎯⎯⎯⎯→oiio<br />

⎯⎯⎯<br />

→<br />

4432 443 3<br />

−<br />

3 2 2 1<br />

Ei ( , o)<br />

σ<br />

⎯⎯⎯⎯→ooio<br />

⎯⎯⎯<br />

→<br />

4 3 4 3 4 3 4 2<br />

Ei ( , o)<br />

4 3 2 4 4 3 2 1<br />

4 1<br />

oooi ⎯⎯⎯⎯ →oooo = O<br />

[Goke73] ist ein wichtiges Unterscheidungskriterium, ob es in einem Netz von<br />

jedem Eingang genau einen Pfad zu jedem Ausgang gibt. Diese Eigenschaft der<br />

Pfadeindeutigkeit sowie der vollständigen Erreichbarkeit der Ausgänge ist bei<br />

allen logN-Netze vorhanden, was einen ersten Hinweis auf deren tiefergehende<br />

Verwandtschaft gibt. Darüberhinaus sind alle logN-Netze in die Klasse der<br />

nicht-blockierungsfreien Netze einzuordnen, was ihre Gemeinsamkeiten weiter<br />

unterstreicht <strong>und</strong> die Frage entstehen läßt, ob von diesen Netzen dieselben Permutationen<br />

von Verbindungen hergestellt werden können. Für diesen Fall<br />

könnte man die logN-Netze als funktional äquivalent bezeichnen.<br />

Die zweite Frage, die man sich stellt, ist, ob sich ein logN-Netz mit Hilfe bestimmter<br />

Abbildungsfunktionen in ein anderes Netz gleicher Stufenzahl umwandeln<br />

läßt. Im Falle der gegenseitigen Umwandelbarkeit sind die Netze auch<br />

topologisch äquivalent. In diesem Kapitel wird die topologische <strong>und</strong> funktionale<br />

Äquivalenz der logN-Netze näher untersucht (Siehe dazu auch [Varma94]).<br />

4.6.2 Definition von topologischer <strong>und</strong> funktionaler Äquivalenz<br />

Zur Beantwortung der Frage, wann zwei Netze gleich sind, müssen zuerst die<br />

Begriffe der topologischen <strong>und</strong> funktionalen Äquivalenz definiert werden. Dabei<br />

tritt als besondere Schwierigkeit auf, daß sowohl die Topologie, als auch die<br />

Menge der vom Netz realisierbaren Permutationen vom jeweiligen Numerierungsschema<br />

abhängen. Zwei logN-Netze können nur bei gleichem Numerierungsschema,<br />

das üblicherweise von oben nach unten <strong>und</strong> von links nach rechts<br />

fortlaufend erfolgt, miteinander verglichen werden. Sind die Numerierungsschemata<br />

ungleich, muß eine Permutation der Verdrahtung bei einem<br />

der beiden Netze durchgeführt werden, um sie aufeinander abzustimmen.<br />

Ein Beispiel <strong>für</strong> den Numerierungsabgleich ist in Bild 4.41 gezeigt. Die Verdrahtungen<br />

der Netze a) <strong>und</strong> b) sind vordergründig gespiegelt, aufgr<strong>und</strong> der unterschiedlichen<br />

Numerierung jedoch identisch.<br />

Dies bedeutet, daß nicht nur das Verdrahtungsschema ein Netz definiert, sondern<br />

auch dessen Numerierung. Nur beide Angaben zusammen machen eine<br />

Topologie eindeutig. Im Grenzfall können sich sogar Verdrahtung <strong>und</strong> Numerierung<br />

kompensieren, so daß man die identische Abbildung von Eingängen auf<br />

Ausgängen erhält (Bild 4.42).<br />

183


a) b)<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

0000 0000<br />

0100 0001<br />

1000 0010<br />

1100 0011<br />

0001 0100<br />

0101 0101<br />

1001 0110<br />

1101 0111<br />

0010 1000<br />

0110 1001<br />

1010 1010<br />

1110 1011<br />

0011 1100<br />

0111 1101<br />

1011 1110<br />

1111 1111<br />

σ<br />

-1<br />

4<br />

σ 4<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

Bild 4.41: Identische Netze a) <strong>und</strong> b) wegen gespiegelter Numerierung <strong>und</strong> Topologie.<br />

i =<br />

0000<br />

0001<br />

0010<br />

0011<br />

0100<br />

0101<br />

0110<br />

0111<br />

1000<br />

1001<br />

1010<br />

1011<br />

1100<br />

1101<br />

1110<br />

1111<br />

0000<br />

0010<br />

0100<br />

0110<br />

1000<br />

1010<br />

1100<br />

1110<br />

0001<br />

0011<br />

0101<br />

0111<br />

1001<br />

1011<br />

1101<br />

1111<br />

Bild 4.42: Neutrale Abbildung i trotz vorgeblicher Unshuffle-Topologie.<br />

Die Verflechtung von Verdrahtung <strong>und</strong> Numerierung gilt bei mehrstufigen<br />

<strong>Verbindungsnetzwerke</strong>n nur an den Eingangs- <strong>und</strong> Ausgangsstufen des Netzes.<br />

Dort bewirkt eine andere Numerierung eine Änderung der Topologie. Beispielsweise<br />

kann man jeden Eingang eines Netzes mit der Nummer 1 bezeichen<br />

<strong>und</strong> ihn mit einem beliebigen Rechenknoten verbinden, oder man kann einen<br />

beliebigen Ausgang als Nummer 1 bezeichen <strong>und</strong> fordern, daß dorthin Daten<br />

geschickt werden sollen, was je nach Numerierung ein anderes Routing erfordert.<br />

Das Netzinnere ist invariant gegenüber Umnumerierungen. Der Gr<strong>und</strong> da<strong>für</strong><br />

ist, daß im Innern des Netzes jede Schaltstufe an zwei Permutationsstufen angeschlossen<br />

ist (Ein- <strong>und</strong> Ausgang der Stufe). Eine Umnumerierung bewirkt<br />

deshalb nicht, daß Daten an anderen Schaltern eingespeist werden oder von anderen<br />

Schaltern entnommen werden, weil die Verbindungen zwischen den<br />

Schalterstufen sich nicht ändern können, solange die Integrität des Netzes erhalten<br />

bleibt.<br />

Um dem Phänomen der zusätzlichen Freiheitsgrade am Ein- <strong>und</strong> Ausgang eines<br />

Netzes Rechnung zu tragen, ist es deshalb <strong>für</strong> die Definition von funk-<br />

184


tionaler oder topologischer Äquivalenz erforderlich, daß zwei Netze nur bis auf<br />

eine Umnumerierung der Ein- <strong>und</strong> Ausgangsstufen gleich sein müssen. Daraus<br />

resultieren folgende Definitionen der zwei Äquivalenzformen:<br />

Def. 4.15: Zwei Netze sind dann funktional äquivalent, wenn durch Hinzufügen<br />

einer Permutation ω 1 am Eingang <strong>und</strong> einer Permutation ω 2 am Ausgang eines<br />

der beiden Netze von beiden dieselbe Menge an Permutationen realisiert werden<br />

kann.<br />

Def. 4.16: Zwei Netze sind dann topologisch äquivalent, wenn ihre Graphen<br />

isomorph sind.<br />

Isomorphismus ist dann gegeben, wenn sich zwei Netze nach Hinzufügen zweier<br />

Permutationen ω 1 <strong>und</strong> ω 2 am Ein- bzw. Ausgang eines der beiden Netze<br />

durch "Umzeichnen" ineinander umwandeln lassen.<br />

4.6.3 Funktionale Äquivalenz<br />

Alle log 2 N-Netze bestehen aus insgesamt (N/2)log 2 N Schaltern der Größe 2x2.<br />

Beschränkt man sich auf einfache Kreuzschalter ohne Broadcast, sind in jedem<br />

Netz<br />

Gl. 4.21:<br />

2<br />

N<br />

--- log N<br />

2 2<br />

=<br />

N<br />

N<br />

---<br />

2<br />

verschiedene Schalterkombinationen einstellbar. Diese Kombinationen können<br />

höchstens ebensoviele verschiedene Permutationen von Verbindungen realisieren,<br />

was bei einer Gesamtzahl von N! Punkt-zu-Punkt-Verbindungen nur einen<br />

kleinen Bruchteil der möglichen Verbindungen darstellt, sobald N groß wird.<br />

Die Frage ist nun, ob alle log 2 N-Netze dieselben Permutationen realisieren<br />

können, wenn man eine Umnumerierung am Ein- <strong>und</strong> Ausgang zuläßt. Diese<br />

Frage wurde u.a. von D.K. Pradhan <strong>und</strong> K.L Kodandapani [Pradhan80] mit ja<br />

beantwortet. Zum Beweis der funktionalen Äquivalenz der klassischen Netze<br />

wendeten sie folgende Methode an:<br />

• Die binären Adressen der Eingänge eines Netzes werden als Eingangsgrößen<br />

<strong>für</strong> eine Boolsche Wahrheitstabelle angesehen.<br />

• Die vom Netz permutierten Eingangsadressen, die als Daten an das Netz angelegt<br />

werden <strong>und</strong> am Netzausgang erscheinen, werden als die Ausgangsgrößen<br />

<strong>für</strong> die Wertetafel verwendet.<br />

• Für jede Permutation kann man daraus N Boolsche Funktionen von n Variablen<br />

erhalten.<br />

Durch den Vergleich aller Boolschen Funktionen verschiedener klassischer<br />

Netze zeigten sie deren funktionale Äquivalenz.<br />

185


4.6.4 Topologische Äquivalenz<br />

Es gibt mehrere Beweise da<strong>für</strong>, daß die klassischen logN-Netze auch topologisch<br />

äquivalent sind. Beispielsweise folgt bereits aus der Def 4.16, daß die gespiegelten<br />

Varianten der klassischen logN-Netze zu ihren Urbildern topologisch<br />

äquivalent sein müssen, da sie durch eine Rechtsdrehung um 180¡ <strong>und</strong><br />

anschließendes Vertauschen von Ein- <strong>und</strong> Ausgängen in die nicht gespiegelten<br />

Netze überführt werden können. Dies ist aufgr<strong>und</strong> der Mittensymmetrie der<br />

Netze möglich. Die Rechtsdrehung stellt im Gegensatz zur Spiegelung eine topologische<br />

Äquivalenztransformation dar.<br />

Um die topologische Äquivalenz aller klassischen logN-Netze (Butterfly,<br />

Omega, Baseline, Indirect Binary n-Cube) zu beweisen, kann man die Definitionsgleichungen<br />

der Netze heranziehen <strong>und</strong> diese gleichsetzen.<br />

Das Omega-Netz beispielsweise ist als Ω = ( σE) n , definiert, wobei σ die<br />

Shuffle Permutation darstellt <strong>und</strong> E die Exchange Permutation ist, die die Funktion<br />

der 2x2-Schalter repräsentiert; n ist die Stufenzahl. Nach der Definition der<br />

topologischen Äquivalenz muß man noch die Permutation ω 1 <strong>und</strong> ω 1 einführen,<br />

die den Freiheitsgrad beim Numerieren der Ein- <strong>und</strong> Ausgänge widerspiegeln.<br />

Dadurch erhält man die erweiterte Definition des Omega-Netzes:<br />

Gl. 4.22:<br />

Ω'<br />

=<br />

ω 1<br />

( σE) n ω 2<br />

Die Gleichsetzung von Omega-Netz <strong>und</strong> Butterfly-Netz, das durch<br />

B = Eβ 1<br />

, Eβ 2<br />

,…,<br />

Eβ n<br />

E definiert ist, liefert:<br />

Gl. 4.23: ω 1<br />

( σE) n ω 2<br />

= Eβ 1<br />

, Eβ 2<br />

, …,<br />

Eβ n<br />

E .<br />

Durch algebraische Umformungen läßt sich die Gültigkeit von Gl. 4.23 zeigen.<br />

Für die Umformungen kann man auf den Satz von Regeln zurückgreifen, die im<br />

Kapitel über Permutationen angegeben wurden. Gemäß dieser Methode zeigte<br />

Y. Parker im Jahre 1980 [Parker80], daß <strong>für</strong> Indirect Binary n-Cube (IC), Flip-<br />

Netz (F) <strong>und</strong> Butterfly-Netz (BF) die topologische Äquivalenz gemäß Gl. 4.24<br />

gilt:<br />

Gl. 4.24:<br />

IC n<br />

= F n<br />

= BF n<br />

σ n<br />

Bereits ein Jahr vor Parker konnte H.J. Siegel [Siegel79] die Äquivalenz einiger<br />

klassischer Netze durch topologische Umformungen mittels Äquivalenztransformationen<br />

zeigen.<br />

186


4.6.5 Transformationen von logN-Netzen<br />

C. I. Wu <strong>und</strong> T. Feng definierten im Jahre 1980 [Wu80a] das Baseline-Netz <strong>und</strong><br />

zeigten, daß sich dieses Netz mit Hilfe bestimmter Äquivalenztransformationen<br />

(=Topologie=erhaltene Abbildungsfunktionen) in die bis dato bekannten logN-<br />

Netzen überführen läßt. Ihre Methode bestand darin, anzugeben, wie man die<br />

Schalter der Netzzwischenstufen von Butterfly-, Omega-, Flip-Netz <strong>und</strong> Indirect<br />

Binary n-Cube permutieren muß, um daraus die Baseline-Topologie zu erhalten.<br />

Dieses Verfahren ist besonders interessant <strong>und</strong> soll deshalb hier erläutert<br />

werden.<br />

Wu <strong>und</strong> Feng stellten sich die Verdrahtung zwischen den Schaltern wie Gummifäden<br />

vor, so daß man je zwei Schalter in derselben Stufe vertauschen kann,<br />

ohne die Verdrahtung zwischen den Stufen zu zerstören. Die Permutation von<br />

Schaltern innerhalb einer Stufe stellt nämlich dann eine Äquivalenztransformation<br />

dar, wenn die Verbindungen zwischen den Schaltern unverändert bleiben.<br />

Wenn P i (B) = (p n (B) p n-1 (B) ,...,p 1 (B) ) i die vertikale Position (y-Adresse) eines<br />

Schalters in der i-ten Stufe eines Butterfly-Netzes aus n Stufen kennzeichnet,<br />

dann lautet die Vertauschungsregel nach Wu <strong>und</strong> Feng, um daraus das Baseline-Netz<br />

zu erhalten (i = 0,1,..n-1):<br />

Gl. 4.25:<br />

( BL)<br />

( BL) p i<br />

p ( BL )<br />

i<br />

…pn<br />

– i + 1<br />

p ( BL ) ( BL ) ( B) ( B) ( B) ( B)<br />

= ( n–<br />

i …p1 ) i<br />

= ( p 1 …pi pn …pi + 1<br />

) i<br />

.<br />

Dies bedeutet, daß nach Gl. 4.25 die i niederwertigen Bits (LSBs) p i (B) ,...,p 1<br />

(B)<br />

der y-Adresse der Schalter des Butterfly-Netzes gespiegelt werden müssen, um<br />

daraus die i höherwertigen Adreßbits (MSBs) der Schalter im Baseline-Netz zu<br />

erhalten. Dieser Sachverhalt läßt sich auch so formulieren:<br />

Gl. 4.26: p n (BL) ,...,p n-i+1 (BL) = p 1 (B) ,..., p i (B) .<br />

Für die verbleibenden (n-i) höherwertigen Adreßbits (MSBs) p n (B) ,...,p i+1<br />

(B)<br />

des Butterfly-Netzes gilt, daß sie als (n-i) LSBs im Baseline-Netz wieder<br />

erscheinen, gemäß Gl. 4.27:<br />

Gl. 4.27: p n-i (BL) ,...,p 1 (BL) = p n (B) ,...,p i+1 (B) .<br />

Mit der angegebenen Transformationsregel kann man ein Butterfly- in ein Baseline-Netz<br />

umgewandeln, wobei der Parameter i die Stufe angibt, die gerade<br />

transformiert wird. Die entsprechende Transformationsregel <strong>für</strong> das Omega-<br />

Netz lautet [Wu80a] (0 ≤ i ≤ n-1):<br />

Gl. 4.28:<br />

( BL)<br />

( BL) ( BL)<br />

( BL) ( BL)<br />

( Ω) ( Ω) ( Ω) ( Ω)<br />

p i<br />

= ( p n …pn – i + 1<br />

p n–<br />

i …p1 ) i<br />

= ( p i …p1 pi + 1…pn<br />

) i<br />

.<br />

187


Bei der Transformation nach Gl. 4.28 werden die i LSBs des Omega-Netzes<br />

p i (Ω) ,...,p 1<br />

(Ω)<br />

auf MSBs im Baseline-Netz gemäß Gl. 4.29 abgebildet.<br />

Gl. 4.29:<br />

p n<br />

(BL),...,p n-i+1<br />

(BL)= p i<br />

(Ω),..., p 1<br />

(Ω).<br />

Entsprechend werden die (n-i) MSBs p n (Ω) ,...,p i+1<br />

(Ω)<br />

gespiegelt zu LSBs gemäß<br />

:<br />

Gl. 4.30:<br />

p n-i<br />

(BL),...,p 1<br />

(BL)= p i+1<br />

(Ω),...,p n<br />

(Ω).<br />

Schließlich kann man das Flip-Netz mit Hilfe folgender Schaltervertauschungen<br />

in ein Baseline-Netz umwandeln (i = 0,1,..n-1):<br />

Gl. 4.31:<br />

( BL)<br />

( BL) ( BL)<br />

( BL) ( BL)<br />

( F)<br />

( F) ( F) ( F)<br />

p i<br />

= ( p n …pn – i + 1<br />

p n–<br />

i …p1 ) i<br />

= ( p n– i + 1<br />

…p n pn – i…p1<br />

) i<br />

.<br />

Hier werden die i MSBs p n (F) ,...,p n-i+1 (F) in gespiegelter Form als MSBs gemäß<br />

Gl. 4.30 eingesetzt. Die (n-i) LSBs p n-i (F) ,...,p 1<br />

(F)<br />

bleiben erhalten.<br />

Gl. 4.32:<br />

p n<br />

(BL),...,p n-i+1<br />

(BL)= p n-i+1<br />

(F),...,p n<br />

(F).<br />

Zu jeder angegeben Transformation kann man auch die inverse Transformation<br />

formulieren, die es gestattet, aus dem Baseline-Netz durch Vertauschen von<br />

Schaltern jeder Stufe das Butterfly- (Gl. 4.33), Omega- (Gl. 4.34) oder Flip-<br />

Netz (Gl. 4.35) zu gewinnen.<br />

Gl. 4.33:<br />

( B)<br />

p i<br />

0 ≤ i < n<br />

( B) ( B) ( B) ( B)<br />

( BL) ( BL) ( BL)<br />

( BL)<br />

= ( p n …pi + 1pi<br />

…p1 ) i<br />

= ( p n–<br />

i …p1 pn – i + 1<br />

…p n<br />

) i<br />

,<br />

.<br />

Die(n-i) LSBs p n-i ,...,p 1 von P (BL) i werden zu MSBs, <strong>und</strong> die i MSBs p n ,...,p n-<br />

werden gespiegelt zu LSBs.<br />

i+1<br />

Gl. 4.34:<br />

( B)<br />

( Ω) ( Ω) p i<br />

p ( Ω ) ( Ω ) ( BL) ( BL) ( BL) ( BL)<br />

= ( n …pi + 1pi<br />

…p1 ) i<br />

= ( p 1 …pn – i pn …pn – i+<br />

1<br />

) i<br />

,<br />

0 ≤ i < n.<br />

D.h., die (n-i) LSBs von P i (BL) werden gespiegelt zu MSBs <strong>und</strong> die i MSBs werden<br />

zu LSBs.<br />

188


Gl. 4.35:<br />

( F)<br />

( F) ( F)<br />

( F) ( F)<br />

( BL)<br />

( BL) ( BL) ( BL)<br />

p i<br />

= ( p n …pn – i + 1<br />

p n–<br />

i…p1<br />

) i<br />

= ( p n– i + 1<br />

…p n pn – i …p1 ) i<br />

,<br />

0 ≤ i < n.<br />

D.h., die (n-i) LSBs von P i (BL) bleiben unverändert, <strong>und</strong> die i MSBs werden gespiegelt<br />

zu MSBs.<br />

Durch Verketten der Transformationsregeln Gl. 4.25 - Gl. 4.31 mit Gl. 4.33 -<br />

Gl. 4.35 kann man die klassischen logN-Netz ineinander überführen. Beispielsweise<br />

wird die i-te Stufe eines Flip-Netzes in die i-te Stufe eines Omega-<br />

Netz umgewandelt, indem das Flip-Netz zuerst in ein Baseline- <strong>und</strong> dieses dann<br />

in ein Omega-Netz transformiert wird (Gl. 4.36).<br />

( F)<br />

p i<br />

( BL)<br />

p i<br />

( Ω)<br />

p i<br />

Gl. 4.36: → → , 1 ≤ i<<br />

n.<br />

Die Verkettung beider Transformationen liefert <strong>für</strong> die y-Adresse P i<br />

(Ω)<br />

eines<br />

Schalters im Omega-Netz:<br />

( Ω)<br />

( F) ( F) Gl. 4.37: p i<br />

p ( F ) ( F)<br />

( F)<br />

= ( 1 …pn – ipn<br />

– i + 1<br />

…p n<br />

) i<br />

= ρ n<br />

( p i<br />

),<br />

0 ≤ i < n.<br />

Dies entspricht einer Reversal-Permutation ρ n (P i (F) ) über alle n Bits, da die Abbildung<br />

unabhängig von i ist. Das bedeutet, daß man Flip- <strong>und</strong> Omega-Netz ineinander<br />

umzeichnen kann. Beide entstehen jeweils durch Vertauschen der<br />

Schalter gemäß der Reversal-Permutation ρ n (P i (F) ).<br />

Beispiel:<br />

In Bild 4.43 ist oben das Flip-Netz <strong>und</strong> unten das Omega-Netz dargestellt, wobei<br />

die Netzschalter im Graphen durch Knoten symbolisiert sind. Die Schalter<br />

des Flip-Netzes sind von oben nach unten fortlaufend mit binären Adressen versehen.<br />

Im Omega-Netz hat der korrespondierende Knoten dieselbe Adresse wie<br />

im obigen Flip-Netz <strong>und</strong> kann daran identifiziert werden. So wandert der Knoten<br />

(001,0) des Flip-Netzes im Omega-Netz an die Position (100). Der Knoten<br />

(011,3) an der Position (110) im Omega-Netz wird auf die Position (011) abgebildet.<br />

Im allgemeinen resultiert die Verkettung zweier Vertauschungsregeln in einer<br />

Abbildungsfunktion, die komplizierter ist als eine einfache Reversal-<br />

Permutation. So gewinnt man z.B. durch die in Gl. 4.38 dargestellte Umwandlung<br />

von Omega- in Baseline- <strong>und</strong> von Baseline- in Butterfly-Topologie eine<br />

Formel, wie in Gl. 4.39 angegeben.<br />

189


( Ω)<br />

p i<br />

( BL)<br />

p i<br />

( B)<br />

p i<br />

Gl. 4.38: → → , 0 ≤ i<<br />

n,<br />

( B)<br />

p i<br />

( Ω) ( Ω) ( Ω) ( Ω)<br />

p i + 1…pn<br />

p1 …pi<br />

Gl. 4.39: = ( ) i<br />

, 0 ≤ i<<br />

n.<br />

Die Formel besagt, daß die i LSBs <strong>und</strong> die (n-i) MSBs des Omega-Netzes getrennt<br />

gespiegelt werden müssen, um daraus das Butterfly-Netz zu erhalten.<br />

Die gegenseitige Umwandelbarkeit von Flip- <strong>und</strong> Omega-Netz läßt sich auch<br />

mit Hilfe einer Funktion F, die die Bit-Operatoren AND, OR <strong>und</strong> NOT verwendet,<br />

darstellen als:<br />

Gl. 4.40:<br />

( B)<br />

p i<br />

=<br />

( Ω)<br />

Fp ( i<br />

), mit<br />

Gl. 4.41:<br />

( Ω)<br />

( Ω)<br />

Fp ( i<br />

) ρ o, n–<br />

i<br />

( p i<br />

) AND NOT 2 i ( Ω)<br />

= [ ( – 1)<br />

] OR [ ρ u, i<br />

( p i<br />

)AND( 2 i – 1)<br />

]<br />

Die daraus resultierenden Schaltervertauschungen sind in Bild 4.44 graphisch<br />

dargestellt.<br />

4.7 Die Klasse der Banyan-Netze<br />

4.7.1 Einleitung<br />

Die Klasse der Banyan-Netze [Goketal73] ist <strong>für</strong> alle dynamischen Netzwerke<br />

von großer theoretischer <strong>und</strong> praktischer Bedeutung. Sie umfaßt definitionsgemäß<br />

alle Netze, bei denen es genau einen Weg von jedem Eingang zu jedem<br />

Ausgang gibt. Das heißt, daß Banyans die Eigenschaft der Pfadeindeutigkeit<br />

<strong>und</strong> der vollständigen Erreichbarkeit aller Ausgänge haben. Neben den bereits<br />

bekannten klassischen logN-Netzen gehören der Bus <strong>und</strong> der Kreuzschienenverteiler<br />

sowie einige statische Netze, wie Bäume <strong>und</strong> Ketten zur Banyan-Klasse,<br />

da sie diese Eigenschaften aufweisen.<br />

Weiterhin sind alle blockierungsfreien Netze, wie das Clos- <strong>und</strong> Benes-Netz<br />

sowie bestimmte Sortiernetzwerke wie das Batcher-Netz [Batcher68] aus Sequenzen<br />

hintereinandergeschalteter Banyans aufgebaut. Ferner kann man zeigen,<br />

daß die Hintereinanderschaltung von zwei zueinander spiegelbildlichen<br />

Banyans aus der Untergruppe der SW-Banyans ein blockierungsfreies Netz liefert.<br />

Ein einzelner Banyan ist nicht blockierungsfrei, da bei N Ein- <strong>und</strong> Ausgängen<br />

nicht alle N! Permutationen von Verbindungen herstellbar sind. Trotz ihrer<br />

langen Geschichte ist die Klasse der Banyan-Netze bis heute Gegenstand der<br />

Forschung. Mathematisch lassen sich Banyans folgendermaßen definieren<br />

[Hotzel95]:<br />

190


Flip<br />

000, 0<br />

000, 1<br />

000, 2<br />

000, 3<br />

001, 0<br />

001, 1<br />

001, 2<br />

001, 3<br />

010, 0<br />

010, 1<br />

010, 2<br />

010, 3<br />

011, 0<br />

011, 1<br />

011, 2<br />

011, 3<br />

100, 0<br />

100, 1<br />

100, 2<br />

100, 3<br />

101, 0<br />

101, 1<br />

101, 2<br />

101, 3<br />

110, 0<br />

110, 1<br />

110, 2<br />

110, 3<br />

111, 0<br />

111, 1<br />

111, 2<br />

111, 3<br />

i=0 i=1 i=2 i=3<br />

ρ (P)<br />

n i<br />

000<br />

000, 0<br />

000, 1<br />

000, 2<br />

000, 3<br />

000<br />

001<br />

100, 0<br />

100, 1<br />

100, 2<br />

100, 3<br />

001<br />

010<br />

010, 0<br />

010, 1<br />

010, 2<br />

010, 3<br />

010<br />

011<br />

110, 0<br />

110, 1<br />

110, 2<br />

110, 3<br />

011<br />

100<br />

001 0<br />

001, 1<br />

001 2<br />

001 3<br />

100<br />

101<br />

101, 0<br />

101, 1<br />

101, 2<br />

101, 3<br />

101<br />

110<br />

011, 0<br />

011, 1<br />

011, 2<br />

011, 3<br />

110<br />

111<br />

111, 0<br />

111, 1<br />

111, 2<br />

111, 3<br />

111<br />

Bild 4.43: Umwandlung eines Flip-Netz es in ein Omega-Netz durch Schaltertauschen.<br />

4.7.2 Definition von Banyans<br />

Omega<br />

Def. 4.17: Ein Banyan ist ein endlicher, azyklischer, gerichteter Graph, in dem<br />

es genau einen Pfad von jedem Eingangs- zu jedem Ausgangsknoten gibt.<br />

Die ursprüngliche Definition von Goke <strong>und</strong> Lipovski [Goketal73], die sich auf<br />

den Begriff des Hasse-Diagramms [Berge62] stützt, lautet:<br />

191


Omega<br />

000, 0<br />

000, 1<br />

000, 2<br />

000, 3<br />

001, 0<br />

001, 1<br />

001, 2<br />

001, 3<br />

010, 0<br />

010, 1<br />

010, 2<br />

010, 3<br />

011, 0<br />

011, 1<br />

011, 2<br />

011, 3<br />

100, 0<br />

100, 1<br />

100, 2<br />

100, 3<br />

101, 0<br />

101, 1<br />

101, 2<br />

101, 3<br />

110, 0<br />

110, 1<br />

110, 2<br />

110, 3<br />

111, 0<br />

111, 1<br />

111, 2<br />

111, 3<br />

i=0 i=1 i=2 i=3<br />

F(P ) i<br />

000<br />

000, 0<br />

000, 1<br />

000, 2<br />

000, 3<br />

000<br />

001<br />

100, 0<br />

001, 1<br />

010, 2<br />

100, 3<br />

001<br />

010<br />

010, 0<br />

100, 1<br />

001, 2<br />

010, 3<br />

010<br />

011<br />

110, 0<br />

101, 1<br />

011, 2<br />

110, 3<br />

011<br />

100<br />

001, 0<br />

010, 1<br />

100, 2<br />

001, 3<br />

100<br />

101<br />

101, 0<br />

011, 1<br />

110, 2<br />

101, 3<br />

101<br />

110<br />

011, 0<br />

110, 1<br />

101, 2<br />

011, 3<br />

110<br />

111<br />

111, 0<br />

111, 1<br />

111, 2<br />

111, 3<br />

111<br />

Butterfly<br />

Bild 4.44: Umwandlung eines Omega- in ein Butterfly-Netz.<br />

Def. 4.18: Ein Banyan ist ein Hasse-Diagramm einer partiellen Ordnung, in<br />

dem es genau einen Pfad von jedem Eingangsknoten zu jedem Ausgangsknoten<br />

gibt.<br />

Zu den Hasse-Diagrammen, auf die in dieser Definition Bezug genommen<br />

wird, muß folgendes gesagt werden: Hasse-Diagramme bestehen aus Knoten<br />

<strong>und</strong> gerichteten Kanten <strong>und</strong> werden aus Graphen abgeleitet, die eine partielle<br />

Ordnung besitzen. Graphen mit partieller Ordnung sind transitiv, reflexiv <strong>und</strong><br />

antisymmetrisch, wobei die Ordnung im Graphen durch die gerichtete Kante<br />

"→" dargestellt wird. (Zur Erläuterung dieser Begriffe aus der Graphentheorie<br />

ist z.B. das Studium von [Chartrand93] empfohlen.) Die Hasse-Diagramme un-<br />

192


terscheiden sich von den Graphen mit partieller Ordnung dadurch, daß sie intransitiv<br />

<strong>und</strong> asymmetrisch sind. In Bild 4.45 ist ein Beispiel einer partiellen<br />

Ordnung <strong>und</strong> das dazu gehörende Hasse-Diagramm zu sehen.<br />

transitive<br />

Reduktion<br />

Bild 4.45: Beispiel einer partiellen Ordnung (links) <strong>und</strong> seines Hasse-Diagramms (rechts).<br />

Ein Hasse-Diagramm wird aus einem Graphen einer partiellen Ordnung durch<br />

transitive Reduktion gewonnen. Die transitive Reduktion eliminiert alle Pfeile<br />

auf sich selbst (Reflexivität) <strong>und</strong> alle "Abkürzungen" (Transitivität). Man unterscheidet<br />

bei den Hasse-Diagrammen drei Arten von Knoten, aus denen entsprechend<br />

auch alle Banyans aufgebaut sind:<br />

• Eingangsknoten, auf die keine Pfeile zeigen.<br />

• Ausgangsknoten, von denen keine Pfeile weggehen, <strong>und</strong><br />

• Zwischenknoten im Innern des Banyans mit zu- <strong>und</strong> abgehenden Pfeilen.<br />

Alle Banyans haben die Eigenschaft, daß sie aus k-nären Bäumen als Subgraphen<br />

bestehen. Jeder Subgraph verbindet einen bestimmten Eingangsknoten<br />

mit allen Ausgangsknoten <strong>und</strong> hat die Topologie eines Baumes. Umgekehrt läßt<br />

sich von jedem Ausgangsknoten genau ein Baum konstruieren, der den betreffenden<br />

Ausgang mit allen Eingängen verbindet. Daraus resultiert die erwähnte<br />

Eigenschaft, daß es in einem Banyan genau einen Weg von einem bestimmten<br />

Eingang zu jedem Ausgang gibt, bzw. daß umgekehrt jeder Ausgang eindeutig<br />

von allen Eingängen erreichbar ist.<br />

4.7.3 n-Ebenen-Banyans<br />

Aus der Klasse der Banyan-Netze sind diejenigen besonders wichtig, bei denen<br />

die Knoten in Ebenen angeordnet sind. In dieser Untergruppe verlaufen die<br />

Pfeile aufgr<strong>und</strong> ihrer Intransitivität nur zwischen Knoten benachbarter Ebenen.<br />

Dadurch wird das Routing besonders einfach, <strong>und</strong> die Wege von jedem Eingang<br />

zu jedem Ausgang sind gleich lang (identische Latenz). Diese schichtweise<br />

Konfiguration wird als n-Ebenen-Banyan bezeichnet. In Bild 4.46 sind zwei<br />

Beispiele von Graphen gezeigt, die sowohl einen nicht-n-Ebenen-Banyan als<br />

193


auch einen n-Ebenen-Banyan darstellen.<br />

Bild 4.46: Beispiele von nicht-n-Ebenen- (links)- <strong>und</strong> n-Ebenen-Banyans (rechts).<br />

Die einzelnen Ebenen der Banyan-Graphen sind analog zu den Stufen der logN-<br />

Netze. Traditionell werden Banyans, aufgr<strong>und</strong> ihrer Beziehung zu den Hasse-<br />

Diagrammen, jedoch vertikal von unten nach oben <strong>und</strong> nicht von links nach<br />

rechts wie die logN-Netze gezeichnet. Zur Vereinfachung in der zeichnerischen<br />

Darstellung können weiterhin die Pfeile der Hasse-Diagramme optional als ungerichtete<br />

Kanten gezeichnet werden, da a priori feststeht, daß es sich um gerichtete<br />

Graphen handelt, bei denen die generelle Signalflußrichtung als von<br />

unten nach oben verlaufend festgelegt ist.<br />

Schließlich bestehen per definitionem n-Ebenen-Banyans aus n Ebenen von<br />

Pfeilen <strong>und</strong> somit aus (n+1) Knotenebenen; Eingangs- <strong>und</strong> Ausgangsknoten<br />

werden dabei mitgezählt. Die Knotenebenen werden von 0 bis n durchnumeriert.<br />

Durch die Schichtung des n-Ebenen-Banyans hat jeder Weg von einem<br />

Eingang zu einem Ausgang die Länge n.<br />

Die Zahl der gerichteten Kanten, die auf einen Knoten zulaufen, wird als fan<br />

in f bezeichnet, <strong>und</strong> die Zahl, der von einem Knoten abgehenden Kanten heißt<br />

spread s. Fan in <strong>und</strong> spread müssen nicht konstant sein, sondern können sich<br />

von Ebene zu Ebene ändern. Sind s <strong>und</strong> f konstant, aber nicht notwendigerweise<br />

gleich, spricht man von regelmäßigen, d.h. regulären Banyans. Regelmäßige<br />

Banyans werden mit dem Tripel (f, s, n) charakterisiert.<br />

Ist die Zahl der Knoten in allen Ebenen konstant, handelt es sich um rechteckige<br />

Banyans. Die Eigenschaften der Regelmäßigkeit <strong>und</strong> der Rechteckigkeit<br />

treten unabhängig voneinander auf <strong>und</strong> können miteinander kombiniert werden,<br />

so daß man insgesamt 4 verschiedene Varianten innerhalb der Untergruppe<br />

der n-Ebenen-Banyans hat:<br />

• regelmäßig <strong>und</strong> rechteckig<br />

• unregelmäßig <strong>und</strong> rechteckig<br />

• regelmäßig <strong>und</strong> nicht-rechteckig<br />

• unregelmäßig <strong>und</strong> nicht-rechteckig<br />

Bei einem regelmäßigen <strong>und</strong> rechteckigen Banyan gilt: s = f =const. In Bild<br />

194


4.47 sind zwei Beispiele regelmäßiger <strong>und</strong> rechteckiger n-Ebenen-Banyans gezeigt.<br />

Es handelt sich um Banyans mit f = s = 2 <strong>und</strong> 3. Der Buchstabe N bezeichnet<br />

die Anzahl der Knoten pro Ebene.<br />

N=4, n=2, s=f=2<br />

N=9, n=2, s=f=3<br />

Bild 4.47: Beispiele <strong>für</strong> regelmäßige <strong>und</strong> rechteckige Banyans.<br />

In Bild 4.48 sieht man verschiedene unregelmäßige, rechteckige Banyans. Regelmäßige<br />

<strong>und</strong> nicht-rechteckige Banyans sind in Bild 4.49 dargestellt.<br />

N=6, n=2<br />

1. Ebene: s = f =2<br />

1 1<br />

2. Ebene: s = f =3<br />

2 2<br />

N=6, n=2<br />

1. Ebene: s = f =3<br />

1 1<br />

2. Ebene: s = f =2<br />

2 2<br />

Bild 4.48: Beispiele <strong>für</strong> unregelmäßige <strong>und</strong> rechteckige Banyans.<br />

Unregelmäßige <strong>und</strong> nicht-rechteckige Banyans schließlich zeigt Bild 4.50.<br />

Im darauffolgenden Bild 4.51 sind Gegenbeispiele dargestellt, die keine Banyans<br />

sind, weil von einigen Eingängen entweder kein Pfad zu bestimmten<br />

Ausgängen existiert oder weil mehr als ein Pfad vorhanden ist.<br />

Anhand der gezeigten Beispiele wird die Vielzahl der Topologien deutlich.<br />

4.7.4 Bekannte Banyans<br />

Für n = 1 gibt es genau einen Banyan mit s = f = 2 (Bild 4.52), der bereits von<br />

195


N =4<br />

N =4<br />

3 3<br />

N =6<br />

N =8<br />

2 2<br />

n=2, s=2, f=3<br />

N =9<br />

1 1<br />

N =16<br />

n=2, s=2, f=4<br />

Bild 4.49: Beispiele <strong>für</strong> regelmäßige <strong>und</strong> nicht-rechteckige Banyans.<br />

N =4<br />

3 3<br />

N =4<br />

N =6<br />

2 2<br />

N =8<br />

n=2, s=2<br />

Ebene 1: f 1=2<br />

Ebene 2: f =3<br />

2<br />

N =6<br />

1 1<br />

N =8<br />

n=2, s=2<br />

Ebene 1: f<br />

1=2<br />

Ebene 2: f =4<br />

2<br />

Bild 4.50: Beispiele <strong>für</strong> unregelmäßige <strong>und</strong> nicht-rechteckige Banyans.<br />

Bild 4.51: Beispiele <strong>für</strong> Graphen, die keine Banyans sind.<br />

anderen Gebieten her bekannt ist. Dieser Banyan wird beispielsweise von D.<br />

Knuth [Knuth84] als Bowtie bezeichnet. In der Terminologie der schnellen<br />

Fourier-Transformation heißt er Butterfly.<br />

Banyans mit n = 1 <strong>und</strong> beliebigen f <strong>und</strong> s sind unter dem Namen Kreuzschienenverteiler<br />

in der Telefonvermittlungstechnik seit mehr als 100 Jahren be-<br />

196


Bild 4.52: Einziger Banyan der Größe n=1 <strong>und</strong> f=s=2.<br />

kannt (Bild 4.53). Sie zählen in der Telekommunikation <strong>und</strong> bei Parallelrechnern<br />

nach wie vor zu den wichtigsten dynamischen Verbindungstopologien.<br />

s Ausgangsknoten mit fan in f<br />

. . .<br />

. . .<br />

f Eingangsknoten mit spread s<br />

(f,s,1)-Banyan<br />

=<br />

s Ausgänge<br />

. . .<br />

fxs-<br />

Kreuzschienen=<br />

verteiler<br />

f Eingänge<br />

. . .<br />

Bild 4.53: Ein (f,s,1)-Banyan ist ein Kreuzschienenverteiler.<br />

Weiterhin wurden von Goke <strong>und</strong> Lipovski [Goke73] <strong>und</strong> von Lipovski <strong>und</strong> Malek<br />

[Lipovki87] zwei bestimmte Banyan-Kategorien veröffentlicht, die beide<br />

zur Untergruppe der n-Ebenen-Banyans zählen, aber auf verschiedenen Konstruktionsweisen<br />

beruhen <strong>und</strong> topologisch voneinander unabhängig sind. Das<br />

sind der Switch Banyan (SW-Banyan) <strong>und</strong> der Cylindrical Cross Hatched-Banyan<br />

(CC-Banyan). Diese Banyan-Typen sind <strong>für</strong> n=f=s=2 in Bild 4.54 dargestellt.<br />

(2,2,2)-SW<br />

Banyan<br />

(2,2,2)-CC<br />

Banyan<br />

inverser<br />

(2,2,2)-CC<br />

Banyan<br />

Bild 4.54: (2,2,2)-SW- <strong>und</strong> CC-Banyans.<br />

Es zeigt sich, daß das Spiegelbild zum SW-Banyan (inverser SW-Banyan)<br />

identisch zum normalen SW-Banyan ist, weil dieser aufgr<strong>und</strong> seiner Mittensymmetrie<br />

durch topologieerhaltendes Drehen um 180° in einen gespiegelten<br />

197


SW-Banyan überführt werden kann. Anders sind die Verhältnisse beim CC-Banyan:<br />

Hier verhalten sich Bild <strong>und</strong> Spiegelbild wie die linke <strong>und</strong> rechte Hand<br />

zueinander, stellen also zwei verschiedene Topologien dar.<br />

Sowohl SW- als auch CC-Banyan bestehen aus Eingangs-, Ausgangs- <strong>und</strong><br />

Zwischenknoten sowie den Verdrahtungsebenen <strong>und</strong> können mit regelmäßigem<br />

oder unregelmäßigem spread <strong>und</strong> fan in konstruiert werden. Im regelmäßigem<br />

Fall lassen sie sich eindeutig durch die Angabe von "(f, s, n)-SW" bzw.<br />

"(f, s, n)-CC" charakterisieren.<br />

Während <strong>für</strong> n=f=s=2 genau drei verschiedene Banyans existieren, die<br />

topologisch verschieden sind, gibt es <strong>für</strong> n=3 <strong>und</strong> f=s=2 einen großen Sprung in<br />

der Zahl möglicher Banyans: Laut E. Hotzel [Hotzel95] existieren 325 dreistufige,<br />

binäre Banyans, die außer der Typangabe SW- bzw. CC-Banyan keinen<br />

eigenen Namen mehr haben <strong>und</strong> von denen 168 topologisch unabhängig sind.<br />

Alle 325 Banyans realisieren darüber hinaus unterschiedliche Mengen von<br />

Permutationen, so daß sie auch funktional verschieden sind. Für n>3 ist die genaue<br />

Zahl der Banyans bereits nicht mehr bekannt. Man weiß nur, daß sie zwischen<br />

2 2n – 1<br />

– 13 <strong>und</strong> 2 ( n – 1)2<br />

2 n – 1<br />

liegt [Hotzel95].<br />

4.7.5 Dualität der Banyans<br />

Nach Lipovski <strong>und</strong> Malek [Lipovski87] kann jeder Banyan auf zwei verschiedene<br />

Arten interpretiert werden: In der ersten Interpretation stellen die Knoten<br />

des Banyans fxs-Schalter dar, <strong>und</strong> die Kanten zwischen den Knoten entsprechen<br />

der Verdrahtung zwischen den Schaltern verschiedener Ebenen. Diese Interpretation<br />

wird auch als Aktivknotenmodell bezeichnet, weil jeder Knoten eine<br />

Schaltfunktion ausübt.<br />

In der zweiten Interpretationsweise, die <strong>für</strong> Banyans möglich ist, sind die<br />

Knoten des Graphen Anschlußpunkte <strong>für</strong> Leitungen (sog. "Lötstützpunkte")<br />

<strong>und</strong> die Kanten repräsentieren Ein/Ausschalter. Hier haben die Knoten keine<br />

Schaltfunktion (= Passivknotenmodell).<br />

In Bild 4.55 ist exemplarisch ein SW-Banyan aus 3 Ebenen mit f=s=2 gezeigt,<br />

der gemäß des Aktivknotenmodells interpretiert <strong>und</strong> in Bild 4.56 als<br />

logN-Netz dargestellt wird. Die Knotenein- <strong>und</strong> ausgänge haben dazu je zwei<br />

Leitungen zum Anschluß an Prozessoren oder Rechner.<br />

Man sieht, daß die Topologie des (2, 2, 3)-SW-Banyans in dieser Interpretation<br />

bis auf eine Unshuffle-Stufe am Ausgang identisch mit dem bereits bekannten<br />

Indirect Binary n-Cube [Pease77] ist. Daß dieses aus dem Banyan abgeleitete<br />

Netz auch ohne Unshuffle-Stufe am Ausgang funktionieren kann, zeigt Bild<br />

4.57, in dem das Routing in diesem Graphen <strong>für</strong> den Fall von 16 Ein- <strong>und</strong> Ausgängen<br />

exemplarisch dargestellt ist.<br />

Das Passivknotenmodell erlaubt eine besondere Optimierung vorzunehmen: In<br />

einem separaten Schritt können die Knoten benachbarter Ebenen <strong>und</strong> deren<br />

Kanten zu sxf-Schaltern zusammengefaßt werden, um dadurch eine Vereinfachung<br />

der Netzstruktur zu erreichen. Beispielsweise kann man zwei gegenüber-<br />

198


E<br />

i<br />

n<br />

g<br />

ä<br />

n<br />

g<br />

e<br />

A<br />

u<br />

s<br />

g<br />

ä<br />

n<br />

g<br />

e<br />

Bild 4.55: (2, 2, 3)-SW-Banyan.<br />

β 2<br />

β 3<br />

β 4<br />

Bild 4.56: (2, 2, 3)- SW-Banyan in der Aktivknoteninterpretation.<br />

E(i<br />

i 4 i 3 i 2 i 1 ,o 2 )<br />

β<br />

1 ⎯ ⎯ ⎯ ⎯ → i 4 i 3 i 2 o 2<br />

2 ⎯ ⎯ →<br />

E(i<br />

i 4 i 3 o 2 i 2 ,o 3 )<br />

β<br />

2 ⎯ ⎯ ⎯ ⎯ → i 4 i 3 o 2 o 3 3 ⎯ ⎯ →<br />

E(i<br />

i 4 o 3 o 2 i 3 ,o 4 )<br />

β<br />

3 ⎯ ⎯ ⎯ ⎯ → i 4 o 3 o 2 o 4 4 ⎯ ⎯ →<br />

E(i<br />

o 4 o 3 o 2 i 4 ,o 1 )<br />

4 ⎯ ⎯ ⎯ ⎯ → o 4 o 3 o 2 o 1<br />

Bild 4.57: Funktion des (2, 2, 3)-SW-Banyans in der Aktivknoteninterpretation.<br />

liegende Knotenpaare aus zwei benachbarten Ebenen zu einem 2x2-Schalter<br />

zusammenfassen; so, wie dies in Bild 4.58a dargestellt ist. In der Verallgemeinerung<br />

dieses Schrittes ist die Zusammenfassung auch dann erlaubt, wenn das<br />

Knotenpaar in derselben Ebene nicht direkt benachbart ist (Bild 4.58b). Einzige<br />

Voraussetzung dabei ist, daß Quadrupel der Struktur im Netz existieren, die<br />

zu 2x2-Schaltern verschmolzen werden können.<br />

Zur Banyan-Optimierung ist zu sagen, daß jeder Banyan, der nach dem Passivknotenmodell<br />

interpretiert wird, umgezeichnet werden kann, d.h. daß alle<br />

Knotenquadrupel in 2x2-Schalter umwandelbar sind. Je 4 Kanten in "Schmet-<br />

199


lassen sich dabei zu einem 2x2-Schalter zusammenfas-<br />

terlings"-Topologie<br />

sen.<br />

a)<br />

=<br />

b) =<br />

Bild 4.58: Zusammenfassung von Ein-/Ausschaltern in Schmetterlings-Topologie.<br />

Beispiel:<br />

Das Zusammenfassen von Banyan-Knoten zu 2x2-Schaltern ist in Bild 4.59 <strong>für</strong><br />

den Graphen des (2, 2, 3)-Banyans exemplarisch gezeigt. Aus seinen vier Knotenebenen<br />

entsteht so ein 3 stufiges Netz (Bild 4.59b).<br />

1. Knoten<br />

Spalte<br />

2. Knoten<br />

Spalte<br />

3. Knoten<br />

Spalte<br />

4. Knoten<br />

Spalte<br />

a)<br />

E<br />

i<br />

n<br />

g<br />

ä<br />

n<br />

g<br />

e<br />

A<br />

u<br />

s<br />

g<br />

ä<br />

n<br />

g<br />

e<br />

Aus 1.+2.<br />

Knoten<br />

Spalte<br />

Aus 2.+3.<br />

Knoten<br />

Spalte<br />

Aus 3.+4.<br />

Knoten<br />

Spalte<br />

b)<br />

E<br />

i<br />

n<br />

g<br />

ä<br />

n<br />

g<br />

e<br />

0<br />

1<br />

2<br />

3<br />

0<br />

1<br />

2<br />

3<br />

A<br />

u<br />

s<br />

g<br />

ä<br />

n<br />

g<br />

e<br />

β 2<br />

β 2<br />

β 3<br />

β 3<br />

Bild 4.59: (2, 2, 3) Banyan in der Passivknoteninterpretation.<br />

200


Die nach Bild 4.59b entstandene Topologie kann durch Verketten der beiden<br />

mittleren Permutationen β 2 <strong>und</strong> β 3 zu einer einzigen Verdrahtungsstufe weiter<br />

vereinfacht werden. Wird dieser Schritt durchgeführt, erhält man eine zu den<br />

klassischen logN-Netzen ähnliche Topologie, die in Bild 4.60 dargestellt ist.<br />

0<br />

1<br />

2<br />

3<br />

0<br />

1<br />

2<br />

3<br />

β 2<br />

σ 3<br />

β 3<br />

σ 3<br />

β 2<br />

β 3<br />

Bild 4.60: Der (2, 2, 3)-SW-Banyan in der 2. Interpretation nach Verketten der beiden mittleren<br />

Verdrahtungen.<br />

Das Verketten der Verdrahtungen entspricht dem Satz, daß = gilt, der<br />

bereits vom Kapitel über die Algebra der Permutationen bekannt ist. Damit<br />

kann das optimierte Netz <strong>für</strong> den Fall von n = 3 analytisch definiert werden:<br />

Def. 4.19: N neu<br />

= Eβ 2<br />

Eσ 3<br />

Eβ 3<br />

.<br />

Die Topologie N neu , die aus dem (2, 2, 3 )-SW-Banyan gewonnen wurde, ist ein<br />

korrekt funktionierendes logN-Netz, wie man anhand des in Bild 4.61<br />

dargestellten Routing-Schemas erkennen kann:<br />

E(i<br />

i 3 i 2 i 1 ,o 1 )<br />

β<br />

1 ⎯ ⎯ ⎯ ⎯ → i 3 i 2 o 1 ⎯ ⎯ 2<br />

→<br />

E(i<br />

i 3 o 1 i 2 ,o 2 )<br />

σ<br />

2 ⎯ ⎯ ⎯ ⎯ → i 3 o 1 o 2 ⎯ ⎯ 3<br />

→<br />

E(i<br />

o 1 o 2 i 3 ,o 3 )<br />

β<br />

3 ⎯ ⎯ ⎯ ⎯ → o 1 o 2 o 3 ⎯ ⎯ 3<br />

→<br />

o 3 o 2 o 1<br />

Bild 4.61: Funktionsweise des Netzes N neu <strong>für</strong> 8 Ein-/Ausgänge.<br />

N neu wiederum läßt sich durch ein die Netztopologie erhaltendes Vertauschen<br />

des 1. <strong>und</strong> 2. Kreuzschalters in der 3. Spalte auf den bekannten Indirect<br />

Binary n-Cube zurückführen (Bild 4.62).<br />

Das bedeutet, daß die 2. Interpretation des (2,2,3)-SW-Banyan identisch ist<br />

zum 3 stufigen Indirect Binary n-Cube inklusive einer Unshuffle-Permutation<br />

am Ausgang. In analoger Weise lassen sich SW-Banyans mit mehr als 3 Ebenen<br />

in eine äquivalente Darstellung als Indirect Binary n-Cube umwandeln.<br />

Insgesamt kann gesagt werden, daß ein n-Ebenen-Banyan, der gemäß des<br />

201


0<br />

1<br />

2<br />

3<br />

0<br />

2<br />

1<br />

3<br />

β 2<br />

β 3<br />

σ 3<br />

Bild 4.62: Das Netz N neu als vollständiger Indirect Binary n-Cube.<br />

Passivknotenmodells interpretiert wird, in ein logN-Netz aus n Schaltstufen<br />

umgewandelt werden kann. Die Zahl der Eingangs- <strong>und</strong> Ausgangsknoten im<br />

Banyan entspricht dabei der Zahl der Ein- <strong>und</strong> Ausgänge beim logN-Netz. Im<br />

Aktivknotenmodell dagegen ist die Zahl der Eingänge des logN-Netzes das f-<br />

fache der Eingangsknotenzahl <strong>und</strong> die Zahl der Ausgänge entspricht dem s-fachen<br />

der Ausgangsknotenzahl. Die Anzahl der Stufen des logN-Netzes ist in<br />

diesem Fall um 1 größer als die Ebenenzahl des Banyans, da definitionsgemäß<br />

nicht die Zahl der Knoten-, sondern der Verdrahtungsebenen gezählt wird. Ein<br />

n-Ebenen-Banyan aus (n+1) Knotenebenen resultiert also in einem (n+1)-stufigen<br />

logN-Netz.<br />

4.7.6 Beispiel eines kommerziellen Banyan-Netzes<br />

Es gibt relativ wenige kommerzielle Implementierungen eines Banyan-Netzes.<br />

Die "Fat Tree"-Topologie des CM5-Rechners von Thinking Maschines Corp.<br />

[Hillis85] stellt eine solche dar. In Bild 4.63 ist das Netz einer 64-Prozessor<br />

CM5 dargestellt, das aus einer Vielzahl von 4x2-Kreuzschienenverteiler besteht,<br />

die untereinander jeweils fest verdrahtet sind.<br />

. . .<br />

1 2,3,<br />

4<br />

Bild 4.63: Verdrahtung einer 64-Prozessor CM5 in Fat Tree-Topologie.<br />

202


Ersetzt man in dieser Topologie die Kreuzschienenverteiler durch die Knoten<br />

eines Banyans, erkennt man, daß es sich bei Bild 4.63 um einen regelmäßigen,<br />

nicht rechteckigen n-Ebenen Banyan handelt mit f=4, s=2 <strong>und</strong> n=2. Der Graph<br />

dieses Banyans ist in Bild 4.64 abgebildet. Die Prozessoren der CM-5 werden<br />

. . .<br />

Bild 4.64: Fat Tree als Banyan.<br />

. . .<br />

mit beiden Ports an benachbarte Eingabeknoten in der untersten Knotenebene<br />

angeschlossen <strong>und</strong> die Kanäle bidirektional betrieben. Dadurch entsteht eine<br />

Netztopologie, die die Kommunikation zwischen räumlich benachbarten Prozessoren<br />

begünstigt.<br />

4.8 Switch-Banyans<br />

Die bekanntesten Vertreter aus der Kategorie der n-Ebenen-Banyans sind die<br />

Switch- <strong>und</strong> Cylindrical Cross Hatched-Banyans von Goke <strong>und</strong> Lipovski<br />

[Goke73], abgekürzt SW- <strong>und</strong> CC-Banyans.<br />

Um die Definition von SW-Banyans angeben zu können, müssen zuvor die<br />

Begriffe des elementaren Weges <strong>und</strong> der Korrespondenzfunktion [Lipovski87]<br />

eines Graphen vorgestellt werden.<br />

Def. 4.20: Ein elementarer Weg der Länge i ist eine Folge von Kanten zwischen<br />

zwei Knoten s0 <strong>und</strong> si, gemäß s0->s1->s2,...,->si so, daß kein Knoten zweimal<br />

durchlaufen wird.<br />

Def. 4.21: Die Korrespondenzfunktion G(i, A) einer Menge A von Knoten in<br />

einem Graphen ist die Knotenmenge, die am Ende eines elementaren Weges der<br />

Länge i ausgehend von einem Knoten a ∈ A liegt. Ist i


(0≤i


Der (2,2,4)-SW-Banyan entsteht durch Verdoppeln des (2,2,3)-Banyans <strong>und</strong><br />

durch Verbinden beider Teile in einer zusätzlichen Butterfly-Verdrahtungsebene.<br />

Dieser Konstruktionsschritt läßt sich <strong>für</strong> jede gegebene Ebenzahl n anwenden,<br />

um daraus (n+1)-Ebenen SW-Banyans zu erhalten. SW-Banyans mit<br />

f=s>2 können in analoger Weise dadurch gewonnen werden, daß man mit einem<br />

(f>2,s=f,1)-Ebenen SW-Banyan anfängt <strong>und</strong> diesen f-fach repliziert. Die<br />

Butterfly-Permutation wird dann zur Basis f durchgeführt, so wie es im Abschnitt<br />

"Verallgemeinerte Gr<strong>und</strong>permutationen" beschrieben ist. Mit dieser<br />

Methode kann man relativ einfach beliebige (f,s=f,n)-SW-Banyans erhalten.<br />

Als nächstes werden zwei weitere Konstruktionsweisen, die nicht auf dem<br />

Replizieren einer Gr<strong>und</strong>struktur beruhen, exemplarisch <strong>für</strong> einen zwei-Ebenen-<br />

SW-Banyan beschrieben. Die angegebenen Methoden können auf n>2 Ebenen<br />

erweitert werden. Bemerkenswert ist, wie beide Konstruktionsweisen denselben<br />

Graphen liefern, obwohl sie auf verschiedenen Prinzipien basieren.<br />

In Bild 4.66 ist die Konstruktionsweise eines (2,2,2) SW-Banyans gezeigt,<br />

die auf Bäumen als Gr<strong>und</strong>elemente beruht [Lipovski87] <strong>und</strong> die in drei Schritten<br />

abläuft: Zuerst geht man von einem inversen Baum der Höhe 2 aus (Bild<br />

4.66a) <strong>und</strong> verdoppelt seine Spitze (Bild 4.66b). Danach werden die darunterliegenden<br />

Knoten ebenfalls verdoppelt <strong>und</strong> baumartig miteinander verb<strong>und</strong>en<br />

(Bild 4.66c). Schließlich ergibt die Überlagerung aller Teilbäume im letzten<br />

Schritt den SW-Banyan, wobei durch Umsortieren der beiden mittleren Knoten<br />

in der obersten Knotenebene da<strong>für</strong> gesorgt wird, daß es zueinander <strong>parallel</strong> verlaufende<br />

Kanten gibt (Bild 4.66d).<br />

a) b) c) d)<br />

Bild 4.66: Konstruktion eines (2, 2, 1)- SW-Banyans aus Bäumen.<br />

Diese Konstruktion benützt den Satz, daß der Subgraph, der in einem Banyan<br />

einen beliebigen Eingangsknoten mit allen Ausgangsknoten verbindet, ein<br />

Baum ist.<br />

Die dritte Art, SW-Banyans zu konstruieren, liegt in der rekursiven Ersetzung<br />

von Knoten durch Kreuzschienenverteiler, die ebenfalls als Banyan dargestellt<br />

werden [Lipovski87]. Um einen n-Ebenen-Banyan zu erzeugen, sind (n-1) Rekursionsstufen<br />

erforderlich. Man beginnt beim kleinsten SW-Banyan, den es<br />

gibt, dem 1-Ebenen-SW-Banyan, <strong>und</strong> ersetzt darin alle Knoten mit f zulaufenden<br />

<strong>und</strong> s abgehenden Pfeilen durch Banyan-Kreuzschienenverteiler der Größe<br />

fxs. Daraus erhält man nach dem Zusammenfassen zweier benachbarter<br />

Knotenebenen einen 2-Ebenen-SW-Banyan, bei dem wiederum alle Knoten<br />

durch (fxs)-Kreuzschienenverteiler ersetzt werden. Danach werden benachbar-<br />

205


te Knotenebenen zu jeweils einer Ebene zusammengefaßt, so daß man einen 3-<br />

Ebenen-SW-Banyan hat, usw. Der beschriebene Vorgang wird solange wiederholt,<br />

bis man den gewünschten n-Ebenen-SW-Banyan erhält.<br />

Die dritte Konstruktionsweise benützt den Satz, daß jeder Banyan auch dann<br />

ein Banyan bleibt, wenn jeder Knoten mit f zulaufenden <strong>und</strong> s abgehenden Pfeilen<br />

durch einen (f,s,1)-SW-Banyan ersetzt wird, da durch diese Operation die<br />

Eigenschaft der Pfadeindeutigkeit nicht verloren geht.<br />

In Bild 4.67 ist der Vorgang <strong>für</strong> einen 2-Ebenen-Banyan mit f=s=2 gezeigt.<br />

Man startet mit dem (2,2,1)-Banyan (Bild 4.67a), <strong>und</strong> ersetzt jeden Knoten<br />

durch einen (2,2,1)-Banyan (= Kreuzschienenverteiler) (Bild 4.67b). Dann vereinigt<br />

man die Knoten der beiden mittleren Knotenebenen zu einer einzigen<br />

Knotenebene (Bild 4.67c), wodurch die Kanten zwischen diesen Knoten entfallen.<br />

Im letzten Schritt sortiert man die beiden mittleren Knoten der obersten<br />

Knotenebenen so um, daß <strong>parallel</strong>e Kanten entstehen, wodurch der (2,2,2)-SW-<br />

Banyan erscheint (Bild 4.67d).<br />

a)<br />

(2,2,1)-Banyan<br />

b)<br />

Rekursives<br />

Ersetzen<br />

c)<br />

Streichen der urspr.<br />

Kanten <strong>und</strong> Verschmelzen<br />

der mittleren Knoten<br />

d)<br />

Umsortieren<br />

in <strong>parallel</strong>e<br />

Kanten<br />

Bild 4.67: Rekursive Konstruktion eines (2,2,2)-SW-Banyans aus einem (2,2,1)-SW-Banyan.<br />

Die Konstruktion läßt sich auf die Erzeugung von (f, s, n)-SW-Banyans erweitern,<br />

wenn jeder Knoten im Ausgangsgraphen als fxs-Kreuzschienenverteiler<br />

expandiert wird.<br />

Routing in regelmäßigen <strong>und</strong> rechteckigen SW-Banyans<br />

Das Routing in einem regelmäßigen <strong>und</strong> rechteckigen SW-Banyan mit dem Tripel<br />

(f, s=f=const., n) verläuft ähnlich wie das Routing in den klassischen logN-<br />

Netzen, d.h., die Zieladresse kann dezentral <strong>für</strong> die Wegewahl herangezogen<br />

werden.<br />

Numeriert man die Knoten in jeder Ebene in einem Banyan-Graphen von links<br />

nach rechts fortlaufend von 0 bis N-1 zur Zahlenbasis s, dann wird der Pfad<br />

durch den Graphen so bestimmt, daß jeder Knoten einer Ebene eine Ziffer der<br />

Zieladresse auswertet, beginnend mit der niedrigstwertigen Ziffer in der Ebene<br />

0. Ist in der i-ten Ebene die i-te Ziffer gleich 0, wird der Knoten am Ausgang 0<br />

(ganz links) verlassen, bei 1 wird der Ausgang 1 gewählt, bei 2 der Ausgang 2,<br />

206


usw. Bei dem gewählten Numerierungsschema entspricht der höchste Ziffernwert<br />

(=s-1) dem Ausgang, der ganz rechts am Knoten anliegt. In Bild 4.68<br />

ist ein Routing-Beispiel <strong>für</strong> den Weg "Eingang 7 (binär 111) nach Ausgang 2<br />

(010)" in einem (2,2,3)-SW-Banyan dargestellt. Die Routing-Reihenfolge der<br />

Ausgangskanäle lautet: "Links, rechts, links".<br />

000 001 010 011 100 101 110 111<br />

0<br />

1<br />

010 heißt:<br />

"links,<br />

rechts,<br />

links"<br />

(LSB<br />

zuerst)<br />

000 001 010 011 100 101 110 111<br />

Bild 4.68: Routing in einem (2,2,3)-SW-Banyan.<br />

0<br />

Beim Routing in SW-Banyans bestimmt die Zieladresse den Pfad im Netz, ohne<br />

daß dazu die Position des Eingangsknotens berücksichtigt werden muß, d.h., es<br />

handelt sich bei der Zieladresse um eine absolute Routing-Adresse.<br />

Spezielle SW-Banyan-Eigenschaften<br />

SW-Banyans besitzen zwei Eigenschaften, die Bedeutung sowohl <strong>für</strong> die Architektur<br />

von Parallelrechnern als auch <strong>für</strong> Vermittlungseinrichtungen der Telekommunikation<br />

haben. Die erste Eigenschaft betrifft die Erzeugung blokkierungsfreier<br />

Netze aus zwei hintereinandergeschalteten Subnetzen, die<br />

ihrerseits nicht blockierungsfrei sind. Auf dieser Eigenschaft beruht das bekannte<br />

Benes-Netz [Benes65] sowie das doppelte Baseline- [Wu80a] <strong>und</strong> das<br />

Lee-Netz [Lee85], die noch erläutert werden. Die zweite Eigenschaft erlaubt,<br />

die in <strong>parallel</strong>en Programmen vorhandene Datenlokalität in der Netztopologie<br />

zu berücksichtigen <strong>und</strong> dadurch die Interprozessorkommunikation zu beschleunigen.<br />

Die Blockierungsfreiheit beruht auf folgendem Satz:<br />

Satz 4.7: Jede Kaskadierung zweier Banyans, die sich in ein topologisch äquivalentes<br />

Benes-Netz, doppeltes Baseline-Netz oder Lee-Netz umwandeln läßt,<br />

liefert ein durch Umordnen interner Wege blockierungsfreies Netz.<br />

Durch die Hintereinanderschaltung zweier Banyans, die den Bedingungen von<br />

Satz 4.7 genügt, erhält man ein Mehrpfadnetz, d.h., es existiert mehr als ein<br />

207


Pfad zwischen jedem Ein- <strong>und</strong> Ausgang, das aufgr<strong>und</strong> der Alternativen in der<br />

Wegewahl die neue Eigenschaft hat, blockierungsfrei zu sein. Blockierungsfreiheit<br />

ist beispielsweise <strong>für</strong> Echtzeitanwendungen von großer praktischer Relevanz,<br />

da nur in diesem Fall eine bestimmte maximale Durchlaufzeit durch das<br />

Netz garantiert werden kann. Darüberhinaus wird durch die Red<strong>und</strong>anz in der<br />

Wegewahl zusätzlich Fehlertoleranz gewonnen.<br />

Von Satz 4.7 abgeleitet existieren zwei Vermutungen, die bislang nicht bewiesen<br />

werden konnten. Sie sollen hier der Vollständigkeit halber aufgeführt<br />

werden <strong>und</strong> um zu zeigen, daß die Theorie der dynamischen Netze noch nicht<br />

abgeschlossen ist:<br />

• "Jede Hintereinanderschaltung zweier spiegelsymmetrischer Banyans ist<br />

durch Umordnen interner Wege blockierungsfrei", bzw.<br />

• "Jede Hintereinanderschaltung zweier gleicher, bzw. zweier verschiedener<br />

Banyans gleicher Knotenzahl ist durch Umordnen interner Wege blockierungsfrei".<br />

Die zweite spezielle Eigenschaft der SW-Banyans betrifft die Lokalität in der<br />

Netztopologie, die zu einer Beschleunigung der Interprozessorkommunikation<br />

führen kann. Um diese Eigenschaft zu nutzen, ist es erforderlich, die unidirektionale<br />

Banyan-Struktur so zu modifizieren, daß auf allen Kanälen (Kanten des<br />

Banyans) Daten bidirektional transferiert werden können. In diesem Fall werden<br />

die Knoten der obersten Banyan-Ebene nicht mehr zur Datenausgabe verwendet;<br />

vielmehr werden Sende- <strong>und</strong> Empfangsdaten an der Eingangsknotenebene<br />

gelesen <strong>und</strong> geschrieben. Alle Knoten werden so modifiziert, daß sie<br />

in der Lage sind, Datenpakete "nach unten", d.h. in Richtung der Eingangsknoten<br />

zurückzusenden. Alle Knoten im derart betriebenen SW-Banyan dienen potentiell<br />

zum "Zurückspiegeln" einlaufender Nachrichten nach unten. In Bild<br />

4.69 sind drei Kommunikationsbeispiele <strong>für</strong> diesen Modus gezeigt:<br />

• Von Knoten 0 mit Knoten 1 (binär 001),<br />

• Von Knoten 0 mit Knoten 2 (010) <strong>und</strong><br />

• Von Knoten 0 mit Knoten 4 (100).<br />

Die Lokalität in der Kommunikation zeigt sich darin, daß mit abnehmender Distanz<br />

der Kommunikationspartner in x-Richtung die benötigte Knotenebene (y-<br />

Richtung) ebenfalls niedriger wird. Im Beispiel nach Bild 4.69 läuft die Kommunikation<br />

von Knoten 0 nach 4 über die Ebene 3, von 0 nach 2 über Ebene 2<br />

<strong>und</strong> von 0 nach 1 über Ebene 1. Damit kann die Kommunikation umso schneller<br />

ablaufen, je "näher" die kommunizierenden Knoten sind, weil die Latenz des<br />

Datentransfers sinkt. Die Topologie des (2, 2, 3)-SW-Banyans des Beispiels<br />

gruppiert in der Knotenebene 1 die Menge der Eingangsknoten in vier Zweiergruppen,<br />

in der Knotenebene 2 die Menge der Zweiergruppen in zwei Vierergruppen,<br />

<strong>und</strong> in der obersten Ebene werden beide Vierergruppen zu einer Achtergruppe<br />

zusammengefaßt. Die Entfernung (Pfadlänge) innerhalb einer<br />

Zweiergruppe ist am kleinsten, gefolgt von der Entfernung zwischen zwei<br />

Zweier- <strong>und</strong> zwei Vierergruppen, usf.<br />

208


000 001 010 011 100 101 110 111<br />

Knoten=<br />

ebene 3<br />

Knoten=<br />

ebene 2<br />

Knoten=<br />

ebene 1<br />

000 001 010 011 100 101 110 111<br />

Knoten=<br />

ebene 0<br />

Bild 4.69: Lokalität der Kommunikation im bidirektionalen (2, 2, 3)-SW-Banyan.<br />

Allgemein werden in n-Ebenen SW-Banyans mit zunehmender Ebenenzahl immer<br />

mehr Knoten zu einer übergeordneten Gruppe zusammengefaßt. Innerhalb<br />

einer Gruppe kann eine lokale Kommunikation schneller durchgeführt werden<br />

als zwischen den Gruppen. Anwendungen mit Datenlokalität können diese Eigenschaft<br />

durch geeignetes Plazieren der kommunizierenden Prozesse nutzen.<br />

4.8.1 CC-Banyans<br />

Neben den Switch-Banyans (SW-Banyans) sind die Cylindrical Cross Hatched-Banyans<br />

<strong>und</strong> deren Verallgemeinerung die Conical Cross Hatched-Banyans<br />

[Lipovski87] bekannt. Die beiden letzteren werden im folgenden zu der<br />

Gruppe der CC-Banyans zusammengefaßt.<br />

Allgemein betrachtet, sind <strong>für</strong> die Konstruktion beliebiger Banyans drei<br />

verschiedene Parameter maßgebend, die die Verdrahtung zwischen den Knotenebenen<br />

bestimmen:<br />

• die Regularität,<br />

• die Rechteckigkeit <strong>und</strong><br />

• die Mittelsymmetrie.<br />

Die bereits beschriebenen SW-Banyans beruhen auf Mittelsymmetrie. Die<br />

Klasse der CC-Banyans dagegen ist nicht mittelsymmetrisch, man hat hier<br />

wrap-aro<strong>und</strong>-Verbindungen, die der CC-Topologie einen "modulo-mäßigen"<br />

Charakter verleihen.<br />

Alle obigen drei Verdrahtungsparameter können untereinander kombiniert<br />

werden, so daß es insgesamt 8 verschiedene Möglichkeiten gibt, Banyans zu<br />

konstruieren. Bild 4.70 zeigt eine anhand dieser Parameter vorgenommene<br />

Klassifikation der Banyan-Netze.<br />

SW-Banyans haben nach dieser Klassifikation einen regelmäßigen Aufbau,<br />

sind rechteckig <strong>und</strong> mittelsymmetrisch. CC-Banyans sind regelmäßig, aber<br />

209


Banyan-Netze<br />

Regularität<br />

regelmäβig<br />

nicht regelmäβig<br />

Rechteckigkeit<br />

rechteckig<br />

nicht rechteckig<br />

Mittelsymmetrie<br />

mittelsymmetrisch<br />

nicht<br />

mittelsymmetrisch<br />

Bild 4.70: Klassifikation der Banyans.<br />

nicht mittelsymmetrisch. Die zylindrischen CC-Banyans unterscheiden sich<br />

von den konischen CC-Banyans darin, daß sie zusätzlich rechteckig sind. Andere<br />

Banyans sind nicht regelmäßig aufgebaut.<br />

Definition von zylindrischen CC-Banyans<br />

Bei zylindrischen CC-Banyans gilt f=s=const. Die Menge der zylindrischen<br />

CC-Banyans läßt sich anhand von Def 4.23 mathematisch bestimmen<br />

[Goke73]. In dieser Definition ist zu beachten, daß zwischen Knoten- <strong>und</strong> Verdrahtungsebenen<br />

unterschieden wird. Für konische Banyans, d.h. <strong>für</strong> f≠s, gibt<br />

es eine konstruktive Methode der Erzeugung [Lipovski87], auf die im nächsten<br />

Kapitel eingegangen wird.<br />

Def. 4.23: Seien<br />

0 1 N – 1<br />

V i<br />

, Vi , … , Vi<br />

die Knoten in der Knotenebene i eines<br />

CC-Banyans aus n Verdrahtungsebenen (N=s n , s=f=const.), dann ist ein bel.<br />

Knoten mit dem Knoten der Knotebene i+1 verb<strong>und</strong>en, wenn gilt:<br />

Beispiel:<br />

V i<br />

k<br />

l = ( k + ms i )modN<br />

l<br />

V i + 1<br />

<strong>für</strong> beliebige m (0≤m≤s-1).<br />

In einem CC-Banyan mit s=f=2, d.h., einem binären, zylindrischen CC-Banyan<br />

mit zwei Verdrahtungsebenen kann der freie Parameter m von Def 4.23 die<br />

Werte 0 <strong>und</strong> 1 annehmen. Daraus ergeben sich <strong>für</strong> jede Knotenebene dieses speziellen<br />

Banyans folgende Beziehungen:<br />

• Knotenebene 0: Ein Knoten V k 0 ist mit den Knoten V k k+1<br />

1 (m=0) <strong>und</strong> V 1<br />

(m=1) der Ebene 1 verb<strong>und</strong>en, die zueinander benachbart sind.<br />

• Knotenebene 1: Ein Knoten V k 1 ist mit den Knoten V k k+2<br />

2 (m=0) <strong>und</strong> V 2<br />

(m=1) verb<strong>und</strong>en, die in der Ebene 2 die Distanz 2 haben.<br />

• Knotenebene 2: Ein Knoten V<br />

k<br />

2 ist mit den Knoten V<br />

k<br />

3 (m=0) <strong>und</strong> V<br />

k+4<br />

3<br />

(m=1) verb<strong>und</strong>en, die in der Ebene 3 die Distanz 4 haben, u.s.f.<br />

210


Die graphische Repräsentation des binären, zylindrischen CC-Banyans ist dadurch<br />

gekennzeichnet, daß <strong>für</strong> alle Knoten V i<br />

k<br />

je zwei Kanten existieren, von<br />

denen die erste vertikal <strong>und</strong> die zweite "schräg" nach oben verläuft. Dieser<br />

Sachverhalt ist in Bild 4.71 <strong>für</strong> N=8, s=2 <strong>und</strong> n=3 dargestellt. Darin sind die<br />

wrap-aro<strong>und</strong>-Verbindungen erkennbar, die den Banyan zyklisch <strong>und</strong> deshalb<br />

nicht-mittelsymmetrisch machen. Ebenso wird die Regularität dieser Banyan-<br />

Struktur sichtbar.<br />

Bild 4.71: (2,2,3)-Cylindrical Cross Hatched-Banyan.<br />

Allgemein gilt, daß die Graphen binärer CC-Banyans mit beliebiger Verdrahtungsebenenzahl<br />

n die Eigenschaft haben, daß sich der Abstand zwischen den<br />

( k + s i ) MOD N<br />

+<br />

k<br />

beiden Knoten V i+1 <strong>und</strong> V i 1<br />

der Knotenebene (i+1), mit denen der<br />

k-te Knoten V<br />

k<br />

i der Knotenebene i verb<strong>und</strong>en ist, von Ebene zu Ebene verdoppelt.<br />

Beginnt man in der Knotenebene 0 mit dem Knoten V k 0 , dann haben die<br />

mit V k 0 verb<strong>und</strong>enen Knoten der Knotenebene 1 den Abstand 1. Wählt man die<br />

Knotenebene i=1 als Start, erhält man den Abstand 2, u.s.f. Die Konstruktion<br />

des zylindrischen (2,2,n)-Banyans hat somit eine gewisse Ähnlichkeit zu einem<br />

Barrel Shifter, der Zahlen (in diesem Fall Knotenadressen) um Zweierpotenzen<br />

verschieben kann. Für die Graphen nicht-binärer, zylindrischer CC-Banyans<br />

mit (s,s,n), s>1 gilt:<br />

• Ein Knoten V<br />

k<br />

0 der Knotenebene 0 ist nicht nur mit den Knoten V<br />

k<br />

1 (m=0)<br />

<strong>und</strong> V k+1<br />

1 (m=1) verb<strong>und</strong>en, sondern mit allen Knoten der Adresse<br />

( k + m) MOD N<br />

V 1<br />

(0≤m≤s-1), so daß sich insgesamt s Kanten ergeben, die von<br />

V<br />

k<br />

0 ausgehen, von denen eine vertikal <strong>und</strong> (s-1) schräg verlaufen.<br />

211


• In der Knotenebene 1 münden alle Kanten, die in der Ebene 0 vom Knoten<br />

V 0<br />

k<br />

beginnen, in Knoten, die zueinander benachbart sind. In höheren Ebenen<br />

(i>1) erhöht sich der Abstand der Knoten, auf die die Kanten zulaufen, auf<br />

die Distanz s i .<br />

Der Graph nicht-binärer, zylindrischer CC-Banyans kann in diesem Sinne mit<br />

einem Barrel Shifter verglichen werden, der Zahlen um s i Stellen (s>1, i≥0) verschiebt.<br />

Konstruktion von konischen Banyans<br />

Nicht-rechteckige, d.h. konische CC-Banyans (f(s) sind relativ aufwendig in ihrer<br />

Konstruktion. Im folgenden soll deshalb nur die Erzeugung eines (f, s, 2)-<br />

CC-Banyans erläutert werden, die bereits vier verschiedene Phasen erfordert<br />

[Lipovski87].<br />

In der 1. Phase beginnt man mit der obersten, d.h. 2. Ebene des konischen<br />

CC-Banyans, die als Abwicklung eines fxs-Kreuzschienenverteilers auf einen<br />

Kegelstumpf aufgefaßt wird. In Bild 4.72a ist ein Kegelstumpf mit einem<br />

Kreuzschienenverteiler <strong>für</strong> f=3 <strong>und</strong> s=2 dargestellt, wobei eine Kante kreisförmig<br />

gezeichnet ist, um den "modulo-mäßigen" Charakter dieser Verbindung<br />

herauszustreichen. Im 2. Teil der 1. Phase erzeugt man s Kopien des fxs-Kreuzschienenverteilers,<br />

die um jeweils 360°/s 2 gegeneinander gedreht sind (Bild<br />

4.72b).<br />

360°<br />

0°<br />

360°<br />

0°<br />

Ein fxs<br />

Kreuzschienenverteiler<br />

s verschobene<br />

fxs Kreuzschienenverteiler<br />

a) b)<br />

Bild 4.72: Konstruktion der 2. Ebene eines (3,2,2)-CC-Banyans.<br />

Durch das Kopieren <strong>und</strong> Drehen um den Winkel 360°/s 2 wird die Bogenlänge<br />

zwischen benachbarten Knoten des ursprünglichen Kegelstumpfs gleichmäßig<br />

mit Knotenkopien belegt.<br />

In der 2. Phase werden zur Erzeugung der unteren, d.h. 1. Ebene des CC-Banyans<br />

insgesamt f Kreuzschienenverteiler so aneinandergehängt, daß der Ausgang<br />

der wrap-aro<strong>und</strong>-Verbindung des i-ten (0≤i


gur auf einem zweiten Kegelstumpf so abgerollt, daß alle Knoten gleichmäßig<br />

auf dem Umfang verteilt sind (Bild 4.73b).<br />

a)<br />

360° 0°<br />

b)<br />

360°<br />

0°<br />

Bild 4.73: Erzeugung der 1. Ebene des (3,2,2)-CC-Banyans.<br />

In der 3. Phase werden die beiden Kegelstümpfe so aufeinandergesetzt, daß die<br />

Knoten der Schnittstellen miteinander verschmelzen. Dies ist deshalb möglich,<br />

weil beide Schnittstellen gleich viele Knoten haben (oben fxs <strong>und</strong> unten sxf).<br />

Dieser Vorgang ist in Bild 4.74 dargestellt.<br />

360° 0°<br />

360° 0°<br />

360°<br />

0°<br />

Bild 4.74: Zusammensetzen von 1. <strong>und</strong> 2. Ebene.<br />

Die Projektion von Bild 4.74 auf eine Ebene erzeugt in der vierten Phase den (f,<br />

s, 2)-CC-Banyan (Bild 4.75) in einer 2-dimensionalen Darstellungsweise.<br />

Die geschilderte vierphasige Konstruktion des konischen (3,2,2)-CC-Banyans<br />

kann auf weitere Ebenen <strong>und</strong> andere Parameter f <strong>und</strong> s ausgedehnt werden, um<br />

so beliebige konische CC-Banyans zu erhalten. Ist f=s, wird aus dem Konus ein<br />

Zylinder <strong>und</strong> man erhält rechteckige (zylindrische) CC-Banyans, wie sie bereits<br />

beschrieben wurden.<br />

Die praktische Bedeutung von konischen CC-Banyans liegt darin, daß sich<br />

<strong>für</strong> f>s Datenkonzentratoren (Multiplexer) aufbauen lassen, wie sie z.B. in der<br />

213


Bild 4.75: (3,2,2)-Conical Cross Hatched-Banyan.<br />

Telefonvermittlungstechnik oder bei der Datenübertragung verwendet werden.<br />

s<br />

Durch geeignete Wahl von f, s <strong>und</strong> n läßt sich der Konzentrationsfaktor -<br />

⎝⎠<br />

⎛⎞ n<br />

f<br />

beliebig einstellen. In Bild 4.75 beispielsweise werden 9 Eingänge auf 4 Ausgänge<br />

konzentriert. Entsprechend können <strong>für</strong> f


was dem Wert (011) in Zweierkomplementdarstellung entspricht. Damit lautet<br />

die Wegewahl: "Rechter Ausgang (=1), rechter Ausgang(=1), linker Ausgang<br />

(=0)", wobei man mit dem LSB beginnt. In Bild 4.76 ist das Routing-Beispiel<br />

7->2 dargestellt.<br />

Bei den binären CC-Banyans (s=f=2) sind deshalb relative Adressen <strong>für</strong> das<br />

Routing erforderlich, weil die Verdrahtung zwischen den Stufen einer Shift-<br />

Permutation entspricht, die so definiert ist, daß zu jedem Knoten der Adresse k<br />

aus der Ebene i die Zahl 1,2,4,... in der Ebene (i+1) hinzuaddiert wird, unabhängig<br />

vom Wert k. Allgemein gilt, daß in Ebene i der Wert 2 i hinzuaddiert<br />

wird. Die binäre Shift Permutation ist definiert als:<br />

Gl. 4.43:<br />

V i<br />

= (( a n – 1<br />

a n – 2<br />

, …,<br />

a 0<br />

) + 2 i ) MOD 2 n<br />

0 1 2 3 4 5 6 7<br />

0<br />

1<br />

1<br />

0 1 2 3 4 5 6 7<br />

LSB<br />

zuerst<br />

Bild 4.76: Routing-Beispiel im (2,2,3)-Cylindrical Cross Hatched-Banyan.<br />

Beim Routing ist in der i-ten Knotenebene zu entscheiden, ob es nötig ist, die<br />

horizontale Position um 2 i Knoten zu verschieben (=Ausgang 1), oder ob die<br />

Position unverändert bleiben kann (=Ausgang 0). Für allgemeine Zahlenbasen<br />

s in (f, s, n)-CC-Banyans wird die Basis Zwei durch Basis s ersetzt.<br />

Zusammenfassend kann gesagt werden, daß das Routing in regelmäßigen <strong>und</strong><br />

rechteckigen (s, f, n)-SW- <strong>und</strong> CC-Banyans bis auf die Verwendung von absoluten<br />

bzw. relativen Adressen gleich ist. Beide Male werden die Ziffern der Zieladresse<br />

bzw. der um die Herkunftsadresse verminderten Zieladresse zur Routing-Entscheidung<br />

herangezogen. In beiden Fällen muß die Spezifikation der<br />

Adressen zur Zahlenbasis s erfolgen, die mit den s Ausgängen eines Knotens<br />

identifiziert wird. Dies wird als Ziffern-Routing bezeichnet.<br />

215


4.8.2 Delta-Netze<br />

Im Prinzip können auch Banyan-Netze, die nicht SW- oder CC-Topologie haben,<br />

Ziffern-Routing aufweisen. Aus diesem Gr<strong>und</strong>e faßt man alle Banyans mit<br />

dieser Eigenschaft zu einer neuen Untermenge zusammen, die als die Kategorie<br />

der Delta-Netze bezeichnet wird. Der Begriff Delta-Netz wurde 1979 von J. H.<br />

Patel [Patel79] geprägt <strong>und</strong> zunächst in einem engeren Sinne <strong>für</strong> zwei spezielle<br />

Netzstrukturen verwendet. Die heutige Definition der Delta-Netze ist weiter gefaßt:<br />

Def. 4.24: Jeder regelmäßige n-Ebenen-Banyan, bei dem das Routing zifferngesteuert<br />

abläuft, wird als Delta-Netz bezeichnet.<br />

Insbesondere gehören auch die klassischen logN-Netze zur Delta-Netzkategorie.<br />

Clos- <strong>und</strong> Benes-Netzwerke dagegen sind nicht darin enthalten, da bei ihnen<br />

das Routing nicht zifferngesteuert <strong>und</strong> damit deterministisch abläuft, sondern<br />

Freiheitsgrade beinhaltet.<br />

Delta-Netze beruhen auf der Voraussetzung, daß sich von jedem Eingang zu<br />

jedem Ausgang ein Baum von konstantem Verzweigungsgrad s durch das Netz<br />

legen läßt. Die Ebenen des Baumes entsprechen dabei den Ziffern der Zieladresse.<br />

Die Werte der Ziffern legen die Äste des Baumes in jeder Ebene fest,<br />

d.h., es wird anhand der Ziffer entschieden, welcher Knotenausgang im Banyan<br />

zu beschreiten ist. In der untersten Ebene wird, abhängig von der Topologie des<br />

Netzes, entweder die höchst- (MSD) oder niedrigstwertige Ziffer (LSD) <strong>für</strong> die<br />

Routing-Entscheidung herangezogen. Nachfolgende Ebenen verwenden nachfolgende<br />

Ziffern. An jedem Knoten kann die Routing-Entscheidung dezentral<br />

<strong>und</strong> <strong>parallel</strong> zu anderen Knoten getroffen werden.<br />

Beispielsweise verwenden Omega-, Generalized Cube- <strong>und</strong> Baseline-Netze,<br />

die aus sxs-Schaltern bestehen, zum Routing in der 1. Stufe das MSD zur Basis<br />

s, während das Flip- <strong>und</strong> Indirect Binary n-Cube-Netz das LSD benützen. SW<strong>und</strong><br />

CC-Banyan werten in der untersten Knotenebene ebenfalls das LSD aus.<br />

Beim Butterfly-Netz wird ausnahmsweise die zweitniedrigste Ziffer (LSD+1)<br />

<strong>für</strong> die Wegewahl verwendet. Die Gründe da<strong>für</strong> sind im Kapitel über klassische<br />

logN-Netze beschrieben.<br />

Konstruktion spezieller Delta-Netze<br />

Es sind zwei spezielle Delta-Netze bekannt [Patel79], deren Konstruktion hier<br />

erläutert werden soll. Das erste Netz ist ein nicht-regelmäßiger, nicht-rechtekkiger<br />

Banyan aus 2 Knotenebenen mit fan in f <strong>und</strong> spread s in der Eingangsebene<br />

bzw. mit fan in k <strong>und</strong> spread s in der Ausgangsebene. Die Eingangsebene besteht<br />

aus k Knoten, die in Form von fxs-Kreuzschienenverteilern expandiert<br />

werden. Die Ausgangsebene enthält s Knoten in Form von kxs-Kreuzschienenverteilern.<br />

Dazwischen verlaufen ks=sk Verbindungen. Das Netz hat N 1 =f*k<br />

Ein- <strong>und</strong> N 2 =s 2 Ausgänge, wobei k ein freier Parameter ist, der die Netzgröße<br />

216


estimmt. Man kann das Netz auch als einen kxs-Kreuzschienenverteiler in Banyan-Schreibweise<br />

auffassen, dessen Knoten durch fxs- bzw. kxs-<br />

Kreuzschienenverteiler ersetzt werden. Der Graph dieses Netzes ist <strong>für</strong> k=f=3<br />

<strong>und</strong> s=4 in Bild 4.77 gezeigt. Bei diesem Delta-Netz bestimmt die zweiziffrige<br />

Zieladresse zur Basis 4 das Routing. Dabei legt die 1. Ziffer (MSD) fest, an welchem<br />

Ausgang der 1. Stufe das Paket erscheint. Dadurch wird der Schalter der<br />

2. Stufe festgelegt, zu dem das Paket transportiert wird, da aufgr<strong>und</strong> der gewählten<br />

Verdrahtung der Ausgang j eines Schalters der 1. Stufe mit dem j-ten<br />

Schalter der 2. Stufe verb<strong>und</strong>en ist. Die zweite Ziffer (LSD) bestimmt, zu welchem<br />

Schalterausgang innerhalb des j-ten Schalters das Datenpaket transferiert<br />

wird. Nach zwei zifferngesteuerten Routing-Schritten ist das Ziel erreicht.<br />

00<br />

01<br />

02<br />

10<br />

11<br />

12<br />

21<br />

22<br />

23<br />

Stufe 1<br />

0<br />

1<br />

2<br />

3<br />

k mal fxs Kreuz=<br />

schienenverteiler<br />

Stufe 2<br />

00<br />

01<br />

02<br />

03<br />

10<br />

11<br />

12<br />

13<br />

20<br />

21<br />

22<br />

23<br />

30<br />

31<br />

32<br />

33<br />

s mal kxs Kreuz=<br />

schienenverteiler<br />

Bild 4.77: Spezielles 2-Ebenen Delta-Netz aus fxs- <strong>und</strong> kxs-Kreuzschienenverteilern.<br />

In Bild 4.77 ist exemplarisch das Routing-Beispiel (02) 3 -> (11) 4 eingezeichnet.<br />

Beide Male wird der Ausgang 1 des jeweiligen Kreuzschienenverteilers gewählt.<br />

Das gezeigte, spezielle 2-Ebenen-Delta-Netz kann von jedem Eingang aus<br />

alle Ausgänge erreichen, aber nicht <strong>für</strong> alle Eingänge gleichzeitig. Es ist nicht<br />

blockierungsfrei, da es zur Klasse der Banyan-Netze zählt.<br />

Patel berichtete 1979 von einem anderen speziellen Delta-Netz [Patel79], das<br />

aus Kreuzschaltern aufgebaut ist. Es gehört zur Kategorie der regelmäßigen <strong>und</strong><br />

rechteckigen Banyan-Netze mit f=s=const. In Bild 4.78 ist dieses Netz <strong>und</strong> sein<br />

Spiegelbild <strong>für</strong> N=8 <strong>und</strong> f=s=2 dargestellt. Zusätzlich ist das Routing-Beispiel<br />

(110) 2 -> (011) 2 eingezeichnet, das zeigt, daß bei diesem Netz in der 1. Stufe<br />

das MSB der Zieladresse zum Routing verwendet wird.<br />

Das zweite spezielle Delta-Netz läßt sich folgendermaßen konstruieren<br />

[Patel79]:<br />

217


011<br />

110<br />

Delta-Netz<br />

inverses Delta-Netz<br />

Bild 4.78: Spezielles Delta-Netz <strong>und</strong> sein Spiegelbild <strong>für</strong> n=f=s=2.<br />

• Man legt, beginnend vom 1. Kreuzschalter oben links, einen Verdrahtungsbaum<br />

zu allen Ausgängen (Bild 4.79a).<br />

• Danach werden sukzessive neue Verdrahtungsbäume von einem neuen Eingang<br />

zu allen Ausgängen gelegt, wobei sich verschiedene Bäume überlagern<br />

dürfen (Bild 4.79b <strong>und</strong> c).<br />

• Wichtig ist, daß ein Eingang eines Schalters der Stufe i entweder nur mit oberen<br />

oder nur mit unteren Ausgängen von Schaltern der Stufe (i-1) verb<strong>und</strong>en<br />

ist. Sind alle Eingänge derart verdrahtet, ist die Konstruktion beendet (Bild<br />

4.79d).<br />

Die geschilderte Generierung des zweiten Patelschen Delta-Netzes läßt sich auf<br />

beliebige Parameter N <strong>und</strong> (f=s)>2 erweitern. Die Bedingung, die dabei beachtet<br />

werden muß, ist, daß das Ziffernrouting bewahrt wird.<br />

Für die Konstruktion bedeutet dies, daß alle Eingänge eines Schalters der i-<br />

ten Stufe von derselben Ausgangsposition von Schaltern der (i-1)-ten Stufe herrühren<br />

müssen, also zum Beispiel vom j-ten Ausgang eines Schalters der Stufe<br />

(i-1).<br />

Zwischen benachbarten Ebenen ist jedes Verdrahtungsmuster erlaubt, vorausgesetzt,<br />

daß ein eindeutiger Weg von jedem Eingang zu jedem Ausgang existiert<br />

<strong>und</strong> daß in der Ebene i die Ziffer i der absoluten oder relativen Zieladresse<br />

zur Basis s zum Routing verwendet werden kann. Die i-te Ziffer wird dabei entweder<br />

vom LSD oder vom MSD aus gezählt.<br />

Eigenschaften von Delta-Netzen<br />

Das erste spezielle Delta-Netz hat als besondere Eigenschaft, daß es identisch<br />

mit der linken oder rechten Hälfte eines Clos-Netzes [Clos53] ist. Das heißt,<br />

daß die Verdrahtung dieses Delta-Netzes der verallgemeinerten Shuffle-Permutation<br />

entspricht, die im Kapitel über Clos-Netze vorgestellt wird. Diese Permutation<br />

gruppiert k Leitungsbündel zu s Leitungen am Eingang einer Verdrahtungsstufe<br />

in s Bündel zu k Leitungen am Ausgang um. Im Beispiel von Bild<br />

4.77 haben wir 3 Bündel zu 4 Leitungen am Eingang der Verdrahtungsstufe <strong>und</strong><br />

4 Bündel zu 3 Leitungen an ihrem Ausgang. Das bedeutet, daß das erste spezielle<br />

Delta-Netz auf die bekannte Shuffle-Permutation zurückgeführt werden<br />

kann.<br />

218


a)<br />

b)<br />

c)<br />

d)<br />

Bild 4.79: Konstruktion des zweiten, speziellen Delta-Netzes (N=8, f=s=2).<br />

Das zweite Patelsche Delta-Netz hat als besondere Eigenschaft, daß sein Graph<br />

<strong>und</strong> der Graph des inversen, zweiten Patelschen Delta-Netzes topologisch voneinander<br />

verschieden sind. Sie lassen sich nicht durch Drehen um 180° <strong>und</strong> anschließendes<br />

Vertauschen von Ein- <strong>und</strong> Ausgängen ineinander überführen. Die<br />

beiden Topologien verhalten sich wie die linke <strong>und</strong> rechte Hand, bzw. wie Bild<br />

<strong>und</strong> Spiegelbild zueinander. Diese Eigenschaft stellt insofern etwas Besonderes<br />

dar, als daß alle klassischen logN-Netze topologisch identische, inverse Netze<br />

haben.<br />

Im weiteren wird gezeigt, daß auch das zweite Patelsche Delta-Netz auf eine<br />

bekannte Netzstruktur zurückgeführt werden kann; in diesem Fall auf einen zylindrischen<br />

CC-Banyan. Der Beweis läuft in 3 Schritten ab:<br />

• Man beginnt damit, daß Bild <strong>und</strong> Spiegelbild des zweiten Patelschen Delta-<br />

Netzes sich topologisch von allen klassischen logN-Netzen unterscheiden, da<br />

sie nicht mittelsymmetrisch sind. Andererseits weiß man seit [Varma94], daß<br />

es bei N=8 Ein- <strong>und</strong> Ausgängen, d.h. bei 4 Banyan-Knoten, nur drei topologisch<br />

unabhängige Netzstrukturen geben kann. Nach dem über Banyan-Netze<br />

Gesagten sind diese 3 Topologien der (2, 2, 2)-SW-Banyan, der (2, 2, 2)-<br />

CC-Banyan <strong>und</strong> der inverse (2, 2, 2)-CC-Banyan.<br />

• Wie bereits gezeigt wurde, läßt sich der (2, 2, 2)-SW-Banyan in einen Indirect<br />

Binary n-Cube umwandeln <strong>und</strong> ist somit topologisch identisch zu allen klassischen<br />

logN-Netzen.<br />

• Daraus muß man schließen, daß sich entweder der (2, 2, 2)-CC-Banyan oder<br />

der inverse (2, 2, 2)-CC-Banyan topologieerhaltend in das zweite Delta-Netz<br />

abbilden lassen. Daß dies tatsächlich der Fall ist, wird in Bild 4.80 gezeigt.<br />

Dazu wird zuerst ein topologieerhaltendes Vertauschen der beiden Schalter 1<br />

<strong>und</strong> 2 der obersten Netzstufe durchgeführt. Danach werden die Kreuzschalter<br />

als Knoten eines Banyan-Netzes interpretiert. Ein topologisch äquivalentes<br />

219


Umzeichnen der Kanten liefert schließlich den (2, 2, 2)-CC-Banyan, womit<br />

die Behauptung bewiesen wurde. Entsprechend kann man zeigen, daß das inverse<br />

zweite Patelsche Delta-Netz sich in den inversen (2, 2, 2)-CC-Banyan<br />

überführen läßt.<br />

1 2 2 1<br />

Bild 4.80: Äquivalenz des speziellen Delta-Netzes mit dem CC-Banyan.<br />

4.9 Data Manipulator- oder PM2I-Netzwerke<br />

Ungefähr zur selben Zeit wie die logN-Netze, aber unabhängig von diesen,<br />

wurden Netze entwickelt, die nicht zur Banyan-Kategorie zählen <strong>und</strong> die als<br />

Data Manipulator- oder PM2I-Netzwerke bezeichnet werden. (PM2I steht <strong>für</strong><br />

Plus/Minus 2 i .) Bei diesen Netzen hatte man nicht das Ziel, eine pfadeindeutige<br />

Topologie zu entwickeln, sondern es ging darum, einen Satz besonders nützlicher<br />

Permutationen, die u.a. <strong>für</strong> Bit-Manipulationen <strong>und</strong> in der <strong>parallel</strong>en Programmierung<br />

benötigt werden, mit Hilfe einer elektronischen Schaltung zu realisieren.<br />

Datenmanipulatornetze verbinden jeden Eingang i mit jedem Ausgang<br />

j (i, j = 0,1,2,...,N-1), <strong>für</strong> i ≠ j auch über alternative Pfade, allerdings nicht <strong>für</strong><br />

alle Eingänge gleichzeitig, weshalb sie in die Kategorie der nicht-blockierungsfreien<br />

Netze fallen. Sie realisieren, in Abhängigkeit von der Funktionalität<br />

der Schaltelemente, aus denen sie bestehen, eine mehr oder weniger große Untermenge<br />

aller potentiellen N! Permutationen von Verbindungen.<br />

Datenmanipulatornetze können vorteilhaft bei leitungsvermittlender Betriebsweise<br />

eingesetzt werden, wenn Fehlertoleranz gefordert ist, weil zwischen Ein<strong>und</strong><br />

Ausgängen unterschiedlicher Adreßnummer ( i≠<br />

j) alternative Wege existieren.<br />

Zur Datenmanipulatorkategorie zählen das Fengsche Netz [Feng74],<br />

der Augmented Data Manipulator von Siegel [Siegel81] <strong>und</strong> das Gamma-Netz<br />

von Parker <strong>und</strong> Raghavendra [Parker84].<br />

Die zu Datenmanipulatornetzen synonyme Bezeichnung Plus-Minus-2 i -Netze<br />

rührt daher, daß am Ausgang jedes Netzschalters, drei statt der üblichen zwei<br />

Alternativen zur Wegewahl existieren. Diese Alternativen sind:<br />

• gerade aus,<br />

• um 2 i mod N Positionen nach oben (die sog. "Plus- Richtung") <strong>und</strong><br />

220


• um 2 i mod N Positionen nach unten ("Minus-Richtung").<br />

Der Parameter i wird dabei von der jeweiligen Stufe festgelegt. In der 1. Stufe<br />

ist i = N/2 (N = Zahl der Ein-/Ausgänge), in der 2. Stufe ist i = N/4, usw.<br />

Datenmanipulatornetze bestehen aus N Schaltern pro Stufe bei insgesamt<br />

(log 2 N)+1 Stufen, wobei jeder Schalter im Netzinnern drei Ein- <strong>und</strong> drei Ausgänge<br />

aufweist, <strong>und</strong> die Schalter der ersten <strong>und</strong> letzten Stufe mit einem Einbzw.<br />

Ausgang versehen sind. Die verschiedenen Netze unterscheiden sich<br />

hauptsächlich in der Funktionalität ihrer Schalter <strong>und</strong> nicht in ihrer Verdrahtung.<br />

Als Schaltelemente werden entweder einfache Multiplexer/Demultiplexer<br />

mit gemeinsamer Steuerung verwendet, so wie es beim Fengschen Netz der Fall<br />

ist, oder es gibt Schalter mit individueller Steuerung (Siegel), oder es werden<br />

Kreuzschienenverteiler der Größe 3x3 eingesetzt (Parker).<br />

In Bild 4.81 ist der Fengsche Datenmanipulator dargestellt. Die mit den<br />

Buchstaben a-n versehenen Leitungen der oberen Netzseite sind "modulo-mäßig"<br />

mit den korrespondierenden Leitungen der unteren Seite verb<strong>und</strong>en. Bei<br />

diesem Netz werden die N Schalter jeder Stufe in zwei Gruppen von Schaltern<br />

mit jeweils geraden <strong>und</strong> ungeraden Adressen unterteilt, wobei alle Schalter einer<br />

Gruppe gemeinsam gesetzt werden. Die Zahl der realisierbaren Permutationen<br />

ist dadurch stark eingeschränkt, die Steuerung hingegen vereinfacht. Die<br />

resultierende Exchange-Permutationsfunktion der Schaltstufen ist im Kapitel<br />

"Schalter in dynamischen Netzen" näher beschrieben.<br />

Der Fengsche Datenmaipulator war ursprünglich nur <strong>für</strong> Bitoperationen konzipiert;<br />

entsprechend können die Schalter zu einer Zeit nur Daten von einem ihrer<br />

drei Eingänge einlesen <strong>und</strong> auf einen der drei Ausgänge ausgeben.<br />

d<br />

c<br />

b<br />

a<br />

h<br />

g<br />

f<br />

j<br />

e i<br />

l<br />

k m<br />

n<br />

E<br />

i<br />

n<br />

g<br />

ä<br />

n<br />

g<br />

e<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

A<br />

u<br />

s<br />

g<br />

ä<br />

n<br />

g<br />

e<br />

h<br />

g<br />

f<br />

e<br />

d<br />

c<br />

b<br />

a<br />

l j n m<br />

k<br />

i<br />

Bild 4.81: Data Manipulator <strong>und</strong> Augmented Data Manipulator.<br />

221


Der Augmented Data Manipulator nach Siegel (ADM) ist von der Topologie<br />

her identisch zum Fengschen Netz. Er unterscheidet sich darin, daß es <strong>für</strong> jeden<br />

Schalter eigene Steuerbits gibt, die eine individuelle Richtungswahl erlauben.<br />

Allerdings kann ebenso nur je ein Ein- <strong>und</strong> Ausgang pro Schalter aktiv sein.<br />

Siegel definierte zusätzlich den Inverse Augmented Data Manipulator (IADM),<br />

der ein gespiegelter ADM ist.<br />

Die Topologie des Gamma-Netzes [Parker84] entspricht der eines IADM,<br />

d.h., eines gespiegelten Feng-Netzes (Bild 4.82). Das Gamma-Netz besteht aus<br />

individuell steuerbaren 3x3 Schaltern, die als Kreuzschienenverteiler ausgelegt<br />

sind, so hier daß die Einschränkungen der anderen Datenmanipulatornetze wegfallen.<br />

Es kann unter Verwendung eines einfachen "Self-Routing"-Verfahrens<br />

viele Permutationen realisieren, die bei <strong>parallel</strong>en Programmen als Kommunikationsmuster<br />

auftreten, wie z.B. die "Nearest Neighbour"-Kommunikation.<br />

Allerdings ist hier, auch im Vergleich zu den klassischen logN-<br />

Netzen, der schaltungsmäßige Aufwand am größten, da N(log 2 N+1)<br />

Kreuzschienenverteiler der Größe 3x3 notwendig sind, im Gegensatz beispielsweise<br />

zu (N/2)(log 2 N) Kreuzschaltern.<br />

Die Wegewahl im Gamma-Netz erfolgt mit Hilfe des binären, voll red<strong>und</strong>anten<br />

Zahlensystems 0, 1 <strong>und</strong> 1, das <strong>für</strong> eine bestimmte Zieladresse mehrere<br />

äquivalente, numerische Darstellungen erlaubt. Damit kann man sowohl die<br />

Wegealternativen zwischen Sender <strong>und</strong> Empfänger als auch die drei Ausgänge<br />

pro Schalter erfassen. Es bedeutet 0 gerader Ausgang, 1 oberer <strong>und</strong> 1 unterer<br />

Schalterausgang. Aus der Differenz von Ziel- <strong>und</strong> Herkunftsadresse wird die<br />

Routinginformation gebildet. In der ersten Stufe des Gamma-Netzes wird das<br />

LSD verwendet. Die Zieladressen werden durch das Polynom (a n-1 2 n-1<br />

+....+a 1 2 1 +a 0 2 0 ) mod 2 n mit a n ={0,1,-1}dargestellt (1=-1). So ist beispielsweise<br />

5-2=3 durch 011, 101, 111, 101 oder 111 repräsentiert [Varma94].<br />

n<br />

m<br />

l<br />

k<br />

h<br />

g<br />

j f<br />

i e<br />

d<br />

c<br />

b<br />

a<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

m<br />

n<br />

j<br />

i<br />

l<br />

k<br />

d<br />

c<br />

b<br />

a<br />

h<br />

g<br />

f<br />

e<br />

Bild 4.82: Gamma-Netz nach Parker (N=8).<br />

222


4.10 Das Clos-Netz<br />

4.10.1 Einleitung<br />

Selten hat eine Entwicklung die Disziplin der <strong>Verbindungsnetzwerke</strong> stärker<br />

beeinflußt als die des Closschen Koppelnetzes [Clos53]. Obwohl ursprünglich<br />

von Charles Clos, einem Ingenieur bei den AT&T Bell Labs <strong>für</strong> die Telekommunikation<br />

erf<strong>und</strong>en, hat sich das Clos-Netz sowohl <strong>für</strong> Parallelrechner als<br />

auch <strong>für</strong> <strong>verteilte</strong> <strong>Systeme</strong> bzw. Rechnernetze als wichtige Verbindungsstruktur<br />

erwiesen.<br />

Bekannte Beispiele von Parallelrechnern, die Clos-Netze verwenden, sind die<br />

IBM GF11 Maschine mit einem Netz aus 576 Ein-/<strong>und</strong> Ausgängen, der MasPar<br />

MP-2 Rechner mit einer Verbindungsstruktur <strong>für</strong> bis zu 16384 Prozessoren <strong>und</strong><br />

die IBM SP-2 Maschine mit bis zu 512 Arbeitsplatzrechnern.<br />

In den Vermittlungseinrichtungen der Telekommunikation werden Clos-Netze<br />

zur analogen <strong>und</strong> digitalen Nachrichtenvermittlung eingesetzt, so z.B. im<br />

BISDN-Netz (Broadband Integrated Services Digital Network) zur Sprachvermittlung<br />

oder in ATM basierten Wide Area-Netzen (WANs) zur Datenvermittlung.<br />

Beispielsweise beruht das ATOM System der Fa. NEC, ein BISDN-Koppelnetz,<br />

auf einer Clos-Verbindungsstruktur [NEC91].<br />

Daß Clos-Netze auch <strong>für</strong> lokale Netzwerke (LANs) wichtig sind, zeigt die<br />

Tatsache, daß sie vom American National Standards Institute (ANSI) als Norm<br />

<strong>für</strong> die Verbindung von Prozessoren vorgeschlagen wurden, zusammen mit<br />

dem Fiber Channel, der zur Anbindung der Peripherie empfohlen wird. Ein<br />

kommerzielles Beispiel auf diesem Gebiet ist ein Produkt der Fa. Ancor, die ein<br />

Clos-basiertes Koppelnetz als Vermittlungseinrichtung in Fiber Channel LANs<br />

entwickelt hat [Anderson92].<br />

Auch in Zukunft werden Clos-Netze bei der Vermittlung photonischer statt<br />

elektronischer Datenströme eine Rolle spielen. Verschiedene Entwicklungen<br />

auf dem Gebiet der photonischen Verbindungsstrukturen deuten darauf hin. So<br />

existiert bereits heute ein Prototyp eines Clos-Netzes auf optischer Basis von<br />

der Größe 128x128 [Burke91].<br />

Die Bedeutung der Clos-Netze <strong>für</strong> Telekommunikation, lokale Netzwerke<br />

<strong>und</strong> Parallelrechner manifestiert sich auch in der Zahl der aus dem Clos-Netz<br />

abgeleiteten Verbindungsstrukturen, die in den letzten Jahrzehnten veröffentlicht<br />

wurden. Dazu zählen u.a. auch das Benes-Netz [Benes65].<br />

Die Konsequenzen der Closschen Erfindung kann man sich anhand der Situation<br />

veranschaulichen, die anfangs der 50er Jahre herrschte, bevor dieses<br />

Netz entwickelt wurde. Damals gab es das Problem, daß immer mehr Personen,<br />

Firmen <strong>und</strong> Institutionen Telefonanschlüsse wollten, die untereinander zu vernetzen<br />

waren. Die in dieser Zeit in der Telefonvermittlungstechnik verwendeten<br />

Koppelfelder beruhten auf (unvollständig) miteinander verschalteten<br />

Kreuzschienenverteilern, die ihrererseits <strong>für</strong> sehr große Netze ungeeignet waren,<br />

weil die Zahl der Kontakte in der Schaltmatrix mit dem Quadrat der Zahl<br />

der Ein- <strong>und</strong> Ausgänge ansteigt, d.h. eine Komplexität von O(N 2 ) aufweist.<br />

223


Eine Matrix der Größe 4096x4096 erfordert beispielsweise 16 Mio. Schalter,<br />

was aus technischen <strong>und</strong> finanziellen Gründen nicht realisierbar ist. Andere kostengünstige<br />

Verbindungsstrukturen wurden deshalb gesucht.<br />

C. Clos gelang mit seiner Erfindung im Jahre 1953 eine Reduktion der Schalterzahl<br />

des obigen Beispiels von 4096 Ein- <strong>und</strong> Ausgängen auf ca. 800 Tsd.<br />

Schalter, was nur ca. 5% des ursprünglichen Aufwandes entspricht <strong>und</strong> sich<br />

technisch realisieren läßt. Die Komplexität des Verbindungsproblems hatte sich<br />

von O ( N 2 ) beim Kreuzschienenverteiler auf O ( N N)<br />

beim Clos-Netz verringert.<br />

Durch die Erfindung von C. Clos wurde es möglich, die die Kreuzschienenverteiler<br />

enthaltenden Koppelfelder kostengünstig aufzubauen.<br />

4.10.2 Aufbau des Clos-Netzes<br />

Die Clossche Verbindungsstruktur ist in Bild 4.83 dargestellt. Das Clos-Netz<br />

besteht aus drei hintereinandergeschalteten Stufen kleinerer Kreuzschienenverteiler,<br />

die als Eingangs-, Mittel- <strong>und</strong> Ausgangsstufe bezeichnet werden, wobei<br />

die Eingangs- <strong>und</strong> Ausgangsstufe jeweils k Kreuzschienenverteiler der Größe<br />

fxs bzw. sxf enthalten, <strong>und</strong> die Mittelstufe aus s Kreuzschienenverteilern der<br />

Größe kxk besteht. Die Eingangs- <strong>und</strong> Mittelstufe sowie die Mittel- <strong>und</strong> Ausgangsstufe<br />

bilden jeweils <strong>für</strong> sich regelmäßige <strong>und</strong> nicht-rechteckige Banyan-<br />

Netze, die zifferngesteuert sind (Delta Netze). Die Verdrahtung zwischen den<br />

Stufen ist spiegelsymmetrisch zur Mittellinie <strong>und</strong> besteht aus einer allgemeinen<br />

Perfect Shuffle- bzw. allgemeinen inversen Perfect Shuffle-Permutation <strong>für</strong><br />

N=ks=sk Elemente.<br />

N=fxk Eingänge<br />

N Ausgänge<br />

0<br />

1<br />

...<br />

f-1<br />

0<br />

0<br />

1<br />

...<br />

s-1<br />

0<br />

1<br />

...<br />

k-1<br />

0<br />

0<br />

1<br />

...<br />

k-1<br />

0<br />

1<br />

...<br />

s-1<br />

0<br />

0<br />

1<br />

...<br />

f-1<br />

0<br />

1<br />

...<br />

f-1<br />

1<br />

0<br />

1<br />

...<br />

s-1<br />

0<br />

1<br />

...<br />

k-1<br />

1<br />

0<br />

1<br />

...<br />

k-1<br />

0<br />

1<br />

...<br />

s-1<br />

1<br />

0<br />

1<br />

...<br />

f-1<br />

0<br />

1<br />

...<br />

f-1<br />

k-1<br />

0<br />

1<br />

...<br />

s-1<br />

0<br />

1<br />

...<br />

k-1<br />

s-1<br />

0<br />

1<br />

...<br />

k-1<br />

0<br />

1<br />

...<br />

s-1<br />

k-1<br />

0<br />

1<br />

...<br />

f-1<br />

k mal fxs Kreuz=<br />

schienenverteiler<br />

Bild 4.83: Das Clos-Netz.<br />

s mal kxk Kreuz=<br />

schienenverteiler<br />

k mal sxf Kreuz=<br />

schienenverteiler<br />

224


4.10.3 Die allgemeine Perfect Shuffle-Permutation<br />

Die allgemeine Perfect Shuffle-Permutation σ allg.,k,s bewirkt, daß eine Durchmischung<br />

der ankommenden <strong>und</strong> abgehenden Leitungen erfolgt, denn sie bildet<br />

k Leitungsbündel (Blöcke) zu je s Leitungen (Elemente) auf s Leitungsbündel<br />

zu je k Leitungen ab. Sie ist definiert als:<br />

Def. 4.25:<br />

.<br />

σ allg, k, s<br />

() i<br />

=<br />

⎧ ik MOD ks <strong>für</strong> 0 ≤ i<<br />

s<br />

⎪<br />

⎪ ( ik + 1) MOD ks <strong>für</strong> s ≤ i < 2s<br />

⎨<br />

⎪<br />

…<br />

⎪<br />

⎩( ik + ( k – 1)<br />

) MOD ks <strong>für</strong> ( k – 1)s≤<br />

i<<br />

ks<br />

⎫<br />

⎪<br />

⎪<br />

⎬<br />

⎪<br />

⎪<br />

⎭<br />

σ allg.,k,s stellt im wesentlichen eine abschnittsweise Multiplikation der Adressen<br />

i der Eingänge mit der Zahl k der Blöcke der Eingangsstufe dar, wobei noch<br />

ein Offset zur Unterscheidung der multiplizierten Blöcke erforderlich ist. Sie<br />

wird z.B. auch zur Transposition von [kxs] Matrizen auf [sxk] Matrizen angewandt,<br />

was einer Umordnung von Zeilenadressen in Spaltenadressen entspricht.<br />

Die allgemeine inverse Perfect Shuffle-Permutation bildet s Blöcke zu je k<br />

Elementen auf k Blöcke zu je s Elementen ab <strong>und</strong> ist, wie in Def 4.26 angegeben,<br />

ebenfalls abschnittsweise definiert. σ -1 allg.,k,s entspricht damit einer Matrixtransposition<br />

von [sxk] Matrizen auf [kxs] Matrizen. Die Def 4.26 bedeutet,<br />

daß die Ausgänge einer Verdrahtungstufe, die gemäß der Permutation σ allg.,k,s<br />

mit den Eingängen der Stufe verb<strong>und</strong>en sind, zugleich als Eingänge der Permutation<br />

σ -1 allg.,k,s(i) verwendet werden können, wenn die Parameter k <strong>und</strong> s ihre<br />

Rollen tauschen.<br />

Def. 4.26:<br />

.<br />

–1<br />

σ allg, k,<br />

s<br />

() i<br />

=<br />

⎧ is MOD sk <strong>für</strong> 0 ≤ i < k ⎫<br />

⎪<br />

⎪<br />

⎪ ( is + 1) MOD sk <strong>für</strong> k ≤ i<<br />

2k ⎪<br />

⎨<br />

⎬<br />

⎪<br />

…<br />

⎪<br />

⎪<br />

⎪<br />

⎩( is + ( s – 1)<br />

) MOD sk <strong>für</strong> ( s – 1)k ≤ i < sk⎭<br />

Der Rollentausch ist deshalb möglich, weil gilt:<br />

–1<br />

σ allg, k,<br />

s<br />

Gl. 4.44: = .<br />

σ allg, s,<br />

k<br />

Das heißt, daß man die inverse Permutation aus der normalen Permutation<br />

durch Vetauschen von k <strong>und</strong> s gewinnen kann. Das Verdrahtungsschema der<br />

225


allgemeinen Perfect Shuffle-Permutation ist in Bild 4.84 <strong>für</strong> beliebige k,s zusammen<br />

mit den Blockgrenzen s graphisch dargestellt.<br />

0<br />

1<br />

...<br />

s-1<br />

. . .<br />

. . .<br />

0<br />

1<br />

...<br />

k-1<br />

s<br />

s+1<br />

...<br />

2s-1<br />

. . .<br />

k<br />

k+1<br />

...<br />

2k-1<br />

...<br />

...<br />

(k-1)s<br />

(k-1)s+1<br />

...<br />

ks-1<br />

(s-1)k<br />

(s-1)k+1<br />

...<br />

sk-1<br />

Bild 4.84: Die allgemeine Perfect Shuffle-Permutation.<br />

In einer zu Def 4.25 <strong>und</strong> Def 4.26 alternativen Schreibweise lassen sich die Permutationsfunktionen<br />

σ allg.,k,s <strong>und</strong> σ -1 allg.,k,s durch eine zyklische Links- oder<br />

Rechtsverschiebung um jeweils eine Ziffer darstellen, ähnlich wie man es von<br />

der nicht-verallgemeinerten Shuffle-Permutation gewohnt ist. Dies setzt allerdings<br />

voraus, daß erstens ein spezielles Numerierungsschema verwendet wird<br />

<strong>und</strong> daß zweitens diese Numerierung entweder zur Zahlenbasis s oder k vorgenommen<br />

wird.<br />

Das spezielle Numerierungsschema ist in Bild 4.85a <strong>für</strong> den Fall von<br />

N=ks=4x3, bzw. N=sk=3x4 exemplarisch gezeigt. Die Eingangsseite der<br />

Shuffle-Verdrahtung von 12 Leitungen ist in 4 Dreierbündeln organisiert, <strong>und</strong><br />

entsprechend darf die niederwertige Ziffer (LSD) der Numerierung die Zahlen<br />

0, 1 <strong>und</strong> 2 durchlaufen, während die höherwertige Ziffer (MSD) alle einstellige<br />

Zahlen zur Basis 4 annimmt (0, 1, 2 <strong>und</strong> 3). Der Ausgang der Verdrahtung besteht<br />

seinerseits aus 3 Viererbündeln, so daß hier beim LSD die Ziffern 0-3 <strong>und</strong><br />

beim MSD die Ziffern 0-2 erlaubt sind. Bei dieser <strong>für</strong> Ein-/<strong>und</strong> Ausgang getrennten<br />

Numerierungsweise erhält man die eine Art aus der anderen durch<br />

Links- bzw. Rechtsverschieben der Ziffern. In Bild 4.85b ist derselbe Fall zur<br />

Zahlenbasis 3 dargestellt. Hier tauschen Rechts- <strong>und</strong> Linksverschiebung ihre<br />

Rollen.<br />

Es seien k <strong>und</strong> s zwei verschiedene Zahlenbasen in der Art, daß <strong>für</strong> die Gesamtzahl<br />

N der Ein- bzw. Ausgänge einer allgemeinen Shuffle-Verdrahtung<br />

gilt:<br />

N = ks.<br />

226


N=4*3<br />

Basis 4<br />

00<br />

01<br />

E 02<br />

i 10<br />

n 11<br />

g 12<br />

a 20<br />

n 21<br />

g 22<br />

30<br />

31<br />

32<br />

N=3*4<br />

Basis 4<br />

00<br />

01<br />

02<br />

03<br />

10<br />

11<br />

12<br />

13<br />

20<br />

21<br />

22<br />

23<br />

A<br />

u<br />

s<br />

g<br />

a<br />

n<br />

g<br />

N=4*3<br />

Basis 3<br />

000<br />

001<br />

E 002<br />

i 010<br />

n 011<br />

g 012<br />

a 020<br />

n 021<br />

g 022<br />

100<br />

101<br />

102<br />

N=3*4<br />

Basis 3<br />

000<br />

001<br />

002<br />

010<br />

100<br />

101<br />

102<br />

110<br />

200<br />

201<br />

202<br />

210<br />

A<br />

u<br />

s<br />

g<br />

a<br />

n<br />

g<br />

Linksverschieben<br />

Rechtssverschieben<br />

a)<br />

Rechtssverschieben<br />

Linksverschieben<br />

b)<br />

Bild 4.85: Die allgemeine Perfect Shuffle-Permutation <strong>für</strong> N=12 zur Basis 4 <strong>und</strong> 3 (Bild a<br />

bzw. b).<br />

Weiterhin seien I <strong>und</strong> O die Adressen eines Ein- bzw. Ausganges, die sich folgendermaßen<br />

zur Basis k bzw. s darstellen lassen:<br />

I = (i n i n-1 ,...,i 1 )k = (j m j m-1 ,...,j m )s<br />

O = (o n o n-1 ,...,o 1 )k = (p m p m-1 ,...,p m )s.<br />

Mit Hilfe der Ziffern i n -i 1 <strong>und</strong> o n -o 1 von I <strong>und</strong> O zur Basis k bzw. j m -j 1 <strong>und</strong> p m -<br />

p 1 zur Basis s, die gemäß der zuvor erläuterten, spezifischen Numerierungsschemata<br />

vergeben werden, kann man <strong>für</strong> die allgemeine Shuffle-Verdrahtung<br />

<strong>und</strong> ihrer Inversen alternative Definitionen angeben:<br />

Def. 4.27:<br />

( ii ,..., ii) ⎯⎯⎯ ⎯ →( oo ,..., oo) = ( i ,..., iii)<br />

Def. 4.28:<br />

( oo ,..., oo) ⎯⎯⎯ ⎯ →( ii ,..., ii) = ( ooo ,..., o)<br />

Def. 4.29:<br />

nn−1 2 1 k σ n n−1 2 1 k n−1 2 1 n k<br />

allg., ks ,<br />

n n−1 2 1 k −1<br />

σ n n−1 2 1 k 1 n n−1 2 k<br />

allg., ks ,<br />

( j j ,..., j j ) ⎯⎯⎯⎯⎯<br />

→( p p ,..., p p ) = ( j j j ,..., j )<br />

m m −1 2 1 s σ m m −1 2 1 s 1 m m −1 2 s<br />

allg., sk ,<br />

227


Def. 4.30:<br />

( p p ,..., p p ) ⎯⎯⎯⎯⎯→<br />

( j j ,..., j j ) = ( p ,..., p p p )<br />

m m −1 2 1 s −1<br />

σ m m −1 2 1 s m −1 2 1 m s<br />

allg. ,, sk<br />

Der Vorteil dieser Definitionsart liegt in der einfacheren mathematischen<br />

Handhabung. Auch hier gilt wieder die Beziehung σ -1 allg.,k,s = σ allg.,s,k sowie<br />

σ allg.,k,s = σ -1 allg.,s,k . Zu bemerken ist an dieser Stelle noch zweierlei:<br />

• Die Definitionen legen nur die Shuffle-Permutationen über alle n bzw. m Digits<br />

einer Numerierung fest, nicht jedoch über Teilmengen von Digits, so wie<br />

es die bereits erläuterten Sub- bzw. Supershuffle-Funktionen tun. Eine Kombination<br />

von Sub- oder Supershuffle mit Verdrahtungen von N=ks Ein-/Ausgängen<br />

ist möglich, soll jedoch hier nicht durchgeführt werden.<br />

• Die Definitionen unterscheiden sich von den im Kapitel über die klassischen<br />

logN-Netze erläuterten allgemeinen Shuffle-Permutationen u.a. hinsichtlich<br />

der Zahl der Ein-/Ausgänge, auf die sie angewandt werden. Im einen Fall gilt<br />

N=ks (k, s ganz), <strong>und</strong> im anderen Fall hat man N=b n (b, n ganz).<br />

Nach der Definition der Verdrahtung <strong>und</strong> des Aufbaus des Clos-Netzes soll nun<br />

die wichtige Frage erörtert werden, unter welchen Bedingungen ein Clos-Netz<br />

blockierungsfrei ist.<br />

4.10.4 Blockierungsfreie Clos-Netze<br />

C. Clos [Clos53], M. C. Paull [Paull62] <strong>und</strong> V. Benes [Benes62a] beschäftigten<br />

sich vor 3 Dekaden mit der Frage, wann ein Clos-Netz blockiert <strong>und</strong> formulierten<br />

in diesem Zusammenhang 3 verschiedene Grade von Verbindungsqualitäten,<br />

die ein Netz aufweisen kann:<br />

• absolut blockierungsfrei (strictly non blocking),<br />

• bedingt blockierungsfrei (wide sense non blocking) <strong>und</strong><br />

• blockierungsfrei durch neues Routing (rearrangeable non blocking).<br />

Das Verdienst von Clos [Clos53] war es zu zeigen, daß sich das Clos-Netz <strong>für</strong><br />

eine bestimmte Kombination der Parameter f <strong>und</strong> s wie ein Kreuzschienenverteiler<br />

absolut blockierungsfrei verhält, bei freilich erheblich niedrigeren Kosten.<br />

Später bewies V. Benes [Benes62B, Benes65], unter welchen Bedingungen<br />

das Clos-Netz bedingt blockierungsfrei bzw. blockierungsfrei durch<br />

Umordnen interner Wege ist.<br />

Im Clos-Netz kann die Verbindungsqualität durch geeignete Wahl der Parameter<br />

s <strong>und</strong> f konfiguriert werden.<br />

Absolute Blockierungsfreiheit<br />

Für<br />

s ≥ 2f – 1<br />

ist das Clos-Netz absolut blockierungsfrei, da stets mindestens<br />

228


ein freier Weg vom Sender zum Empfänger existiert, ohne daß vorhandene<br />

Wege umgelegt werden müssen. Dies ist allerdings die teuerste Implementierung<br />

des Clos-Netzes, da mit großem s die Zahl der Schalter in der Mittelstufe<br />

entsprechend zunimmt, zugleich ist es aber auch die mit der geringsten Latenz,<br />

da das Routing trivial wird.<br />

Bedingte Blockierungsfreiheit<br />

Für 3f ⁄ 2 ≤ s < 2f – 1 ist das Clos-Netz dann blockierungsfrei, wenn eine bestimmte<br />

Routing-Strategie gewählt wird: Zum Legen neuer Verbindungen<br />

müssen zuerst alle nur teilweise belegten Schalter der Mittelstufe benutzt werden,<br />

bevor ein unbelegter Schalter verwendet werden darf. Vorhandene Wege<br />

können bestehen bleiben.<br />

Diese Routing-Strategie ist relativ leicht zu erfüllen <strong>und</strong> dementsprechend<br />

einfach in der Implementierung. Nachteilig ist allerdings, daß das Feststellen,<br />

ob partiell belegte Schalter vorhanden sind, nur von einer zentralisierten Steuerung<br />

vorgenommen werden kann, was naturgemäß einen Engpaß bzgl. der Skalierbarkeit<br />

darstellt.<br />

Blockierungsfreiheit durch Umordnen<br />

Für f ≤ s<<br />

3f ⁄ 2 ist das Clos-Netz blockierungsfrei durch neues Routing,<br />

was bedeutet, daß <strong>für</strong> jeden neuen Weg eine Reihe bestehender Wege durch das<br />

Netz umgelegt werden muß. Man kann zeigen, daß dies <strong>für</strong> bis zu Min(f-1,s-1)<br />

bestehender Wege erforderlich ist [Paull62, Benes62b]. Diese Implementierung<br />

ist zwar vom Routing her die aufwendigste, aber auch die kostengünstigste. Besonders<br />

große Kostenersparnis hat man <strong>für</strong> f = s = N. Dann wird die Zahl<br />

K der Kreuzungspunkte, die wesentlich die Kosten des Clos-Netzes bestimmen,<br />

K = ( 3 ⁄ 2)N N.<br />

Für s<<br />

f ist das Clos-Netz i.a. nicht blockierungsfrei, da es weniger Ausgänge<br />

als Eingänge in der Eingangsstufe gibt.<br />

Alle Resultate beruhen auf der stillschweigenden Annahme, daß erstens das<br />

Netz leitungsvermittelnd betrieben wird <strong>und</strong> daß zweitens das Routing von einer<br />

zentralen Instanz, der Netzsteuerung, vorgenommen wird.<br />

Transiente Blockierungen<br />

In der Praxis kommt es bei Clos-Netzen, die im Modus der Leitungsvermittlung<br />

betrieben werden, <strong>für</strong> den Fall f ≤ s<<br />

3f ⁄ 2 häufig zu transienten Blockierungen,<br />

weil das Netz dergestalt inkrementell betrieben wird, daß zusätzlich zu<br />

den Verbindungen, die zum Zeitpunkt t 0 eingestellt sind, neue Verbindungen<br />

zum Zeitpunkt t 1 gewünscht sind, weil die Interprozessorkommunikation wechselt<br />

oder weil neue Telefonanrufe getätigt werden. Dazu müssen die Wege<br />

durch das Netz umgelegt werden (Rerouting), weil es sich um eine neue Permutation<br />

von Verbindungen handelt, was zur Folge hat, daß das Netz während der<br />

229


Zeit, die <strong>für</strong> das Setzen der Schalter benötigt wird, nicht zur Verfügung steht.<br />

Für viele Anwendungen ist ein Rerouting nicht oder nur durch Zusatzaufwand<br />

tragbar, da es eine feste Folge von Routing <strong>und</strong> Kommunikation voraussetzt,<br />

wie sie nur z.B. in einem SIMD-Rechner eingehalten werden kann, da<br />

dort eine synchrone Kommunikation nach festgelegtem Muster abläuft. In<br />

MIMD-Rechnern dagegen ist eine Flußkontrolle der Datenströme erforderlich,<br />

die vor jedem Routing aktiviert werden muß, um die Kommunikation zu stoppen.<br />

Alternativ können auch Nachrichtenspeicher verwendet werden, die in der<br />

Art eines FIFO-Puffers die einlaufenden Daten bis zur erneuten Betriebsfähigkeit<br />

des Netzes zwischenspeichern.<br />

Bei Telefongesprächen gibt es überhaupt keine Möglichkeit, alle Teilnehmer<br />

gleichzeitig zu unterbrechen, deshalb sind bei dieser Anwendung nur die beiden<br />

ersten Implementierungen des Clos-Netzes interessant, insbesondere dann,<br />

wenn keine Puffer zum Zwischenspeichern der Sprache zur Verfügung stehen.<br />

Wird das Clos-Netz im Modus der Paketvermittlung betrieben, ist eine zentrale<br />

Routing-Instanz nicht mehr möglich, aber auch nicht mehr nötig, weil jedes<br />

Paket eine eigene Zieladresse trägt, die lokal ausgewertet wird. Stationäre<br />

Verbindungen müssen nicht mehr geschaltet werden. In diesem Fall hat das<br />

Clos-Netz, das aus zwei hintereinandergeschalteten Banyan-Netzen besteht,<br />

aufgr<strong>und</strong> der Red<strong>und</strong>anz in der Wegewahl die Möglichkeit des adaptiven Routings.<br />

Üblicherweise wird dann auch s=f gewählt, so, wie es z.B. beim Verbindungsnetz<br />

der IBM SP2 der Fall ist.<br />

Schließlich gibt es bei Clos-Netzen noch eine hybride Betriebsweise, wo nur<br />

<strong>für</strong> die Dauer der Übermittlung einer Nachricht, die in einzelne Datenpakete<br />

verpackt sein kann, ein permanenter Weg zwischen Sender <strong>und</strong> Empfänger etabliert<br />

wird. Dies wird als Nachrichtenvermittlung bezeichnet. Hierbei ist wieder<br />

zentrales Routing <strong>und</strong> ein Clos-Netz mit s=f möglich, vorausgesetzt, daß entweder<br />

synchrone Kommunikation, Flußkontrolle oder FIFO-Speicher vorhanden<br />

sind.<br />

4.10.5 Routing im Clos-Net<br />

Im Clos-Netz kann das Routing bei Paketvermittlung im Gegensatz zur Leitungsvermittlung<br />

sehr einfach durchgeführt werden, da auch im Falle von s=f<br />

eine Vielzahl von Wegen <strong>für</strong> den Transfer der Datenpakete zur Verfügung stehen.<br />

Bedingung ist allerdings, daß transiente Blockierungen nicht-deterministischer<br />

Dauer tolerierbar sind, was bei Echtzeitanwendungen beispielsweise<br />

nicht der Fall ist. Wird bei Paketvermittlung eine garantierte maximale Durchlaufzeit<br />

gefordert, muß das Routing wie bei Leitungsvermittliung zentral berechnet<br />

werden. Ist ein Echtzeitverhalten nicht erforderlich, kann das Routing<br />

dezentral <strong>und</strong> <strong>parallel</strong> an jedem Kreuzschienenverteiler erfolgen. Dann ist auch<br />

adaptive Wegewahl möglich, weil im Clos-Netz alternative Pfade existieren.<br />

Ganz anders sind die Verhältnisse, wenn Leitungsvermittlung gewünscht<br />

wird <strong>und</strong> aus Kostengründen der Fall s=f vorliegt. Dann muß die Liste der Verbindungswünsche<br />

als Ganzes realisiert werden, was eine zentrale Routing-Instanz<br />

impliziert <strong>und</strong> komplexe Routing-Methoden erfordert. Da<strong>für</strong> gibt es meh-<br />

230


ere Möglichkeiten, wie z.B. die Matrixdekomposition oder die Kantenfärbung,<br />

die sich zum Routing von Punkt-zu-Punkt-Verbindungen eignen. Andere Verfahren,<br />

wie die Signalflußgraphen-Methode nach Varma [Varma93] oder die<br />

Methode nach Yang [Yang91] können auch Multicast-Verbindungen herstellen.<br />

Hier sollen nur die Matrixdekomposition <strong>und</strong> das Kantenfärben erläutert<br />

werden.<br />

Routing-Voraussetzungen<br />

Das leitungsvermittelnde Routing beim Clos-Netz basiert darauf, <strong>für</strong> jede zu legende<br />

Verbindung denjenigen Kreuzschienenverteiler (Schalter) der Mittelstufe<br />

zu bestimmen, über den das zu verbindende Ein/Ausgangspaar zusammengeschaltet<br />

werden soll. Dabei spielt es keine Rolle, mit welchem der s<br />

Schalter der Mittelstufe der Eingang oder Ausgang verb<strong>und</strong>en ist. Entscheidend<br />

ist, daß die beiden Schalter der Eingangs- <strong>und</strong> Ausgangsstufe, an denen das zu<br />

verbindende Ein-/Ausgangspaar angeschlossen ist, Zugang zu demselben<br />

Schalter in der Mittelstufe haben, weil sie nur dort miteinander verb<strong>und</strong>en werden<br />

können. Das heißt, das Routing beim (f=s)-Clos-Netz basiert darauf, <strong>für</strong> jedes<br />

Schalterpaar in der Eingangs- <strong>und</strong> Ausgangsstufe einen Schalter in der Mittelstufe<br />

festzulegen. Insgesamt kann jeder Schalter der Mittelstufe <strong>für</strong> k<br />

verschiedene Verbindungen verwendet werden, <strong>für</strong> jedes Ein/Ausgangspaar<br />

kann er jedoch nur genau einen Verbindungswunsch erfüllen.<br />

Für das Routing spielt es keine Rolle, an welcher konkreten Stelle am Ein-/<br />

Ausgangsschalter das zu verbindende Ein/Ausgangspaar angeschlossen ist, da<br />

innnerhalb der Schalter jede Verbindung möglich ist. D.h., der am Ein-/Ausgangsschalter<br />

anliegende Ein-/Ausgang muß <strong>für</strong> das Routing nicht betrachtet<br />

werden, was das Routing-Verfahren erheblich vereinfacht, da nur Schalter <strong>und</strong><br />

nicht die wesentlich zahlreicheren Netzein-/ausgänge berücksichtigt werden<br />

müssen.<br />

Gleichwohl ist das Routing beim Clos-Netz deshalb nicht trivial, weil jedes<br />

Ein-/Ausgangsschalterpaar <strong>für</strong> eine neue Verbindung Zugang zum selben<br />

Schalter der Mittelstufe haben muß. Zwar stehen da<strong>für</strong> s Wege, d.h. Schalter der<br />

Mittelstufe, zur Verfügung, diese müssen aber so untereinander verteilt werden,<br />

daß der Zugang zu einem bestimmten Mittelstufenschalter nicht durch eine andere<br />

Verbindung bereits belegt ist.<br />

Das Problem, das es zu lösen gilt, ist zu erreichen, daß es eine nichtleere<br />

Schnittmenge von Mittelstufenschaltern gibt, die von beiden Schaltern eines<br />

Ein-/Ausgangsschalterpaares zum Legen einer neuen Verbindungen verwendet<br />

werden kann. Das bedeutet, daß das Routing "im Ganzen" durchgeführt werden<br />

muß, was eine zentrale Routing-Instanz voraussetzt. Das beschriebene Verteilungsproblem<br />

läßt sich durch Zerlegen der Menge von Verbindungen in Teilmengen<br />

lösen.<br />

Gegeben sei ein (f=s)-Clos-Netz mit N=ks Ein-/Ausgängen <strong>und</strong> eine Menge<br />

W von Verbindungswünschen, die gemäß<br />

231


Gl. 4.45: W = {( e i<br />

→ a j<br />

),<br />

0 ≤ ij , < s} ( W ≤ N)<br />

,<br />

spezifiziert sind <strong>und</strong> bei denen e i ein Schalter der Eingangsstufe <strong>und</strong> a j ein<br />

Schalter der Ausgangsstufe darstellt. Weiterhin sei m l ein Schalter der Mittelstufe<br />

(0≤l


ter der Ausgangsstufe widerspiegelt.<br />

Beispiel:<br />

In einem Clos-Netz mit 9 Ein-/Ausgängen <strong>und</strong> f=s=3 sollen die Leitungen <strong>für</strong><br />

folgende Verbindungswünsche (Permutationen) gelegt werden:<br />

W<br />

=<br />

⎧( 0→<br />

0) , ( 1 → 3) ,( 2 → 2) ,( 3 → 8)<br />

⎫<br />

⎨<br />

⎬<br />

⎩( 4→<br />

1) , ( 5 → 5) , ( 6 → 7) , ( 7 → 6) , ( 8 → 4)<br />

⎭<br />

Im ersten Schritt wird dazu aus den Verbindungswünschen der Permutationsvektor<br />

(0 3 2 8 1 5 7 6 4) aufgestellt. Im zweiten Schritt ist festzustellen, welche<br />

Ein- <strong>und</strong> Ausgänge über welche Schalter der Ein- <strong>und</strong> Ausgangsstufe verb<strong>und</strong>en<br />

werden müssen. Dazu wird der Permutationsvektor in eine 3-zeilige Matrix<br />

umgewandelt, in der die 1. <strong>und</strong> 3. Zeile die Schalter der Ein- bzw. Ausgangsstufe<br />

repräsentieren <strong>und</strong> in der die 2. Zeile die Permutation enthält:<br />

⎛<br />

⎜<br />

⎜<br />

⎜<br />

⎝<br />

000111222<br />

032815764<br />

010201221<br />

⎞<br />

⎟<br />

⎟ .<br />

⎟<br />

⎠<br />

Im dritten Schritt wird in dieser Matrix gezählt, wie oft die Schalter der Einbzw.<br />

Ausgangsstufe miteinander zu verbinden sind. Daraus resultiert die Verbindungsmatrix:<br />

⎛<br />

⎜<br />

⎜<br />

⎜<br />

⎝<br />

210<br />

⎞<br />

⎟<br />

111⎟<br />

.<br />

⎟<br />

012⎠<br />

Im vierten Schritt wird die Verbindungsmatrix in eine Summe von s Untermatrizen<br />

zerlegt, die die Schalterstellungen der s Kreuzschienenverteiler der<br />

Mittelstufe repräsentieren. Als Randbedingung muß dabei beachtet werden,<br />

daß von den Kreuzschaltern nur Punkt-zu-Punkt-Verbindungen realisiert werden<br />

dürfen. Daraus folgt, daß jede Untermatrix entweder 0 oder 1 als Elemente<br />

enthält (=verb<strong>und</strong>en oder nicht verb<strong>und</strong>en) <strong>und</strong> daß in jeder Zeile <strong>und</strong> jeder<br />

Spalte nur eine einzige 1 stehen darf. Für das Beispiel lautet eine mögliche Zerlegung<br />

der Verbindungsmatrix:<br />

233


⎛<br />

⎜<br />

⎜<br />

⎜<br />

⎝<br />

210<br />

111<br />

012<br />

⎞<br />

⎟<br />

⎟<br />

⎟<br />

⎠<br />

=<br />

⎛<br />

⎜<br />

⎜<br />

⎜<br />

⎝<br />

100<br />

010<br />

001<br />

⎞<br />

⎟<br />

⎟<br />

⎟<br />

⎠<br />

⎛<br />

100<br />

⎞ ⎛<br />

⎜ ⎟ ⎜<br />

+ ⎜ 001⎟<br />

+ ⎜<br />

⎜ ⎟ ⎜<br />

⎝ 010⎠<br />

⎝<br />

010<br />

100<br />

001<br />

⎞<br />

⎟<br />

⎟ .<br />

⎟<br />

⎠<br />

Nach dem Beweis der Blockierungsfreiheit des (s=f)-Clos-Netzes durch V. Benes<br />

ist es sicher, daß es mindestens eine solche Zerlegung gibt. In der Regel existieren<br />

sogar eine Vielzahl von Zerlegungen, so daß an dieser Stelle eine Nichteindeutigkeit<br />

in der Wegewahl besteht.<br />

Jede der Untermatrizen repräsentiert einen Schalter der Mittelstufe des Clos-<br />

Netzes, der insgesamt k Punkt-zu-Punkt-Verbindungen realisieren kann. Die<br />

Punkt-zu-Punkt-Verbindung vom Eingang i zum Ausgang j eines Schalters der<br />

Mittelstufe wird dabei durch eine 1 in der i-ten Zeile <strong>und</strong> j-ten Spalte der entsprechenden<br />

Untermatrix festgelegt. Nach dem 4. Schritt des Routing-Verfahrens<br />

steht fest, wie die Ein-/Ausgangspaare auf die Schalter der Mittelstufe aufgeteilt<br />

sind <strong>und</strong> wie deren Schalterstellungen lauten. Im 5. <strong>und</strong> letzten Schritt<br />

werden die Schalter der Mittelstufe mit den dazu gehörenden Ein- <strong>und</strong> Ausgängen<br />

verb<strong>und</strong>en. Aufgr<strong>und</strong> der gemachten Zerlegung in Schritt 4 ist dies zwar<br />

immer möglich, aber nicht eindeutig, so daß an dieser Stelle ebenfalls ein Freiheitsgrad<br />

existiert. Die <strong>für</strong> das Beispiel gewählten Verbindungen sind in Bild<br />

4.86 dargestellt.<br />

Eingangs=<br />

stufe<br />

Mittel=<br />

stufe<br />

Ausgangs=<br />

stufe<br />

0<br />

3<br />

2<br />

8<br />

1<br />

5<br />

7<br />

6<br />

4<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

Bild 4.86: Routing Beispiel <strong>für</strong> das 9x9 Clos-Netz.<br />

Das gezeigte Beispiel läßt sich in analoger Weise auf beliebige Netzgrößen erweitern.<br />

Kantenfärben<br />

Für das Kantenfärben wird die Verbindungsmatrix graphisch dargestellt. Jeder<br />

Knoten des Graphen bezeichnet dabei einen Schalter der Ein-/oder Ausgangs-<br />

234


stufe <strong>und</strong> die Kanten des Graphen repräsentieren die Verbindungen zwischen<br />

den Schaltern. Der Übersichtlichkeit halber zeichnet man die Knoten der Eingangsstufe<br />

links <strong>und</strong> die Knoten der Ausgangsstufe rechts, so daß ein bipartiter<br />

(zweiteiliger) Graph entsteht. Da i.a. mehr als eine Verbindung zwischen zwei<br />

Knoten (Schaltern) existiert, handelt es sich um einen bipartiten Multigraphen.<br />

Das wesentliche an der Methode des Kantenfärbens ist, daß der Multipgraph in<br />

s normale Graphen zerlegt wird, wobei die Topologie jedes Untergraphen den<br />

Verbindungen eines der s Kreuzschienenverteilers der Mittelstufe entspricht.<br />

Beispiel:<br />

Der Multigraph der Verbindungspermutation (0 3 2 8 1 5 7 6 4) eines Clos-Netzes<br />

aus 3x3-Kreuzschienenverteilern ist in Bild 4.87 gezeigt.<br />

Eingangsstufe<br />

0->0<br />

Ausgangsstufe<br />

Schalter 0<br />

2->2<br />

1->3<br />

Schalter 0<br />

Schalter 1<br />

4->1<br />

5->5<br />

3->8<br />

Schalter 1<br />

8->4<br />

Schalter 2<br />

6->7<br />

7->6<br />

Schalter 2<br />

Bild 4.87: Multigraph der Permutation (0 3 2 8 1 5 7 6 4).<br />

Die Zerlegung in Untergraphen erfolgt dergestalt, daß man den Kanten, die an<br />

jedem Knoten des bipartiten Graphen anliegen, verschiedene Farben gibt. Kanten<br />

verschiedener Knoten, die die gleiche Farbe haben, bilden jeweils einen Untergraphen.<br />

Dabei brauchen die Knoten eines Untergraphen nicht zusammenhängend<br />

zu sein. Bei N=ks Verbindungswünschen hat jeder der k Knoten<br />

maximal s verschiedene Kanten, so daß sich daraus s Farben bzw. Untergraphen<br />

ergeben. Da es an jedem Knoten eines Untergraphen nur eine Kante einer<br />

Farbe gibt, repräsentieren die Untergraphen die Schalter der Mittelstufe <strong>und</strong><br />

ihre Kanten sind die von den Schaltern zu realisierenden Punkt-zu-Punkt-Verbindungen.<br />

In Bild 4.88 ist das Kantenfärben <strong>und</strong> die daraus resultierende Zerlegung <strong>für</strong><br />

das Routing-Beispiel von Bild 4.87 dargestellt. Der Vorteil des Kantenfärbens<br />

im Gegensatz zur Matrizenzerlegung ist, daß die Untergraphen direkt den<br />

Schalterstellungen der Mittelstufe des Clos-Netzes entsprechen, wie ein Vergleich<br />

von Bild 4.88 mit Bild 4.86 zeigt. Das Beispiel der Graphenzerlegung ist<br />

ebenfalls auf beliebige Netzgrößen erweiterbar.<br />

Die Erfindung des Clos-Netzes hatte eine Reihe von Variationen <strong>und</strong> Wei-<br />

235


0<br />

1<br />

0<br />

1<br />

= + +<br />

2 2<br />

Bild 4.88: Graphenzerlegung durch Kantenfärben.<br />

terentwicklungen zur Folge. So wurden z.B. von Masson <strong>und</strong> Jordan [Masson72]<br />

nicht-rechteckige Clos-Netze untersucht, die unterschiedlich viele Ein<strong>und</strong><br />

Ausgänge haben <strong>und</strong> zusätzlich Broadcast- bzw. Multicast-Fähigkeit aufweisen.<br />

D. Koppelman [Koppelma88] studierte Clos-Netze, bei denen jeder<br />

Schalter unterschiedlich groß <strong>und</strong> die Zahl der Verbindungen zwischen zwei<br />

Schaltern >1 sein kann. Das wichtigste Netz, das aus dem Clos-Netz entstand,<br />

ist jedoch das Benes-Netz [Benes65], das im nächsten Kapitel erläutert wird.<br />

4.11 Das Benes-Netz<br />

Benes war sich der Bedeutung der Erfindung von Charles Clos bewußt <strong>und</strong><br />

wollte die Zahl der Kreuzungspunkte, aus denen die Schalter des Clos-Netzes<br />

bestehen, weiter reduzieren, um gegenüber dem äquivalenten Kreuzschienenverteiler<br />

der Komplexität O(N 2 ) einen noch höheren Einsparungseffekt zu erzielen.<br />

Nach der Überlegung von V. Benes war die größte Einsparung dann zu<br />

erzielen, wenn man möglichst kleine Kreuzschienenverteiler verwendet. Die<br />

kleinsten <strong>und</strong> einfachsten Kreuzschienenverteiler haben zwei Ein- <strong>und</strong> zwei<br />

Ausgänge <strong>und</strong> entprechen in ihrer Funktion den Kreuzschaltern, die an anderer<br />

Stelle bereits erläutert wurden.<br />

4.11.1 Kostenminimierung<br />

Man kann dann möglichst viele Kreuzschalter in ein Clos-Netz einbauen, wenn<br />

die Zahl der Ein- <strong>und</strong> Ausgänge des Netzes eine Zweierpotenz ist. Deshalb verwendete<br />

V. Benes im ersten Verbesserungsschritt Clos-Netze der Größe N=2 n ,<br />

die aus Kreuzschaltern in der Eingangs- <strong>und</strong> Ausgangsstufe bestehen. Durch<br />

diese Maßnahme sind die Kosten <strong>für</strong> diese Stufen minimiert.<br />

Als Nebeneffekt erforderte die Wahl von N/2 Kreuzschaltern der Größe 2x2 am<br />

Ein- <strong>und</strong> Ausgang des Clos-Netzes, daß in der Mittelstufe zwei Kreuzschienenverteiler<br />

der Größe (N/2xN/2) eingesetzt werden. Dies ist exemplarisch<br />

in Bild 4.89 <strong>für</strong> den Fall N=8 gezeigt.<br />

Im zweiten Verbesserungschritt ersetzte V. Benes die beiden großen Schalter<br />

der Mittelstufe durch je ein Clos-Netz, da da<strong>für</strong> weniger Koppelpunkte benötigt<br />

werden. Im entscheidenden dritten Schritt werden die Kreuzschienenverteiler,<br />

aus denen die Clos-Netze der Mittelstufe bestehen, solange rekursiv durch kleinere<br />

Clos-Netze mit Kreuzschaltern am Ein- <strong>und</strong> Ausgang ersetzt, bis das ganze<br />

236


1 2<br />

9<br />

7<br />

6<br />

8 8<br />

4 5<br />

10<br />

Bild 4.89: 1. Schritt in der Konstruktion des Benes-Netzes.<br />

Netzwerk nur noch aus Kreuzschaltern besteht. Man erhält dann eine Topologie<br />

wie in Bild 4.90.<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

Bild 4.90: Benes-Netz <strong>für</strong> N=8 Ein-/Ausgänge.<br />

Zur vollständigen Ersetzung aller Kreuzschienenverteiler durch Kreuzschalter<br />

sind log 2 N Schritte erforderlich, so daß das Benes-Netz aus 2log 2 N-1 Stufen<br />

besteht, da jede Ersetzung in einer Eingangs-, Mittel- <strong>und</strong> Ausgangsstufe resultiert,<br />

wobei alle Mittelstufen rekursiv ersetzt werden. Die Rekursion terminiert,<br />

wenn die kleinstmöglichen Clos-Netze erreicht sind, die aus je 6 Kreuzschaltern<br />

bestehen.<br />

Der erzielte Einsparungseffekt ist bemerkenswert: Für N=4096 Ein-/Ausgänge<br />

beispielsweise sind statt der beim Clos-Netz notwendigen 800 000 Koppelpunkte<br />

(Ein-/Ausschalter) nur noch ca. 188 000 Ein-/Ausschalter nötig, was<br />

≈75% weniger Aufwand ist <strong>und</strong> damit auch geringere Kosten bedeutet. Dabei<br />

muß man berücksichtigen, daß das Clos-Netz dieser Größe bereits 95% Einsparung<br />

gegenüber dem ursprünglichen Kreuzschienenverteiler erbracht hat, so<br />

daß durch die Benes-Erfindung nur noch ca. 1% der Koppelpunkte erforderlich<br />

sind. Ab jetzt waren selbst große blockierungsfreie Netze realisierbar, da die<br />

Komplexität der Netzstruktur sich von O(N 2 ) auf O(NlogN) reduziert hatte.<br />

Die Bedeutung des Benes-Netzes wird auch dadurch veranschaulicht, daß man<br />

sie mit der Erfindung der schnellen Fouriertransformation (FFT) [Cooley65]<br />

vergleicht, die ebenfalls im Jahre 1965 gemacht wurde <strong>und</strong> die dieselbe Reduktion<br />

der Komplexität bei der Berechnung der diskreten Fourierreihe erbracht hat<br />

(von O(N 2 ) auf O(NlogN) Multiplikationen). Bekanntermaßen sind durch die<br />

237


FFT eine Vielzahl neuer Algorithmen <strong>und</strong> Methoden entstanden.<br />

Beiden Erfindungen liegt das Divide-et-Impera- (divide and conquer) Prinzip<br />

zugr<strong>und</strong>e, das besagt, daß ein Problem solange in Unterprobleme zu zerteilen<br />

ist, bis die Lösung der Unterprobleme einfach genug wird. Das Gesamtproblem<br />

ist dann gelöst, wenn man es schafft, die Einzellösungen zu einer Gesamtlösung<br />

zusammenzusetzen.<br />

4.11.2 Aufbau des Benes-Netzes<br />

Gegeben ist ein Benes-Netz der Größe 4x4 sowie die Menge W={(0→0),<br />

(1→3), (2→1), (3→2)} von Verbindungswünschen. Gesucht sind die Schalterstellungen<br />

des Benes-Netzes.<br />

Zur Lösung des Routing-Problems wird zunächst versucht, <strong>für</strong> das einfachste<br />

aller Benes-Netze (4x4 Netz) die beiden Verbindungen "Eingang 0 mit Ausgang<br />

0" <strong>und</strong> "Eingang 2 mit Ausgang 1" von Hand, d.h. ohne besondere Routing-Methode<br />

zu legen.<br />

Dazu wird im 1. Schritt der Eingang 0 (E0) mit dem Ausgang 0 (A0) verb<strong>und</strong>en,<br />

indem die Schalter 1.1, 1.2 <strong>und</strong> 1.3 auf "=" gesetzt werden. Dadurch ist<br />

die obere Hälfte der Mittelstufe (oH) mit denjenigen Schaltern der Eingangs-<br />

Das Benes-Netz besteht aus (N/2) Kreuzschaltern in insgesamt (2log 2 N-1) Stufen,<br />

die miteinander gemäß der Subshuffle-Permutationen σ uk<br />

– 1<br />

bzw. σ uk<br />

verdrahtet<br />

sind. Die Subshuffle-Permutation wird auf die unteren k Bits (k = n, n-<br />

1, ..., 2) der Adressen der Kreuzschalterein-/ausgänge angewandt. Das Benes-<br />

Netz besteht in der linken Hälfte aus einem Baseline-Netz <strong>und</strong> in der rechten<br />

Hälfte aus einem inversen Baseline-Netz, wobei die letzte Stufe des linken Baselines<br />

oder die erste Stufe des rechten Baselines red<strong>und</strong>ant ist <strong>und</strong> weggelassen<br />

werden kann.<br />

4.11.3 Routing im Benes-Netz<br />

Das Routing im Benes Netz hängt ebenso wie beim Clos-Netz entscheidend davon<br />

ab, ob Leitungsvermittlung oder Paketvermittlung verwendet werden soll.<br />

Bei Paketvermittlung kann die Wegewahl von den Kreuzschaltern dezentral<br />

<strong>und</strong> <strong>parallel</strong> anhand der Zieladresse vorgenommen werden. Alternative Wege<br />

werden allerdings von einem einfachen "self routing"-Schema nicht berücksichtigt.<br />

Paketvermittlung ist aufgr<strong>und</strong> des doppelten Hardware-Aufwandes,<br />

den das Benes-Netz gegenüber einem Banyan-Netz benötigt, <strong>und</strong> der daraus resultierenden<br />

doppelten Latenzzeit nicht gebräuchlich; zumal der Vorteil des<br />

Benes-Netzes, den seine Blockierungsfreiheit darstellt, erst bei einem zentralisierten<br />

Routing-Verfahren zum Tragen kommt. Bei Leitungsvermittlung ist die<br />

Wegewahl trotz der alternativen Wege, die zur Verfügung stehen, relativ komplex<br />

<strong>und</strong> erfordert eine besondere Methodik. Ein Beispiel soll die Problematik<br />

aufzeigen, der man beim leitungsvermittelnden Benes-Netz begegnet:<br />

Beispiel:<br />

238


<strong>und</strong> Ausgangsstufe verbinden, an denen E0 <strong>und</strong> A0 anliegen.<br />

Im 2. Schritt wird versucht, Eingang 2 (E2) mit Ausgang 1 (A2) ebenfalls über<br />

oH zu verbinden, indem Schalter 2.1 auf "=" gesetzt wird. Dies mißlingt allerdings,<br />

weil Schalter 1.2 bereits durch Schritt 1 auf die untere Hälfte der Mittelstufe<br />

(uH) festgelegt ist (Bild 4.91a).<br />

a)<br />

1. E0->A0<br />

über oH<br />

0<br />

2. E2->A1 2<br />

über uH geht<br />

nicht<br />

1.1<br />

2.1<br />

oH<br />

1.3 1.2<br />

?<br />

uH<br />

0<br />

1<br />

b)<br />

1. E0->A0<br />

über oH<br />

3. E3->A2<br />

über oH<br />

0<br />

2<br />

3<br />

oH<br />

1.1<br />

1.3 1.2<br />

2.1 2.2<br />

2.3<br />

uH<br />

0<br />

1<br />

2<br />

2. A1->E2<br />

über uH<br />

Bild 4.91: Routing-Beispiel im Benes-Netz a) nicht erfolgreich b) erfolgreich.<br />

Bild 4.91b zeigt dieselben Verbindungswünsche (E0->A0, A1->E2) mit erfolgreichem<br />

Routing. Schritt 1 ist dabei identisch zum vorigen Versuch. Jetzt<br />

wird hingegen berücksichtigt, daß A1 durch Schritt 1 bereits auf uH festgelegt<br />

ist, somit wird der Schalter von E2 ebenfalls auf die uH, d.h. auf "x" gestellt.<br />

Schließlich wird der Schalter in der uH, an dem A1 <strong>und</strong> E2 anliegen, so gesetzt,<br />

daß E2 <strong>und</strong> A1 zusammengeschaltet sind ("x"). Jetzt kann auch E3 mit A2 verb<strong>und</strong>en<br />

werden, wenn berücksichtigt wird, daß E3 durch Schritt 2 bereits auf<br />

oH festgelegt ist. Dementsprechend wird Schalter 2.3 so gesetzt, daß er mit oH<br />

verb<strong>und</strong>en ist. Da der Schalter in der oH, an dem dann E3 <strong>und</strong> A2 anliegen, bereits<br />

auf "=" gesetzt ist, ist E3 mit A2 verb<strong>und</strong>en.<br />

Das Routing ist geglückt, es ist jedoch offensichtlich, daß größere Benes-Netze<br />

eine andere Routing-Methode als die dargestellte erfordern.<br />

Erste Routing-Methode<br />

Das Routing im Benes-Netz ist nicht gr<strong>und</strong>legend verschieden vom Routing im<br />

Clos-Netz, da seine Topologie aus dem Clos-Netz abgeleitet wurde. Deshalb<br />

läßt sich Kantenfärben <strong>und</strong> Matrixdekomposition auch beim Benes-Netz anwenden,<br />

wobei die Schalter stufenweise von außen nach innen gesetzt werden.<br />

Im ersten Schritt werden die Kreuzschalter der ersten <strong>und</strong> letzten Stufe eines<br />

NxN-Benes-Netzes berechnet <strong>und</strong> gesetzt. Dazu sind die Schalterstellungen der<br />

239


eiden Mittelstufen der Größe (N/2xN/2), die beim Benes-Netz in Form zweier<br />

Subnetze vorhanden sind, mit Hilfe eines der beiden Closschen Routing-Verfahren<br />

zu bestimmen.<br />

Im zweiten Schritt werden die Schalterstellungen der Kreuzschalter der zweiten<br />

<strong>und</strong> vorletzten Stufe berechnet, wozu wiederum eine Matrixdekomposition<br />

oder ein Kantenfärben durchzuführen ist. Als Vorgabe <strong>für</strong> den zweiten Schritt<br />

werden die im ersten Schritt berechneten Stellungen der Subnetze verwendet.<br />

Sie definieren die Verbindungswünsche, die von den inneren Stufen zu realisieren<br />

sind.<br />

Im dritten Schritt sowie allen folgenden werden die beschriebenen Vorgänge<br />

solange wiederholt, bis alle Kreuzschalter gesetzt sind. Dabei ist zu beachten,<br />

daß das Routing ab dem zweiten Schritt gleichzeitig in der oberen <strong>und</strong> unteren<br />

Hälfte des Benes-Netzes durchgeführt werden kann, da das Netz ab der zweiten<br />

Stufe in die beiden Subnetze zerfällt. Dasselbe gilt <strong>für</strong> die 4 Viertel der 3. Stufe,<br />

die 8 Achtel der 4.Stufe, usw., die aus zunehmend kleineren Subnetzen bestehen.<br />

Zweite Routing-Methode (Looping-Routing)<br />

Eine andere Methode der Wegewahl, das sog. Looping-Routing, wurde 1971<br />

von D. Opferman <strong>und</strong> N. Tsao-Wu angegeben [Opfermann71]. Dieses Verfahren<br />

erfordert weniger Rechenschritte als das zuvor erläuterte mehrfache Kantenfärben<br />

bzw. Matrizenzerlegen.<br />

Das Looping-Routing-Verfahren beruht auf dem Ursache/Wirkungsprinzip,<br />

das sich dergestalt äußert, daß am Anfang ein Kreuzschalter am Eingang des<br />

Netzes willkürlich festgelegt wird, was aufgr<strong>und</strong> der Netzred<strong>und</strong>anz möglich<br />

ist, <strong>und</strong> daß dann eine Kette von Wirkungen, d.h. daraus resultierende Schalterstellungen<br />

gebildet werden, wobei man beim Schaltersetzen jeweils zwischen<br />

erster <strong>und</strong> letzter Stufe des Benes-Netzes hin-<strong>und</strong> herpendelt. Die Namensgebung<br />

"Schleifen"-Routing drückt diese Pendelbewegung aus.<br />

Die Schalterstellung des ersten festgesetzten Schalters am Eingang wird zum<br />

Setzen eines korrespondierenden Schalters am Ausgang verwendet, dieser wiederum<br />

bewirkt ein dieser Ursache entsprechendes Setzen am Eingang, worauf<br />

erneut ein Ausgangsschalter gesetzt wird, usw. Die Kette endet, wenn alle<br />

Schalterstellungen der ersten <strong>und</strong> letzten Stufe bestimmt sind. Danach wird derselbe<br />

Vorgang auf die beiden halb so großen Subnetze im Innern der Benes-Topologie<br />

angewandt.<br />

Jeder Schalter am Ein- <strong>und</strong> Ausgang wird so gesetzt, daß berücksichtigt wird,<br />

ob der betreffende Schalterausgang des Vorgängerschalters mit dem oberen<br />

oder unteren Subnetz der Benes-Topologie verb<strong>und</strong>en ist. Nur wenn beide Ausgänge<br />

eines zu verbindenden Ein-/Ausgangsschalterpaares mit dem selben<br />

Subnetz verb<strong>und</strong>en sind, können Daten übertragen werden.<br />

Beispiel:<br />

Gegeben ist ein Benes-Netz mit N=8 Ein-/Ausgängen sowie die Permutation<br />

240


(0 7 6 5 4 3 2 1), <strong>für</strong> die die Wege durch das Netz zu legen sind. Gesucht sind<br />

wiederum die Schalterstellungen.<br />

Der erste Lösungsschritt besteht darin, daß zum Setzen der Schalter der ersten<br />

<strong>und</strong> letzten Stufe des Benes-Netzes der Mittelteil durch zwei Subnetze oH (obere<br />

Hälfte) <strong>und</strong> uH (untere Hälfte) der Größe N/2xN/2 ersetzt wird, so wie es in<br />

Bild 4.92 gezeigt ist. In dieser Phase erscheint das Benes-Netz wie ein 3-stufiges<br />

Clos-Netz, wodurch das Wegewahlproblem in seiner Komplexität abgenommen<br />

hat.<br />

0-> 0<br />

1-> 7<br />

2-> 6<br />

3-> 5<br />

1<br />

10<br />

oH<br />

3<br />

12<br />

7<br />

2<br />

6<br />

0<br />

1<br />

2<br />

3<br />

4-> 4<br />

5-> 3<br />

8<br />

9<br />

4<br />

5<br />

6-> 2<br />

7-> 1<br />

4<br />

5<br />

uH<br />

11<br />

6<br />

7<br />

Bild 4.92: Routing in der Ein- <strong>und</strong> Ausgangsstufe.<br />

Im zweiten Lösungsschritt werden die Schalterstellungen der Eingangs- <strong>und</strong><br />

Ausgangsstufe nach einem merstufigen Verfahren gewonnen (Die einzelnen<br />

Schritte des Verfahrens entsprechen dabei den Ziffern in Bild 4.92):<br />

1. Man beginnt bei einem beliebigen Schalter der Eingangsstufe, z.B. dem<br />

Schalter links oben <strong>und</strong> setzt ihn ebenfalls beliebig, z.B. auf "=". Eingang<br />

0 (E0) wird dadurch mit der oberen Hälfte der Mittelstufe (oH) verb<strong>und</strong>en<br />

(E0 -> oH) <strong>und</strong> Eingang 1 (E1) mit der unteren Hälfte (E1 -> uH).<br />

2. In der Ausgangsstufe wird der Schalter von A0 so gesetzt, daß ihn E0 erreichen<br />

kann, d.h. er steht auf "=".<br />

3. Die Mittelstufe oH wird so gesetzt, daß E0 <strong>und</strong> A0 verb<strong>und</strong>en sind.<br />

4. Der Schalter von E7 wird als Konsequenz von Schritt 2 auf uH gestellt, d.h.<br />

auf "=", damit er A1 erreichen kann. Die Position von E6 ist damit auf die<br />

Mittelstufe oH festgelegt (E6 -> oH).<br />

5. Die Mittelstufe uH wird so gesetzt, daß E7 <strong>und</strong> A1 verb<strong>und</strong>en sind.<br />

6. A2 wird auf "=" gesetzt, damit er mit E6 verb<strong>und</strong>en werden kann. A3 ist<br />

damit auf uH festgelegt.<br />

7. Die Mittelstufe oH wird so gesetzt, daß E6 <strong>und</strong> A2 verb<strong>und</strong>en sind.<br />

8. E5 wird auf "=" gesetzt, damit er A3 erreichen kann. In uH werden E5 <strong>und</strong><br />

A3 verb<strong>und</strong>en. E4 ist auf oH festgelegt.<br />

9. A4 wird auf "=" gesetzt. E4 <strong>und</strong> A4 werden in oH verb<strong>und</strong>en. A5 ist auf die<br />

Mittelstufe uH festgelegt.<br />

10. E3 wird auf "=" gesetzt. E3 <strong>und</strong> A5 werden in uH verb<strong>und</strong>en. E2 ist auf die<br />

241


Mittelstufe oH festgelegt.<br />

11. A6 wird auf "=" gesetzt. A6 wird mit E2 in der oH verb<strong>und</strong>en. A7 ist auf<br />

die Mittelstufe uH festgelegt.<br />

12. E1 ist bereits auf "=" gesetzt. A7 wird mit E2 in der Mittelstufe uH verb<strong>und</strong>en.<br />

Damit sind alle Schalter der Ein- <strong>und</strong> Ausgangsstufe festgelegt <strong>und</strong> die Verbindungswünsche<br />

<strong>für</strong> die Mittelstufen (Subnetze) bestimmt. In der nächsten<br />

Phase des Verfahrens werden die Schalter der zweiten <strong>und</strong> der vorletzten Stufe,<br />

in jeder der Subnetze getrennt, nach dem gleichen Schema festgelegt. Man<br />

schreitet solange von außen nach innen fort, bis alle Stufen bestimmt sind <strong>und</strong><br />

erhält dann eine Schalterkonfiguration wie in Bild 4.93.<br />

Insgesamt arbeitet Looping-Routing richtungsmäßig entgegengesetzt zum<br />

Kantenfärben bzw. zur Matrixdekomposition, bei dem die Schalter von innen<br />

nach außen gesetzt werden.<br />

0<br />

7<br />

6<br />

5<br />

4<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

Bild 4.93: Routing-Beispiel im Benes-Netz.<br />

Man kann zeigen, daß das Looping-Routing <strong>für</strong> alle Verbindungswünsche widerspruchsfrei<br />

terminiert [Opferman71], d.h., es kann bei N Ein-/Ausgängen<br />

alle N! Permutationen von Verbindungen realisieren. Unter der Voraussetzung,<br />

daß das Benes-Netz mit dem Looping-Routing oder einem gleichwertigen Verfahren<br />

betrieben wird, ist dieses Netz blockierungsfrei.<br />

Genau wie das Kantenfärben bzw. die Matrixdekomposition ist das Looping-<br />

Routing aufgr<strong>und</strong> der Wahlfreiheiten, die man beim Setzen einiger Schalter hat,<br />

nicht eindeutig.<br />

Die Erfindung des Benes-Netzes inspirierte Wissenschaftler zu Entwicklungen<br />

von Topologien anderer (2log 2 N-1)-stufiger Netze sowie deren Routing-<br />

Algorithmen. Darüberhinaus hat das Benes-Netz Fragen bzgl. der Blockierungsfreiheit<br />

beliebiger (2log 2 N-1)-stufiger Netze aufgeworfen, die bis heute<br />

Gegenstand der Forschung sind. Im nächsten Abschnitt sollen aus diesen Arbeiten<br />

das doppelte Baseline-Netz, das Lee-Netz <strong>und</strong> das doppelte Omega-Netz<br />

präsentiert werden.<br />

242


4.11.4 Benes-ähnliche Netze<br />

Es gibt bislang eine relativ kleine Zahl namentlich bekannter Netze, die eine<br />

Benes-ähnliche Struktur aufweisen <strong>und</strong> von denen zusätzlich ein Routing-Verfahren<br />

bekannt ist, das bei N Eingängen alle N! Permutationen von Verbindungen<br />

legen kann. Gemeinsames Kennzeichen dieser Netze ist, daß sie aus zwei<br />

Teilen mit insgesamt (2log 2 N-1) Schalterstufen bestehen <strong>und</strong> daß sie ihre Blokkierungsfreiheit<br />

bei Leitungsvermittlung durch Umordnen interner Pfade erreichen.<br />

Man kann zeigen, daß (2logN-1) Stufen zugleich das Minimum <strong>für</strong> alle<br />

blockierungsfreien Netze darstellen, die aus 2x2-Schaltern aufgebaut sind.<br />

Einige Benes-ähnliche Netze lassen sich durch topologische Äquivalenztransformation<br />

in das Benes-Netz überführen bzw. aus diesem herleiten, womit<br />

automatisch deren Blockierungsfreiheit bewiesen ist. Ist das nicht der Fall, ist<br />

die Blockierungsfreiheit dann bewiesen, wenn man ein Routing-Verfahren <strong>für</strong><br />

die jeweilige Netzstruktur <strong>für</strong> alle N! Permutationen von Verbindungen gef<strong>und</strong>en<br />

hat.<br />

Allgemein kann man drei verschiedene Gruppen von Topologien unterscheiden:<br />

Die erste Gruppe besteht aus zwei zueinander spiegelbildlichen,<br />

logN-stufigen Banyan-Netzen. Zu dieser Gruppe zählen das Benes- <strong>und</strong> das<br />

Lee-Netz [Lee85]. Die zweite Gruppe besteht aus zwei gleichen log 2 N-Netzen,<br />

was <strong>für</strong> die technische Realisierung günstig ist, da nur ein Typ von Netzmodul<br />

produziert <strong>und</strong> getestet werden muß. Zu dieser Gruppe zählen das doppelte Baseline-<br />

[Wu80a] sowie das doppelte Omega-Netz, dessen Blockierungsfreiheit<br />

allerdings noch nicht bewiesen werden konnte. Die dritte, bislang nur vermutete<br />

Gruppe besteht aus der Serienschaltung zweier beliebiger logN-stufiger, regelmäßiger<br />

<strong>und</strong> rechteckiger Banyans. Wichtig ist festzustellen, daß ein Netz, das<br />

aus der Kaskadierung zweier logN-Netze entstanden ist, topologisch etwas anderes<br />

darstellt, als die beiden Einzelnetze, aus denen es besteht. So läßt sich<br />

etwa das doppelte Omega-Netz nicht in das Benes-Netz überführen, obwohl die<br />

Bestandteile, Baseline- bzw. Omega-Netz, topologisch identisch sind.<br />

Doppeltes Baseline<br />

Das erste Netz aus der Kategorie der Benes-ähnlichen Netze erfanden Wu <strong>und</strong><br />

Feng im Jahre 1980 [Wu80a]. Sie zeigten, daß eine Anordnung aus zwei hintereinandergeschalteten<br />

Baseline-Netzen genauso blockierungsfrei durch Umordnen<br />

interner Wege ist, wie das Benes-Netz selbst (Bild 4.94a).<br />

Beim doppelten Baseline ist eine der beiden mittleren Schalterstufen red<strong>und</strong>ant<br />

<strong>und</strong> kann deshalb weggelassen werden. Man erhält dann ein Netz wie in Bild<br />

4.94b. Das doppelte Baseline-Netz hat zwei technische Vorteile:<br />

Die Verdrahtung wird von Stufe zu Stufe "lokaler", was bedeutet, daß in den<br />

inneren Stufen kurze Kabellängen zur Verdrahtung genügen, <strong>und</strong> daß dort<br />

Steckverbinder zwischen Gehäusen oder Platinen entfallen. Dieser elektrische<br />

<strong>und</strong> kostenmäßige Vorteil rührt von der Subshuffle-Verdrahtung her, deren<br />

Adreßbereich sich von Stufe zu Stufe halbiert. Zusätzlich besteht das Netz aus<br />

243


a)<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

2x2-Schalter<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

b)<br />

Bild 4.94: Das doppelte Baseline-Netz nach Wu <strong>und</strong> Feng <strong>für</strong> N=8 Ein-/Ausgänge.<br />

zwei baugleichen Modulen. Durch die Verdopplung der Stückzahl werden Produktion<br />

<strong>und</strong> Test der Module verbilligt <strong>und</strong> vereinfacht. Allerdings wird das<br />

doppelte Baseline-Netz trotz seiner Vorteile bislang nicht eingesetzt, was an<br />

seinem relativ komplexen Routing liegen mag. Ein <strong>parallel</strong>isierbarer Routing-<br />

Algorithmus ist z.B. in [Richter92] zu finden.<br />

Lee-Netz<br />

Fünf Jahre nach der Arbeit von Wu <strong>und</strong> Feng über die Verkettung zweier spiegelbildlicher<br />

Baseline-Netze konnte K. Y. Lee einen Beweis <strong>für</strong> die Blockierungsfreiheit<br />

der Serienschaltung von Omega- <strong>und</strong> Flip-Netz finden [Lee85].<br />

Die daraus entstehende Topologie ist in Bild 4.95 dargestellt. Wie bei den anderen<br />

Benes-ähnlichen Netzen ist auch hier eine Netzstufe in der Mitte red<strong>und</strong>ant<br />

<strong>und</strong> kann weggelassen werden. Das Routing-Schema <strong>für</strong> das Lee-Netz<br />

basiert auf Restklassenarithmetik. K. Y. Lee hat gezeigt, daß sich dieses Schema<br />

<strong>für</strong> die ganze Gruppe zueinander spiegelsymmetrischer Banyan-Netze eignet<br />

[Lee85].<br />

0<br />

7<br />

6<br />

5<br />

4<br />

3<br />

2<br />

1<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

Bild 4.95: Das Lee-Netz <strong>für</strong> N=8.<br />

244


Doppeltes Omega-Netz<br />

Bislang ist die Blockierungsfreiheit des doppelten Omega-Netzes nur <strong>für</strong> N≤8<br />

Ein-/Ausgänge bewiesen, jedoch nicht <strong>für</strong> beliebige Netzgrößen [Varma94].<br />

Das doppelte Omega-Netz hat den Vorteil, aus einer Sequenz gleicher Verdrahtungsstufen<br />

zu bestehen, die als einzelne Module implementiert werden können,<br />

was Produktion <strong>und</strong> Test eines großen Netzes dieser Art vereinfacht. Allerdings<br />

hat man hier nicht wie beim doppelten Baseline-Netz den zusätzliche<br />

Effekt abnehmender Vermaschung der Verdrahtung.<br />

Im Jahre 1988 wurde <strong>für</strong> N>8 gezeigt, daß (3log 2 N-4) Stufen ausreichend <strong>für</strong><br />

Blockierungsfreiheit sind [Varma88, Linietal 89]. Diese Stufenzahl ist allerdings<br />

noch zu hoch, um den technischen Vorteil der homogenen Struktur des<br />

doppelten Omega-Netzes nutzen zu können. Weitere Verbesserungen der Stufenzahl<br />

erscheinen möglich.<br />

Allgemein kann man sagen, daß Benes-ähnliche Netze aufgr<strong>und</strong> der heute<br />

üblichen Paketvermittlung nur geringe Bedeutung haben, was durch ihre relativ<br />

hohen Latenzzeiten <strong>und</strong> dem zentralen Routing-Schema verstärkt wird.<br />

4.12 Zusammenfassung dynamische Netze<br />

Dynamische Netze bestehen aus Schaltern <strong>und</strong> deren Verdrahtung, die eine Sequenz<br />

aus einem oder mehreren Banyan-Netzen bilden. Die Teilnehmer, Prozessoren,<br />

Rechenknoten oder Rechner erscheinen nicht explizit im Netzgraphen,<br />

sondern werden an die Netzein- <strong>und</strong> Ausgänge angeschlosssen.<br />

Dynamische Netze lassen sich formal durch gerichtete Graphen, den Hasse-<br />

Diagrammen [Berge62], darstellen. Für die Interpretation der Knoten eines<br />

Hasse-Diagramms gibt es zwei Möglichkeiten: Entweder repräsentieren die<br />

Knoten die Schalter im Netz oder sie stellen die Anschlüsse (Lötpunkte) der<br />

Schalter dar. Im letzteren Fall werden die Kanten des Hasse-Diagramms als<br />

Ein-/Ausschalter interpretiert; im ersten Fall sind sie die Verbindungen (Kabel)<br />

zwischen den Schaltern. Typische Vertreter der dynamischen Netze sind der<br />

Kreuzschienenverteiler, die logN-Netze, das Clos- <strong>und</strong> das Benes-Netz. Die<br />

letzten beiden haben red<strong>und</strong>ante Wege zwischen jedem Sender-/Empfängerpaar<br />

<strong>und</strong> sind bei Leitungsvermittlung blockierungsfrei.<br />

4.13 Hybride Netze<br />

Alle <strong>Verbindungsnetzwerke</strong>, die aus einer Mischung von statischem <strong>und</strong> dynamischem<br />

Netz bestehen, kann man als hybride Netze bezeichnen. Der Gr<strong>und</strong><br />

<strong>für</strong> die Verwendung hybrider Netztopologien liegt darin, die spezifischen Vorzüge<br />

von statischen <strong>und</strong> dynamischen Netzen zu vereinigen. Typische statische<br />

Netze wie Ringe, Gitter <strong>und</strong> Hyperkuben haben den Vorteil einfacher Topologie<br />

<strong>und</strong> Implementierung, während dynamische Netze wie Banyans oder<br />

Kreuzschienenverteiler eine geringe Latenz beim Datentransport aufweisen,<br />

245


die zudem unabhängig von der jeweiligen Zieladresse ist. Die Kombination beider<br />

Netzarten kann zu Netzen mit insgesamt besseren Eigenschaften führen.<br />

Es gibt zwei Arten, hybride Netze aufzubauen. Bei der ersten Art wird in einem<br />

statischen Netz einer oder mehrere Knoten mit f zulaufenden <strong>und</strong> s abgehenden<br />

Kanten durch ein dynamisches Netz der Größe fxs ersetzt. Bei der<br />

zweiten Art werden in einem dynamischen Netz einer oder mehrere fxs-Kreuzschienenverteiler,<br />

aus denen das dynamische Netz besteht, durch ein statisches<br />

Netz aus mindestens f+s Knoten ausgetauscht.<br />

Hybride Netze sind hauptsächlich auf dem Gebiet der Telekommunikation<br />

<strong>und</strong> der lokalen <strong>und</strong> globalen Netzwerke zu finden. Bei lokalen Netzen beispielsweise<br />

sind Ethernet-, Token Ring- oder ATM-Stränge, die in Gebäuden<br />

verlegt sind, über "Switche", d.h. über fxs-Kreuzschienenverteiler gekoppelt.<br />

Beim Telefonnetz sind die in der Erde fest installierten Leitungen über Koppelfelder<br />

verb<strong>und</strong>en, die ihrerseits dynamische Netze darstellen. Im weiteren<br />

soll als Beispiel <strong>für</strong> ein hybrides Netz die Gitter/Kreuzschienenverteiler-Topologie<br />

erläutert werden, die in der <strong>parallel</strong>en Rechentechnik eingesetzt wird.<br />

4.13.1 Gitter/Kreuzschienenverteiler-Topologie<br />

Der n-dimensionale Gitter/Kreuzschienenverteiler wurde erstmals von W. Giloi<br />

<strong>und</strong> S. Montenegro im Rahmen des sog. TICNET beschrieben [Monteneg88,<br />

Giloi89, Monteneg89]. In Bild 4.96a) ist als Beispiel <strong>für</strong> diese Topologie<br />

ein ebener Gitter/Kreuzschienenverteiler dargestellt. Jede Zeile <strong>und</strong> Spalte<br />

des Gitters des Beispiels besteht aus einem Kreuzschienenverteiler der Größe<br />

4x4 (Bild 4.96b <strong>und</strong> c). Die Zahl V der Knoten ist V = 4x4, <strong>und</strong> die Zahl K der<br />

Kanten des Graphen beträgt K = 4+4. Der Vorteil dieser hybriden Topologie<br />

liegt darin, daß die Distanz d zwischen allen Knotenpaaren unabhängig von der<br />

Anzahl der Netzknoten ist. Im Falle des ebenen Gitters wird d ≤ 2 .<br />

=<br />

a) b) c)<br />

Bild 4.96: Der hybride Gitter/Kreuzschienenverteiler in der Ebene.<br />

Die in Bild 4.96 gezeigte Topologie kann auf n Dimensionen der Ausdehnung<br />

l pro Dimension erweitert werden. Dazu sind in jeder Ebene des n-dimensio-<br />

246


nalen Raumes Kreuzschienenverteiler der Größe lxl erforderlich. Die Distanz<br />

im n-dimensionalen Gitter ist unabhängig von l stets ≤ n, <strong>und</strong> die Zahl V der<br />

Knoten beträgt:<br />

Gl. 4.50: V = l n .<br />

Insgesamt können also l n Prozessoren an die Kreuzschienenverteiler angeschlossen<br />

werden, wobei jeder Prozessor n Ports (Netzwerkanschlüsse) benötigt.<br />

Die Zahl K der Kanten, d.h. die Anzahl der Kreuzschienenverteiler, die<br />

zum Aufbau eines n-dimensionalen Gitters benötigt werden, beträgt:<br />

Gl. 4.51: K = nl n-1 .<br />

4.13.2 Vorteile des Gitter/Kreuzschienenverteilers<br />

Der n-dimensionale Gitter/Kreuzschienenverteiler hat neben topologischer<br />

auch wirtschaftliche Vorteile, wie nachstehende Kostenrechnung zeigt.<br />

Die Gesamtkosten G des Netzes ergeben sich aus den Kosten C pro Kreuzschienenverteiler<br />

<strong>und</strong> aus deren Anzahl K gemäß G = CK. Die Zahl K kann dabei<br />

nach Gl. 4.51 berechnet werden. Die Kosten C, die jeder Kreuschienenverteiler<br />

verursacht, belaufen sich auf:<br />

Gl. 4.52: C = αl 2 ,<br />

wobei α eine Proportionalitätskonstante ist. Die Gesamtkosten betragen also:<br />

Gl. 4.53: G = αl 2 nl n-1 .<br />

Daraus <strong>und</strong> aus Gl. 4.50 erhält man <strong>für</strong> G:<br />

Gl. 4.54:<br />

Für die Entfernung d ergibt sich aus :<br />

G = αnVl.<br />

Gl. 4.55: d ≤ log l V.<br />

Aus den Ergebnissen gemäß Gl. 4.54 <strong>und</strong> Gl. 4.55 kann man folgende Schlüsse<br />

ziehen:<br />

• Die Gesamtkosten des Gitter/Kreuzschienenverteilers hängen bei gegebener<br />

Prozessorzahl nur linear <strong>und</strong> nicht quadratisch von der Größe der Kreuzschienenverteiler<br />

ab.<br />

• Die Entfernung zwischen zwei Knoten im n-dimensionalen Gitter/<br />

Kreuzschienenverteiler ist bei gegebener Prozessorzahl umso kleiner, je größer<br />

die Zahl der Anschlüsse pro Kreuzschienenverteiler ist.<br />

• Für n=2, l = 2 erhält man die geringsten Kosten, aber die größte Latenz. Für<br />

den jeweiligen Anwendungsfall kann man Kosten gegen Latenz abwägen.<br />

247


• Für l = 2 wird aus der Gitter/Kreuzschienenverteiler-Topologie ein binärer<br />

Hyperkubus.<br />

Die Ergebnisse sollen anhand zweier Beispiele illustriert werden, bei denen diese<br />

Topologie mit einem Benes-Netz <strong>und</strong> einem binären Hyperkubus verglichen<br />

wird. Alle Netze haben jeweils gleiche Größe <strong>und</strong> sind blockierungsfrei.<br />

1. Beispiel<br />

In einem 2-D Gitter/Kreuzschienenverteiler sind N = 16384 Prozessoren miteinander<br />

zu verschalten. Dazu werden 256 Kreuzschienenverteiler der Größe<br />

128*128 benötigt. Die Gesamtzahl der Ein-/Ausschalter (Koppelpunkte) im<br />

Netz beträgt 2 22 .<br />

Ein Benes-Netz gleicher Größe, das aus 27 Schalterstufen besteht, benötigt<br />

13*2 14 Kreuzschalter. Wenn jeder Kreuzschalter durch einen 2x2-Kreuzschienenverteiler<br />

ersetzt wird, der wiederum aus 4 Koppelpunkten besteht, benötigt<br />

man ≈ 2 20 Koppelpunkte. Das Benes-Netz ist also um den Faktor 4 billiger,<br />

die Distanz jedoch um den Faktor 13,5 größer, da das Verhältnis der<br />

Durchlaufzeiten 27:2 Schritte beträgt.<br />

Beim Hyperkubus benötigt man 14 Schritte durch das Netz, was um den Faktor<br />

7 größer ist als bei der hybriden Topologie. Der Hyperkubus benötigt zwar<br />

keine Koppelpunkte, aber es werden 14 Ports im Vergleich zu 7 Ports pro Prozessor<br />

benötigt, was einen erheblichen Kostenfaktor darstellt.<br />

Darüberhinaus läßt sich ein Kreuzschienenverteiler der Größe 128*128 in ein<br />

Silizium-Chip integrieren, so daß alle 16 K Prozessoren über 256 Chips miteinander<br />

verb<strong>und</strong>en werden können. Schließlich ist die Verdrahtung der Kreuzschienenverteiler-Chips<br />

einfacher als die Verdrahtung des Benes-Netzes.<br />

2. Beispiel<br />

Es sind N = 2 16 Prozessoren in einem 4-D Gitter/Kreuzschienenverteiler zu verschalten.<br />

Dazu werden 4*16 3 = 2 14 Kreuzschienenverteiler der Größe 16*16<br />

benötigt. Die Gesamtzahl der Koppelpunkte beträgt wiederum 2 22 , was diesmal<br />

ungefähr dem Aufwand eines gleichgroßen Benes-Netzes, das aus 31 Stufen<br />

besteht, entspricht. Für die maximale Distanz sind im hybriden Netz jedoch nur<br />

4 statt 31 Schritte erforderlich.<br />

Allerdings benötigt das 4-D Netz 4 Netzwerkanschlüsse pro Prozessor, während<br />

das Benes-Netz mit einem Port auskommt. Die Ports können jedoch <strong>parallel</strong><br />

betrieben werden, was als Multiport-Betriebsweise bezeichnet wird <strong>und</strong><br />

den Durchsatz pro Prozessor entsprechend erhöht. Im entsprechenden Hypercube<br />

werden maximal 16 Schritte durch das Netz benötigt, <strong>und</strong> jeder Prozessor<br />

hat 16 Ports, was die 8-fache Latenz <strong>und</strong> die 4-fache Portzahl bedeutet.<br />

Zusammenfassend kann man sagen, daß die Gitter/Kreuzschienenverteiler-<br />

Topologie in beiden Fällen bzgl. Latenz <strong>und</strong> Kosten günstiger abschneidet.<br />

248


5 Beispiele kommerzieller Verbindungsnetze<br />

5.1 Das Verbindungsnetzwerk der Cray T3D/<br />

T3E<br />

5.1.1 Einleitung<br />

Im Jahre 1989 wurde von Cray Research ein Projekt initiiert, das zum Ziel hatte,<br />

einen großen <strong>und</strong> sehr leistungsfähigen Parallelrechner zu bauen. Bereits drei<br />

Jahre später wurde das Produkt, das aus diesem Projekt entstanden war, als "the<br />

world's first production oriented massively <strong>parallel</strong> system" angekündigt, <strong>und</strong><br />

im darauffolgenden Jahr (1993) wurde die erste Cray T3D ausgeliefert. Im Jahre<br />

1996 erschien das Nachfolgemodell T3E, die voraussichtlich 1997 die<br />

"Schallmauer" der 1 TFLOPS-Grenze erstmalig durchbricht. Die auf einem 3<br />

dimensionalen Torus als Verbindungsnetzwerk, auf Standard-Mikroprozessoren<br />

<strong>und</strong> auf CMOS beruhende T3D/E bedeutete eine Neuorientierung der Firma<br />

Cray in ihrer Tradition als Vektorrechnerhersteller.<br />

5.1.2 Überblick der Leistungsdaten<br />

Die Cray T3D [Cray94, Oed94] besteht in der größten Ausbaustufe aus 1024<br />

Rechenknoten zu je 2 Prozessoren vom Typ DEC alpha 21064 [Sites92], von<br />

denen jeder max. 150 MFLOPS leistet. Daraus ergibt sich eine additive Rechenleistung<br />

von 300 GFLOPS im Maximalausbau. Es lassen sich bis zu 64<br />

MB Hauptspeicher pro Prozessor installieren, so daß die größte Maschine über<br />

128 GB RAM verfügt. Die Halbierungsbandbreite des Verbindungsnetzwerks<br />

beträgt 38 GB/s bei einem 512 Prozessorsystem. Das Netz ist in ECL-Technologie<br />

implementiert <strong>und</strong> hat eine Zykluszeit von 6,6 ns <strong>für</strong> den Transfer eines<br />

Datenpakets zwischen zwei Knoten. Die Rechenknoten <strong>und</strong> der Hauptspeicher<br />

sind in der preisgünstigeren (<strong>und</strong> langsameren) CMOS Technik aufgebaut.<br />

Die Leistungsdaten <strong>für</strong> die Cray T3E sind im Vergleich zur T3D in Tabelle<br />

5.1 aufgelistet. Man sieht, daß bei der T3E die Rechenleistung gegenüber der<br />

T3D vervierfacht wurde. Dem gegenüber ist nur eine Verdreifachung der Halbierungsbandbreite<br />

zu verzeichnen, was zeigt, daß sich die Übertragungsrate<br />

bereits am oberen Ende des technisch (<strong>und</strong> finanziell) Machbaren bewegt. Um<br />

die Balance zwischen Rechenleistung <strong>und</strong> Kommunikationsleistung aufrecht<br />

zu halten, wurde bei der T3E die Zahl der Netzwerkschnittstellen verdoppelt,<br />

so daß jeder Prozessor einen eigenen Netzwerkanschluß aufweist.<br />

249


Rechnertyp T3D T3E<br />

Prozessor DEC 21064 DEC 21164<br />

Leistung/Prozessor [MFLOPS] 150 600 [Lauber1995]<br />

max. additive Rechenleistung [GFLOPS] 300 1200<br />

max. Hauptspeicher/Prozessor [GB] 0,064 2<br />

max. Hauptspeicher [TB] 0,128 4<br />

Halbierungsbandbreite (512 Proz.) [GB/s] 38 122 [Lauber1995]<br />

Netzzykluszeit [ns] 6,6 2,2<br />

Tabelle 5.1: Leistungsdaten der Cray T3E im Vergleich zur T3E.<br />

5.1.3 Aufbau der T3D, T3E<br />

Die T3D/E besteht aus Mikroprozessor-Rechenknoten, die über zwei voneinander<br />

getrennte <strong>Verbindungsnetzwerke</strong> miteinander verschaltet sind: einem Datentransfernetz<br />

<strong>und</strong> einem Synchronisationsnetz. Das Datentransfernetz ist als<br />

3-dimensionale Torustopologie realisiert, während das Synchronisationsnetz<br />

auf einem partitionierbaren Binärbaum beruht.<br />

Datennetz<br />

In Bild 5.1 ist der Datentransfertorus der Cray-Parallelrechner in seinen 3 Dimensionen<br />

graphisch dargestellt. Der Torus hat entlang der x-Richtung eine<br />

Ausdehnung von bis zu 16 Knoten, während in y- <strong>und</strong> z-Richtung max. 8 Knoten<br />

möglich sind. Da jeder Knoten aus 2 Prozessoren besteht, können bis zu<br />

2048 Prozessoren miteinander verschaltet werden.<br />

Die Verbindungen im Torus bestehen aus Ringen, die pro Zeiteinheit je ein<br />

Sender-/Empfängerpaar zulassen, also busähnlichen Charakter aufweisen. Im<br />

Maximalausbau der Maschine existieren 8*8 Ringe in x- <strong>und</strong> 16*8 Ringe in y-<br />

<strong>und</strong> z-Richtung, so daß insgesamt 320 Kommunikationsringe zur Prozessorkopplung<br />

zur Verfügung stehen, die simultan Daten übertragen können.<br />

Für die T3D gilt: Alle Knoten können bidirektional in jede der drei Raumrichtungen<br />

Daten mit einer Geschwindigkeit von 300 MB/s pro Dimension <strong>und</strong><br />

Richtung transferieren, so daß ein Knoten max. 1,8 GB/s an Datenverkehr aufweist<br />

(900 MB/s senden <strong>und</strong> empfangen). Die T3E erreicht den 6-fachen<br />

Durchsatz, da die Zahl der Netzwerkschnittstellen pro Knoten verdoppelt <strong>und</strong><br />

die Datenrate verdreifacht wurde. Der summierte Durchsatz über alle Netwerkschnittstellen<br />

beträgt beim größten T3D-System aus 1024 Knoten 1,8 TB/s. Die<br />

rechnerische Halbierungsbandbreite des Maximalsystems beträgt 8*8*300<br />

MB/s = 19 GB/s beim Durchschneiden an der schmalsten Stelle (8*8) sowie 38<br />

GB/s sonst.<br />

250


z<br />

y<br />

x<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

. .. . . .<br />

. . . . ..<br />

. . .<br />

. ..<br />

. . .<br />

.<br />

. . .<br />

.<br />

.<br />

.<br />

. . .<br />

.<br />

.<br />

. . .<br />

.<br />

.<br />

.<br />

Bild 5.1: Der Datentransfertorus der Cray-Parallelrechner.<br />

Bis zu 16 Knoten teilen sich in x-Richtung denselben Kommunikationsring, so<br />

daß, wenn alle Knoten auf diesem Ring gleichzeitig senden, pro Dimension <strong>und</strong><br />

Knoten 300 MB/s/16 = 19 MB/s übertragen werden können. Dabei ist zu beachten,<br />

daß bei der T3D nur ein Prozessor pro Knoten zu einer Zeit senden kann.<br />

Die korrespondierenden Zahlen <strong>für</strong> die T3E sind zum Vergleich in Tabelle 5.2<br />

dargestellt.<br />

Rechnertyp T3D T3E<br />

Datenrate/Kanal [MB/s] 300 900<br />

Durchsatz/Knoten (Senden+Empf.) [GB/s] 1,8 10,8<br />

summierter Durchsatz (1024 Knot.) [TB/s ] 1,8 11<br />

Halbierungsbandbreite 1 (1024 Knot.) [GB/s ] 19 58<br />

Halbierungsbandbreite 2 (1024 Knot.) [GB/s ] 38 116<br />

Datenrate/Prozessor/Ring (x-Richtung) [MB/s ] 19 57<br />

Tabelle 5.2: Datenraten im Torus.<br />

Man sieht, daß bei beiden Parallelrechnern der potentielle Durchsatz summiert<br />

über alle Netzwerkschnittstellen, d.h. die Datenmenge, die die Prozessoren erzeugen<br />

<strong>und</strong> verbrauchen könnten, deutlich höher liegt, als das, was das Netz zu<br />

251


transportieren in der Lage ist. Das Verhältnis zwischen maximalem potentiellen<br />

<strong>und</strong> tatsächlichen Verkehr beträgt bei der T3D 1,8 TB/s:38 GB/s = 50:1 <strong>und</strong> bei<br />

der T3E 100:1.<br />

Synchronisationsnetz<br />

Das Synchronisationsnetzwerk der Cray-Maschinen dient zur Unterstützung<br />

der <strong>parallel</strong>en Programmierung mit Hilfe spezielle Synchronisationsfunktionen<br />

<strong>und</strong> wird nicht zum Datentransfer verwendet. Hier werden Statusbits der Art<br />

"Berechnung fertig ausgeführt" oder "Beginn einer <strong>parallel</strong>en Schleife" übertragen.<br />

Um einen schnellen Broad- bzw. Multicast auf dem Synchronisationsnetz<br />

zu ermöglichen, wurde von Cray eine Baumtopologie als Verbindungsschema<br />

ausgewählt. Die Rechenknoten bilden die Blätter eines binären Baumes, der bei<br />

1024 Knoten aus 10 Ebenen ( =log 2 1024 ) besteht.<br />

Der Synchronisationsbaum läßt sich im Multiuser-Betrieb <strong>für</strong> mehrere Programme,<br />

die gleichzeitig auf derselben Maschine bearbeitet werden, in einzelne<br />

Teilbäume partitionieren. In Bild 5.2 ist der Synchronsationsbaum <strong>für</strong> den Fall<br />

von 3 Ebenen (8 Knoten) sowie eine der möglichen Aufteilungen in Unterbäume<br />

dargestellt.<br />

a) b)<br />

Bild 5.2: Synchronisationsbaum, komplett (a) <strong>und</strong> partitioniert (b).<br />

Alle Unterbäume arbeiten bidirektional, so daß Datentransfers von den Blättern<br />

zur Spitze <strong>und</strong> umgekehrt stattfinden können, wobei die Richtung zu den Knoten<br />

einen Multicast-/Broadcast implementiert, während die Rückrichtung <strong>für</strong><br />

den inversen Multicast-/Broadcast zuständig ist. In Bild 5.3 sind die beiden<br />

Übertragungsrichtungen <strong>und</strong> ihre technische Realisierung dargestellt.<br />

Für den inversen Multicast werden UND- bzw. ODER-Gatter eingesetzt,<br />

während der normale Multicast über 1-zu-2-Multiplexer realisiert ist. An der<br />

Spitze eines Unterbaumes können Synchronisationsinformationen von einer<br />

Richtung zur anderen überwechseln. Dadurch ist es möglich, einen inversen<br />

Multicast, der <strong>für</strong> das Sammeln von Statusinformationen zuständig ist, mit einem<br />

normalen Multicast zu kombinieren, um den ermittelten Status allen Prozessoren<br />

zurückliefern.<br />

Das Besondere an der inversen Multicast-Funktion ist, daß vom Benutzerprogramm<br />

dynamisch ausgewählt werden kann, ob der inverse Multicast über<br />

252


normaler<br />

Multi-/Broadcast<br />

. . .<br />

Knoten Ebene<br />

inverser<br />

Multi-/Broadcast<br />

. . .<br />

. . .<br />

. . .<br />

Gatter/Multiplexer Ebene<br />

. . .<br />

1 zu 2<br />

Multiplexer<br />

AND/<br />

OR Gatter<br />

Bild 5.3: Die Bestandteile des Synchronisationsnetzes.<br />

UND- bzw. Oder-Gatter realisiert wird. Dies erlaubt einen flexiblen Einsatz<br />

dieser Funktion.<br />

Der Gr<strong>und</strong> <strong>für</strong> die Verwendung zweier Netze, nämlich Datentransfer- <strong>und</strong><br />

Synchronisationsnetz, liegt darin, daß Datenaustausch <strong>und</strong> Synchronisation, die<br />

die Basisfunktionen <strong>parallel</strong>er Programmierung darstellen, entgegengesetzte<br />

Anforderungen an die Netzopologie stellen.<br />

Eine einfach zu programmierende Interprozessorkommunikation erfordert,<br />

daß die Bandbreite der Knoten unabhängig von der Knotenposition im Netz ist.<br />

Das bedeutet, daß alle Knoten gleichberechtigt sein müssen, was einen knotenymmetrischen<br />

Graphen voraussetzt.<br />

Zur effizienten Prozeßsynchronisation muß eine Barrierenfunktion vorhanden<br />

sein, um auf die Terminierung aller Prozessoren warten zu können, die an<br />

einer gemeinsamen Rechnung beteiligt sind, ohne, daß da<strong>für</strong> Rechenzeit durch<br />

Polling verbraucht wird. Nach Terminierung eines <strong>parallel</strong>en Programmteils<br />

muß der nachfolgende Rechenabschnitt über einen Multicast synchron getriggert<br />

werden. Beide Funktionen lassen sich am besten in einer Baumtopologie<br />

implementieren, die den Nachteil hat, nicht knotensymmetrisch zu sein.<br />

Wegen der unterschiedlichen Anforderungen wird die Interprozessorkommunikation<br />

über einen Torus abgewickelt, der eine dem Hypercube vergleichbare,<br />

gleichmäßige Kommunikationsleistung aufweist, während die Prozeßsynchronisation<br />

auf partitionierbaren Binärbäumen beruht. Darüber hinaus erlauben<br />

getrennte Netzwerke auch gleichzeitigen Austausch von Rechen- <strong>und</strong><br />

Synchronisationsdaten, was die Leistung des Gesamtsystems erhöht.<br />

Die Binärbäume des Synchronisationsnetzwerkes erleichtern die Prozeßsynchronisation<br />

in mehrfacher Hinsicht: Der Multicast-Baum, der aus einer<br />

Kaskade von Multiplexern besteht, kann nicht nur synchron bei allen Knoten<br />

die Ausführung eines Programmteils initiieren, sondern auch dieses vorzeitig<br />

terminieren (=Abort-Funktion). Der inverse Multicastbaum kann, nachdem er<br />

auf UND-Funktionalität gesetzt wurde, zur Implementierung <strong>parallel</strong>er Schleifen<br />

eingesetzt werden. Jeder Prozessor, der seinen Anteil am gemeinsamen<br />

253


Schleifenkörper beendet hat, setzt ein "ready"-Bit, <strong>und</strong> die UND-Verknüpfung<br />

aller Bits informiert einen die Schleife kontrollierenden, übergeordneten Prozessor<br />

über die Schleifenbeendigung.<br />

Bei Verwendung der ODER-Funktionalität im inversen Multicastbaum können<br />

Anwendungen wie <strong>verteilte</strong> Datenbanken in ihrer Ausführung stark beschleunigt<br />

werden: Über den Datentransfertorus wird beispielsweise allen Prozessoren<br />

ein in einer Datenbank zu suchender Eintrag mitgeteilt. Der erste Prozessor,<br />

der den Eintrag gef<strong>und</strong>en hat, setzt ein "fo<strong>und</strong>"-Bit, <strong>und</strong> die Kaskade<br />

von ODER Gattern teilt dies dem Master-Prozessor mit, worauf die noch suchenden<br />

Prozessoren vorzeitig terminiert werden. Die geschilderten Vorgänge<br />

von Multicast <strong>und</strong> inversem Multicast dauern auf der T3D extrem kurz. In nur<br />

1μ<br />

s wird eine Prozeßsynchronisation über bis zu 2048 Prozessoren durchgeführt,<br />

so daß die vom Netzwerk bedingten Zeitverluste bei der Prozeßsynchronisation<br />

vernachlässigbar sind.<br />

Neben den dargestellten Beispielen <strong>und</strong> Funktionen, die sehr schnell in Hardware<br />

vom Synchronisationsnetzwerk ausgeführt werden können, gibt es noch<br />

eine Reihe anderer Prozeduren, die mit Unterstützung des Synchronisationsnetzes<br />

beschleunigt werden. So benützen einige INTRINSIC-Funktionen<br />

des Cray FORTRAN-Compilers, die die Summe, das Produkt, das Maximum<br />

oder Minimum der Elemente eines Vektors berechnen, dieses Netz. Verschiedene<br />

in <strong>parallel</strong>en, numerischen Anwendungen häufig vorkommende Aufgaben<br />

können so effizient bearbeitet werden.<br />

Berechnet man die maximale Distanz zweier Knoten im Torus, so kann man<br />

<strong>für</strong> den Weg entlang einer Raumdiagonalen (8+4+4)=16 Knoten angeben, während<br />

die größte Entfernung im Binärbaum log21024 = 10 Knoten beträgt. Da<br />

beide Entfernungen sowohl von der Zahl der Schritte als auch von der Latenzzeit<br />

in der selben Größenordnung liegen, kann man sagen, daß Kommunikation<br />

<strong>und</strong> Synchronisation in der Geschwindigkeit aufeinander abgestimmt<br />

sind, so daß beide Netze im Vergleich zueinander ein ausgewogenes<br />

Bild ergeben.<br />

Netzwerkanschlüsse<br />

In Bild 5.4 ist in mehreren Ausschnittsvergrößerungen die Position <strong>und</strong> der<br />

Aufbau der Netzwerkanschlüsse innerhalb der Cray-T3D dargestellt. Ausgehend<br />

vom 3-dimensionalen Torus, der in Form eines Würfels dargestellt ist, erkennt<br />

man in der ersten Ausschnittsvergrößerung, wie die beiden Prozessoren<br />

eines Knotens an einen gemeinsamen Router angeschlossen sind (getrennt bei<br />

T3E). Der Router bildet die Schnittstelle zum Torus mit seinen 3 Raumrichtungen.<br />

Er inspiziert einlaufende Pakete nach ihrer Zieladresse <strong>und</strong> entnimmt diese<br />

<strong>für</strong> den Fall übereinstimmender Adressen dem Netz. Bei Nichtübereinstimmung<br />

wird das Paket solange in x-Richtung zu einem benachbarten Router weitergereicht,<br />

bis die x-Koordination dieses Routers mit der x-Koordinate des<br />

Zielknotens identisch ist. Danach wird der Vorgang entlang der y- <strong>und</strong> z-Richtung<br />

wiederholt, bis das Paket am Ziel ist, woraus auch die Bezeichnung x-y-z-<br />

Routing resultiert.<br />

254


Betrachtet man einen Prozessor näher, erkennt man, daß er aus den Komponenten<br />

Prozessorelement, DMA-Einheit <strong>und</strong> Netzwerk-Interface besteht. Das<br />

Prozessorelement enthält neben dem Speicher <strong>und</strong> einer zum Prozessor externen<br />

Speicherverwaltung (MMU) den DEC alpha-Prozessor als Rechenwerk.<br />

Die MMU ist ein relativ komplexes Modul, dessen primäre Aufgabe es ist,<br />

aus den höherwertigen Adreßbits des Prozessors zu erkennen, ob das gewünschte<br />

Datum im lokalen DRAM existiert oder ob es aus dem Speicher eines<br />

anderen Prozessors geholt werden muß. Weiterhin sind in der Spezial-MMU<br />

die Komponenten des Synchronisationsnetzwerks untergebracht (UND/ODER-<br />

Verknüpfung sowie 1-zu-2-Multiplexer), wobei die Partitionierung der Bäume<br />

an das Netzwerk-Interface ausgelagert ist. Schließlich wird von der MMU die<br />

atomare Funktion des unteilbaren Tauschens (atomic swap) implementiert, auf<br />

die später eingegangen wird.<br />

.<br />

...<br />

.<br />

.. . .<br />

. . .<br />

. . . . . .<br />

. . .<br />

. . .<br />

. . .<br />

.<br />

.<br />

...<br />

...<br />

.<br />

...<br />

.<br />

Proz.<br />

1<br />

- x<br />

+ z<br />

+ y<br />

Router<br />

- y<br />

+ z<br />

+x<br />

Proz.<br />

2<br />

-x<br />

-y<br />

-z<br />

Transmit<br />

x-Router +x<br />

y-Router +y<br />

z-Router +z<br />

Receive<br />

Prozessor<br />

Element<br />

DMA<br />

Einheit<br />

gemeinsam<br />

mit Proz. 1<br />

Netzwerk<br />

Interface<br />

DEC<br />

alpha<br />

DRAM<br />

Spezial MMU<br />

zusätzliche<br />

Adreβ=<br />

übersetzung<br />

Binärbaum<br />

Synchronisierung<br />

unteilbares<br />

Tauschen<br />

Fetch &<br />

Increment<br />

Platz <strong>für</strong><br />

4000<br />

Nachrichten<br />

Binärbaum<br />

Partionierung<br />

Bild 5.4: Aufbau der Cray T3D, ihrer Knoten <strong>und</strong> Netze.<br />

Die DMA-Einheit ist sowohl <strong>für</strong> den prozessorunabhängigen Transfer größerer<br />

Speicherbereiche zuständig, die zwischen den Lokalspeichern zweier Prozessoren<br />

ausgetauscht werden, als auch <strong>für</strong> den Transfer von Nachrichten, die in ei-<br />

255


ner Warteschlange im Lokalspeicher eines Prozessors stehen. Je zwei Prozessoren<br />

eines Knotens teilen sich eine DMA-Einheit <strong>und</strong> einen Router. Dadurch<br />

entstehen Engpässe, die bei der T3E dadurch behoben werden, daß jeder Prozessor<br />

ein eigenes Interface bekommt. Ebenso wird dort die gemeinsame<br />

DMA-Einheit durch einen Satz Transferregister ersetzt, auf die entfernte Prozessoren<br />

so zugreifen können als wären sie lokal.<br />

Im Netzwerk-Interface sind eine Sende- <strong>und</strong> Empfangswarteschlange vorhanden,<br />

die jeweils bis zu 4000 Datenpakete aufnehmen können. Sobald vom<br />

Prozessor eine Nachricht abgesetzt ist, wird diese vom Netzwerk-Interface<br />

überlappend zum weiterarbeitenden Prozessor übertragen, sobald sie in der<br />

Warteschlange an der Reihe ist. Die Sendepuffer sorgen, solange sie Nachrichten<br />

enthalten, <strong>für</strong> eine kontinuierliche Netzauslastung, unabhängig vom<br />

momentanen Zugriffsverhalten des Prozessors. Im Netzwerk-Interface wird<br />

weiterhin entschieden, ob ein bestimmter Prozessor Teil eines Synchronisationsunterbaums<br />

ist. Schließlich ist hier der Sitz einer zweiten systemweit unteilbaren<br />

Operation, dem Fetch&Increment-Befehl, der ebenfalls später erläutert<br />

wird.<br />

Zusammenfassend kann gesagt werden, daß der größte Teil komplexer Hardware<br />

bei der Cray T3D/E im Verbindungsnetzwerk steckt <strong>und</strong> damit auch ein<br />

Hauptteil der Entwicklungskosten. (Die teuerste Einzelkomponente in der Produktion<br />

ist der Speicher.)<br />

Weiterhin gilt, daß die Cray ist hinsichtlich des Daten- <strong>und</strong> des Synchronisationsnetzes<br />

in weiten Grenzen skalierbar ist. Sowohl Torus- als auch Baumtopologie<br />

bleiben bei ansteigender Netzgröße in ihrer Struktur unverändert, die<br />

Zahl der Ringe <strong>und</strong> die Baumtiefe nimmt linear bzw. sublinear zu.<br />

5.1.4 Kommunikationsmechanismen<br />

Bei der Cray T3D/E sind beide Standardprogrammiermodelle, d.h. gemeinsame<br />

Variablen <strong>und</strong> Botschaftenaustausch möglich. Sie werden unter Zuhilfenahme<br />

von Compiler-Direktiven bzw. Programmbibliotheken angesprochen. Die T3D<br />

unterstützt darüberhinaus vier verschiedene Synchronisationsmechanismen im<br />

Verbindungsnetzwerk in Hardware.<br />

Für den Programmierer bietet Cray die Sprache C++ <strong>und</strong> den MPP FORT-<br />

RAN Compiler an, der Teile von FTN 90, FTN D u. Vienna FTN implementiert<br />

<strong>und</strong> zusätzlich Funktionen aus dem bekannten Cray Auto-, Micro- <strong>und</strong> Macro<br />

Tasking enthält.<br />

Weiterhin existiert im Rahmen der CRAFT 90 Programmierumgebung PVM<br />

3.0, MPI <strong>und</strong> PARMACS als Programmiermodell sowie "data passing", das<br />

eine lmplementierung von Botschaftenaustausch auf niedriger Ebene darstellt.<br />

Schließlich gibt es über die Funktionen put <strong>und</strong> get die Möglichkeit, sehr<br />

schnell auf den Speicher eines anderen Prozessors zugreifen zu können (=gemeinsame<br />

Variable). Nach Aussage von Cray verhalten sich die Geschwindigkeiten<br />

<strong>für</strong> die Kommunikation über gemeinsame Variablen <strong>und</strong><br />

Botschaftenaustausch qualitativ wie in Bild 5.5 angegeben, d.h. die PVM Bibli-<br />

256


othek erfordert mehr Software-Zusatzaufwand im Hintergr<strong>und</strong>, was größere<br />

Startup-Zeiten, größere Latenz <strong>und</strong> kleineren Maximaldurchsatz zur Folge hat.<br />

Andererseits bietet PVM dem Programmierer neben den üblichen Send/<br />

Receive-Bibliotheksprogrammen eine Vielzahl unterstützender Funktionen.<br />

Beispiele da<strong>für</strong> sind pvm_barrier, pvm_bcast <strong>und</strong> pvm_mcast <strong>für</strong> Prozeßsynchronisation,<br />

pvm-reduce <strong>für</strong> Datenreduktionsoperationen <strong>und</strong> pvm-spawn zur<br />

Prozeßerzeugung.<br />

summierter<br />

Durchsatz<br />

gemeinsame Variable<br />

PVM-Bibliothek<br />

Zahl der Prozessoren<br />

Bild 5.5: Durchsatz bei gemeinsamen Variablen <strong>und</strong> Botschaftenaustausch nach [Camp95].<br />

Gemeinsame Variablen sind mittels der Speicherverwaltungen (MMUs) in den<br />

Rechenknoten implementiert, so daß alle Lokalspeicher zu einem großen<br />

Adreßraum nach dem NUMA-Modell vereinigt werden. Allerdings ist der Speicher<br />

nicht Cache-konsistent, d.h., daß im System <strong>verteilte</strong> Kopien einer Variablen<br />

nicht automatisch auf dem neuesten Stand gehalten werden. Der Benutzer<br />

muß deshalb auf Kopien gemeinsamer Variablen verzichten <strong>und</strong> diese unter<br />

Umgehung des Cache direkt aus dem Speicher lesen oder beim Schreiben einer<br />

gemeinsamen Variablen alle veralteten Duplikate "von Hand" invalidieren.<br />

Das Schreiben <strong>und</strong> Lesen gemeinsamer Variablen, die in entfernten Lokalspeichern<br />

residieren, kann überlappend zur Ausführung von Berechnungen erfolgen,<br />

die diese Variablen nicht benötigen. Weiterhin können in den Rechenknoten<br />

durch die DMA-Einheiten simultan zum Rechnen Botschaften bis<br />

zur Länge von 256 K Worten á 64 Bit zwischen einem Sender <strong>und</strong> mehreren<br />

Empfängern verschickt werden. Dadurch ergibt sich neben dem Synchronisations-Multicast,<br />

der im Binärbaum implementiert ist, ein zweiter Multicast <strong>für</strong><br />

Daten.<br />

5.1.5 Routing<br />

Sowohl Botschaftenaustausch als auch gemeinsame Variablen beruhen implementierungstechnisch<br />

betrachtet auf Paketvermittlung mit Virtual-Cut-<br />

Through Routing. Wie die Paketvermittlung im Cray-Netz abläuft, ist in Bild<br />

5.6 <strong>für</strong> den Fall, daß der Prozessor 1 Werte aus dem Lokalspeicher von Prozessor<br />

2048 lesen möchte, exemplarisch erläutert.<br />

257


Prozessor<br />

1<br />

M<br />

M<br />

U<br />

Router<br />

1<br />

Router<br />

1024<br />

M<br />

M<br />

U<br />

Prozessor<br />

2048<br />

Adresse als Lese=<br />

anforderung<br />

Speicherinhalt<br />

als Antwort<br />

Bild 5.6: Kommunikation zweier Router beim entfernten Speicherzugriff.<br />

Die Leseanforderung des 1. Prozessors wird automatisch, nachdem von der<br />

MMU erkannt wurde, daß es sich um einen nichtlokalen Zugriff handelt, vom<br />

Router des 1. Knotens in ein Datenpaket übersetzt, das durch den Torus zum<br />

korrespondierenden Router des 1024. Knotens geschickt wird. Alle Vorgänge<br />

laufen dabei autonom zur CPU ab <strong>und</strong> brauchen weder von ihr angestoßen noch<br />

überwacht werden. Die Antwort vom 1024. Knoten wird, wie es in Bild 5.7 dargestellt<br />

ist, als Paket verpackt zurückgeschickt.<br />

1<br />

Daten=<br />

paket:<br />

}1 Phit<br />

1 2 ... 6<br />

1 2 ... 4<br />

...<br />

1 2 ... 4<br />

Header<br />

Wort 1<br />

Wort 4<br />

Bild 5.7: Pakete mit einer Größe von bis zu 4 Speicherworten.<br />

Bis zu vier adreßmäßig aufeinanderfolgende Speicherworte können in einem<br />

Datenpaket übertragen werden. Auf der Ebene des physikalischen Transports<br />

werden 16 Bit-Worte durch das Netz transferiert, die, falls erforderlich, über einen<br />

Flußsteuerungsmechanismus angehalten werden könnnen. Die 16 Bit-Einheiten<br />

werden von Cray als Physical Transfer Units (Phits) bezeichnet. Ein Datenpaket<br />

kann bis zu 22 Phits enthalten. Zusätzlich zu jedem Phit werden noch<br />

8 Steuerbits übertragen.<br />

Die Zahl von 44 Datenbytes, die pro Paket gesendet werden, ist vergleichbar<br />

mit der 53 Byte langen ATM-Zelle, die in der Telekommunikation verwendet<br />

wird <strong>und</strong> kann im Fall der T3D als Kompromiß zwischen geringer Latenz einerseits<br />

<strong>und</strong> großer Bandbreite andererseits angesehen werden.<br />

Zusammenfassend kann aufgr<strong>und</strong> der Hardware-Zusatzeinrichtungen im Daten-<br />

<strong>und</strong> Synchronisationsnetz wie DMA, automatischer Zugriff auf entfernte<br />

Speicher, Reduktions- <strong>und</strong> Multicast-Funktionen gesagt werden, daß bei der<br />

T3D Wert auf die Optimierung der Interprozessorkommunikation gelegt wurde.<br />

Dies drückt sich auch in der Tatsache aus, daß neben den bereits dargestellten<br />

Funktionen zwei weitere Synchronisationsmechanismen in Hardware implementiert<br />

sind, die im folgenden näher erläutert werden.<br />

258


5.1.6 Synchronisationsmechanismen<br />

Insgesamt gibt es bei der Cray T3D vier Hilfsmittel zur Prozeßsynchronisation,<br />

die in Hardware realisiert sind <strong>und</strong> von denen zwei bereits dargestellt wurden.<br />

Diese Hilfsmittel sind:<br />

• UND/ODER-Synchronisation<br />

• Multi-/Broadcast-Synchronisation<br />

• Fetch&Increment-Synchronisation mit Zugriffskonfliktauflösung durch das<br />

Netz<br />

• Netzweites, unteilbares Tauschen von Speicherinhalten (Atomic Swap)<br />

Fetch&Increment Netzfunktion<br />

Zur Erläuterung des Fetch&Increment-Befehls wird zuerst die Wirkung des Befehls<br />

auf das Fetch&Increment-Register eines Cray-Prozessors dargestellt <strong>und</strong><br />

danach seine Anwendung in der <strong>parallel</strong>en Programmierung erläutert.<br />

In Bild 5.8 ist der Fetch&Increment-Befehl exemplarisch <strong>für</strong> den Fall gezeigt,<br />

daß drei Prozessoren gleichzeitig auf das Fetch&Increment-Register eines<br />

vierten Prozessors zugreifen wollen.<br />

vorher:<br />

Prozessor<br />

0<br />

Prozessor<br />

1<br />

Prozessor<br />

2<br />

g leichzeitig er<br />

Lesezug rif f<br />

Fetch &Increment<br />

Register =0<br />

Netz<br />

liest<br />

nur 1mal<br />

nachher:<br />

Prozessor<br />

0<br />

Prozessor<br />

1<br />

2 0 1<br />

Fetch &Increment<br />

Register =3<br />

Prozessor<br />

2<br />

Netz<br />

schr eibt<br />

nur 1mal<br />

Bild 5.8: Fetch&Increment Synchronisation.<br />

Für den Fall des Mehrfachzugriffs werden die Zugriffswünsche vom Netzwerk-<br />

Interface desjenigen Prozessors registriert, der das Fetch&Increment-Register<br />

beherbergt, <strong>und</strong> zu einem einzigen Zugriff auf das Register zusammengefaßt.<br />

Diese Zugriffskonfliktauflösung vermeidet Staus im Netz (Hot Spots).<br />

Das Netzwerk-Interface führt die gleichzeitigen Fetch&Increment-Zugriffe<br />

so aus, daß einem beliebigen ersten Prozessor der ursprüngliche Wert des Registers<br />

mitgeteilt wird <strong>und</strong> daß alle anderen Prozessoren einen jeweils um 1 erhöhten<br />

Wert erhalten. Anschließend wird vom Netzwerk-Interface der letzte<br />

übermittelte Wert in das Register zurückgeschrieben, so daß insgesamt nur eine<br />

259


Lese- <strong>und</strong> eine Schreiboperation durchgeführt werden muß, unabhängig von<br />

der Zahl zugreifender Prozessoren. Dies wird auch als Combining bezeichnet,<br />

da mehrere Schreib-/Lesezugriffe <strong>und</strong> Increment-Operationen zusammengefaßt<br />

werden. Das Combining erfolgt schaltungstechnisch an der Stelle im Netz,<br />

an der die Zugriffe zusammenlaufen, also am Netzwerk-Interface des betreffenden<br />

Knotens.<br />

Durch das Netz-Combining lassen sich erhebliche Geschwindigkeitssteigerungen<br />

bei der Prozessorsynchronisation erzielen, wie folgender Ausschnitt aus<br />

einem Cray FORTRAN-Programm zeigt:<br />

CDIR$ DO SHARED (Index1) ON Feld1(Index1)<br />

DO Index1=1,n ! n Prozessoren gleichzeitig<br />

Feld1(Index1) = 0 ! <strong>parallel</strong>es Initialisieren<br />

END DO<br />

Bei diesem Code-Teil wird <strong>parallel</strong> auf die gemeinsame Variable Feld1 zugegriffen,<br />

um sie mit Null zu initialisieren. Da alle Prozessoren zur selben Zeit<br />

den Schleifenzähler Index1 lesen wollen, ist es günstig, diesen in ein<br />

Fetch&Increment-Register zu legen, so daß jeder Prozessor vor einem Schleifendurchlauf<br />

eine neue Feldadresse zur Initialisierung zugewiesen bekommt.<br />

Die automatische Inkrementierung um 1 durch den Fetch&Increment-Befehl<br />

stellt sicher, daß nach Terminierung des Programms alle Feldelemente auf Null<br />

initialisiert wurden.<br />

Neben der Vergabe passender Indexwerte zur <strong>parallel</strong>en Abarbeitung einer<br />

Schleife kann die Fetch&Increment-Operation auch vorteilhaft zur systemweit<br />

eindeutigen Allozierung von Prozeß-<strong>und</strong> Prozessorkennummern verwendet<br />

werden. Die Kennummernvergabe ist aufgr<strong>und</strong> der Hardware-Implementierung<br />

der Operation zur Laufzeit eines <strong>parallel</strong>en Programms möglich. Damit kann<br />

das Betriebssystem beispielsweise eine dynamische Umkonfigurierung zur besseren<br />

Lastverteilung oder zur Kompensation von Hardware-Ausfällen während<br />

der Programmausführung vornehmen.<br />

Atomic Swap<br />

Durch Ausführung des Atomic Swap-Befehls wird der Inhalt eines speziellen<br />

Atomic Swap-Registers in einem Rechenknoten mit dem Wert einer Speicherzelle<br />

ausgetauscht, die nicht lokal zum betreffenden Rechenknoten ist. In Bild<br />

5.9 ist die Wirkung des systemweiten, unteilbare Tauschens von Speicherinhalten<br />

(Atomic Swap) graphisch dargestellt. Die Atomic Swap-Register sind<br />

physikalisch in der Memory Management Unit der Rechenknoten untergebracht.<br />

Die Funktion des unteilbaren Tauschens kann zur Verriegelung (Lokking)<br />

gemeinsamer Daten verwendet werden, die <strong>für</strong> den wechselseitigen Ausschluß<br />

gleichzeitig zugreifender Prozessoren sorgt.<br />

Die Atomic Swap-Operation soll anhand eines Cray FORTRAN Beispiels erläutert<br />

werden:<br />

260


vorher:<br />

lokales<br />

Tausch<br />

Register<br />

= x<br />

entfernte<br />

Speicher<br />

zelle<br />

= y<br />

nachher:<br />

lokales<br />

Tausch<br />

Register<br />

= y<br />

entfernte<br />

Speicher<br />

zelle<br />

= x<br />

Bild 5.9: Die Atomic Swap-Operation.<br />

CDIR$ SHARED Wert1, Wert1Lock<br />

IF (.NOT. TEST_LOCK(Wert1Lock) THEN<br />

! Testen <strong>und</strong> Schreiben von Wert1Lock<br />

Wert1 = 0 ! exclusives Schreiben von Wert1<br />

CALL CLEAR_LOCK(Wert1Lock)<br />

ELSE<br />

PRINT*, "Wert1 momentan nicht verfuegbar"<br />

ENDIF1<br />

Im Beispiel wird die gemeinsame Variable Wert1 exklusiv von einem Prozessor<br />

geschrieben. Dazu wird die Semaphore Wert1Lock verwendet. Die Operationen<br />

TEST_LOCK <strong>und</strong> CLEAR_LOCK, die auf die Semaphore wirken,<br />

werden mit Hilfe des Atomic Swap-Befehls implementiert, da garantiert werden<br />

muß, daß nur ein Prozessor zu einer Zeit die Semaphore liest oder schreibt.<br />

Durch das unteilbare Tauschen wird in einem einzigen Schritt der Wert der<br />

Semaphoren, der am Anfang 0 ist, durch den Wert 1 ersetzt (ausgetauscht), so<br />

daß ein eventueller zweiter, gleichzeitig zugreifender Prozessor in den ELSE-<br />

Zweig seiner IF-Abfrage gerät <strong>und</strong> so die gemeinsame Variable Wert1 nicht beschreiben<br />

kann.<br />

5.1.7 Ergebnisse<br />

Welche Ergebnisse haben die aufwendigen, hardwaremäßigen Einrichtungen<br />

der Cray im Verbindungsnetzwerk netto <strong>für</strong> den Anwender gebracht? Dazu ist<br />

in Tabelle 5.3 die Kommunikationsleistung der Maschine, gemessen am ping<br />

pong-Test [Hockney91] <strong>und</strong> ihre Rechenleistung, gemessen an der LINPACK-<br />

Anwendung, aufgelistet.<br />

In den Meßergebnissen nach [Oed94] sind die maximal erreichbare Nettodatenrate<br />

r ∞ , die Bytezahl n 1/2 , bei der die Hälfte von r ∞ erreicht wird <strong>und</strong> die<br />

Startup-Zeit aufgelistet, die die verstrichene Zeit zwischen Aufruf des Sendeunterprogramms<br />

<strong>und</strong> Beendigung der korrespondierenden Empfangsroutine<br />

darstellt. Aufgr<strong>und</strong> von Tabelle 5.3 zeigt sich, daß die Cray T3D bei der<br />

Interprozessorkommunikation zwischen zwei Benutzerprozessen ca. 1/3 ihrer<br />

Hardware-Datenrate erreicht. Desweiteren wird beim LINPACK-Rechentest<br />

bei 256 Prozessoren ca. die Hälfte der maximalen Rechenleistung erzielt. Bei<br />

der Cray T3D trägt zur Effizienz bei der Programmausführung das extrem<br />

261


schnelle Daten- <strong>und</strong> Synchronisationsnetz bei, das Multicast-/inversen Multicast-,<br />

Reduktions-, Swap- <strong>und</strong> Fetch-Operationen in Hardware realisiert. Diese<br />

Funktionen können vor allem bei größeren Prozessorzahlen (ab ca. 256) ein Absinken<br />

der Effizienz verhindern.<br />

Ping-Pong-Kommunikationstest:<br />

r∞ [MB/s] n 1/2 [B] Start Up<br />

unidirek. (P1 zu P2) 106 von 300 161 1,5 µs<br />

bidirektional P1 mit P2 188 " 600 250 1,3 µs<br />

LINPACK-Rechentest (256 Prozessoren, Problemgröße 38912):<br />

21 GFLOPS von 38 möglichen<br />

Tabelle 5.3: Kommunikations- <strong>und</strong> Rechenleistung der T3D nach [Oed94].<br />

Folgende Maßnahmen, die ebenfalls zur Effiziensteigerung beitragen, sind<br />

beim Verbindungsnetzwerk der Cray T3D nicht implementiert:<br />

• Mehrfachverkehr auf den Ringen (Slotted Ring Protocol). Zu jedem Zeitpunkt<br />

kann auf jedem Ringsegment ein Datenpaket unterwegs sein, was bis<br />

zu 16 gleichzeitige Pakete auf einem Ring aus 16 Teilnehmern erlauben würde.<br />

• Netzweite, automatische Cache-Konsistenz gemeinsamer Variablen. Das<br />

Schreiben einer gemeinsamen Variablen invalidiert ohne Zutun des Benutzers<br />

Kopien gemeinsamer Variablen, die in anderen Prozessor-Caches gehalten<br />

werden.<br />

• Automatisches Verbergen der Latenzzeiten des Speichers. Multithreading<br />

beispielsweise würde beim Zugriff auf das Netz auf einen anderen Prozeßfaden<br />

umschalten. Bislang muß der Benutzer durch eine explizite "READ<br />

AHEAD Direktive" vorausschauend Variable anfordern.<br />

5.2 Das Verbindungsnetzwerk der IBM SP2<br />

5.2.1 Einleitung<br />

Im Jahre 1990 initiierte IBM in Kingston, New York, das Forschungsprojekt<br />

"Vulcan" [Stunkel94b]. Zwei Jahre später wurde das "Highly Parallel Supercomputing<br />

Systems Laboratory (HPSSL)" gegründet <strong>und</strong> der erste Vulcan-Prototyp<br />

fertiggestellt, der den direkten Vorläufer der SP1-Maschine darstellt.<br />

262


1993 erschien die SP1 als das erste kommerzielle Parallelrechnerprodukt der<br />

Fa. IBM auf dem Markt, das ein Jahr später durch das Nachfolgemodell SP2 abgelöst<br />

wurde. In dem ersten Jahr ihres Erscheinens wurde die SP1 70 mal verkauft,<br />

was als großer wirtschaftlicher Erfolg galt. Zu diesem Zeitpunkt hatte<br />

IBM bereits 8 Jahre Erfahrung in der Entwicklung von Forschungs<strong>parallel</strong>rechnern<br />

hinter sich, bevor man in den wissenschaftlich-technischen <strong>und</strong><br />

kommerziellen Parallelrechnermarkt einstieg.<br />

5.2.2 Überblick der Leistungsdaten<br />

Die IBM SP2 [IBM95] besteht aus bis zu 512 POWER/2 Prozessoren zu je 266<br />

MFLOPS Rechenleistung pro Prozessor, so daß sich bei der größten SP2-Maschine<br />

insgesamt ca. 136 GFLOPS an summierter Rechenleistung ergeben. Jeder<br />

Prozessor der SP2 kann mit maximal 2 GB Hauptspeicher ausgerüstet werden,<br />

was in 1024 GB Hauptspeicher <strong>für</strong> den größten Rechner resultiert. Das<br />

Verbindungsnetzwerk der IBM SP2 hat eine Halbierungsbandbreite von<br />

512*40 MB/s = 20 GB/s. In Tabelle 5.4 sind die wichtigsten Daten der SP2 im<br />

Vergleich zur Cray T3D dargestellt.<br />

Rechnertyp IBM SP2 Cray T3D<br />

Prozessoren bis 512 POWER/2 bis 2048 DEC alpha<br />

max. Leistung/Prozessor [MFLOPS] 266 150<br />

max. summierte Leistung [GFLOPS] 136 300<br />

max. Hauptspeicher/Prozessor [GB] 2 0,064<br />

max. Hauptspeicher [GB ] 1024 128<br />

Halbierungsbandbreite [GB/s] 20 38<br />

Tabelle 5.4: Leistungsdaten IBM SP2 <strong>und</strong> Cray T3D im Vergleich.<br />

Das Nachfolgemodell der SP2 weist 4 Prozessoren pro Knoten vom Typ PowerPC<br />

630 auf, die über eine Buskopplung <strong>und</strong> gemeinsamen Speicher mit Cache-Kohärenz<br />

zusammengeschaltet sind (Symmetric Multiprocessing). Zwischen<br />

den Knoten wird wie bei der SP2 Botschaftenaustausch basierend auf<br />

Kanalkommunikation verwendet.<br />

5.2.3 Aufbau<br />

Jede SP2 besteht neben einem Bedienrechner vom Typ RS/6000 aus 4 Hauptkomponenten:<br />

Dem Wirtsknoten, der im Bedienrechner untergebracht ist, den<br />

Rechenknoten in separaten Gehäusen, den Ein/Ausgabeknoten, die über eigene<br />

Platten verfügen sowie dem Verbindungsnetzwerk, das von IBM als High Performance<br />

Switch bezeichnet wird. Das Prinzipschaltbild der SP2 ist in Bild 5.10<br />

263


dargestellt.<br />

DRAM<br />

MSMU<br />

IBM RS/6000<br />

Wirtsrechner<br />

µChan.<br />

CNTRL<br />

Wirtsknoten<br />

PROC.<br />

SP2<br />

Netz=<br />

werk<br />

Ein-/Ausgabeknoten<br />

DRAM<br />

MSMU<br />

DRAM<br />

MSMU<br />

PROC.<br />

PROC.<br />

DASD<br />

CNTRL<br />

PROC.<br />

Rechenknoten<br />

Platten=<br />

lauf=<br />

werke<br />

Bild 5.10: Prinzipschaltbild der IBM SP2.<br />

Jeder Rechenknoten der SP2 stellt einen eigenen Arbeitsplatzrechner dar, bestehend<br />

aus Prozessor, Speicher <strong>und</strong> Netzwerkschnittstelle. Anstelle einer eigenen<br />

Festplatte wird über das Netz auf die Platten des Bedienrechners oder auf<br />

die Laufwerke der Ein/Ausgabeknoten zugegriffen. Zur Vereinfachung der Bedienung<br />

<strong>und</strong> der Programmentwicklung läuft auf allen Rechenknoten das RS/<br />

6000-Betriebssystem AIX [IBM94], ein UNIX Derivat.<br />

Der Wirtsknoten besteht aus den Komponenten Prozessor, Speicher, Netzwerkschnittstelle<br />

<strong>und</strong> Bedienrechneradapter. Die Netzwerkschnittstelle (Memory<br />

and Switch Management Unit) ist mit der einen Seite über einen Micro<br />

Channel Controller an den internen Bus des Wirtsrechners angeschlossen <strong>und</strong><br />

erlaubt, mit diesem Daten mit einer Geschwindigkeit von bis zu 80 MB/s aus-<br />

264


zutauschen. Die andere Seite der Netzwerkschnittstelle speist Daten in den<br />

High Performance Switch ein.<br />

Sowohl die Rechen- als auch die Ein/Ausgabeknoten sind Varianten des Wirts-<br />

Knotens. Bei den Rechenknoten gibt es einen (optionalen) zweiten Prozessor,<br />

die Ein/Ausgabeknoten haben an dieser Stelle einen Platten-Controller mit<br />

Laufwerken.<br />

Die Memory and Switch Management Unit (MSMU), die im Wirts-, Rechen<strong>und</strong><br />

Ein-/Ausgabeknoten verwendet wird, besteht neben einem DRAM-Controller<br />

aus zwei Warteschlangen <strong>für</strong> das Senden bzw. Empfangen von Datenpaketen.<br />

Die MSMU ist als k<strong>und</strong>enspezifisches Gatearray aus ungefähr 185 000<br />

Gattern aufgebaut. Sie stellt das Bindeglied zwischen Knotenprozessor <strong>und</strong><br />

Verbindungsnetzwerk dar.<br />

Netzwerkanschlüsse<br />

Jeder Netzwerkanschluß sowie der ins Netz führende Kanal kann bidirektional<br />

mit einer Geschwindigkeit von 40 MB/s Daten senden <strong>und</strong> empfangen (=Hardware-Transfergeschwindigkeit).<br />

Daraus ergeben sich 40 GB/s (=2 Richtungen*40<br />

MB/s*512 Proz.) an summierter Bandbreite über alle Netzwerkschnittstellen<br />

einer voll ausgebauten SP2-Maschine.<br />

Die Hardware-Latenzzeit zwischen Senden <strong>und</strong> Empfangen eines Pakets beträgt<br />

0,5μs [Kuzela95] bei Rechnern aus bis zu 80, bzw. 0,875μs von 81 bis 512<br />

Knoten. Die Software-Latenz zwischen zwei Benutzerprozessen liegt bei ca.<br />

40μs [Bala94] bei Verwendung der IBM eigenen Kommunikationsbibliothek<br />

"External User Interface/Message Passing Library" (MPL/EUI-h). PVM <strong>und</strong><br />

MPI stehen ebenfalls zur Verfügung, haben jedoch eine größere Latenzzeit bei<br />

der Datenübertragung als EUI/h.<br />

Die Netzwerkschnittstelle ist eine vom POWER-Prozessor des Rechenknotens<br />

unabhängige Einheit, die neben einer Intel i860 CPU, zwei DMA-Einheiten<br />

<strong>für</strong> Blocktransfers sowie einen FIFO-Speicher enthält. Die Aufgabe des Intel-Prozessors<br />

ist die Programmierung der Blocktransfereinheiten, die Berechnung<br />

der CRC-Prüfsummen der Datenpakete sowie die Erkennung <strong>und</strong><br />

Behebung von Blockierungen <strong>und</strong> Schaltfehlern im Verbindungsnetzwerk.<br />

Durch die CPU in der Netzwerkschnittstelle wird der Rechenknoten von Kommunikationsaufgaben<br />

freigestellt <strong>und</strong> steht der (<strong>parallel</strong>en) Anwendung des Benutzers<br />

voll zur Verfügung. Das Blockschaltbild der Netzwerkschnittstelle<br />

[Stunkel94c] ist in Bild 5.11 dargestellt.<br />

Switch Chip<br />

Das Verbindungsnetzwerk [Agerwala95] der SP2 besteht aus nur zwei verschiedenen<br />

Gr<strong>und</strong>elementen, den MSMU Chips auf den Knotenplatinen <strong>und</strong><br />

den Vulcan Switch Chips [Stunkel94a, Stunkel94b, Stunkel94c] auf den Netzplatinen.<br />

Jedes Switch Chip enthält einen 8x8 Kreuzschienenverteiler, einen<br />

Datenpuffer pro Ein- <strong>und</strong> Ausgang sowie einen <strong>für</strong> alle Eingänge zentralen<br />

Speicher (Bild 5.12).<br />

265


DRAM<br />

(8 MB)<br />

Micro<br />

Channel-<br />

Bus<br />

Micro Channel-<br />

Schnittstelle<br />

Sende-FIFO<br />

Empfangs-FIFO<br />

Memory and Switch<br />

Management Unit<br />

(MSMU)<br />

High Performance<br />

Switch Link<br />

1. Blocktransfer=<br />

einheit<br />

2. Blocktransfer=<br />

einheit<br />

Intel<br />

i860<br />

(40 MHz)<br />

Bild 5.11: Die Netzwerkschnittstelle der SP2.<br />

Der Aufbau des Switch Chips wurde mit Hilfe von Warteschlangenmodellen<br />

(Queueing Theory Models) auf Durchsatz optimiert. Die Verwaltung der insgesamt<br />

16 Ein/Ausgabepuffer sowie des Zentralspeichers ist aufwendig gestaltet,<br />

um trotz der relativ niedrigen Datenrate von 40 MB/s, die durch die CMOS-<br />

Technologie der Chips vorgegeben ist, einen akzeptablen Durchsatz zu erzielen.Verschiedene<br />

Varianten von Speicherplatzallozierung sowie eine Behandlung<br />

von Spezialfällen zur fairen Arbitrierung wurden auf dem Chip in Hardware<br />

realisiert. Insgesamt kümmern sich 10 verschiedene Scheduler um die 17<br />

Puffer, die über 10 verkettete Listen verwaltet werden. Es werden zwei verschiedene<br />

Paketprioritäten in den Warteschlangen unterstützt.<br />

Der Vorläufer des Vulcan Switch Chip war <strong>für</strong> das geplante aber von IBM<br />

nie realisierte Teraflop-Projekt TF1 entworfen worden <strong>und</strong> mußte <strong>für</strong> seinen<br />

Einsatz in der SP1/2 mit einer zusätzlichen externe Beschaltung versehen werden.<br />

Der unidirektionale 8x8 Switch Chip ist extern so beschaltet, daß sich daraus<br />

ein bidirektionaler 4x4-Schalter ergibt (Bild 5.13), wie er <strong>für</strong> die SP2 benötigt<br />

wird.<br />

High Performance Switch<br />

Ebenso aufwendig wie der interne Aufbau eines Switch Chips ist das Netzwerk<br />

selbst. Zur Erreichung hoher Zuverlässigkeit sind die Switch Chips des Netzwerks<br />

doppelt vorhanden, um im laufenden Betrieb des Rechners durch einen<br />

Vergleich der Logikpegel zweier korrespondierender Switch Chips feststellen<br />

zu können, ob die betreffenden Ausgänge denselben Wert aufweisen. Eine<br />

Nichtübereinstimmung bedeutet einen Defekt <strong>und</strong> erfordert einen Teiletausch.<br />

Dazu ist ein Abschalten der Maschine erforderlich. (Das Tauschen von Platinen<br />

im laufenden Betrieb wird vom Betriebssystem nicht unterstützt.)<br />

266


8<br />

Flow<br />

Control<br />

CRC<br />

Check<br />

Receiver<br />

1<br />

FIFO<br />

31x1 flit<br />

Route<br />

Control<br />

8 64<br />

Deserializer<br />

Switch Chip<br />

Central<br />

Queue<br />

64<br />

Serializer<br />

Transmitter<br />

1<br />

8<br />

FIFO<br />

7x1 flit<br />

Bypass<br />

Arbi<br />

tration<br />

Flow<br />

Control<br />

CRC<br />

Gene<br />

rator<br />

8<br />

.<br />

.<br />

.<br />

Receive<br />

Arbi<br />

tration<br />

Transmit<br />

Arbi<br />

tration<br />

Dual Port<br />

RAM<br />

128 x 8 flit<br />

8<br />

.<br />

.<br />

.<br />

8<br />

Flow<br />

Control<br />

CRC<br />

Check<br />

Receiver<br />

8<br />

FIFO 8<br />

31x1 flit<br />

Route<br />

Control<br />

Deserializer<br />

64<br />

.<br />

.<br />

.<br />

Crossbar<br />

8 x 8<br />

.<br />

.<br />

.<br />

64<br />

8<br />

Serializer<br />

Transmitter<br />

8<br />

8<br />

FIFO<br />

7x1 flit<br />

Bypass<br />

Arbi<br />

tration<br />

Flow<br />

Control<br />

CRC<br />

Gene<br />

rator<br />

8<br />

Bild 5.12: Der Switch Chip der IBM SP1/2.<br />

4<br />

bidirektionale<br />

Kanäle<br />

4 Kanäle<br />

(Empfangen)<br />

4 Kanäle<br />

(Senden)<br />

8<br />

1<br />

8<br />

1<br />

. . .<br />

8<br />

1<br />

8<br />

1<br />

. . .<br />

8<br />

1<br />

Receive Transmit<br />

Port 0<br />

Port 0<br />

Port 1<br />

Port 1<br />

Port 3<br />

Port 4<br />

Switch<br />

Chip<br />

. . . . . .<br />

Port 3<br />

Port 4<br />

. . . . . .<br />

Port 7<br />

Port 7<br />

8<br />

1<br />

8<br />

1<br />

. . .<br />

8<br />

1 8<br />

1<br />

. . .<br />

8<br />

1<br />

4 Kanäle<br />

(Senden)<br />

4 Kanäle<br />

(Empfangen)<br />

4<br />

bidirektionale<br />

Kanäle<br />

Bild 5.13: Die Beschaltung des Switch Chips.<br />

Weiterhin gibt es <strong>für</strong> das Netz einen Service-Modus mit speziellen Testbefehlen,<br />

der in periodischen Zeitintervallen durchlaufen wird, um die Funktion<br />

des Netzes zu prüfen. Als Besonderheit ist zu erwähnen, daß nicht nur die Datenleitungen<br />

des Netzes mit CRC-Bits, sondern auch die Steuerleitungen zwischen<br />

den Switch Chips mit einer Prüfsumme gesichert sind. Schließlich trägt<br />

die relativ niedrige Datenrate von 40 Mb/s pro Leitung zum Schutz vor Übertragungsfehlern<br />

bei.<br />

267


Beim Verbindungsnetzwerk der SP2 sind je 8 Switch Chips (<strong>und</strong> ihre red<strong>und</strong>anten<br />

Komponenten) auf einer Platine untergebracht, die als Netzplatine<br />

(Switch Board) bezeichnet wird. Jedes Switch Board stellt ein bidirektionales<br />

Clos-Netz [Clos53] dar. Die <strong>für</strong> eine Clos-Topologie üblichen drei Stufen (Eingangs-,<br />

Mittel- <strong>und</strong> Ausgangsstufe) sind bei den SP2-Netzplatinen auf zwei reduziert,<br />

da die Eingangsstufe wegen der bidirektionalen Übertragung gleichzeitig<br />

als Eingangs- <strong>und</strong> Ausgangsstufe genutzt wird.<br />

Das Verdrahtungsschema einer Netzplatine ist in Bild 5.14 dargestellt. Jedes<br />

Switch Board eignet sich zur Verschaltung von bis zu 32 Knoten.<br />

Rechenknoten<br />

1 Switch Chip<br />

1<br />

2<br />

3<br />

16<br />

. . .<br />

zu<br />

weiteren<br />

Switch<br />

Chips<br />

oder<br />

Rechen=<br />

Knoten<br />

Netzwerkplatine<br />

Bild 5.14: Netzwerkplatine <strong>für</strong> bis zu 32 Knoten.<br />

Ab einer Größe von mehr als 32 Knoten ist es erforderlich, mindestens zwei<br />

Netzplatinen hintereinander zu schalten. Zur Erläuterung der Kaskadierung ist<br />

in Bild 5.15 das Verdrahtungsschema einer 64 Knoten-SP2 dargestellt.<br />

Das bei 64 Knoten unübersichtliche Verdrahtungsschema kann dadurch vereinfacht<br />

werden, daß je 16 Knoten, die an eine Netzplatine angeschlossen sind,<br />

als eine Einheit betrachtet werden, die durch gebündelte Linkleitungen miteinander<br />

verb<strong>und</strong>en sind. Diese abstrakte Sichtweise ist in Bild 5.16 gezeigt, in<br />

dem zusätzlich angegeben ist, aus wie vielen einzelnen Links eine gebündelte<br />

Linkleitung besteht. Die abstrahierte Sichtweise von gebündelten Linkleitungen<br />

<strong>und</strong> Sechzehnereinheiten läßt sich auch zur Darstellung anderer Verdrahtungsschemata<br />

einsetzen, wie man anhand von Bild 5.17 <strong>für</strong> den Fall von 48<br />

Prozessoren sehen kann.<br />

Für den Maximalausbau von 512 Knoten kann die Verdrahtung der Clos-<br />

Struktur auf bis zu 16x2 Netzplatinen erweitert werden, die in einer zweistufige<br />

Hierarchie von Clos-Netzen zusammengeschaltet werden (Bild 5.18). Diese<br />

Konfiguration hat <strong>für</strong> 512 Knoten die kleinstmögliche Latenz beim Datenaustausch.<br />

Hierarchische Netzstrukturen werden nicht nur von IBM bei der SP2 sondern<br />

beispielsweise auch von Thinking Maschines Corporation beim Fat Tree-Konzept<br />

der CM5 verwendet. In der Telekommunikation ist es der einzige Weg, ko-<br />

268


1<br />

2<br />

3<br />

16<br />

. . .<br />

1<br />

2<br />

3<br />

16<br />

. . .<br />

1<br />

2<br />

3<br />

. . .<br />

16<br />

1<br />

2<br />

3<br />

. . .<br />

16<br />

Bild 5.15: Verdrahtungsschema <strong>für</strong> 64 Knoten.<br />

4<br />

4<br />

6<br />

6<br />

4 4<br />

Bild 5.16: Abstrakte Darstellung einer 64 Knoten-SP2.<br />

8<br />

8<br />

8<br />

Bild 5.17: Abstraktes Verdrahtungsschema einer 48 Knoten-SP2.<br />

steneffiziente Verbindungsstrukturen aufzubauen, die üblicherweise in Orts-,<br />

Knoten-, <strong>und</strong> Hauptvermittlungseinrichtungen gegliedert sind. Bei der SP2<br />

wird im Gegensatz zur CM5 die Bandbreite der Datenübertragung von Hierarchieebene<br />

zu Hierarchieebene gewahrt, so daß die Maschine prinzipiell skalierbar<br />

ist. Da das Verdrahtungsschema der SP2 jedoch von der Zahl der zu kop-<br />

269


is 16 * 16<br />

Rechen=<br />

knoten<br />

1<br />

2<br />

3<br />

. . .<br />

16<br />

1<br />

2<br />

3<br />

. . .<br />

16<br />

4er-Gruppe<br />

16er-Gruppe<br />

bis 16 * 16<br />

Rechen=<br />

knoten<br />

1<br />

2<br />

3<br />

. . .<br />

16<br />

1<br />

2<br />

3<br />

. . .<br />

16<br />

1<br />

2<br />

3<br />

. . .<br />

16<br />

1<br />

2<br />

3<br />

. . .<br />

16<br />

. . .<br />

. . .<br />

. . .<br />

1<br />

2<br />

3<br />

. . .<br />

16<br />

1<br />

2<br />

3<br />

. . .<br />

16<br />

Bild 5.18: 2 stufige Hierarchie von Clos-Netzen beim Maximalausbau der SP2.<br />

pelnden Prozessoren abhängt, ist die SP2 nur in dem Sinne skalierbar, daß Knoten<br />

<strong>und</strong> Netzplatinen von einer bestimmten Maschinengröße zur nächsten<br />

weiterverwendet werden können, aber nicht die Verdrahtung dazwischen.<br />

Ganz allgemein spielt bei einem Parallelrechner neben der Zuverlässigkeit,<br />

die beim SP2-Netz durch red<strong>und</strong>ante Auslegung der Komponenten <strong>und</strong> durch<br />

Sicherungsbits von Daten- <strong>und</strong> Steuerleitungen erzielt wurde, die Skalierbarkeit<br />

aller Komponenten eine wichtige Rolle.<br />

270


5.2.4 Lokalität in der Netzstruktur<br />

Bei der SP2 existieren im Verbindungsnetz Unterschiede bzgl. der Zugriffszeit<br />

auf einzelne Prozessoren, die sich in verschiedenen Hardware-Latenzzeiten bei<br />

der Interprozessorkommunikation ausdrücken.<br />

Auf der Ebene der Switch Chips sind vier Kanäle eines Kreuzschienenverteilers<br />

an je 4 Rechenknoten angeschlossen. Dadurch ergibt sich innerhalb einer<br />

Vierergruppe von Prozessoren bzw. Prozessen eine Kommunikation mit sehr<br />

kurzer Hardware-Latenz, da nur ein integrierter Schaltkreis zwischen Sender<br />

<strong>und</strong> Empfänger durchlaufen werden muß (Bild 5.19).<br />

Vierergruppe<br />

von<br />

Knoten<br />

Switch<br />

Chip<br />

Verbindung zu<br />

weiteren<br />

Switch<br />

Chips<br />

Bild 5.19: Schnelle Kommunikation innerhalb einer Vierergruppe von Knoten.<br />

Auf der Ebene der Netzwerkplatinen sind je 4 Vierergruppen auf einer Seite einer<br />

Platine über eine Clos-Topologie verb<strong>und</strong>en, so daß innerhalb einer Gruppe<br />

von 16-32 Knoten ebenfalls eine relativ geringe Latenz möglich ist. Ab einer<br />

Größe von mehr als 32 Knoten steigt die Latenz zusätzlich an, wobei auch hier<br />

Datenlokalität genutzt werden kann. Je nach Entfernung der Knoten zueinander<br />

genügt entweder der Durchgang durch ein einziges Switch Chip (bei der Verbindung<br />

einer Vierergruppe) oder es sind <strong>für</strong> eine Sechzehner- bzw. 32er-Gruppe<br />

drei Durchgänge durch Switch Chips erforderlich oder es können bei mehr<br />

als 32 Rechenknoten pro Gruppe 4 bis 7 Durchgänge erforderlich werden.<br />

Die Datenlokalität, die bei vielen <strong>parallel</strong>en Anwendungen inherent vorhanden<br />

ist, kann auf verschiedenen Ebenen des Netzwerks genutzt werden. Entscheidend<br />

dabei ist, daß zwei Voraussetzungen erfüllt sind:<br />

• Die Prozesse einer <strong>parallel</strong>en Anwendung sind so den Prozessoren zugeordnet,<br />

daß innerhalb einer Gruppe dieselbe Latenz besteht. Dies erfordert<br />

eine Zerlegung der Interprozessorkommunikation der Anwendung in verschiedene<br />

Latenzzeitklassen.<br />

• Die Hardware-Latenzzeit darf nicht vom Verwaltungsaufwand der darüberliegenden<br />

Kommunikationsbibliotheken dominiert werden.<br />

Da die Software-Latenzzeiten, die beim Aufruf der Kommunikationsroutinen<br />

EUI-h entstehen, um 1-2 Größenordnungen höher als die Hardware-Latenzen<br />

liegen, ist die zweite Voraussetzung bei der SP2 nicht erfüllt, so daß die<br />

NUMA-Charakteristik der Maschine nicht sichtbar wird.<br />

271


5.2.5 Routing<br />

Bei der SP2 wird zur Interprozessorkommunikation Paketvermittlung verwendet.<br />

Die Pakete bestehen aus maximal 255 Flits (Bytes) inclusive Kopfteil.<br />

Der Header basiert auf Source-Based Routing, d.h. das sendende Netzwerk-Interface<br />

(i860 Prozessor) erzeugt anhand der Empfängeradresse ein Adreßfeld,<br />

das keine absoluten, sondern relative Adressen enthält. Beim Durchgang durch<br />

ein Switch Chip werden jeweils 3 Bits vom Adreßfeld entfernt <strong>und</strong> zur Routing-<br />

Entscheidung <strong>für</strong> einen der 8 Switch Chip-Ausgänge verwendet. Am Empfänger<br />

angekommen sind alle Header-Bits verbraucht, <strong>und</strong> das Paket besteht nur<br />

noch aus Nutzdaten.<br />

Gemäß der Clos-Topologie des SP2 Netzwerks ist jeder Rechenknoten von<br />

jedem anderen über eine Vielzahl von Wegen erreichbar. Die sich daraus ergebende<br />

Red<strong>und</strong>anz wird jedoch nicht zur adaptiven Wegewahl während der<br />

Laufzeit, sondern nur <strong>für</strong> ein statisches Routing-Verfahren verwendet. Im diesem<br />

Verfahren wird nach Inbetriebnahme des Rechners <strong>und</strong> vor Ausführung<br />

der ersten Applikation vom sog. Routing Table Generator (RTG) eine Routing-<br />

Tabelle aufgestellt, die N 2 /2 Einträge hat (N = Zahl der Rechenknoten) <strong>und</strong> in<br />

der <strong>für</strong> jede Punkt-zu Punkt-Verbindung ein gültiger Pfad durch das Netz enthalten<br />

ist.<br />

Zur Aufstellung der Routing-Tabelle wird vom Routing-Verfahren gezählt,<br />

wie oft die Ausgänge der Switch Chips von Pfaden belegt werden, <strong>und</strong> es wird<br />

versucht, jeden Ausgang gleich häufig zu verwenden, um im späteren Betrieb<br />

den Datendurchsatz im Netz zu optimieren. Nach Aufstellung der Routing-Tabelle<br />

ist in den einzelnen Rechenknoten ein Auszug der Tabelleneinträge des<br />

Routing-Verfahrens gespeichert.<br />

5.2.6 Kommunikationsoftware<br />

Für den Programmierer der SP2 werden alle gängigen <strong>parallel</strong>en Programmierumgebungen<br />

<strong>und</strong> Kommunikationsbibliotheken angeboten, die auf<br />

Botschaftenaustausch basieren: PVMe, Express, FORGE90, PARMACS, Linda<br />

<strong>und</strong> MPI. Gemeinsame Variablen werden nicht unterstützt. Als Programmiersprachen<br />

mit verschiedenen Interprozessorkommunikationsmöglichkeiten<br />

sind das IBM eigene XL FORTRAN mit PVM <strong>und</strong> MPI sowie High Performance<br />

FORTRAN (HPF) vorhanden. Insgesamt wird nur ein Kommunikationsmodell<br />

<strong>und</strong> keine hardwareunterstützen Synchronisationsmechanismen angeboten.<br />

Unter der Ablaufumgebung <strong>für</strong> <strong>parallel</strong>e Programme (AIX Parallel Environment)<br />

ist der Zugriff auf andere Prozessoren mit Hilfe der IBM-eigenen<br />

Message Passing-Bibliothek MPL/p (EUI-h) erlaubt. Diese Bibliothek ermöglicht<br />

direkten Benutzerzugriff auf das Netz ohne Betriebssystemaufrufe (User<br />

Calls) sowie Interprozeßkommunikation mit Multicast- <strong>und</strong> inversen Multicast-<br />

Funktionen (gather/scatter), die vergleichbar mit den Funktionen der PVM<br />

Message Passing-Bibliothek sind. Als Beispiel <strong>für</strong> EUI-h ist in Bild 5.20 das<br />

272


nicht blockierende Senden dargestellt.<br />

C TASK1:<br />

CALL MP_SEND(BUF1, NBYTES, DEST, TYPE1, MSGID1)<br />

C Hier kann weiter gerechnet werden<br />

C Waehrenddessen ist BUF1 fuer diese Task gesperrt<br />

C Jetzt ist Task1 soweit, dass sie wieder auf BUF1<br />

C zugreifen moechte.<br />

CALL MP_WAIT(MSGID1, NBYTES)<br />

C Task1 hat hier solange gewartet, bis BUF1<br />

C uebertragen wurde<br />

C TASK 2:<br />

CALL MP_RECV(BUF2, NBYTES, SRC,TYPE1, MSGID2)<br />

C Hier kann weiter gerechnet werden<br />

C Jetzt moechte Task2 auf die neuen Daten zugreifen<br />

CALL MP_WAIT(MSGID2, NBYTES)<br />

C Ab hier stehen die Daten zur Verfuegung<br />

Bild 5.20: Nichblockierendes Senden über EUI/h.<br />

5.2.7 Ergebnisse<br />

In Tabelle 5.5 ist die Kommunikationsleistung der Maschine [Kuzela95], gemessen<br />

am ping pong-Test [Hockney91] sowie ihre Rechenleistung [Agerwala95]<br />

gemessen an der LINPACK-Anwendung aufgelistet. (Die Werte beziehen<br />

sich auf die EUI-h Message Passing Library). In der Tabelle sind die<br />

maximal nutzbare Bandbreite r ∞ , die Zahl der Bytes, bei denen r ∞ /2 erreicht<br />

wird <strong>und</strong> die Start-up-Zeit angegeben.Trotz der um den Faktor 3 geringeren<br />

unidirektionalen Bandbreite der SP2 gegenüber der Cray T3D <strong>und</strong> der um den<br />

Faktor 27 größeren Hardware-Latenzzeit ist diese Maschine nach einem von<br />

der Fa. IBM durchgeführten LINPACK-Rechentest [Agerwala95] bei 64 Prozessoren<br />

genau gleich effizient wie die Cray T3D (jeweils ca. 70%).<br />

Ping-Pong-Kommunikationstest:<br />

r∞ [MB/s]<br />

n 1/2 [B]<br />

Start Up<br />

unidirek. (P1 zu P2)<br />

35 von 40<br />

1400<br />

40 µs<br />

bidirektional P1 mit P2<br />

48 von 80<br />

1870<br />

39 µs<br />

LINPACK-Rechentest (64 Prozessoren):<br />

SP2<br />

12,1 GFLOPS von 17<br />

Cray T3D<br />

6,4 GFLOPS von 9.6<br />

Tabelle 5.5: Kommunikations- <strong>und</strong> Rechenleistung der SP2 (thick nodes) nach [Kuzela95]<br />

<strong>und</strong> [Agerwala95].<br />

273


5.3 Das Verbindungsnetzwerk der Convex<br />

SPP 1000/ SPP 1200<br />

5.3.1 Einleitung<br />

Der Vektorrechnerhersteller Convex hat mit seiner Exemplar-Serie einen Umschwung<br />

der Firmenpolitik eingeleitet. Traditionell wurden Cray-kompatible<br />

<strong>Systeme</strong> in CMOS Gate Array-Technologie hergestellt; bei der Exemplar kommen<br />

erstmals Standard-Mikroprozessoren zusammen mit einem innovativen<br />

Verbindungsnetzwerk zum Einsatz. Mit dem Nachfragerückgang <strong>für</strong> massiv<strong>parallel</strong>e<br />

System wurde die Fa. Convex von HP übernommen.<br />

5.3.2 Überblick der Leistungsdaten<br />

Die CONVEX Exemplar SPP 1000 bzw. das verbesserte Modell SPP 1200 sind<br />

Parallelrechner mit <strong>verteilte</strong>m gemeinsamen Speicher, basierend auf virtuellen<br />

Speicheradressen (Distributed Shared Virtual Memory) [Convex93]. Die Exemplar<br />

besteht aus max. 128 Prozessoren vom Typ Hewlett Packard PA 7100<br />

(bzw. PA 7200 bei der SPP 1200), die je 200 MFLOPS leisten, woraus sich eine<br />

Gesamtrechenleistung von 25 GFLOPS ergibt. (Mit dem HP PA 8000 Prozessor,<br />

der ca. 1 GFLOPS/s leistet, wird der Nachfolger der SPP 1200, die SPP<br />

2000, über bis zu 128 GFLOPS Rechenleistung verfügen). Insgesamt lassen<br />

sich in der SPP 1000/SPP 1200 bis zu 256 MB Hauptspeicher pro Prozessor installieren,<br />

so daß die größte Maschine über 32 GB RAM verfügt. Die Datenrate<br />

des Verbindungsnetzwerks <strong>für</strong> den Transfer zwischen den sog. Hyperknoten,<br />

aus denen die CONVEX-Maschinen aufgebaut sind, beträgt 600 MByte/s<br />

[Convex94b]. Es wird unidirektional übertragen.<br />

5.3.3 Aufbau<br />

Die CONVEX Exemplar ist aus rechnerarchitektonischer Sicht in drei Ebenen<br />

gegliedert, die als Knoten-, Hyperknoten- <strong>und</strong> Parallelrechnerebene bezeichnet<br />

werden. Auf der Parallelrechnerebene können bis zu 16 Hyperknoten zu einem<br />

Rechner mittlerer Leistungsklasse, inklusive Peripherie <strong>und</strong> Bedienrechner<br />

zusammengeschaltet werden. Jeder Hyperknoten wiederum besteht aus 4 Rechenknoten<br />

zu je zwei HP-Prozessoren.<br />

Als Verbindungstopologie wird auf der Parallelrechnerebene eine 2-dimensionale<br />

Gitterstruktur der maximalen Größe 4x16 verwendet. Jede Gitterzeile in<br />

der Verbindungsstruktur repräsentiert einen Hyperknoten. In Bild 5.21 sind die<br />

bis zu 4x16=64 Rechenknoten (=128 Prozessoren) der Exemplar symbolisch<br />

dargestellt. Zur Kennzeichnung der Rechenknoten ist in diesem Bild die Notation<br />

der Matrizenschreibweise verwendet.<br />

274


1.1<br />

1.2 1.3 1.4<br />

I/O<br />

2.1 2.2 2.3 2.4<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

16.1 16.2 16.3 16.4<br />

.<br />

.<br />

.<br />

.<br />

.<br />

.<br />

I/O<br />

.<br />

.<br />

.<br />

I/O<br />

Bild 5.21: Schematischer Aufbau einer Exemplar.<br />

Bei der Exemplar ist die Gitterstruktur in x-Richtung anders als in y-Richtung<br />

aufgebaut. Innerhalb eines Hyperknotens, d.h. in x-Richtung, werden Kreuzschienenverteiler<br />

als Koppelelemente verwendet, während zwischen den Hyperknoten<br />

(y-Richtung) Ringe eingesetzt werden [Convex94b]. Jeder Ring<br />

stellt eine CONVEX-eigene Implementierung des SCI-Standards IEEE 1596<br />

[IEEE92] in Gallium-Arsenid-Technologie dar. Hyperknoten aus der SPP1200<br />

können mit den Hyperknoten anderer SPP 1200- <strong>und</strong> SPP 1000-Maschinen gekoppelt<br />

werden, um daraus einen größere Parallelrechner aufzubauen, da die<br />

SCI-Schnittstellen identisch sind. Die SPP 2000 arbeitet jedoch mit höherer Datenrate,<br />

was <strong>für</strong> deren größere Rechenleistung erforderlich ist, aber Inkompatibilität<br />

an den Schnittstellen bedeutet.<br />

5.3.4 Gemeinsamer Speicher<br />

Die CONVEX Exemplar weist von allen existierenden kommerziellen Parallelrechnern<br />

die innovativste Architektur auf. Kennzeichen dieser Architektur ist<br />

es, daß es einen systemweiten, Cache-kohärenten, gemeinsamen Speicher gibt,<br />

dessen Konsistenz sowohl im Hyperknoten als auch zwischen den Hyperknoten<br />

automatisch aufrecht erhalten wird.<br />

Innerhalb des Hyperknotens sorgt ein CONVEX-eigenes Gatearray <strong>für</strong> Cache-Konsistenz,<br />

während die Konsistenz zwischen den Hyperknoten mit Hilfe<br />

der einzelnen Scalable Coherent Interfaces (SCIs) gesichert wird, die direkten<br />

Zugriff auf die Prozessorbusse haben. Zusätzlich können über die SCI-Ringe<br />

auch Botschaften <strong>für</strong> Message Passing ausgetauscht werden.<br />

Zum Erhalt des gemeinsamen Speichers werden nicht die Speicherseiten, die<br />

von den Speicherverwaltungseinheiten (MMUs) der Prozessoren adressiert<br />

werden, über das Netz transportiert, sondern die SCI-Ringe tauschen die wesentlich<br />

kleineren Cache-Zeilen der Prozessoren aus. Jeder Knoten verwaltet<br />

dabei seinen Lokalspeicher <strong>und</strong> Cache als eine Teilmenge des gemeinsamen<br />

Adreßraums.<br />

275


5.3.5 SCI-Ringe<br />

Alle SCI-Ringanschlüsse, die von CONVEX als Coherent Toroidal Interface<br />

(CTI) bezeichnet werden, sind mit einem Kommunikations-Cache, dem sog.<br />

CTI-Cache, ausgerüstet, der alle gültigen Cache-Zeilen aller Prozessoren eines<br />

Hyperknoten enthält <strong>und</strong> so zur schnellen Abwicklung der Inter-Hyperknotenkommunikation<br />

beiträgt. Ist eine Cache-Zeile nicht im CTI-Cache eines<br />

Ringanschlusses enthalten, dauert es 3μs, die Cache-Zeile in Form eines Dattenpakets<br />

aus einem anderen Hyperknoten zu holen. Innerhalb des Hyperknotens<br />

kann eine Cache-Zeile im Falle eines "Cache Miss" in 0,5μs zum betreffenden<br />

Prozessor transportiert werden.<br />

Auf den SCI-Ringen der Exemplar werden in y-Richtung Cache-Zeilen von<br />

64 Byte Länge in Form von Datenpaketen transportiert. Fällt einer oder mehrere<br />

Ringe aus, kann die Exemplar nach einem Systemneustart mit anschließender<br />

Umkonfigurierung bei eingeschränkter Leistungsfähigkeit weiter betrieben<br />

werden, solange noch mindestens ein Ring intakt bleibt. Die Geschwindigkeit<br />

der SCI-Ringe übertrifft mit 600 MB/s pro Ring die Netzwerke der Intel Paragon<br />

(175 MB/s) <strong>und</strong> der Cray T3D (300 MB/s). Diese sind jedoch <strong>für</strong> bidirektionalen<br />

Betrieb ausgelegt, während auf dem CONVEX-Ring auch Daten in<br />

Rückrichtung im selben Umlaufsinn übertragen werden müssen.<br />

5.3.6 Hyperknotenebene<br />

Auf der Hyperknotenebene sind jeweils vier Rechenknoten á zwei Prozessoren<br />

zu einer funktionalen Einheit, dem Hyperknoten, zusammengefaßt (Bild 5.22).<br />

Alle acht Prozessoren eines Hyperknotens <strong>und</strong> das dazu gehörende Verbindungsnetzwerk<br />

sind physikalisch auf derselben Platine untergebracht, so<br />

daß der kleinste CONVEX-Parallelrechner aus einer einzigen gedruckten<br />

Schaltung besteht. Größere Modelle umfassen bis zu 16 Platinen, die über SCI-<br />

Verbindungen mit Hilfe von Koaxkabeln gekoppelt werden. Exemplar-Maschinen<br />

sind deshalb nicht in x- sondern nur in y-Richtung skalierbar.<br />

SCI 1<br />

SCI 2<br />

SCI 3<br />

SCI 4<br />

Rechen<br />

knoten 1<br />

Rechen<br />

knoten 2<br />

Rechen<br />

knoten 3<br />

Rechen<br />

knoten 4<br />

5 x 5 Kreuzschienenverteiler<br />

Peripherie<br />

Geräte<br />

Bild 5.22: Aufbau eines Hyperknotens.<br />

276


Das Verbindungsnetz innerhalb eines Hyperknotens ist ein 5x5-Kreuzschienenverteiler,<br />

der die Knoten sowohl untereinander als auch mit der Peripherie<br />

koppelt. Als Peripherie gelten hierbei Plattenlaufwerke, die <strong>für</strong> die UNIX-Betriebssysteme<br />

der Knoten notwendig sind, aber auch andere periphere Geräte,<br />

wie ein lokales Netzwerk (Ethernet, ATM) <strong>und</strong> digitale Ein-/Ausgabegeräte<br />

können hier angeschlossen werden. Gegenüber einem zentralen Bus bietet der<br />

Kreuzschienenverteiler erhebliche Bandbreitevorteile, da alle fünf Ports gleichzeitig<br />

Daten senden <strong>und</strong> empfangen können.<br />

Die in einem Hyperknoten zur Verfügung stehenden SCI-Schnittstellen erlauben,<br />

vier SCI-Ringe pro Exemplar-Rechner in y-Richtung aufzubauen. Um<br />

die Übertragungsbandbreite zu erhöhen, können sich die Ringe den Transport<br />

adreßmäßig aufeinanderfolgender Speicherblöcke aufteilen (Address Interleaving).<br />

Da die Speicher in Bänken zu je 64 Bytes organisiert sind, werden auch<br />

auf je einem CTI Blöcke zu je 64 Byte übertragen [Convex94a].<br />

5.3.7 Netzwerkanschlüsse <strong>und</strong> Rechenknoten<br />

In Bild 5.23 ist der Aufbau eines Rechenknotens dargestellt. Auf der Knotenebene<br />

sind je zwei Prozessoren über zwei spezielle CONVEX Gatearrays an einen<br />

lokalen Knotenspeicher angeschlossen. Die Verwaltung des gemeinsamen<br />

Speichers, den Zugriff auf fremde Lokalspeicher <strong>und</strong> die Aufrechterhaltung der<br />

Cachekonsistenz wird von diesen integrierten Schaltkreisen vorgenommen. Sie<br />

werden als "CONVEX Agent Chip" <strong>und</strong> "CONVEX Coherent Memory and Cache<br />

Controller" Chip (CMCC) bezeichnet. Die SCI-Schnittstelle basiert auf einem<br />

Gallium-Arsenid-Schaltkreis, der in Kooperation mit der Fa. Dolphin entwickelt<br />

wurde <strong>und</strong> der seinerzeit die weltweit erste Hardware-Implementierung<br />

das relativ komplizierten SCI-Protokolls darstellte. In der SCI-Schnittstelle<br />

werden Cache-Zeilen in Datenpakete verpackt, die Adressen der auf dem Ring<br />

umlaufenden Pakete dekodiert, Prüfsummen berechnet <strong>und</strong> bei Übertragungsfehlern<br />

Pakete erneut gesendet (Retransmission).<br />

MEM CPU CPU<br />

SCI<br />

CCMC<br />

Agent<br />

zum SCI<br />

Ring<br />

zum Kreuz=<br />

schienenverteiler<br />

Bild 5.23: Aufbau eines Rechenknotens.<br />

277


Jeder Knoten ist ein eigenständiger Rechner mit MACH Mikro Kernel, auf dem<br />

das HP-UX Betriebssystem, eine UNIX-Variante, läuft. Zur Unterstützung der<br />

Betriebsprogramme trägt wesentlich der Agent-Baustein bei, der <strong>für</strong> die Arbitrierung<br />

der beiden Knotenprozessoren beim Speicherzugriff <strong>und</strong> beim Zugriff<br />

auf den gemeinsamen Kreuzschienenverteiler sorgt. Die <strong>für</strong> das UNIX Betriebssystem<br />

unerläßlichen Festplattenzugriffe der Rechenknoten werden über<br />

den Agent Chip <strong>und</strong> den Kreuzschienenverteiler abgewickelt.<br />

5.3.8 Kommunikations- <strong>und</strong> Programmiermodelle<br />

Trotz der Heterogenität der <strong>Verbindungsnetzwerke</strong> in x- <strong>und</strong> y-Richtung existiert<br />

ein einheitliches, von der Richtung unabhängiges Programmiermodell,<br />

das wahlweise auf Botschaftenaustausch oder gemeinsamen Variablen basiert.<br />

Darüberhinaus können auch hybride Programmiermodelle, wie gemeinsamer<br />

Speicher in den Hyperknoten <strong>und</strong> Botschaftenaustausch zwischen den Hyperknoten<br />

verwendet werden. Auch die umgekehrte Reihenfolge ist möglich, um<br />

dem Benutzer volle Flexibilität zu ermöglichen.<br />

Weiterhin gibt es zur schnellen Prozeßsynchronisation eine Barrierenfunktion,<br />

die von Anwenderprogrammen aus aufrufbar ist <strong>und</strong> mit deren Hilfe die<br />

Beendigung einer <strong>parallel</strong>en Schleife beispielsweise effizient detektierbar ist.<br />

Ebenso sind unteilbare fetch&increment-Operationen implementiert, die <strong>für</strong><br />

Semaphoren notwendig sind. Insgesamt können von der Exemplar drei verschiedene,<br />

atomare Semaphoroperationen zur Unterstützung der <strong>parallel</strong>en Programmierung<br />

ausgeführt werden:<br />

• fetch&clear (Liest den Wert einer Variablen <strong>und</strong> setzt ihn anschließend auf<br />

Null)<br />

• fetch&increment (Liest den Wert einer Variablen <strong>und</strong> erhöht ihn um Eins)<br />

• fetch&decrement (Liest den Wert <strong>und</strong> erniedrigt ihn um Eins)<br />

Semaphorvariablen müssen aus dem Cache entfernt werden (sog. Cache Flush),<br />

bevor eine Operation auf sie angewandt wird, um sicherzustellen, daß jede<br />

Semaphore ein Unikat ohne Kopien ist. Dazu ist die betreffende Semaphorvariable<br />

in ein CPU-Register unter Umgehung des Cache zu lesen. Dies<br />

leistet der Spezialbefehl "fetch", der eine Variable aus dem globalen Adreßraum<br />

ohne Cache-Intervention in ein CPU-Register lädt, in dem sie anschließend<br />

modifiziert werden kann. In gleicher Weise arbeiten die drei oben dargestellten<br />

Semaphor-Befehle. Mit Hilfe der Semaphoroperationen sind in der<br />

Exemplar binäre Verriegelungen (Locks), Barriensynchronisation (Barriers),<br />

multiple Schreibe/Lese-Synchronisationen sowie die Synchronisation gemeinsamer<br />

Listen implementiert, die von mehreren Prozessoren verwaltet werden.<br />

Da die beschriebenen höheren Programmierfunktionen, die dem Benutzer<br />

transparent zur Verfügung stehen, in Software realisiert sind, erhöht sich der<br />

Verkehr auf dem Verbindungsnetzwerk um die dazu notwendigen Kernel-<br />

Kommunikationen.<br />

Zur Kompatibilität mit Programmen, die <strong>für</strong> HP-Arbeitsplatzrechner geschrieben<br />

wurden, <strong>und</strong> zur Vereinfachung der Portierung vorhandener sequen-<br />

278


tieller Codes steht das "Application Binary Interface" zur Verfügung, ein Betriebssystemprogramm,<br />

das Workstation Code während der Programmausführung<br />

interpretiert <strong>und</strong> in CONVEX-Betriebssystemaufrufe sowie CPU-<br />

Befehle umsetzt. Damit können alle HP-Applikationen auch auf einem (einzelnen)<br />

Exemplar-Prozessor ausgeführt werden.<br />

Im Gegensatz zu anderen Parallelrechnern wie der Cray T3D beispielsweise<br />

wird von CONVEX sowohl virtuelle Speicheradressierung als auch ein Multiuser/Multiprogramming-Betrieb<br />

unterstützt. Bei jeder Migration einer Seite mit<br />

virtueller Adressierung von der Festplatte zum Prozeß eines <strong>parallel</strong>en Benutzerprogramms<br />

wird eine Kontextumschaltung vorgenommen, <strong>und</strong> die CPU bearbeitet<br />

währenddessen einen Prozeß einer anderen Anwendung. Insgesamt<br />

kann die ganze Maschine dynamisch, d.h. während der Laufzeit <strong>parallel</strong>er Programme<br />

unter verschiedenen Benutzern bzw. deren Prozessen aufgeteilt werden,<br />

um so eine bessere Rechnerauslastung zu erzielen.<br />

5.4 Das Verbindungsnetzwerk der Hitachi SR<br />

2001/SR 2201<br />

5.4.1 Überblick der Leistungsdaten<br />

Die Hitachi SR 2001 [Takeda95] ist ein kanalgekoppelter, botschaftenorientierter<br />

Parallelrechner auf Basis der Hewlett Packard PA 7100 RISC-Prozessoren.<br />

Die Maschine besteht aus 8 - 128 Prozessoren, die in Lizenz von Hitachi<br />

gefertigt werden <strong>und</strong> von denen jeder bei 90 MHz Taktfrequenz ca. 180<br />

MFLOPS leistet, so daß sich daraus eine maximale Rechenleistung von 23<br />

GFLOPS ergibt. Jeder Prozessor hat bis zu 256 MB an Hauptspeicher, wodurch<br />

bis zu 32 GB Arbeitsspeicher zur Verfügung stehen. Die Datentransferrate beträgt<br />

100 MB/s pro Richtung zwischen zwei beliebigen Prozessoren im Netz.<br />

Es wird bidirektional übertragen. Die Halbierungsbandbreite einer 128 Prozessor-Maschine<br />

der Konfiguration 4*4*8 beträgt an der engsten Stelle 1,6 GB/s.<br />

Die summierte Datenrate <strong>für</strong> den Fall, daß alle Netzwerkanschlüsse senden<br />

(Durchsatz), beträgt 100 MB/s*128 = 12,8 GB/s. Die Software-Latenzzeit zwischen<br />

zwei Knoten ist 10 das Nachfolgemodell, die SR2201 [Otani95], sind in<br />

Tabelle 5.6 im Vergleich zur SR 2001 aufgelistet.<br />

Insgesamt bietet die SR 2201 eine Größenordnung mehr an Leistung <strong>und</strong> Speicherplatz<br />

als die SR2001. Sie ist in dieser Hinsicht mit einer Cray T3D oder einer<br />

großen Intel Paragon vergleichbar. Bei der SR 2201 existieren im Vergleich<br />

zur SR 2001 zusätzliche Fehlertoleranzfunktionen, die aufgr<strong>und</strong> der wesentlich<br />

größeren Prozessorzahl notwendig wurden. So ist es lt. Hitachi möglich, fehlerhafte<br />

Prozessoren leicht zu tauschen <strong>und</strong> Netzwerkfehler zu kompensieren.<br />

279


Rechnertyp SR 2001 SR 2201<br />

Prozessortyp HP PA 7100 HP PA 7200<br />

Leistung/Prozessor [MFLOPS] 180 300<br />

Maximalzahl der Prozessoren 128 1024<br />

max. additive Rechenleistung [GFLOPS] 23 300<br />

max. Hauptspeicher/Prozessor [MB] 256 256<br />

max. Hauptspeicher [GB] 32 256<br />

Halbierungsbandbreite (512 Proz.) [GB/s] 1,6 19,2<br />

summierter Durchsatz [GB/s] 12,8 300<br />

Netzzykluszeit [ns] 10 3,3<br />

Tabelle 5.6: Leistungsdaten von SR 2001 <strong>und</strong> SR 2201.<br />

5.4.2 Aufbau<br />

Ähnlich wie bei einer CONVEX Exemplar bestehen die Hitachi-Rechner aus<br />

einer Mischung von statischer <strong>und</strong> dynamischer Netztopologie. Mehrere dynamische<br />

Netze werden zu einem übergeordneten statischen Netz zusammengeschaltet.<br />

Als dynamische Netze werden Kreuzschienenverteiler der Größe<br />

8x8 eingesetzt. Bis zu 32 (bei SR 2201 bis zu 256) Kreuzschienenverteiler bilden<br />

ein 3-dimensionales, statisches Gitter. Die Hybridtopologie wird von Hitachi<br />

als "3-D Crossbar" bezeichnet. In Bild 5.24 ist das Netz der SR 2001/2201<br />

<strong>und</strong> ihre Architektur dargestellt.<br />

Im Rechner gibt es drei Gruppen von Knoten, die <strong>für</strong> die Aufgaben Rechnen,<br />

Ein-/Ausgabe <strong>und</strong> Systemverwaltung zuständig sind. Die Ein-/Ausgabeknoten<br />

(IO Units) sowie der Systemverwaltungsknoten (Supervisory Unit) unterscheiden<br />

sich von den Rechenknoten (Processing Units) hinsichtlich ihrer Peripherie<br />

sowie einer speziellen Zusatz-Hardware im Systemverwaltungsknoten.<br />

Die Kommunikation zwischen zwei Prozessoren erfolgt im 3-D Gitter nach<br />

dem x-y-z-Routing-Schema. Der Übergang zwischen den Dimensionen findet<br />

in den Knoten statt.<br />

Da innerhalb eines Kreuzschienenverteilers alle Knoten in einem Schritt erreichbar<br />

sind <strong>und</strong> das Gitter drei Raumrichtungen aufweist, ist die maximale<br />

Entfernung in der Maschine ebenfalls gleich drei, was einen sehr kleinen Wert<br />

darstellt. Bei der Cray T3D beispielsweise sind bis zu 16 Schritte nötig. Zudem<br />

ist die Prozessordistanz unabhängig von der Zahl der Prozessoren, die pro<br />

Crossbar angeschlossen sind. Dies ist eine der Vorteile der sog. TICNET-Topologie<br />

[Giloi89], mit der der 3D-Crossbar auch bezeichnet wird.<br />

Die hybride Topologie des 3D-Crossbars weist dann einen Nachteil auf,<br />

wenn zu viele Prozessoren an einen Kreuzschienenverteiler angeschlossen werden,<br />

da die Komplexität <strong>und</strong> damit auch die Kosten eines Crossbars mit O(k 2 )<br />

280


. . .<br />

. . .<br />

. . .<br />

. . .<br />

. . .<br />

. . .<br />

Ethernet, HIPPI,<br />

FDDI, SCSI-2<br />

x<br />

y<br />

z<br />

System<br />

Console<br />

Bild 5.24: Das 3-dimensionale Verbindungsnetzwerk der SR 2001/SR 2201 [Takeda95].<br />

ansteigen (k = Zahl der Crossbar-Ein-/Ausgänge). Allerdings läßt sich dieses<br />

Problem dadurch lösen, daß man höherdimensionale Gitter verwendet, weil<br />

dann bei gegebener Prozessorzahl N die Zahl k der benötigten Anschlüsse pro<br />

Crossbar abnimmt.<br />

5.4.3 Rechenknoten<br />

Processing Unit<br />

I/O & Processing Unit<br />

Supervisory Unit<br />

Der Aufbau eines Knotens <strong>und</strong> die Position der Netzwerkschnittstelle innerhalb<br />

des Knotens ist in Bild 5.25 dargestellt. Zur Netzschnittstelle zählen der sog.<br />

Exchanger <strong>und</strong> der Network Interface Adapter (NIA).<br />

In jedem Knoten bildet ein Netzwerk Interface Adapter eine DMA-fähige<br />

Schnittstelle zwischen dem Prozessorbus <strong>und</strong> dem Exchanger, der den Kontakt<br />

zum Netz herstellt <strong>und</strong> der beim Routing im Netz den Übergang zwischen den<br />

Raumrichtungen bewerkstelligt. Darüberhinaus sind die Exchanger da<strong>für</strong> verantwortlich,<br />

bei Übereinstimmung einer Datenpaketadresse mit der jeweiligen<br />

Knotennummer das Paket dem Netz zu entnehmen <strong>und</strong> zum NIA weiterzuleiten.<br />

Jeder Exchanger besteht intern aus einem kleinen Kreuzschienenverteiler<br />

der Größe 4x4 <strong>und</strong> einem Adreßdekoder.<br />

Die "Storage Control Unit" ist im wesentlichen eine konventionelle Speicherverwaltungeinheit<br />

(MMU) mit Adreßgenerierung zur Auffrischung der dynamischen<br />

Speicher. Die Elemente "Local Storage" <strong>und</strong> "IO" sind ebenfalls<br />

Standardkomponenten.<br />

281


y<br />

x<br />

EX<br />

z<br />

IP<br />

NIA<br />

SCU<br />

LS<br />

EX: Exchanger<br />

NIA: Network Interface Adapter<br />

IP: Instruction Processor<br />

SCU: Storage Control Unit<br />

LS: Local Storage<br />

IO: Input Output Device<br />

IO 1<br />

IO 2<br />

Bild 5.25: Die Position der Netzwerkschnittstelle im Rechenknoten [Takeda95].<br />

5.4.4 Eigenschaften des Netzes<br />

Das Verbindungsnetzwerk der Hitachi-Maschinen hat neben seiner<br />

Datenübertragungsfähigkeit fünf weitere Funktionen, die die <strong>parallel</strong>e Programmierung<br />

unterstützen <strong>und</strong> zur Effizienzerhöhung bei der Programmausführung<br />

beitragen. Diese Eigenschaften sind die relative Blockierungsfreiheit<br />

bei der Datenübertragung, die Partitionierbarkeit des Netzwerks,<br />

der Multicast, die Barrierensynchronisation <strong>und</strong> das sog. Signalling.<br />

Relative Blockierungsfreiheit<br />

Im Gegensatz zum 3-dimensionalen Gitter der T3D oder zum 2-D Gitter der<br />

CONVEX können bei den Hitachi-Maschinen alle Prozessoren bei wesentlich<br />

geringerer Blockierwahrscheinlichkeit Daten austauschen, da nicht Busse oder<br />

Ringe sondern blockierungsfreie Kreuzschienenverteiler als Netzelemente verwendet<br />

werden. In Bild 5.26 ist ein Beispiel <strong>für</strong> eine simultane Kommunikation<br />

mehrerer Prozessoren gezeigt.<br />

EX1<br />

PU1<br />

EX4<br />

PU4<br />

EX2<br />

PU2<br />

EX3<br />

PU3<br />

Bild 5.26: Blockierungsfreier Transfer (PU = Processing Unit, EX = Exchanger).<br />

282


In Bild 5.26 findet eine Kommunikation nach dem Muster<br />

PU1->PU2->PU3->PU4->PU1 statt. Alternativ zu dieser Übertragung können<br />

auch Daten in Rückrichtung blockierungsfrei transferiert werden (gestrichelt<br />

dargestellt). Bei der hybriden Topologie der Hitachi-Rechner treten dann Blokkierungen<br />

im Netz auf, wenn die Exchanger gleichzeitig sowohl von einem Datenpaket<br />

zum Dimensionswechsel als auch von einem an den Exchanger angeschlossenen<br />

Netzknoten benötigt werden.<br />

Partitionierbarkeit<br />

Eine SR 2001 läßt sich logisch in vier (die SR 2201 in acht) voneinander getrennte<br />

Blöcke zerlegen, die sich gegenseitig nicht beeinflussen können. Die<br />

Zerlegung wird mit Hilfe von hardware-mäßigen Zusatzeinrichtungen bewerkstelligt,<br />

die da<strong>für</strong> sorgen, daß neben Datenpaketen auch Broadcast <strong>und</strong> Signalling<br />

die Blockgrenzen nicht überschreiten. Zusätzlich zur Hardware-Partitionierung<br />

der Maschine gibt es noch eine Software-Partionierung in Form einer<br />

Betriebssystemfunktion, die die Blöcke bzgl. der Datenpakete voneinander abschottet.<br />

Die Synchronisationsfunktionen bleiben davon unberührt.<br />

Die Partitionierung dient zur besseren Auslastung der Maschine, da gleichzeitig<br />

mehrere Benutzern damit arbeiten können. Im Vergleich zur Exemplar<br />

erfolgt hier jedoch ein statische Allokation von Prozessoren zu Benutzern.<br />

Multicast <strong>und</strong> Barrierensynchronisation<br />

Bei der der SR2001/2201 wird anders als bei der IBM SP2 beispielsweise die<br />

Multicast-Funktion per Hardware unterstützt. Schnelle Multicasts sind zum<br />

Versenden gemeinsamer Datenblöcke sowie zum gleichzeitigen Starten <strong>und</strong><br />

Stoppen von Prozessen außerordentlich nützlich.<br />

Das zweite Synchronisationsmittel stellt die Barrierensynchronisation dar,<br />

die wie bei der Cray in Hardware implementiert ist. Sie wird hier nicht in einem<br />

separaten Netzwerk ausgeführt, sondern gehört zum 3-D Crossbar. Ebenfalls<br />

anders als bei der Cray sind 4 <strong>und</strong> nicht log2N Schritte nötig, um eine Synchronisaton<br />

durchzuführen; die Zahl der Schritte ist unabhängig von der Größe des<br />

Rechners. Bei der Ausführung der Synchronisationsfunktion wird zuerst festgestellt,<br />

wann die Prozessoren einer bestimmten Partition ihre Prozesse beendet<br />

haben, <strong>und</strong> danach wird dieser Zustand per Multicast den Prozessoren mitgeteilt.<br />

Die Synchronisation kann deshalb in zwei Phasen unterteilt werden:<br />

In der ersten Phase werden im 1. Schritt die Fertigmeldungen der beteiligten<br />

Prozessoren von den Kreuzschienenverteilern der x-Richtung eingesammelt.<br />

Sobald alle Meldungen eingetroffen sind, wird von diesen Kreuzschienenverteilern<br />

ein Signal gesetzt. Im 2. Schritt werden die Signale aller x-Crossbars einer<br />

Ebene von den y-Crossbars gelesen <strong>und</strong> mittels einer UND-Verknüpfung<br />

das Summensignal gebildet. Dazu würde im Prinzip ein einziger y-Kreuzschienenverteiler<br />

genügen, es wird jedoch dieselbe Operation von allen y-Crossbars<br />

einer Ebene durchgeführt, um die Ausführung der 2. Phase zu beschleunigen.<br />

283


Im dritten Schritt schließlich, werden die y-Crossbar-Signale aller Ebenen von<br />

allen z- Kreuzschienenverteilern ausgewertet, was ebenfalls red<strong>und</strong>ant ist, den<br />

anschließenden Multicast aber schneller ablaufen läßt.<br />

Nachdem alle z-Crossbars simultan festgestellt haben, daß die Prozesse einer<br />

Partition terminiert sind, wird dies in der zweiten Phase den Prozessoren mitgeteilt.<br />

Der Multicast kann jetzt in einem einzigen Schritt erfolgen, weil jeder Prozessor<br />

an einen z-Kreuzschienenverteiler angeschlossen ist <strong>und</strong> weil alle z-<br />

Kreuzschienenverteiler denselben Informationsstand haben.<br />

In Bild 5.27 ist als Beispiel der Fall gezeigt, wie in der x-y-Ebene eine Barriensynchronisation<br />

zwischen vier Rechenknoten einer Partition abläuft.<br />

y-Cross=<br />

bar 1<br />

y-Cross=<br />

bar 2<br />

EX1<br />

PU1<br />

PU4<br />

EX4<br />

x-Crossbar 1<br />

EX2<br />

PU2<br />

PU3<br />

EX3<br />

x-Crossbar 2<br />

Bild 5.27: Beispiel <strong>für</strong> Barrierensynchronisation (PU = Processing Unit, EX = Exchanger).<br />

Die x-Crossbar 1 <strong>und</strong> 2 führen ihr Summensignal gleichzeitig an die y-Crossbars<br />

1 <strong>und</strong> 2, die in einem Schritt alle 4 Prozessoren von der gemeinsamen Terminierung<br />

unterrichten.<br />

DMA <strong>und</strong> Signalling<br />

Die Netzwerkadapter haben die Aufgabe, DMA-Transfers <strong>und</strong> das sog. Signalling<br />

durchzuführen. Sie übermitteln prozessorunabhängig Daten zwischen<br />

den Lokalspeichern verschiedener Rechenknoten. Allerdings etablieren sie dabei<br />

nicht einen <strong>verteilte</strong>n, gemeinsamen Adreßraum, wie bei einer Cray T3D,<br />

sondern transferieren nur Botschaften im Auftrag des Prozessors.<br />

Unter Signalling wird von Hitachi der direkte Datentransfer von Benutzeradreßbereich<br />

zu Benutzeradreßbereich verstanden, unter Umgehung von<br />

Zwischenkopien in Systempuffern. Diese Methode ist analog zum Datentransfer,<br />

wie er beispielsweise bei Transputern durchgeführt wird [May93].<br />

In traditionellen Lösungen wird in Parallelrechnern zur Interprozessorkommunikation<br />

aus Speicherschutzgründen der Umweg über das Betriebssystem<br />

gewählt. Dabei wird zuerst, durch einen Betriebssystemaufruf angestoßen,<br />

der zu sendende Datenblock in einen Systempuffer kopiert, von wo aus die<br />

Daten vom Netzwerkanschluß per DMA übertragen werden. Derselbe Vorgang<br />

wiederholt sich beim Empfänger in umgekehrter Reihenfolge. Die Latenzzeit<br />

284


ist bei dieser Methode um 2 Kopieroperationen pro Datenblock höher als notwendig.<br />

Da das Umkopieren der Blöcke vom Sende- bzw. Empfangsknoten <strong>und</strong><br />

nicht von einer DMA-Einheit gemacht wird, sind die Latenzzeiten relativ groß.<br />

Sie werden zusätzlich dadurch erhöht, daß das Software-gesteuerte Kopieren<br />

periodisch von den Zeitscheiben anderer Prozesse durch den Scheduler unterbrochen<br />

wird.<br />

Bei Hitachi wird die Interprozessorkommunikation so ausgeführt, daß <strong>für</strong> jeden<br />

Botschaftenaustausch neben einem Zeiger auf den zu übertragenden Block,<br />

einer Längenangabe <strong>und</strong> der Adresse des Empfangsprozessors noch ein zweiter<br />

Zeiger mitgeliefert wird, der auf einen Pufferbereich im Empfänger hinweist.<br />

Beim Senden wird der Benutzerpuffer von der Speicherverwaltung des Senders<br />

in den Adreßbereich des Gerätetreibers eingeblendet <strong>und</strong> dieser kann von dort<br />

aus die Daten per DMA übertragen. Beim Empfangen wird umgekehrt der Datenblock<br />

von der DMA-Einheit unmittelbar an die angegebene Stelle im Empfangsprozeß<br />

geladen. Laut Hitachi ist dabei Speicherschutz gewährleistet.<br />

Nach Ablauf des DMA-Transfers wird von der DMA-Einheit des Empfängers<br />

ein Bit gesetzt, das die empfangende Anwendung abfragen kann. Alternativ<br />

kann sich der Empfangsprozeß auch durch einen Software Interrupt aufwekken<br />

lassen, um die Daten weiter zu verarbeiten.<br />

Der Vergleich mit Transputern zeigt, daß bei diesen die Bitabfrage bzw. die<br />

durch den Interrupt verursachte Kontextumschaltung eingespart wird, indem<br />

der Empfangsprozeß bis zum Erhalt der Daten aus der Liste der rechenbereiten<br />

Prozesse entfernt <strong>und</strong> danach automatisch vom Netzwerk-Interface wieder eingetragen<br />

wird. Dazu muß bei jedem Nachrichtentransfer ein Zeiger auf den Empfangsprozeß<br />

mitgesendet werden (Process ID), um die Liste der rechenbereiten<br />

Prozesse des Empfangsprozessors modifizieren zu können.<br />

5.4.5 Programmierumgebung<br />

Bei den Hitachi-Maschinen wird das HI-UX/MPP Betriebssystem verwendet,<br />

das Mach 3.0-basierend ist. Für den Benutzer wird die Sichtweise eines einzigen<br />

UNIX-Systems, bestehend aus einem Dateisystem, einer Prozessverwaltung<br />

<strong>und</strong> einer Netzwerksteuerung simuliert (Single System Image). Die Message<br />

Passing-Bibliothek Express steht dem Programmierer zusammen mit<br />

PVM, MPI sowie einer Bibliothek zur Matrizenmanipulation, Fouriertransformation<br />

<strong>und</strong> zur Lösung linearer Gleichungssysteme zur Verfügung. Als Sprachen<br />

können HPF, C, C++, FORTRAN 77 <strong>und</strong> FORTRAN 90 verwendet werden.<br />

Typische MPI-Funktionen umfassen synchrone <strong>und</strong> asynchrone Punkt-zu-<br />

Punkt-Kommunikationen, wie MPI_SEND, MPI_RECV, benutzerdefinierte<br />

Datentypen <strong>und</strong> deren gepackte Formatierung, Barrierensynchronisation <strong>und</strong><br />

Multicast, sowie Reduktionsoperatoren.<br />

285


5.5 Das Verbindungsnetzwerk der Fujitsu VPP<br />

500<br />

5.5.1 Leistungsdaten<br />

Die VPP 500, in der größten Ausbaustufe einer der schnellsten Rechner der<br />

Welt, ist ein System mit <strong>verteilte</strong>m gemeinsamen Speicher bestehend aus 7-222<br />

Vektor-Superrechnern [Miura93]. Jeder Vektor-Rechenknoten enthält als Skalareinheit<br />

einen RISC-Prozessor mit 300 MIPS Festkomma- <strong>und</strong> 200 MFLOPS<br />

Gleitkommarechenleistung sowie eine Vektoreinheit mit 1,6 GFLOPS Vektor-<br />

Rechenleistung. Die größte Maschine hat 44 GFLOPS Skalar- <strong>und</strong> 355<br />

GFLOPS Vektorleistung. Jeder Rechenknoten kann mit einem Speicher von<br />

maximal 256 MB ausgerüstet werden, so daß sich 55 GB an Gesamtspeicher ergeben.<br />

Zusätzlich steht ein externer Halbleiterspeicher von 32 GB zur Verfügung.<br />

Die Daten werden zwischen den Lokalspeichern über ein blockierungsfreies<br />

Verbindungsnetzwerk mit 400 MB/s pro Kanal bidirektional übertragen.<br />

Die bislang größte realisierte VPP 500 besteht aus 140 Vektor-Superrechnern<br />

<strong>und</strong> wird in Japan anstelle eines Windkanals eingesetzt (numerischer Windkanal).<br />

5.5.2 Aufbau<br />

Zentrales Element einer VPP 500 ist ein speziell ausgeführter Kreuzschienenverteiler,<br />

an den die Vektor-Rechenknoten (Processing Units) sowie zwei Steuerrechner<br />

(Control Processors) <strong>und</strong> ein Bedienrechner (Global System Processor)<br />

angeschlossen sind. Die summierte Sendebandbreite aller Vektor-<br />

Rechenknoten beträgt 89 GB/s, die vom Verbindungsnetz blockierungsfrei <strong>und</strong><br />

mit geringer Latenz transportiert werden können. Die verwendete Technologie<br />

ist BiCMOS <strong>und</strong> GaAs. Der Aufbau der VPP 500 ist in Bild 5.28 dargestellt.<br />

FDDI,<br />

HIPPI,<br />

Ethernet<br />

GSP<br />

SSU<br />

Platten=<br />

laufwerke<br />

CP<br />

CP<br />

224x224<br />

"Kreuzschienenverteiler"<br />

PE0 PE1 . . . PE221<br />

GSP = Global System Processor<br />

SSU = Secondary Storage Unit<br />

CP = Control Processor<br />

PE = Processing Element<br />

Bild 5.28: Aufbau der VPP 500 nach [Utsumi94].<br />

286


Der Bedienrechner ist neben seiner Funktion als Operatorkonsole <strong>für</strong> die Anbindung<br />

der Peripherie zuständig <strong>und</strong> enthält einen 32 GB großen Arbeitsspeicher<br />

(Secondary Storage Unit), auf den alle Rechenknoten (PEs) über die<br />

Steuerrechner (CPs) zugreifen können. Die Steuerrechner sind <strong>für</strong> die Handhabung<br />

<strong>und</strong> Überwachung der einzelnen Rechenknoten zuständig <strong>und</strong> aus Zuverlässigkeitsgründen<br />

doppelt ausgeführt.<br />

Jede VPP 500 läßt sich aus Anwendersicht in Einheiten von 1-222 Rechenknoten<br />

partitionieren. Die Partitionierung, die auf statischer Basis vorgenommen<br />

werden muß, wird vom Kreuzschienenverteiler Hardware-mäßig realisiert.<br />

Durch die Aufteilung der Rechenknoten können die Ressourcen der Maschine<br />

besser den Erfordernissen der Benutzer angepaßt werden. Eine vom Verbindungsnetzwerk<br />

getrennte Schaltungseinrichtung stellt eine Barrierensynchronisation<br />

innerhalb jeder Partition zur Verfügung. Synchronisationen<br />

können gleichzeitig <strong>und</strong> unabhängig voneinander in den verschiedenen Partitionen<br />

durchgeführt werden.<br />

5.5.3 Rechenknoten<br />

Die Rechenknoten der VPP 500 bestehen aus einem Netzwerkanschluß, der als<br />

Datentransfereineinheit (DTU) bezeichnet wird, einer Speichereinheit sowie<br />

dem skalaren <strong>und</strong> vektoriellen Prozessor. Der Aufbau der Rechenknoten ist in<br />

Bild 5.29 zu sehen. Die Datentransfereinheit überträgt bidirektional mit 400<br />

vom/zum Netzwerk<br />

Datentransfereinheit<br />

Hauptspeichereinheit<br />

Skalar=<br />

einheit<br />

Vektor=<br />

einheit<br />

Bild 5.29: Die Rechenknoten der VPP 500 [Utsumi94].<br />

MB/s pro Richtung zwischen dem Kreuzschienenverteiler <strong>und</strong> der Hauptspeichereinheit,<br />

die aus Systemsicht als Lokalspeicher ausgelegt ist. Ein Lokalspeicher<br />

hat mit 12,8 GB/s genügend Bandbreite, um den gleichzeitigen Zugriff von<br />

Datentransfer-, Skalar- <strong>und</strong> Vektoreinheit zu befriedigen. Er ist dazu in 32 Bänke<br />

organisiert. Jeder Benutzerprozeß kann direkt nur seinen eigenen Lokalspeicher<br />

adressieren. Der globale Adreßraum wird dadurch etabliert, daß der VPP<br />

FORTRAN Compiler <strong>und</strong> sein Laufzeitsystem zusätzlichen Code erzeugen, der<br />

287


ein Lesen <strong>und</strong> Schreiben entfernter Lokalspeicher ermöglicht. Die Codeerzeugung<br />

läuft <strong>für</strong> den Benutzer transparent ab, so daß er den Eindruck eines<br />

<strong>verteilte</strong>n gemeinsamen Speichers erhält. Das Programmiermodell ist primär<br />

auf gemeinsamen Variablen basierend, aber über PVM ist auch Botschaftenaustausch<br />

möglich.<br />

5.5.4 Datentransfereinheit<br />

Aus der Sicht des Verbindungsnetzwerks ist das wichtigste Element, das in den<br />

Rechenknoten installiert ist, die Datentransfereinheit, die <strong>für</strong> die Anbindung<br />

von Skalar- <strong>und</strong> Vektoreinheit an das Netzwerk sorgt. Die DTU ist sowohl <strong>für</strong><br />

eine einfache Umsetzung der von den Recheneinheiten ausgegebenen Adressen<br />

in globale Hauptspeicheradressen zuständig als auch <strong>für</strong> den prozessorunabhängigen<br />

Datentransport per DMA.<br />

Ein Benutzerprozeß, der einen nicht-lokalen Speicher adressiert, bewirkt implizit<br />

über das Laufzeitsystem eine Aktion der Datentransfereinheit, die aus der<br />

gewünschten Speicheradresse ein Datenpaket mit der Adresse als Inhalt generiert,<br />

das über das Netz zum Ziel geschickt wird. Die empfangende DTU verarbeitet<br />

das Paket autonom, d.h. ohne Unterstützung des dortigen Laufsystems<br />

des Prozessors. Handelt es sich um einen Schreibzugriff, wird das zu schreibende<br />

Speicherwort zurückgeschickt <strong>und</strong> von der empfangenden DTU in den eigenen<br />

Lokalspeicher geschrieben. Bei einem Lesezugriff wird das gewünschte<br />

Wort als Paket verpackt übertragen <strong>und</strong> von der empfangenden DTU dem Benutzerprozeß<br />

zur Verfügung gestellt. Der Datentransfer <strong>und</strong> die Abarbeitung<br />

der <strong>parallel</strong>en Anwendung kann simultan erfolgen.<br />

Jede DTU wird aus einer Warteschlange mit Eingabedaten versorgt, die im<br />

Lokalspeicher des jeweiligen Rechenknoten angelegt ist <strong>und</strong> in der die zu sendenden<br />

Datenblöcke enthalten sind. Bevor ein Block übertragen wird, legt die<br />

DTU einen Paketzähler im Speicher an, der den Wert Null erreicht, sobald alle<br />

Daten des Blocks übertragen sind. Der Stand des Paketzählers kann sowohl<br />

vom FORTRAN-Laufzeitsystem als auch von der Benutzeranwendung abgefragt<br />

werden (Polling), um so das Ende des Transfers festzustellen. Der Zähler<br />

wird von der DTU per Hardware dekrementiert. Insgesamt leistet die DTU die<br />

in Tabelle 5.7 aufgelisteten Transferraten, die zwischen zwei Benutzerprozessen<br />

verschiedener Rechenknoten bei einer Blockgröße 16 KB erreicht werden.<br />

read/write Durchsatz [MB/s] n 1/2 [KB] Start Up-Zeit [μs]<br />

read 363 von 400 1,3 4,3<br />

write 364 von 400 1,2 3,6<br />

Tabelle 5.7: Transferrate zwischen Benutzerprozessen nach [Nodomi94].<br />

288


5.5.5 Verbindungsnetzwerk<br />

Das Verbindungsnetzwerk der VPP 500 besteht aus einem Kreuzschienenverteiler<br />

der Maximalgröße 224x224, der aufgr<strong>und</strong> seiner O(N 2 )-Komplexität<br />

(N = Zahl der Ein-/Ausgänge) auf eine spezielle Art <strong>und</strong> Weise realisiert wurde.<br />

Bei traditionellen Implementierungen eines Kreuzschienenverteilers in Form<br />

von Ein-/Ausschaltern wären im Maximalausbau der VPP 500 insgesamt 50176<br />

Schalter (= 224 2 ) notwendig, die die Daten bidirektional mit 400 MB/s übertragen;<br />

eine technologisch schwer zu realisierende Lösung. Anstelle dessen hat<br />

Fujitsu den 224x224-Kreuzschienenverteiler in acht kleinere Kreuzschienenverteiler<br />

der Größe 112 x 56 zerlegt <strong>und</strong> diese mit Hilfe von 224 zwei-zu-eins<br />

Demultiplexern zusammengeschaltet. Zwar ergibt sich daraus ein insgesamt<br />

größerer Hardware-Aufwand, da die Demultiplexer zusätzlich anfallen, aber<br />

das Netz ist aus Teilen geringerer Komplexität <strong>und</strong> damit besserer Beherrschbarkeit<br />

aufgebaut. Das Netz einer 222-Prozessor VPP 500 kann in nur 32 Platinen<br />

untergebracht werden. Fujitsu hat dazu zwei verschiedene Platinentypen,<br />

XB1 <strong>und</strong> XB2 genannt, entwickelt, die jeweils einen Kreuzschienenverteiler<br />

der Größe 112x56 beinhalten. Die XB1-Platine beherbergt zusätzlich einen<br />

2-zu-1 Multiplexer <strong>für</strong> 112 Ein- <strong>und</strong> 56 Ausgänge. Die Datenpfade von XB1<br />

<strong>und</strong> XB2 sind 8 Bit breit, so daß bei 32 Bit breiten Kanälen, über die im Koppelnetz<br />

übertragen wird, jeweils ein Satz von 4 Platinen eines Typs erforderlich<br />

ist.<br />

Das Blockschaltbild von XB1 <strong>und</strong> XB2 ist in Bild 5.30 dargestellt. Die Maximalkonfiguration<br />

von XB1 <strong>und</strong> XB2-Platinen, die einen Kreuzschienenverteiler<br />

der Größe 224x224 ergibt, ist in Bild 5.31 gezeigt. Kleinere Konfigurationen<br />

der VPP 500 benötigen entsprechend weniger Kreuzschienenverteiler,<br />

wobei die Abstufung in Schritten gemäß Tabelle 5.8 erfolgt. In dieser Tabelle<br />

sind zusätzlich die Zahl der <strong>für</strong> das Netz benötigten Platinen sowie ihr Anteil an<br />

der Gesamtzahl aller Platinen im Rechner aufgelistet.<br />

112 x<br />

56<br />

56 x<br />

2->1<br />

112 x<br />

56<br />

a) b)<br />

Bild 5.30: Die Crossbar-Platinen XB1 (a) <strong>und</strong> XB2 (b) der VPP 500.<br />

Trotz der O( )-Komplexität des verwendeten Netzwerkes ist sein Anteil am<br />

gesamten Rechner moderat ausgefallen, was der Integration der Komponenten<br />

in Silizium zu verdanken ist.<br />

N 2<br />

289


PE 0-55<br />

PE 56-111<br />

PE 112-167<br />

PE 167-223<br />

E<br />

i<br />

n<br />

g<br />

ä<br />

n<br />

g<br />

e<br />

112 x<br />

56<br />

112 x<br />

56<br />

112 x<br />

56<br />

112 x<br />

56<br />

112 x<br />

56<br />

112 x<br />

56<br />

112 x<br />

56<br />

112 x<br />

56<br />

XB1<br />

56 x<br />

2->1<br />

XB2<br />

XB1<br />

56 x<br />

2->1<br />

XB2<br />

XB1<br />

56 x<br />

2->1<br />

XB2<br />

XB1<br />

56 x<br />

2->1<br />

XB2<br />

PE 0-55<br />

PE 56-111<br />

PE 112-167<br />

PE 167-223<br />

A<br />

u<br />

s<br />

g<br />

ä<br />

n<br />

g<br />

e<br />

Bild 5.31: Das Verbindungsnetzwerk der VPP 500.<br />

Zahl der Prozessoren Zahl der Netzplatinen Anteil am Rechner<br />

4-32 1 1/33<br />

33-56 4 1/15<br />

57-112 8 1/15<br />

113-168 24 1/8<br />

169-222 32 1/8<br />

Tabelle 5.8: Größen des Verbindungsnetzwerks <strong>und</strong> ihr Anteil am Gesamtrechner nach<br />

[Utsumi94].<br />

290

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!