390 likes | 511 Views
Parallel Prolog. SS 2004 18.410 Seminar Programmiersprachenkonzepte Vortrag von Zehra Öztürk am 17. Juni 2004. Überblick. Prolog Grundlagen OR – Parallelität AND – Parallelität Verschiedene Parallel Prolog Dialekte Zusammenfassung Literatur.
E N D
Parallel Prolog SS 2004 18.410 Seminar Programmiersprachenkonzepte Vortrag von Zehra Öztürk am 17. Juni 2004
Überblick • Prolog Grundlagen • OR – Parallelität • AND – Parallelität • Verschiedene Parallel Prolog Dialekte • Zusammenfassung • Literatur 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Überblick • Prolog Grundlagen • OR – Parallelität • AND – Parallelität • Verschiedene Parallel Prolog Dialekte • Zusammenfassung • Literatur 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Was ist Prolog? • Prolog ist eine deklarative Programmiersprache • es werden bekannte Fakten und Beziehungen über ein Problem beschrieben • Programmierung besteht aus • Festlegung von Fakten, Definition von Regeln, stellen von Anfragen • Prolog wird genutzt zur Darstellung von • Relationalen Datenbanken, Logik, Künstlicher Intelligenz… 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Fakten • Fakten wie „John likes Mary“ werden wie folgt dargestellt: likes(john, mary). Konstanten likes(john, ice-cream). Prädikate 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Anfragen • Anfragen gleichen Fakten • Unterschied sind spezielle Zeichen, die vor gesetzt werden ?- likes(john, mary). ?- likes(_, mary). ?- likes(john, X). • Fragen werden mit yes, no oder dem Variablenwert beantwortet 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Regeln (1) • Regeln werden verwendet, wenn ein Fakt abhängig von anderen Fakten ist oder wenn man Definitionen darstellen will John mag jemanden, wenn er Wein oder Essen mag. X ist ein Vogel, wenn: X ein Tier ist und X Federn hat. • Regeln bestehen aus einem Regelkopf und dem Regelrumpf 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Regeln (2) likes(john, X) :- likes(X, win); likes(mary, wine). likes(X, food). likes(peter, food). Regelkopf Regelrumpf Fakten ‘dann, wenn‘-Pfeil Regel, Klausel 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Unifikation • Unifikation ist die Art, wie Prolog matched • es wird ein Paar von gültigen Prolog Entitäten oder Termen unifiziert • Unifikation = zwei Wege matching Prozess • Substitution • Weiterrechnen mit dem Substituenten a(b, c, d(e, F)) = a(B, c, d(E, f)) B unifiziert mit b, E unifiziert mit e, F unifiziert mit f 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Listen • Leere Liste: [ ] • Nicht-leere Listen: zwei Notationsformen • Rekursionsformat • Eine Liste bestehend aus einem Kopfelement und der Restliste (getrennt durch den Separator ‘ | ‘) Beispiel: [ Kopfelement | Restliste ] • Aufzählungsformat • Eine Liste bestehend aus einer Folge von Elementen (getrennt durch den Separator ‘ , ‘) Beispiel: [ Element1, Element2, Element3, …, Elementn ] 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Rekursive Suche • Rekursive Suche erfolgt, wenn eine Struktur andere Strukturen als ihre Komponenten hat member(X, [Y|_]) :- X = Y. member(X, [_|Y]) :- member(X, Y). ?- member(d, [a, b, c, d, e, f, g, h]). yes ?- member(2, [3, a, 4, f]) no 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Backtracking • nach Erhalt einer Lösung, kann man durch ‘;‘ nach anderen möglichen Ergebnissen suchen • Backtracking wird eingesetzt ?- likes(john, X). X = mary; X = ice-cream; no 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
‘Cut!‘ • zur Kontrolle der Informationsausgabe • durch ‘cut‘ wird Backtracking nach Erhalt eines Ergebnisses aufgehalten member(X, [X|_]) :- !. member(X, [_|Y]) :- member(X, Y). ?- member(X, [d, e, f]). X = d • ohne ‘cut‘ würden alle Elemente der Liste als Wert für X wiedergegeben werden 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Überblick • Prolog Grundlagen • OR – Parallelität • AND – Parallelität • Verschiedene Parallel Prolog Dialekte • Zusammenfassung • Literatur 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
OR – Parallelität (1) • OR-Parallelität erfolgt immer dann, wenn eine Teilaufgabe mit mehr als einem Klauselkopf unifizieren kann • Klauselkörper werden dann von unterschiedlichen Agenten ausgeführt (OR - Agent) integr( X + Y , X‘ + Y‘) :- integr(X,X‘), integr(Y,Y‘). integr(A + B, X * Y) :- A = X1 * Y, B = X * Y1, integr(X, X1), integr(Y, Y1). ?- integr(5 * x + lnx * x, Z). beide Klauselköpfe können mit der Anfrage unifiziert werden 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
OR – Parallelität (2) • jeder OR-Agent liefert unterschiedliche Ergebnisse auf die Anfrage • Folgerung: einfache Implementierung durch straightforward Modifikationen auf existierende sequentielle Technologien • nur bei Independent und Restricted Parallelität möglich • OR-Parallelität in allgemeiner Form erfordert einige komplexe Erweiterungen • Unabhängigkeit der OR-Agents darf nur in der Theorie existieren 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
OR – Parallelität (3) ?- q(Y, X), p (Y, X). mit • Berechnung für q erfolgt, durch Bindung von Y an a und ohne X zu binden • P ist definiert durch p(a, 1) und p(a, 2) Y → a Y a X ? q X ungebunden p p Y = a X → 1 Y = a X → 2 X → 1 X → 2 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Independent OR – Parallelität • ist gegeben, wenn die unterschiedlichen Alternativen unabhängig voneinander sind • es wird nicht dieselbe Variable verwendet • in den meisten Fällen, kommen in den Anfragen keine ungebundenen Variablen vor 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Restricted OR – Parallelität (1) • wie Independent OR-Parallelität • erlaubt Nutzung von ungebundenen konditional Variablen • Variablen dürfen keine Konflikte erzeugen • Variablen werden nur gelesen • von einer Alternative genutzte Variable darf nicht von einer anderen Alternative genutzt werden • Konzept könnte gepusht werden • Alternativen dürfen selbe Variable nutzen • Bindungen müssen konsistent sein • die Berechnung der Alternativen ist Zeit-Insensitiv 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Restricted OR – Parallelität (2) ?- p(B, C). p(X,Y):-r(Y). p(X,Y):-q(X),t(Y). r(1). t(1). q(a) :- … Beispiel für Restricted OR-Parallelismus Environment B C P p(X,Y) :- r(Y). p(X,Y) :- q(X),r(Y). Y = 1 (time-insensitive) Y = 1 (time-insensitive) X Unused X bound 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Dependent OR – Parallelität (1) • keine Restriktionen für Parallelität • Ziel: Lösung des Abhängigkeits-Problems und Bindung der konditional Variablen • während Ausführung eines Verarbeitungsschrittes, könnten neue Variablen erzeugt werden • bei paralleler Weiterverarbeitung könnte es dadurch zu Problemen kommen, wenn ein Teil versucht die Variable zu lesen/schreiben, die im anderen Teil erzeugt/verwendet wird 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Dependent OR – Parallelität (2) • Umgebungen müssen so organisiert sein, dass Bindungen nur dem jeweiligen Verarbeitungszweig zur Verfügung gestellt werden • Zwei Wege • Stack copying • binding Arrays 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Dependent OR – Parallelität (3) binding Arrays: jede konditional Variable wird indexiert und jeder Zweig hat einen Array wo Bindungen an Variablen gespeichert werden Processor 1 Binding Array Proc.2 Proc.1 0 1 ?- integr(5 * x + lnx * x, Z). Z = X1 + Y1, … Z = X* Y, … 0 X1 – Y1 0 X * Y 1 1 2 2 Processor 1 Binding Array Processor 2 Binding Array 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Dependent OR – Parallelität (4) Stack copying: Umgebungen der Alternativen werden kopiert und jedem Zweig der Verarbeitung zugefügt Environments Environments ?- integr(5 * x + lnx * x, Y). ?- integr(5 * x + lnx * x, Y). Copied Part X1 + Y1 X1*Y1 Y = X1 + Y1 Y = X * Y 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Überblick • Prolog Grundlagen • OR – Parallelität • AND – Parallelität • Verschiedene Parallel Prolog Dialekte • Zusammenfassung • Literatur 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
AND – Parallelität • Teilaufgaben einer Anfrage können durch verschiedene Agenten bearbeitet werden • AND-Agenten • berechnen verschiedene Teile desselben Ziels • Aufteilung zwischen Agenten muss geregelt sein Beispiel: Quicksort qsort([], []). qsort([H|T], R) :- split(T, H, Sm, Lrg), qsort(Sm, R1), qsort(Lrg, R2), append(R1, [H|R2], R). 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Independent AND – Parallelität • verschiedene Teilprozesse dürfen keine ungebundenen Variablen teilen • Beeinflussung der Berechnungen wird verhindert • am Ende jedes parallel berechneten Teilprozesses befindet sich ein barrier • Zurückschaltung zur sequentiellen Verarbeitung, wenn alle Teilaufgaben berechnet wurden 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Restricted AND – Parallelität • ungebundene Variablen dürfen genutzt werden • es dürfen keine Konflikte durch solche Variablenbindungen entstehen 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Dependent AND – Parallelität (1) • Nutzung ungebundener Variablen, auch bei Konfliktentstehung erlaubt p(1). q(2). q(1). ?- p(X), q(X). • wenn p(X) zuerst berechnet wird, wird X = 1 gebunden und p(1) wäre gültig • wird q(X) zuerst berechnet, wird X = 2 und da p(2) nicht vorhanden, würde die ganze Anfrage ungültig werden 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Dependent AND – Parallelität (2) • deshalb für parallele Verarbeitung Einführung von Producer und Consumer • Producer: Teilprozess, der das Recht hat ungebundene Variable zu binden • Consumer: alle anderen Teilprozesse, die diese Variable benötigen • haben nur das Recht, Variable zu lesen • Consumer, die Variable zur Weiterverarbeitung brauchen, müssen warten, bis sie Producer werden • wird durch Prolog Semantik festgelegt 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Ausgabe • bei sequentiellen Interpreter standardmäßige Beantwortung durch einen Wert • alternative Lösungen erst durch Backtracking • bei paralleler Evaluierung sollen alle Lösungen ausgegeben werden • unendliche Ableitungsversuche lassen sich schwer vermeiden • Cut • nur bis zu einer bestimmten Ableitungstiefe parallel evaluieren 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Überblick • Prolog Grundlagen • OR – Parallelität • AND – Parallelität • Verschiedene Parallel Prolog Dialekte • Zusammenfassung • Literatur 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Parallel Prolog Dialekte (1) • Concurrent Prolog • bietet AND- und OR-Parallelität an • besitzt einen read-only Operator • PARLOG • nutzt Consumer und Producer Prinzip der Dependent AND-Parallelität • um Bindungskonflikte zu beheben, gibt es Modus Deklarationen für jede Prozedur 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Parallel Prolog Dialekte (2) • Reform Prolog • eine Single Instruction, Multiple Data (SIMD) Prolog Implementation, die mit Rekursionsparallelität arbeitet • es gibt einen sequentiellen Arbeiter und eine festgelegte Anzahl von parallelen Arbeitern • Ciao Engine (CLIP Group) • basiert auf der AND-Parallelität von Concurrent Prolog • diese ist hergeleitet von SICStus Prolog 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Parallel Prolog Dialekte (3) • Muse • OR-Parallele Prolog Version von SICStus • läuft auf einigen Multiprozessor Plattformen und unterstützt Prolog sowie die meisten SICStus Gebilde • Penny • benutzt AND- und OR-Parallelität und hat einen kompletten Garbage Collector • System benutzt implizite Parallelität • keine Annotationen im Source Code nötig 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Überblick • Prolog Grundlagen • OR – Parallelität • AND – Parallelität • Verschiedene Parallel Prolog Dialekte • Zusammenfassung • Literatur 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Zusammenfassung • Einführung in Prolog • Vorstellung der in Prolog am meisten verwendeten Parallelisierungs-Arten • AND-Parallelität • OR-Parallelität • Vorstellung der verschiedenen Parallel Prolog Dialekte 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Überblick • Prolog Grundlagen • OR – Parallelität • AND – Parallelität • Verschiedene Parallel Prolog Dialekte • Zusammenfassung • Literatur 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Literatur • Oskar Fuhlrott. „Möglichkeiten und Grenzen einer Parallelverarbeitung in Prolog“, Diplom-Arbeit, Universität Hamburg, 1987. • Joachim Beer. „Concepts, Design and Performance Analysis of a Parallel Prolog Machine“, Springer Verlag, 1987. • Håkan Millroth. „Using the Reform Inference System for Parallel Prolog“, Upmail Technical Report, 1992. • William F. Clocksin und Christopher S. Mellish. „Programming in Prolog“, Springer Verlag, 1981. • http://user.it.uu.se/~thomasl/par-prolog.html • Keith Clark und Steve Gregory. „Parlog: Programming in Logic“, ACM TOPLAS, Volume 8 (pp. 1-45), 1986. 18.410 Seminar Programmiersprachenkonzepte Parallel Prolog