PARALLELRECHNER

Massiv-parallele Computer setzen sich auf Dauer durch

16.10.1992

Während der letzten Monate haben alle renommierten Hersteller von

Hochleistungsrechnern angekündigt, massiv-parallele Systeme zu entwickeln und auf den Markt zu bringen. Diese Ankündigungen können als Beweis gesehen werden, daß sich diese relativ neue Technologie langfristig durchsetzen wird. Stefan Tritscher* gibt einen Überblick über Klassifikation, Architektur und Programmierung von massiv-parallelen Supercomputern. Dabei geht er auf Probleme ein, die beim Einsatz dieser neuen Technologie entstehen können.

Es werde Licht

Massiv-Parallele Rechner sind gesellschaftsfähig geworden: In einem Bericht der Gesellschaft für Mathematik und Datenverarbeitung (GMD) heißt es, sie seien für die weitere Entwicklung im Höchstleistungsrechner-Bereich richtungsweisend. Adressat: Das Bundesforschungsministerium (BMFT) des Heinz Riesenhuber.

Dort hat man auch schon erkannt, daß "Supercomputer eine Schlüsseltechnologie der nahen Zukunft sind", wie ,Bernd Reuse, im BMFT zuständig für die Informationsverarbeitung, feststellt.

Interessant dürfte deshalb auch sein, ob das deutsche Forschungsministerium sich trotz der Suprenum-Pleite noch einmal ins Zeug legt und den Geldhahn für eine von der Gutachterkommission der Deutschen Forschungsgemeinschaft vorgeschlagene Referenzinstallation eines massiv-parallelen Parsytec-Rechners, öffnet. 30 Millionen Mark soll sie kosten und angeblich 50 Gflops bringen.

Neben diesem "konventionellen" Rechner arbeiten die Forscher weltweit an einem System, das die herkömmlichen Leistungsgrenzen zu sprengen verspricht: Gemeint sind Projekte, die sich mit Problemen der Photonik beschäftigen und diese in Computern nutzbar machen wollen. Riesenhuber will 15 Projektgruppen aus Hochschulen und der Industrie in den kommenden vier Jahren 80 Millionen Mark für diese Forschunusrichtung zur Verfügung stellen.

Auch hier kommen aber die Schlüsselerlebnisse aus den Labors in Übersee: AT&T, das Massachusetts Institute of Technology (MIT) und das Tokio Institute of Technology gebären die richtungsweisenden Ideen für das Medium Licht als Informationsträger.

Gegenüber den elektronisch transportierten Bits in den heutigen Computersystemen hätte Licht verschiedene Vorteile: Photonen sind ungeladene, masselose Lichtteilchen. Sie sind reine Energie und deshalb wesentlich pflegeleichter als Elektronen. Ladungsträger des elektrischen Stroms beeinflussen sich gegenseitig und reagieren auf elektromagnetische Felder, Optische Leitungen können zudem zu einer für Elektronen unmöglichen Dichte zusammengepackt werden - kleinste hochintegrierte Chips wären das Ergebnis. Einen Nachteil hat die Photonik in Computern aber schon: Sie ist sehr energiefressend.

Trotzdem könnte es schon in einigen Jahren auch bei Superrechnern heißen: Fiat lux. jm

MIMD ist universeller

Bei MIMD-Systemen unterscheidet man zwei Speicherstrukturen: Zum einen enggekoppelte Multiprozessor-Rechner wie bei Alliant oder Sequent, deren Prozessoren einen gemeinsamen Speicher über ein Verbindungsnetzwerk, ein Bussystem oder einen Kreuzschienenverteiler (siehe Grafik) ansprechen. Zum anderen lose gekoppelte Systeme, deren CPUs über lokale, verteilte Speicher verfügen (Parsytec, Ncube).

In den letzten Jahren haben die enormen Fortschritte in der Mikroelektronik zu immer höheren Rechenleistungen von Computersystemen geführt. Vor allem durch die rasante Weiterentwicklung der Mikroprozessoren konnten Workstations entwickelt werden, die Rechenleistungen erreichen, die noch vor wenigen Jahren nur den Höchstleistungsrechnern vorbehalten waren.

Die neuesten Generationen dieser Workstations erreichen diese Leistung durch den Einsatz von Prozessoren, die auf der RISC-Technologie basieren. Die Spitzenmodelle der führenden Hersteller erreichen Rechengeschwindigkeiten in der Größenordnung bis zu 100

MIPS (Millionen Instruktionen pro Sekunde) und 100 Mflops (Millionen Fließkomma-Arithmetik-Operationen pro Sekunde).

Trotz dieser Leistungssteigerungen ist der Durst der Anwender nach immer höherer Rechenleistung aber noch lange nicht gestillt. Es existieren viele Probleme, deren Bearbeitung eine Rechenleistung erfordert, die um mehrere Größenordnungen über der liegt, die moderne Workstations erbringen können.

Typische Anwendungen sind Simulationen von physikalischen und chemischen Vorgängen, Crash-Versuche im Automobilbau, Klimaforschung und Berechnung von Wettervorhersagen.

Die " Grand Challenges" in den USA identifizieren in Form eines Katalogs eine Reihe von Problemstellungen mit einem Rechenleistungsbedarf, der selbst weit über dem heütiger Supercomputer liegt [1].

Einer der Hauptansätze, der bei konventionellen Supercomputern verfolgt wurde, um höchste Leistung zu erreichen, bestand in der Optimierung von Hardware im Hinblick auf immer kürzere Zykluszeiten, also höhere Taktfrequenzen. So arbeiten moderne Vektorrechner, wie sie zum Beispiel die Firma Cray Research herstellt, mit Zykluszeiten von etwa 3,5 Nanosekunden.

Eine andere Methode, die bei dieser Art von Supercomputern Anwendung findet, ist der Einsatz von Vektoreinheiten, speziellen Arithmetikeinheiten, zur Beschleunigung von numerischen Anwendungen.

Mittlerweile ist - abzusehen, daß eine weitere Verringerung der Zykluszeit kaum noch möglich sein wird. Für die Schaltzeiten von Rechensystemen ist durch die endliche Ausbreitungsgeschwindigkeit von elektrischen Signalen - im besten Fall entspricht die Signalgeschwindigkeit annähernd der Lichtgeschwindigkeit - eine Grenze gegeben. Konventionelle Höchstleistungsrechner haben diese physikalische Grenze annähernd erreicht.

Aus diesem Grund konzentrierten sich Forscher und Entwickler in den letzten Jahren in zunehmendem Maße auf einen anderen Ansatz zur Leistungssteigerung: Die Parallelverarbeitung.

Dieses Konzept hat inzwischen bereits die Entwicklung von Mikroprozessoren beeinflußt. So sind neuere RISC-Prozessoren, zum Beispiel der Super-Sparc von Sun oder der 860 von Intel, in der Lage mehrere Operationen parallel in getrennten Verarbeitungseinheiten auszuführen. In Verbindung mit dem konsequenten Einsatz von Pipelining-Technologien erreichen solche Prozessoren Leistungswerte, die im Bereich von konventionellen Supercomputern wie der Cray-1 liegen [2].

Unabhängig von dieser Entwicklung in der Prozessortechnologie entwarfen Informatiker bereits vor etwa 20 Jahren die ersten Parallelrechner, bei denen eine größere Anzahl von Prozessoren in einem System verbunden wurden. Viele der hier verfolgten Ansätze haben inzwischen zu kommerziell verfügbaren Multiprozessor-Systemen geführt.

Heutige Parallelrechner-Systeme können aus Anwendersicht nach Flynn [3] grob in die folgenden Klassen eingeteilt werden:

- SIMD (Single instruction, multiple data)-Parallelrechner, bei denen zu jedem Zeitpunkt alle Prozessoren dieselbe Anweisung auf verschiedenen Daten ausfahren Typische Vertreter dieser Klasse sind die Connection Machine CM-2 von Thinking Machines und die Maspar MP-1. Das hier verwendete Prinzip eignet sich sehr gut für den Entwurf massiv paralleler Systeme. So hat die Connection Machine CM-2 von Thinking Machines und die Maspar MP-1. Das hier verwendete Prinzip eignet sich sehr gut für den Entwurf massiv paraleller Systeme. So hat die Connection Machine CM-2 beispielsweise 65536 Prozessoren. SIMD-Rechner sind aber aufgrund ihres Operationsprinzip nur für eine beschränkte Klasse von Anwendungen geeignet und deshalb kaum als Universalrechner einsetzbar. Eine Anwendungsklasse, für die SIMD-Architekturen gut geeignet sind, ist beispielsweise die Bildverarbeitung.

- MIMD (Multiple instruction, multiple data)-Prozessoren können im Gegensatz zu SIMD-Chips unabhängig von den anderen einen eigenen Befehlsstrom abarbeiten.

Die Parallelrechner vom Typ MIMD - im nachfolgenden mit Multiprozessoren bezeichnet sind im Gegensatz zu den SIMD-Rechnern wegen ihrer universelleren Architektur für eine wesentlich grössere Klasse von Anwendungen geeignet als SIMD-Rechner. Aus diesem Grund bieten sie das größte Potential für eine Nutzung als universell programmierbare Rechensysteme.

Kategorien von MIMD-Systemen

Die MIMD-Systeme kann man im Hinblick auf ihre Speicherstruktur weiter unterteilen.

- Multiprozessoren mit gemeinsamem Speicher sind über ein Verbindungsnetzwerk, ein Bussystem oder einen Kreuzschienenverteiler, mit einem gemeinsamen Hauptspeicher verbunden. Man spricht bei dieser Klasse von Systemen auch von 'speichergekoppelten' oder 'eng gekoppelten' Multiprozessoren. Typische Vertreter dieser Klasse sind Rechner wie Sequent Symmetry oder Alliant FX/2800.

- Multiprozessoren mit verteiltem Speicher besitzen einen lokalen Speicher, auf den sie exklusiven Zugriff haben. Die einzelnen Prozessoren sind durch ein Verbindungsnetzwerk miteinander verbunden, über das

sie Nachrichten miteinander austauschen können (Message Passing). Man bezeichnet solche Multiprozessoren auch als 'lose gekoppelte' oder 'nachrichtengekoppelte' Systeme.

Gute Beispiele für Systeme mit dieser Architektur sind das auf Transputern basierende System Megacluster des deutschen Parallelrechner-Herstellers Parsytec, der Ncube/2 von Ncube und die Rechner vom Typ iPSC/860 der Firma Intel [4] sowie dessen Nachfolgemodell Paragon, das Ende dieses Jahres auf den Markt kommen wird.

Der Alliant-FX/2800-Rechner [5] stellt ein typisches Beispiel für einen speichergekoppelten Multiprozessor dar. Bis zu maximal 28 Intel-RISC-Prozessoren vom Typ 860 sind in diesem Rechner über einen Kreuzschienenverteiler mit dem Hauptspeicher verbunden. Dem Hauptspeicher, der bis zu 1 GB Kapazität hat, ist ein Cache-Speicher von maximal 4 MB Größe vorgeschaltet.

Der Kreuzschienenverteiler hat gegenüber einem Bussystem, wie es in den meisten anderen speichergekoppelten Multiprozessoren eingesetzt wird, den Vorteil, daß er mehrere unabhängige Zugriffspfade zum Hauptspeicher realisiert. Durch diese Architektur werden die Konflikte beim Zugriff der einzelnen Prozessoren auf den Speicher reduziert. Jeder Prozessor kann nun unabhängig von den anderen "skalare Prozesse", also konventionelle Unix-Prozesse, bearbeiten.

Um Parallelisierung auch auf einer feinen granularen Ebene als auf der Ebene von Unix-Prozessen zu unterstützen, wurden in jedes Prozessormodul zwei Asics (Application Specific Integrated Circuits), die Concurrency Control Units (CCU), integriert.

Mit Hilfe der CCUs, die über ein eigenes Bussystem miteinander verbunden sind, ist es möglich, mehrere 860 Prozessoren zu Clustern zusammenzufassen. Auf diesen Clustern können dann nebenläufig ausführbare Teile eines Programmschleifen, parallel ablaufen.

Einer der Hauptvorteile liegt sicherlich darin, daß es verhältnismäßig einfach ist, Standard-Betriebssysteme für Monoprozessor-Systeme an speichergekoppelte Multiprozessoren anzupassen. Dazu bedarf es zwar eniger Änderungen am Betriebssystem, zum Beispiel ist die Implementierung von Schutzmechanismen notwendig, um zu verhindern, daß mehrere Prozessoren gleichzeitig Betriebssystem-interne Datenstrukturen manipulieren, was zu inkonsistenten Daten führen würde. Solche Anpassungen sind jedoch weit weniger aufwendig als für Multiprozessoren mit verteiltem Speicher.

Dadurch können die meisten kommerziell verfügbaren speichergekoppelten Multiprozessoren dem Anwender eine vertraute Arbeitsumgebung, vorzugsweise in Form eines modifizierten Unix-Systems, bieten.

Alle Multiprozessor-Systeme mit gemeinsamem Hauptspeicher haben jedoch einen grundsätzlichen Schwachpunkt: Sie sind nicht skalierbar, das heißt, man kann die Anzahl der Prozessoren nicht beliebig erhöhen. Der begrenzende Faktor ist dabei der gemeinsame Hauptspeicher beziehungsweise das Verbindungsnetzwerk zwischen Prozessoren und Netzwerk. Ab einer gewissen Prozessoranzahl werden solche gemeinsame Ressourcen zu einem Engpaß, der das Gesamtsystem bremst. Der Grund dafür ist, daß bei gleichzeitigem Zugriff mehrerer Prozessoren auf diese Betriebsmittel nur jeweils einer der Prozessoren zugreifen kann, während andere warten müssen. Mit zunehmender Prozessorzahl nimmt die Häufigkeit solcher Konflikte zu, so daß sich die Prozessoren gegenseitig behidern. Systeme wie Alliant FX/ 2800 liegen mit etwa 30 Prozessoren schon an der oberen Grenze des heute technisch machbaren. Massiv parallele speichergekoppelte Systeme mit Tausenden von Prozessoren sind schlichtweg technisch nicht realisierbar.

Zur Entwicklung von massiv-parallelen Systemen sollte also ein anderer Weg beschritten werden. Hier müssen Architekturen zum Einsatz kommen, die keine inhärenten Leistungsengpässe durch gemeinsame Betriebsmittel, etwa gemeinsamen Hauptspeicher, besitzen. Multiprozessor-Systeme mit verteiltem Speicher vermeiden diese Engpässe. Mit dieser Architektur ist es möglich, Rechner zu bauen, die mit mehreren tausend Prozessoren Rechenleistungen erreichen die weit über denen von konventionellen Supercomputern liegen. In den letzten Jahren brachten immer mehr Firmen Multiprozessor-Systeme mit verteiltem Speicher auf den Markt. Besonders interessant ist dabei, daß sogar der Marktführer bei den konventionellen Supercomputern, die Firma Cray Research, die massiv-parallele Systeme lange Zeit als "Modetrend" betrachtet hat, die Entwicklung von solchen Systemen angekündigt hat.

System Paragon mit neuen RISC-Prozessoren

Einen besonders vielversprechenden Ansatz für den Entwurf von massiv-parallelen Architekturen verfolgt die Firma Intel bei dem System Paragon [6], das Ende des Jahres auf den Markt kommen wird. Es handelt sich um, einen nachrichtengekoppelten Rechner, bei dem die einzelnen Prozessoren durch Hochgeschwindigkeitskanäle netzartig miteinander verbunden sind (2D-Mesh-Topologie). Als Prozessoren kommt die neue Generation von Intel-860-RISC-Prozessoren, der 860XP, zum Einsatz. Bei einer Taktfrequenz von 50 Megahertz erreicht dieser Prozessor eine Spitzenleistung von 75 MFlops (double precision) und 42 MIPS.

Das Verbindungsnetzwerk, mit dem bis zu 4096 Prozessoren gekoppelt werden können, verfügt über eine Bandbreite von 200 MB/s je Kanal. Die Kommunikation von nicht benachbarten Prozessoren wird durch ein in Hardware realisiertes "Wormhole routing" unterstützt.

Bei diesem Verfahren leiten die Routing-Module eine Nachricht entsprechend ihrer Zieladresse an das jeweils nächste Modul weiter, bis sie am Zielprozessor eintrifft. Durch diese Technik werden die Prozessoren auf dem Weg einer Nachricht nicht in ihrer Arbeit behindert. Um eine niedrige Latenzzeit beim Versenden und Empfangen von Nachrichten zu ermöglichen, wurde auf jedem "Knoten" des Multiprozessors ein zweiter 860XP-Prozessor integriert. Dieser Prozessor ist ausschließlich für das Senden und Empfangen von Nachrichten zuständig. Parallel zu dem Prozessor, der das Benutzerprogramm ausführt, arbeitet dieser Prozessor die Programmteile des Betriebssystems ab, die für die Nachrichtenkommunikation mit anderen Prozessoren notwendig sind.

Durch den Einsatz von Hardware-Routing und eines dedizierten Nachrichtenprozessors ließ sich eine extrem niedrige Latenzzeit von maximal 25 Mikrosekunden für Nachrichten zwischen zwei beliebigen Knoten des Systems erreichen. Als Ein- beziehungsweise Ausgabegeräte werden eine Vielzahl von verschiedenen Netzwerkschnittstellen und Plattenspeichern angeboten. Abbildung 2 zeigt ein Blockdiagramm der Paragon-Systemarchitektur.

Als Betriebssystem für das System Paragon kommt OSF/1 AD zum Einsatz. Dieses Betriebssystem basiert auf der Microkernel-Technologie des Betriebssystemkerns Mach [7] und stellt dem Anwender die volle Funktionalität eines Standard-Unix-Betriebssystems zur Verfügung. Dieses Betriebssystem bietet dem Benutzer die gleiche Sicht auf das Multiprozessor-System wie auf ein konventionelles Unix-System mit einem Monoprozessor. Das heißt, die Tatsache, daß es sich um ein Multiprozessor-System handelt, wird vor dem Anwender verborgen ("Single System image"). Mit OSF/1 AD bringt Intel als erster Hersteller ein Betriebssystem mit voller Unix-Funktionalität für massiv-parallele Systeme mit verteiltem Speicher auf den Markt.

Programmierung von Parallelrehnern

Auch bei der Art der Programmierung unterscheiden sich Multiprozessoren mit gemeinsamem. Hauptspeicher und Systeme mit verteiltem Speicher. Als erstes soll auf die Programmierung von speichergekoppelten Multiprozessoren eingegangen werden. Eine Möglichkeit besteht darin, das Problem auf verschiedene Unix-Prozesse zu verteilen. Da diese Prozesse kooperieren sollen, muß es Mechanismen zur Kommunikation und Synchronisation geben. Hier können die schon in Monoprozessor-Systemen vorhandenen Konstrukte wie Pipes, Signale und Sockets oder auch Message-Queues, Shared-Memory-Segmente und Semaphore verwendet werden. Diese Art der Parallelisierung hat den Nachteil, daß der Prozeßwechsel zwischen zwei Unix-Prozessen relativ aufwendig ist. Der Grund dafür liegt darin, daß jeder Prozeß einen sehr umfangreichen Kontext wie Adreßraum, Seitentabellen, Dateideskriptoren, Signalmasken, Timer etc. besitzt. Es ist also nicht sinnvoll, parallele Anwendungen zu entwerfen, die aus einer großen Anzahl von solchen

"schwergewichtigen" Prozessen bestehen. Es gibt aber durchaus Anwendungen, bei denen sich ein hoher Grad an Parallelverarbeitung empfiehlt. Beispielsweise könnte ein Window-System wie X11 für jedes Objekt (Fenster, Buttons, Titelbalken etc.) einen eigenen Prozeß erzeugen.

Aus diesem Grund wird bei Multiprozessoren mit gemeinsamem Hauptspeicher seit kurzem ein anderer Weg der Parallelisierung verfolgt, in dem "Threads" oder "leichtgewichtige" Prozesse Verwendung finden. Hierbei können mehrere Threads im Kontext eines herkömmlichen Unix-Prozesses ablaufen. Der eigentliche Kontext eines Threads besteht dann im wesentlichen nur noch aus den aktuellen Registerinhalten. Das Umschalten zwischen den Threads erfordert, deutlich weniger Aufwand, so daß eine Anwendung ohne weiteres aus Tausenden von Threads bestehen kann.

Kommunikation über gemeinsame Variable

Ein weiterer Vorteil ist, daß sich solche leichtgewichtigen Prozesse einen Adreßraum teilen, so daß die Kommunikation über gemeinsame Variable stattfinden kann und keine expliziten Mechanismen zur Kommunikation notwendig sind.

Auch wenn die leichtgewichtigen Prozesse eine effiziente Möglichkeit zur parallelen Programmierung von Multiprozessoren mit gemeinsamem Speicher bieten, so handelt es sich noch immer um eine explizite Form des Parallelismus. Der Programmierer muß sich eine geeignete Aufteilung des Problems in unabhängige Teilaufgaben überlegen und diese dann explizit programmieren. Im allgemeinen ist es oft sehr schwierig diese Aufteilung vorzunehmen. Ein weiterer Ansatz zur Parallelisierung besteht deshalb im Einsatz von automatisch parallelisierenden Compilern. Der von solchen Compilern erzeugte Parallelismus besitzt meistens eine feine Granularität. Der Compiler versucht, durch die Analyse des Programms unabhängige Befehle oder Befehlsblöcke zu finden, die auf die Prozessoren verteilt werden. So können beispielsweise oft verschiedene Iterationen von Programmschleifen parallel ausgeführt werden. Alliant FX/2800 unterstützt diese Art der Parallelisierung sogar durch Hardware: Die CCU dient bei der parallelen Abarbeitung von Schleifen als Verwaltungseinheit. Jeder Prozessor erfragt bei der CCU den aktuellen Schleifenindex und berechnet einen Schleifendurchlauf, bevor er sich wieder bei der CCU meldet. Die Ergebnisse von automatisch parallelisierenden Compilern sind bisher allerdings nicht überzeugend.

Vor allem C-Programme, die viel mit Zeigern und Adressen arbeiten, kann der Compiler nicht gut parallelisieren, da er zur Übersetzungszeit nicht genügend Information über Datenabhängigkeiten zur Verfügung hat. Bei Fortran-Programmen sind die erreichbaren Resultate dagegen im allgemeinen etwas besser.

Bei den Multiprozessor-Systemen mit verteiltem Speicher besteht eine andere Ausgangssituation. Hier können die einzelnen Prozessoren nicht auf einen gemeinsamen Hauptspeicher zugreifen. Sie können deshalb auch nicht auf gemeinsame Variablen zur Kommunikation zurückgreifen.

Aus diesem Grund bieten die meisten Programmiermodelle für lose gekoppelte Multiprozessoren eine reine Nachrichtenkommunikation (Message passing) an. Es stehen Funktionen zur Verfügung, mit denen Prozesse Nachrichten versenden und empfangen können.

Diese Art der Programmierung ist deutlich weiter von der Denkweise eines "sequentiellen" Programmierers entfernt als beispielsweise die Programmierung mit Threads, die über gemeinsame Variablen kommunizieren. Neben einer Aufteilung in parallel ausführbare Prozesse ist der Programmierer auch mit der Aufgabe der Datenaufteilung auf die getrennten Adreßräume konfrontiert. Zur Kommunikation muß der Entwickler Nachrichten explizit aufbauen, versenden und empfangen.

Ein Ansatz, um dem Programmierer ein komfortableres Programmiermodell zur Verfügung zu stellen, besteht darin, die

Verteilung der Speicherbereiche auf die einzelnen Prozessoren des Systems vor dem Benutzer zu verbergen, indem das Betriebssystem einen virtuell gemeinsamen Adreßraum realisiert [8]. Die hierzu notwendigen Mechanismen ähneln denen, die für die virtuelle Speicherverwaltung in herkömmlichen Betriebssystemen zum Einsatz kommen. Der gemeinsame Adreßraum wird dazu in Seiten aufgeteilt, die in den physikalischen Adreßraum der einzelnen Prozessoren eingeblendet sind. Greift ein Prozeß auf eine Seite zu, die nicht lokal vorhanden ist, erzeugt der Prozessor einen "Seite-fehlt-Alarm". Die Routine zur Alarmbehandlung sorgt dann dafür, daß die fehlende Seite über das Verbindungsnetzwerk des Multiprozessors aus dem lokalen Speicher des Knotens, der die Seite gerade besitzt, nachgeladen wird.

Mit diesem Mechanismus ist es möglich, dem Benutzer das gleiche Programmiermodell zur Verfügung zu stellen, das auf Systemen mit gemeinsamem Speicher existiert. Natürlich hat dieser sehr elegante Ansatz auch seine potentiellen Schwächen. So kann es zu erheblichen Effizienzverlusten kommen, wenn eine Seite ständig von zwei Prozessen auf unterschiedlichen Prozessoren angesprochen wird, weil diese Seite dann bei jedem Zugriff zwischen den Prozessoren hin- und herwandern muß. Experimente haben aber gezeigt, daß das Konzept des 'Distributed Shared Memory' durchaus ein vielversprechender Ansatz für die komfortable Programmierung von lose gekoppelten Multiprozesgoren ist. Mit dem System Paragon ist die Firma Intel einer der ersten Hersteller von massiv-parallelen Systemen, der durch das Betriebssystem virtuell gemeinsamen Speicher zur Verfügung stellt.

Probleme beim Einsatz von Multiprozessoren

Eines der Hauptprobleme beim Einsatz von Multiprozessoren mit verteiltem Speicher ist die mangelhafte Unterstützung des Programmierers bei der Programmentwicklung durch geeignete Werkzeuge. Das Problem besteht darin, daß Werkzeuge wie Debugger und Leistungsmeß-Systeme selbst auf die einzelnen Prozessoren des Multiprozessor-Systems verteilt werden müssen, um parallele Programme überwachen zu können [9]. Das bedeutet, daß die Entwicklung dieser Tools wesentlich aufwendiger ist, als für Systeme mit gemeinsamem Speicher, wo meist konventionelle Werkzeuge wie "Prof" (Profile-Werkzeug) oder ein für die Unterstützung von Threads angepaßter "dbx" (Debugger) verwendet werden.

Ein weiteres Problem, das beim Einsatz von lose gekoppelten Multiprozessoren auftreten kann, sind Lastungleichheiten zwischen den einzelnen Prozessoren des Systems. Während Systeme mit einem gemeinsamen Speicher nur eine einzige Prozeßwarteschlange besitzen, aus der sich jeder Prozessor einen rechenbereiten Prozeß zur Bearbeitung entnehmen können, kann so daß hier keine Lastungleichheiten entstehen können, kann es bei Systemen mit verteiltem Speicher vorkommem, daß einige Prozessoren keine Aufgabe zu bearbeiten haben, während andere überlastet sind. Dabei können die vorhandenen Rechenleistungen nicht vollständig ausgenützt werden. Diesem Problem versucht man, mit "dynamischem Lastausgleich" entgegenzuwirken. Dabei werden Prozesse während ihrer Laufzeit von überlasteten Prozessoren auf weniger belastete Prozessoren verschoben [10]. Dieser Vorgang geschieht für den Benutzer vollständig transparent. Mitentscheidend für die Wirksamkeit von dynamischem Lastausgleich ist, daß ein effizientes Verfahren für die Verschiebung von Prozessen eingesetzt wird, weil sonst der Aufwand für die Verschiebung höher ist, als der Gewinn, der durch dynamischen Lastausgleich erzielt wird.

Die Firma Intel hat mit der Gründung des 'European Supercomputer Development Center' (ESDC) in München ihre Anstrengungen verstärkt, Lösungen für die offenen Probleme beim Einsatz von massiv parallelen Systemen zu bieten. Im ESDC werden Forschungs-und Entwicklungsprojekte durchgeführt, die sich der beiden oben vorgestellten Probleme annehmen. Unter anderem wird an der Verbesserung der existierenden Werkzeuge, besonders von Leistungsmeß-Systemen sowie an Verfahren zum Einsatz von dynamischem Lastausgleich gearbeitet.

*Stefan Tritscher ist wissenschaftlicher Mitarbeiter am European Supercomputer Development Center (ESDC) in Feldkirchen bei München.

Literatur

[1] J. Rattner, The New Age of Supercomputting. In: A. Bode (Hrsg.), Distributed Memory Computing, Lecture Notes in Computer Science, Vol. 427, Springer Verlag Heidelberg, April 1991,S. 1-6.

[2] A. Bode (Hrsg.),RISC-Architekturen. 2. Auflage, BI Wissenschaftsverlag Mannheim, Reihe Informatik, Band 60, 1990.

[3] M. Flynn, Very High Speed Computing Systems, Proceedings of the IEEE, Vol. 54, No. 12, 1966, S. 1901 - 1909.

[4] P. Schuller, iPSC/860 Supercomputer - Architektur, Anwedung, Trends. In: Praxis der Informationsverarbeitung und Kommunikation, Saur Verlag München, Band 1/91, 1991, S. 11-16.

[5] R. Gruner, The Alliant FX/2800 Paralel Supercomputer. Alliant Computer Corporation Littleton, USA, 1990.

[6] Intel Corporation (Hrsg), Paragon HP/S Product Overview. Intel Corporation 1991.

[7] M. J. Acetta et. al, Mach: A New Kernel Foundation for Unix Development. Proceedings of Summer Usenix Conference Atlanta, GA, Usenix Assoc., Juni 1986, S. 93-113.

[8] K. Li, IVY: A Shared Virtual Memory System for Parallel Computing. In: H. E. Sturgis (Hrsg), Proceedings of the International Conference on parallel Procesing, Penn State University Press Pennsylvania, August 1988, S. 94-101.

[9] T. Bemmerl, Programmierung Skalierbarer Multiprozessoren. BI Wissenschaftsverlag Mannheim, Reihe Informatik, Band 84, 1992.

[10] S. Tritscher, Seitenorientierte Prozeßmigration als Basis für dynamischen Laustausgleich. In :GI/ITG Pars Mitteilungen, Nr. 9 Februar 1992, S. 58-62.