Parallel Prolog

39
Parallel Prolog SS 2004 18.410 Seminar Programmiersprachenkonzepte Vortrag von Zehra Öztürk am 17. Juni 2004

description

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. - PowerPoint PPT Presentation

Transcript of Parallel Prolog

Page 1: Parallel Prolog

Parallel Prolog

SS 2004

18.410 Seminar Programmiersprachenkonzepte

Vortrag von Zehra Öztürk

am 17. Juni 2004

Page 2: Parallel Prolog

Ü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

Ü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

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

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

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

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

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

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

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

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

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

‘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

Ü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

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

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

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

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

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

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

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

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

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

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

Ü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

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

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

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

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

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

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

Ü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

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

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

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

Ü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

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

Ü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

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