Download - Parallel Prolog
![Page 1: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/1.jpg)
Parallel Prolog
SS 2004
18.410 Seminar Programmiersprachenkonzepte
Vortrag von Zehra Öztürk
am 17. Juni 2004
![Page 2: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/2.jpg)
Überblick
• Prolog Grundlagen
• OR – Parallelität
• AND – Parallelität
• Verschiedene Parallel Prolog Dialekte
• Zusammenfassung
• Literatur
18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
![Page 3: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/3.jpg)
Überblick
• Prolog Grundlagen
• OR – Parallelität
• AND – Parallelität
• Verschiedene Parallel Prolog Dialekte
• Zusammenfassung
• Literatur
18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
![Page 4: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/4.jpg)
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
![Page 5: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/5.jpg)
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
![Page 6: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/6.jpg)
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
![Page 7: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/7.jpg)
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
![Page 8: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/8.jpg)
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
![Page 9: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/9.jpg)
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
![Page 10: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/10.jpg)
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
![Page 11: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/11.jpg)
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
![Page 12: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/12.jpg)
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
![Page 13: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/13.jpg)
‘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
![Page 14: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/14.jpg)
Überblick
• Prolog Grundlagen
• OR – Parallelität
• AND – Parallelität
• Verschiedene Parallel Prolog Dialekte
• Zusammenfassung
• Literatur
18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
![Page 15: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/15.jpg)
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
![Page 16: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/16.jpg)
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
![Page 17: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/17.jpg)
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)
18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
q
p p
Y → a
X ungebunden
Y = a
X → 1
Y = a
X → 2
Y a
X ?
X → 1 X → 2
![Page 18: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/18.jpg)
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
![Page 19: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/19.jpg)
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
![Page 20: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/20.jpg)
Restricted OR – Parallelität (2)
18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
Environment
B
C
p(X,Y) :- q(X),r(Y).P
p(X,Y) :- r(Y).
Y = 1 (time-insensitive) Y = 1 (time-insensitive)
X Unused X bound
?- 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
![Page 21: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/21.jpg)
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
![Page 22: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/22.jpg)
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
![Page 23: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/23.jpg)
Dependent OR – Parallelität (3)
binding Arrays: jede konditional Variable wird indexiert und
jeder Zweig hat einen Array wo Bindungen an Variablen
gespeichert werden
18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
0
1
Processor 1 Binding Array
Processor 1 Binding Array Processor 2 Binding Array
?- integr(5 * x + lnx * x, Z). Z = X1 + Y1, …
X1 – Y1
Z = X* Y, …
X * Y0 0
1 1
2 2
Proc.1Proc.2
![Page 24: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/24.jpg)
Dependent OR – Parallelität (4)
Stack copying: Umgebungen der Alternativen werden
kopiert und jedem Zweig der Verarbeitung zugefügt
18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
?- integr(5 * x + lnx * x, Y). ?- integr(5 * x + lnx * x, Y).
Y = X1 + Y1 Y = X * Y
X1 + Y1 X1*Y1
Environments Environments
Copied Part
![Page 25: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/25.jpg)
Überblick
• Prolog Grundlagen
• OR – Parallelität
• AND – Parallelität
• Verschiedene Parallel Prolog Dialekte
• Zusammenfassung
• Literatur
18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
![Page 26: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/26.jpg)
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
![Page 27: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/27.jpg)
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
![Page 28: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/28.jpg)
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
![Page 29: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/29.jpg)
Dependent AND – Parallelität (1)
• Nutzung ungebundener Variablen, auch bei
Konfliktentstehung erlaubtp(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
![Page 30: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/30.jpg)
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
![Page 31: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/31.jpg)
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
![Page 32: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/32.jpg)
Überblick
• Prolog Grundlagen
• OR – Parallelität
• AND – Parallelität
• Verschiedene Parallel Prolog Dialekte
• Zusammenfassung
• Literatur
18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
![Page 33: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/33.jpg)
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
![Page 34: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/34.jpg)
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
![Page 35: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/35.jpg)
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
![Page 36: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/36.jpg)
Überblick
• Prolog Grundlagen
• OR – Parallelität
• AND – Parallelität
• Verschiedene Parallel Prolog Dialekte
• Zusammenfassung
• Literatur
18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
![Page 37: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/37.jpg)
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
![Page 38: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/38.jpg)
Überblick
• Prolog Grundlagen
• OR – Parallelität
• AND – Parallelität
• Verschiedene Parallel Prolog Dialekte
• Zusammenfassung
• Literatur
18.410 Seminar Programmiersprachenkonzepte Parallel Prolog
![Page 39: Parallel Prolog](https://reader036.vdocuments.site/reader036/viewer/2022062309/56814d6d550346895dbabd86/html5/thumbnails/39.jpg)
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