[Informatik-Fachberichte] Parallele Implementierung funktionaler Programmiersprachen Volume 232 ||...
Transcript of [Informatik-Fachberichte] Parallele Implementierung funktionaler Programmiersprachen Volume 232 ||...
Kapitel4
Organisation der Parallelisierung
Die implizit in funktionalen Programmen enthaltene Parallelitat besteht darin, daB voneinander unabhangige Teilausdriicke auch unabhangig, also insbesondere parallel ausgewertet werden konnen. Dies wird durch die Konfluenzeigenschaft (auch Church-Rosser-Eigenschaft) der Reduktionssemantik gewahrleistet. Die Reduktion von Ausdriicken erfolgt seiteneffektfrei.
Unabhangige Teilausdriicke sind die Argumentausdriicke in Applikationen t. Ob und wann diese Ausdriicke allerdings ausgewertet werden, hangt von der gewahlten Reduktionsstrategie abo Wie wir bereits in Kapitel 1.4 bei der Diskussion der "applicative-order" und "normal-order" Strategien gesehen haben, bietet die "applicative-order" Strategie sehr viel mehr Moglichkeiten zur Parallelauswertung als die "normal-order" Strategie. Denn bei jeder Applikation konnen aIle Argumentausdriicke parallel ausgewertet werden. Bei der "normal-order" Strategie ist eine Parallelauswertung der Argumentausdriicke nur bei Basisfunktionen zugelassen. In allen anderen Applikationen
mit beliebigem Funktionsausdruck e wird die Auswertung der Argumentausdriicke el, ... , en solange verzogert, bis ihr Wert zur Fortfiihrung der Gesamtreduktion benotigt wird. Dies fiihrt zu einem streng sequentiellen ReduktionsprozeB. Durch die verzogerte Auswertung wird eine Nichttermination der Berechnung durch divergierende Argumentberechnungen, die aber zur Bestimmung des Gesamtergebnisses nicht benotigt werden, vermieden. Wertet man bei der Reduktion einer
t Die let-Abstraktion wird dabei als besondere Form der Applikation gesehen.
R. Loogen, Parallele Implementierung funktionaler Programmiersprachen© Springer-Verlag Berlin Heidelberg 1990
90 KAPITEL 4. ORGANISATION DER PARALLELISIERUNG
Applikation (*) die Argumente, in denen der Funktionsausdruck e strikt ist, parallel aus, so wird dieses jedoch auch sichergestellt. Denn eine Nichttermination in strikten Argumenten bedeutet nach Definition der Striktheit Nichttermination der Applikationsauswertung. Eine Strategie, die strikte Funktionsargumente nach dem call-by-value Prinzip und die iibrigen Funktionsargumente nach dem callby-name Prinzip behandelt, liefert dieselben Ergebnisse wie die "normal-order" Strategie, wobei mehr Moglichkeiten zur Parallelauswertung gegeben sind.
Natiirlich ist die Striktheit von Funktionen i.a. nicht entscheidbar. Eine Striktheitsanalyse kann also nie vollstandig sein in dem Sinne, daf3 alle Argumente, in denen eine Funktion strikt ist, ermittelt werden. Es konnen aber gute Approximationen erzielt werden.
Da Striktheitsinformationen Moglichkeiten zur Parallelisierung einer "normalorder" Reduktion aufzeigen, bildet die Striktheitsanalyse das Kernstiick bei der Parallelisierung funktionaler Programme, die eine "normal-order" Auswertung zugrundelegen. Insgesamt besteht der Parallelisierungsproze:B, den wir in dies em Teil des Buches beschreiben, aus drei Phasen (siehe Bild 4.1).
In der erst en Phase wird das funktionale Programm entschachtelt, d.h. in ein System von globalen Funktionsdefinitionen (Kombinatoren) iibersetzt. Auch die Entschachtelung tragt zur Parallelisierung des Reduktionsprozesses bei. Bei der Reduktion von Kombinatoren ist, wie wir bereits in Kapitel2 gesehen haben, keine zentrale Umgebungsstruktur zur Verwaltung der Variablenbindungen notwendig. Eine solche zentrale Struktur wiirde bei vielen parallelen Prozessen, die darauf zugreifen, zum EngpaB (engl.: bottleneck) werden. Da Kombinatoren keine globalen oder freien Variablen enthalten, treten bei Kombinatorreduktionen nur die Argumentlisten als 'single level'-Umgebungen auf. Durch diese Dezentralisierung der Umgebung wird die Unabhangigkeit der parallelen Reduktionsprozesse vergro:Bert.
Die zweite Phase ist die Striktheitsanalyse, bei der untersucht wird, in welchen Argumenten die Kombinatoren strikt sind. Die Striktheitsinformationen zeigen dann, an welchen Stellen Parallelauswertungen moglich sind. Es ist aber nicht immer sinnvoll, Ausdriicke, die parallel ausgewertet werden konnen, auch tatsachlich parallel auszuwerten. Denn jede Parallelauswertung ist natiirlich auch mit einem gewissen Mehraufwand, vor allem an Kommunikationskosten tt verbunden, der gro:Ber sein kann, als der Zeitgewinn, den die parallele Auswertung bringt. Aus diesem Grund wird bei der Einteilung der Kombinatorsysteme in parallele Prozesse, die in der dritten Phase der Parallelisierung erfolgt, eine Komplexitatsanalyse von "parallelen" Teilausdriicken vorgenommen, die iiber eine tatsachliche
ttzu den Kommunikationskosten zii.hlen neben der Ubertragungszeit von Nachrichten die Erzeugung und Dekodierung der Nachrichten.
91
funktionales Programm
"- /
I Entschachtelung
"- /
Kombinatorsystem
"- /
I S trikthei tsanalyse I
"- /
Kombinatorsystem mit Striktheitsinformationen
"- /
I Einteilung in parallele Prozesse I
"- /
parallelisiertes Kombinatorsystem
Bild 4.1: Phasen der Parallelisierung
92 KAPITEL 4. ORGANISATION DER PARALLELISIERUNG
ParallelausfUhrung entscheidet. Dies ergibt dann ein Kombinatorsystem, in dem die Stellen, an denen Teilausdriicke parallel ausgewertet werden k6nnen, durch ein spezielles syntaktisches Konstrukt angezeigt werden.
Dieser Teil des Buches ist entsprechend den einzelnen Phasen der Parallelisierung organisiert.
In Kapitel 5 beschreiben wir die Transformation von SAL-Programmen in Funktionsgleichungssysteme, welche keine lokalen Funktionsdefinitionen enthalten - sogenannte Kombinatorsysteme. Das hier angegebene Verfahren basiert auf den in [Johnsson 85] und [Hughes 82] vorgestellten Algorithmen.
AnschlieBend beschreiben wir in Kapitel 6 ein Striktheitsanalyseverfahren zur Entdeckung von potentieller ParalleliUit. Dieses Verfahren wurde in [Burn, Hankin, Abramsky 86] und [Burn 87a/b] entwickelt und erlaubt die Behandlung von Funktionen h6herer Ordnung und frei erzeugten Datenstrukturen bei der Striktheitsanalyse.
In Kapitel 7 diskutieren wir die Umsetzung der Striktheitsinformationen zur Einteilung des Kombinatorsystems in parallele Teilprozesse.
Den AbschluB dieses Teiles bildet eine Graphreduktionssemantik fUr die parallelisierten Kombinatorsysteme. Diese Graphreduktionssemantik beschreibt auf einem hohem abstrakten Level den ReduktionsprozeB, der von der in den nachfolgenden Kapiteln entwickelten Graphreduktionsmaschine durchgefiihrt wird.