[Informatik-Fachberichte] Parallele Implementierung funktionaler Programmiersprachen Volume 232 ||...

4
Kapitel3 Parallele Rechnerarchitekt uren Auf Grund neuer Technologien ist es heute moglich, Rechnersysteme zu bauen, die aus einer Vielzahl von Prozessoren besteheB. Von solchen parallelen oder verteilten Systemen erhofft man sich eine grofiere Leistungsfahigkeit und Flexibilitat. Urn dies zu erreichen, sind natiirlich geeignete Organisationsformen notwendig. Eine grobe Klassifikation von parallelen Architekturen ist die Einteilung in • lose gekoppelte Systeme (Systeme mit verteiltem Speicher ("distributed memory")) und • eng gekoppelte Systeme (Systeme mit gemeinsamen Speicher ("shared memory")). In lose gekoppelten Systemen hat jeder Prozessor seinen eigenen lokalen Spei- cher. Jeder Zugriff auf ein Speichermodul erfolgt iiber den zugehOrigen Prozessor. Die verschiedenen Prozessoren konnen iiber ein Verbindungsnetzwerk miteinander kommunizieren. In einem eng gekoppelten System existiert ein globaler Hauptspeicher, auf den alle Prozessoren zugreifen konnen. Der Hauptspeicher ist i.a. in mehrere Spei- chermodule unterteilt, die unabhangigen Zugriff erlauben. Die Kommunikation zwischen den Prozessoren erfolgt iiber gemeinsam benutzte Speicherbereiche. Bild 3.1 veranschaulicht die verschiedenen Architekturformen. In Architekturen mit gemeinsamem Speicher ist jedes Speichermodul fUr jeden Prozessor in gleicher Weise verfUgbar. Die Organisation der ParallelausfUhrung, wie etwa die Arbeitsverteilung, ist in solchen Systemen sehr einfach. Allerdings R. Loogen, Parallele Implementierung funktionaler Programmiersprachen © Springer-Verlag Berlin Heidelberg 1990

Transcript of [Informatik-Fachberichte] Parallele Implementierung funktionaler Programmiersprachen Volume 232 ||...

Kapitel3

Parallele Rechnerarchitekt uren

Auf Grund neuer Technologien ist es heute moglich, Rechnersysteme zu bauen, die aus einer Vielzahl von Prozessoren besteheB. Von solchen parallelen oder verteilten Systemen erhofft man sich eine grofiere Leistungsfahigkeit und Flexibilitat. Urn dies zu erreichen, sind natiirlich geeignete Organisationsformen notwendig. Eine grobe Klassifikation von parallelen Architekturen ist die Einteilung in

• lose gekoppelte Systeme (Systeme mit verteiltem Speicher ("distributed memory")) und

• eng gekoppelte Systeme (Systeme mit gemeinsamen Speicher ("shared memory")).

In lose gekoppelten Systemen hat jeder Prozessor seinen eigenen lokalen Spei­cher. Jeder Zugriff auf ein Speichermodul erfolgt iiber den zugehOrigen Prozessor. Die verschiedenen Prozessoren konnen iiber ein Verbindungsnetzwerk miteinander kommunizieren.

In einem eng gekoppelten System existiert ein globaler Hauptspeicher, auf den alle Prozessoren zugreifen konnen. Der Hauptspeicher ist i.a. in mehrere Spei­chermodule unterteilt, die unabhangigen Zugriff erlauben. Die Kommunikation zwischen den Prozessoren erfolgt iiber gemeinsam benutzte Speicherbereiche. Bild 3.1 veranschaulicht die verschiedenen Architekturformen.

In Architekturen mit gemeinsamem Speicher ist jedes Speichermodul fUr jeden Prozessor in gleicher Weise verfUgbar. Die Organisation der ParallelausfUhrung, wie etwa die Arbeitsverteilung, ist in solchen Systemen sehr einfach. Allerdings

R. Loogen, Parallele Implementierung funktionaler Programmiersprachen© Springer-Verlag Berlin Heidelberg 1990

Architektur mit gemeinsamem Speicher:

• • •

Verbindungsnetzwerk

• • • I H' h I L __________ ~u2t~~1~ ~ _ _ _ _ _ _ _ _ _ J

Architektur mit verteiltem Speicher: r----., r----' r----'

• • •

Prozessoren

Speicher­module

lokale Speicher

I I Prozessoren I

Verbindungsnetzwerk

Bild 3.1: Organisationsformen paralleler Systeme

83

84 KAPITEL 3. PARALLELE RECHNERARCHITEKTUREN

hangt die Leistungsfahigkeit sehr stark von der Qualitat des Verbindungsnetz­werkes zwischen den Prozessoren und den Speichermodulen abo Insbesondere ist auch die Zahl der parallel arbeitenden Prozessoren durch die Art des Verbindungs­netzwerkes beschrankt. Letztendlich beschrankt der zentral verfUgbare Speicher die effektiv mogliche Parallelitat, so daB eine beliebige Erweiterbarkeit dieser Sy­sterne ausgeschlossen scheint.

In Architekturen mit verteiltem Speicher ist ein lokaler Speicherzugriff fUr einen Prozessor sehr viel einfacher und schneller als eine Speicheranfrage an ein anderes Prozessorelement. In solchen Systemen ist es also wichtig, daB ein Prozessor die fur seine Aufgabe wesentlichen Daten in seinem lokalen Speicher zur Verfugung hat. Dies stellt besondere Anforderungen an die Arbeitsverteilung oder allge­meiner an die Organisation der Parallelverarbeitung. Die Kommunikation erfolgt in lose gekoppelten Systemen durch den Austausch von Nachrichten ("message passing"). Es bestehen Punkt-zu-Punkt Verbindungen zwischen den Prozessor­elementen. Besteht zwischen zwei Prozessorelementen keine direkte physikalische Verbindung, so werden Nachrichten zwischen solchen uber mehrere Zwischenele­mente navigiert. Prinzipiell kann jedes Prozessorelement mit jedem anderen kom­munizieren. Der Aufwand und die Kosten einer solchen Kommunikation hangen naturlich von der Entfernung der Prozessorelemente abo Durch die vollig dezen­trale Organisation von Architekturen mit verteiltem Speicher sind diese auBerst flexibel und leicht erweiterbar. Keine zentrale Struktur beschrankt die Anzahl der Prozessorelemente.

Lose gekoppelte Systeme eignen sich also offensichtlich zur Organisation von hochparallelen Systemen ("highly parallel systems"), wahrend eng gekoppelte Sy­sterne jeweils nur eine beschrankte Anzahl von Prozessorelementen zulassen. Es gibt auch Kombinationen beider Organisationsformen, bei den en enggekoppelte Prozessor-/Speichergruppen, sogenannte 'Cluster', die Knotenpunkte in einem lose gekoppelten System bilden.

Eine Ubersicht uber real existierende Mehrprozessorsysteme, in denen die ver­schiedenen Architekturtypen verwirklicht sind, findet sich etwa in [Kruskal84] und [Frenkel 86]. In diesen Arbeiten liegt der Schwerpunkt allerdings auf bestimmten Systemen, die genauer analysiert werden. Die Programmierung dieser Rechner erfolgt imperativ. In [Regenspurg 87] werden ausgehend von den technologischen Grundlagen einige Hardwareentwiirfe fur verteilte Systeme vorgestellt. [Gonauser, Mrva 89] enthalt eine ausfUhrliche Analyse und Klassifikation von Multiprozes­sorsystemen sowie einen umfassenden Uberblick uber real (d.h. in Hardware) existierende Parallelrechner.

Neuere Architekturentwiirfe fur parallele, aber auch sequentielle Rechner er­folgen nicht mehr nur technologie-orientiert (bottom-up), sondern zudem sprach­orientiert (top-down). Beim sprach-orientierten Entwurfentwickelt man aus einem

85

stark idealisierten Berechnungsmodell fur die jeweilige Sprache durch schrittweise Konkretisierung und Verfeinerung ein physisches Berechnungsmodell, das auf exi­stierende Technologie abgebildet werden kann. Fur eine funktionale Sprache be­deutet dies, daB man etwa ausgehend von der nichtdeterministischen Reduktions­semantik durch Wahl einer Reduktionsstrategie und Entwicklung einer Implemen­tierungstechnik zur Festlegung einer abstrakten Maschinendefinition kommt, die dann bis zu einer technischen Realisierung weiter verfeinert werden kann. Wie wir im vorigen Abschnitt gesehen haben, sind die verschiedenen Implementierungs­techniken meist unter Benutzung abstrakter Maschinen definiert worden. Nur die wenigsten dieser Maschinenentwurfe wurden bzw. werden tatsachlich technisch realisiert, i.a. werden sie auf existierenden Systemen implementiert, d.h. simuliert. Der Grund hierfur ist, daB eine technische Realisierung mit einem zu hohen Auf­wand verbunden ist. Eine umfassende Ubersicht uber Architekturentwiirfe fUr deklarative Sprachen findet sich in [Vegdahl 84] und [Treleaven, Refenes, Lees, McCabe 86]. In [Kober 88] werden Parallelrechnerentwicklungen fiir imperative und deklarative, d.h. funktionale und logische, Programmiersprachen diskutiert.

Ein Ziel der vorliegenden Arbeit ist der sprachorientierte Entwurf einer Par­allelarchitektur fUr die Implementierung funktionaler Sprachen. Dabei haben wir uns fUr die Entwicklung einer Architektur mit verteiltem Speicher entschieden, da sich diese durch die vollig dezentrale Organisation besser als Basis fUr groBe parallele Systeme eignet. Bevor wir im dritten Teil des Buches die abstrakte parallele Maschine vorstellen, die wir zur Implementierung der in Kapitel 1 ein­gefUhrten Sprache SAL entworfen haben und die als Implementierungstechnik eine umgebungs- und graph-basierte Kombinatorreduktion zugrundelegt, werden wir im folgenden Teil die Parallelisierung von SAL-Programmen beschreiben. Eine Be­schreibung und Gegenuberstellung von Projekten mit ahnlicher Zielsetzung werden wir am Ende in Kapitel13 vornehmen.