Prolog programok párhuzamos végrehajtása 1 Válogatott fejezetek a logikai programozásból szeminárium, Farkas Gábor 2005.12.05.

Slides:



Advertisements
Hasonló előadás
GRIN: Gráf alapú RDF index
Advertisements

Tamás Kincső, OSZK, Analitikus Feldolgozó Osztály, osztályvezető A részdokumentumok szolgáltatása az ELDORADO-ban ELDORADO konferencia a partnerkönyvtárakkal.
Nevezetes algoritmusok
Gayár Csilla, pénzügyi menedzser VÁTI Kht. Pécsi Területi Iroda DDOP Utólagos akadálymentesítés (Egyenlő esélyű hozzáférés a közszolgáltatásokhoz)
„Esélyteremtés és értékalakulás” Konferencia Megyeháza Kaposvár, 2009
Készítette: Kun Béla.  Operációs rendszernek nevezzük a számítástechnikában a számítógépeknek azt az alapprogramját, mely közvetlenül kezeli a hardvert,
Összefoglalás Hardver,szoftver,perifériák Memóriák fajtái
Adatbázis rendszerek I Relációs kalkulus Általános Informatikai Tsz. Dr. Kovács László.
Erőállóképesség mérése Találjanak teszteket az irodalomban
Párhuzamos programozás (a fork/join és a parbegin/parend technika)
Az előadásokon oldandók meg. (Szimulációs modell is tartozik hozzájuk)
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
A rendszerszintű diagnosztika alapjai
MFG-Pro váll-ir. rendszer bemutatása
Programozási feladatok az érettségin
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Párhuzamos logikai programozás Válogatott fejezetek a logikai programozásból Ludányi Zoltán ( ) (
HIKGHB Németh Gábor LUF9NV Simon Attila. A programozás alapjai előadás Híradástechnikai Tanszék.
Illés Tibor – Hálózati folyamok
Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)
Operációkutatás szeptember 18 –október 2.
Bayes hálók október 20. Farkas Richárd
Mérés és adatgyűjtés Kincses Zoltán, Mingesz Róbert, Vadai Gergely 10. Óra MA-DAQ – Műszer vezérlése November 12., 15. v
MI 2003/ Alakfelismerés - még egy megközelítés: még kevesebbet tudunk. Csak a mintánk adott, de címkék nélkül. Csoportosítás (klaszterezés, clustering).
C A C nyelv utasításai.
Algoritmizálás Göncziné Kapros Katalin humaninformatika.ektf.hu.
Az operációs rendszerek
SZÁMÍTÓGÉP ARCHITEKTÚRÁK
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
1. előadás. 1.) Szoftverfejlesztés, mint mérnöki tevékenység. Számítási eszközfejlődés. Számítási eszközfejlődés: hazai viszonyok. Mérföldkő: Simula 67.Klasszikus.
CISC - RISC processzor jellemzők
1. előadás. 1.) Szoftverfejlesztés, mint mérnöki tevékenység. Számítási eszközfejlődés. Számítási eszközfejlődés: hazai viszonyok. Mérföldkő: Simula 67.Klasszikus.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
A RobotinoView programozása
Egy egyszerű gép vázlata
MATEMATIKA ÉS INFORMATIKA I.
DRAGON BALL GT dbzgtlink féle változat! Illesztett, ráégetett, sárga felirattal! Japan és Angol Navigáláshoz használd a bal oldali léptető elemeket ! Verzio.
1 Operációs rendszerek Az ütemezés megvalósítása.
dr. Szalkai István Pannon Egyetem, Veszprém
1 Bevezetés a funkcionális programozásba 2009.
4. Gyires Béla Informatikai Nap Debreceni Egyetem Informatikai Kar Új eredmények a Chomsky-féle (formális) nyelvtípusokkal kapcsolatban Dr. Nagy Benedek.
A programozás alapjai A számítógép számára a feladat meghatá- rozását programozásnak nevezzük. Ha a processzor utasításait használjuk a feladat meghatározásához,
Matematikai alapok és valószínűségszámítás
szakmérnök hallgatók számára
Termelésmenedzsment Production Management
Logikai szita Izsó Tímea 9.B.
Lénárt Szabolcs Páll Boglárka
Minőségtechnikák I. (Megbízhatóság)
Programozási nyelvek.
ÁRAMLÓ FOLYADÉKOK EGYENSÚLYA
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Hálózati alapismeretek. 2 Chuck Norris születése óta a fordulórúgások általi halálozások száma %-kal nőtt.
A klinikai transzfúziós tevékenység Ápolás szakmai ellenőrzése
2006. május 15P2P hálózatok 1 Fóliák a vizsgára: 1. előadás  Bevezető: 11-16, 21,  Usenet: előadás:  Bevezető: 3-8  Napster: 
Logikai programozás 2..
Logikai programozás 8.. Adatok: ISMÉTLÉS: ADATBÁZISKEZELÉS A külső adatok a hatására bekerülnek a memóriába Lekérdezés: Ahogy eddig – pl.: szereti(jani,
Objektum orientált programozás
Virtuális Méréstechnika Sub-VI és grafikonok 1 Makan Gergely, Vadai Gergely v
Mérés és adatgyűjtés laboratóriumi gyakorlat - levelező Sub-VI és grafikonok 1 Mingesz Róbert V
CUDA C/C++ programozás
Adamkó Attila UML2 Adamkó Attila
Mikroökonómia gyakorlat
A KÖVETKEZŐKBEN SZÁMOZOTT KÉRDÉSEKET VAGY KÉPEKET LÁT SZÁMOZOTT KÉPLETEKKEL. ÍRJA A SZÁMOZOTT KÉRDÉSRE ADOTT VÁLASZT, VAGY A SZÁMOZOTT KÉPLET NEVÉT A VÁLASZÍV.
előadások, konzultációk
Algoritmizálás, adatmodellezés
A termelés költségei.
2. Operációs rendszerek.
Kiterjesztések szemantikája: Szemantikai tartomány : Adatoknak, vagy értékeknek egy nem üres halmazát szemantikai tartománynak nevezzük. Jelölése: D. Egy.
Programok készítése és futtatása. Integrált fejlesztői környezet (IDE) tartalmaz:  szövegszerkesztőt a program forráskódjának szerkesztésére,  fordítóprogramot.
Előadás másolata:

Prolog programok párhuzamos végrehajtása 1 Válogatott fejezetek a logikai programozásból szeminárium, Farkas Gábor

Prolog programok párhuzamos végrehajtása 2 Fibonacci sorozat (buta rekurzív) számítása fib(0,1). fib(1,1). fib(M,N) :-[ M1 is M - 1, fib(M1, N1) ], [ M2 is M - 2, fib(M2, N2) ], N is N1 + N2. A szögletes zárójelbe helyezett két cél(halmaz) láthatóan párhuzamosan végrehajtható. Hasonlóan párhuzamosítható a mátrix-szorzás, az összefésüléses rendezés, a gyorsrendezés. A két cél (változó)független ÉS kapcsolatban áll. 1 - Néhány példa

Prolog programok párhuzamos végrehajtása Néhány példa Termelő-fogyasztó összeállítás % L az [K, K+1,..., N ] lista. novo(K, N, L) :- ( N >= K -> L = [K|L1], K1 is K+1, novo(K1, N, L1) ; L = [] ). % Az L1 egészlista K-val nem osztható elemeibõl áll L2. nemoszt([], _K, []). nemoszt([X|L1], K, L2) :- ( X mod K =:= 0 -> nemoszt(L1, K, L2) ; L2 = [X|L3], nemoszt(L1, K, L3) ). | ?- novo(1, 50, _L1), nemoszt(_L1, 2, _L2), nemoszt(_L2, 3, _L3), nemoszt(_L3, 5, L). L = [1,7,11,13,17,19,23,29,31,37,41,43,47,49] ? ; No | ?-

Prolog programok párhuzamos végrehajtása Néhány példa Mihelyst _L1 = [1|_] lesz, indulhat a következő cél: nemoszt(_L1,2_L2). A termelő és a fogyasztó (változó)függő ÉS kapcsolatban állnak. Egy hasonló struktúrájú program specializált végrehajtásában ésszerűnek látszik egy fifo buffer bevezetése a termelő és a fogyasztó rész közé, illetve indíthatunk párhuzamosan több fogyasztót, amennyiben az összes megoldást gyűjtjük, vagy bármelyik megfelel. lásd még Prolog jegyzet 174. oldal, egyszerűsített Hamming feladat novonemoszt2nemoszt3 … 7,6,5,4,3,2,1… 7,5,3,1… 7,5,1

Prolog programok párhuzamos végrehajtása Néhány példa Keresési feladat points_connected(A,B) :- edge(A,X), points_connected(X,B). Az edge által adott választási pontban adódó lehetőségeket párhuzamosan hajtjuk végre, ezt vagy-párhuzamosságnak nevezzük. Kicsit összetettebb példa az [1] queens kódja. A párhuzamosságok típusairól részletesen a 2003-mas előadás anyagában írt Ludányi Zoltán.

Prolog programok párhuzamos végrehajtása Néhány példa

Prolog programok párhuzamos végrehajtása Egyéb kérdések Szorosan vagy lazán csatolt végrehajtás Lazán csatolt rendszerben nagyobb feladatokat éri meg szétosztani. Szorosan csatolt rendszer kevésbé skálázható, de már a személyi számítógépek ebbe az irányba fejlődnek. Egy ilyen rendszerben az operációs rendszerre támaszkodva, szálak vagy folyamatok létrehozásával használhatjuk ki a több processzort. A 'hétköznapi' grafikus eszközökben is szorosan csatolt párhuzamos végrehajtók jelennek meg (ps3), hatékony imperatív programozásukra jelenleg nincs bevált módszer.

Prolog programok párhuzamos végrehajtása Egyéb kérdések Implicit/explicit párhuzamosítás Explicit esetben a programozó adja meg a párhuzamosítás helyét és módját, pl fork/join primitívekkel, vagy szálakkal, kritikus szakaszokkal. Implicit esetben a végrehajtó/interpreter dönt az elágaztatásról. A logikai programozás nagy előnye, hogy forrásmódosítás nélküli (implicit) párhuzamos végrehajtása egyáltalán kivitelezhető. Imperatív nyelvek esetén ez igen izgalmas feladat. :)

Prolog programok párhuzamos végrehajtása Vagy-párhuzamosság Vagy-párhuzamosság Egy párhuzamos modellben több végrehajtóegység dolgozhat egy Prolog végrehajtás különböző részein. Egy nem dolgozó egységnek a scheduler (ütemező) keres új munkát a keresési fában. A megvalósítás egyik fő nehézségét az egy adott keresési ághoz tartozó, feltételes változókötések (conditional binding) kezelése jelenti. Egy keresési ágon dolgozó végrehajtónak egy saját környezettel kell rendelkeznie, amelyben az ő ágához tartozó változókötéseket látja. Ennek számos megoldása létezik, alapvetően három kritériumot támasztunk ezekkel szemben: 1. Egy új környezet létrehozása legyen konstans idejű. 2. Változó hozzáférése és kötése legyen konstans idejű. 3. Egy feldolgozóegység feladatváltása legyen konstans idejű. (..)

Prolog programok párhuzamos végrehajtása Vagy-párhuzamosság Ezekből egyszerre csak kettő elégíthető ki. Az Aurora rendszerben implementált Binding Arrays módszerrel a feladatváltás ideje a két környezetben eltérő változókötések számától fog lineárisan függeni. Minden feldolgozóegységhez egy binding array tartozik. A feltételes kötésű változók sorszámot kapnak, és kötéseik a kötési tömb megfelelő helyére kerülnek. A MUSE rendszer megvalósításában minden változókötés a feldolgozóegység saját vermében van, feladatváltáskor a felvett feladat vermének szükséges részét átmásolja a sajátjába.

Prolog programok párhuzamos végrehajtása Vagy-párhuzamosság

Prolog programok párhuzamos végrehajtása Vagy-párhuzamosság A teljes Prolog nyelv támogatása A Prolog szekvenciális végrehajtásának „látszatát” szeretnénk megtartani Tiszta logikai programoknál ez nem okoz gondot. Problémát jelentenek a vágók és az egyéb mellékhatásos hívások. Külön figyelmet kell szentelnünk az ún. spekulatív hívások ütemezésére: p(X, Y) :- q(X), !, r(Y). p(X, Y) :- g(X), h(Y).

Prolog programok párhuzamos végrehajtása Vagy-párhuzamosság Az Aurora rendszerről nagyon röviden Interface az engine és az ütemező között Több ütemező A keresési fa privát és publikus részei Mellékhatásos predikátumok kezelése (várakoztatás) Mellékhatásos predikátumok nem-szinkron változatai (asynchronous és cavalier) Az ütemező feladata a feldolgozókhoz munkákat rendelni, lehetőleg minimalizálva a környezetváltás költségét (távolságot a fában), növelve a granularitást (ne aprózza a munkát), illetve lehetőleg kerülve a spekulatív munkát.

Prolog programok párhuzamos végrehajtása Vagy-párhuzamosság A párhuzamos végrehajtás költségei A párhuzamos végrehajtás lehetőségének megteremtése a szekvenciális végrehajtásban is többletmunkát jelent. Az egyik konstans-idő kritérium megsértése többletmunkát jelent az adott helyen. Az Aurora és MUSE rendszerekben a feladatváltás költséges, a feladatváltásokat az ütemező kezeli, ezért a párhuzamos végrehajtásból adódó többletmunka igen nagy részéért az ütemező felelős, így az ütemező algoritmus kulcsfontosságú.

Prolog programok párhuzamos végrehajtása Vagy-párhuzamosság Ütemezési stratégiák Argonne ütemező Minden node-ban helyi információt tartalmaz (van-e alatta munka) a munkások eligazítására. Topmost dispatching Minden csomópontban egy bitmap tárolja hogy alatta melyik munkás dolgozik, ez fontos vágás esetén.

Prolog programok párhuzamos végrehajtása Vagy-párhuzamos ütemezők Manchester ütemező Egy munkáshoz a hozzá legközelebb eső munkát próbálja rendelni, a távolság mértéke az átírandó kötések száma Ez ismét topmost dispatching-ot eredményez. Itt is worker-bitmap.

Prolog programok párhuzamos végrehajtása Vagy-párhuzamos ütemezők Wavefront ütemező Egy wavefront struktúra tárolja a legfelső csomópontokat. Egy munkás ebben talál következő munkát. Egy csomópont feldolgozása után a hullámfront kiegészül a következő párhuzamos csomópontra.

Prolog programok párhuzamos végrehajtása Vagy-párhuzamos ütemezők MUSE ütemező Bottom-most dispatching, minor task-switches. Ha munkát kérnek egy munkástól, a teljes private részét felszabadítja. A fa minden ágához egy richnesst rendel, az ott található munka mennyiségét tükrözve.

Prolog programok párhuzamos végrehajtása Vagy-párhuzamos ütemezők Bristol ütemező [1]/4 Másik érv a bottom-most dispatching mellett: a spekulatív munka kezelésének lehetősége. Először mindig nem-spekulatív munkát választ A spekulatív munkát "óvatosan kezeli", balról jobbra keres egy spekulatív fában, a spekulatív munkák között egyenletesen osztja szét a munkásokat. Egy spekulatív fában dolgozó munkás néha körbenéz, hogy van-e már nem spekulatív munka (voluntary suspension). Mellékhatásos predikátumok, cut és commit kezelése...

Prolog programok párhuzamos végrehajtása 20 4 – Független és-párhuzamosság Független és-párhuzamosság fib(0,1). fib(1,1). fib(M,N) :-M1 is M - 1, fib(M1, N1), M2 is M - 2, fib(M2, N2), N is N1 + N2. A függetlenség felismerése elég bonyolult feladat: p(X,Y) :- r(X), s(Y). ?- p(Z,Z).

Prolog programok párhuzamos végrehajtása 21 4 – Független és-párhuzamosság A probléma négy megközelítése In/out módok meghatároztatása, például: p(+X,-Y) :- q(+X,-A), r(+X, -B), s(+A,+B,-Y). Worst-case fordítási idejű analízis Teljes futási idejű függőségnyilvántartás Hatékony középút teljes fordítási idejű és részleges futási idejű analízissel

Prolog programok párhuzamos végrehajtása 22 4 – Független és-párhuzamosság Intelligens visszalépés: ?- a, b, c, d. Ha b és c függetlenek és több megoldást adnak, c meghiúsulása esetén nem b-t, hanem a-t kell folytatnunk. Teljes Prolog nyelv támogatása: A mellékhatásos predikátumok itt is gondot okoznak, pl a fenti példában ha b mellékhatásos. Spekulatív számítás: q :- a, b. számításában a meghiúsulása a b -be fektetett munkát feleslegessé teszi.

Prolog programok párhuzamos végrehajtása 23 4 – Független és-párhuzamosság &-Prolog Prolog kompatibilis, de nyelvi kiegészítéseket ad. Egy bemenő prolog kódot analizál, és, ahol tudja, párhuzamosítja, majd egy PWAM nevű architektúrán futtatja. Egy egyszerű példa p(X,Y) :- q(X,Y), r(X), s(X).% Prolog p(X,Y) :- (ground(X) => q(X,Y) & r(X) & s(X) ).% &-Prolog p(X,Y) :- (ground(X) -> q(X,Y) & r(X) & s(X)% ‘=>’ kifejtése ; q(X,Y), r(X), s(X) ). p(X,Y) :-(ground(X) -> q(X,Y) & r(X) & s(X)% Részletesebb ; q(X,Y), (ground(X) => r(X) & s(X))% vizsgálattal ).

Prolog programok párhuzamos végrehajtása 24 4 – Független és-párhuzamosság

Prolog programok párhuzamos végrehajtása 25 4 – Független és-párhuzamosság Példák az elemzésre és fordításra matvecmul([Vect1|TVect],Vect2,[Res|TRes]) :- vecmul(Vect1,Vect2,Res), matvecmul(TVect,Vect2,TRes). matvecmul([Vect1|TVect],Vect2,[Res|TRes]) :- ( ground([Vect2,Vect1,TVect]), indep(Res,TRes) => vecmul(Vect1,Vect2,Res) & matvecmul(TVect,Vect2,TRes) ).

Prolog programok párhuzamos végrehajtása 26 4 – Független és-párhuzamosság Ha az elemző bizonyítani tudja, hogy a predikátum hívásakor az első két argumentum mindig ground és a harmadik szabad változó, akkor elhagyja a (felesleges) feltételvizsgálatot: matvecmul([Vect1|TVect],Vect2,[Res|TRes]) :- vecmul(Vect1,Vect2,Res) & matvecmul(TVect,Vect2,TRes). A PWAM megvalósításról [3] ad összefoglalást. A Parlog nyelv lehetőségeiről 2003-ban Ludányi Zoltán tartott előadást. (Vigyázat, itt a ',' és '&' jelentése fordított)

Prolog programok párhuzamos végrehajtása 27 5 – Függő és-párhuzamosság Függő és-párhuzamosság Változókötés függése Termelő és fogyasztó cél azonosítása Kétirányú kommunikációs csatorna produce(O, Out) :- Out = []. produce(N, Out) :- N > 0, N1 is N - 1, Out = [ferrari | Ms], produce(N1,Ms). consume([]). consume([ferrari | Ms]) :- go_ride_ferrari, consume(Ms). ?-produce(10, X), consume(X). A consume futása felfüggesztődik, amíg Ms nem kötött.

Prolog programok párhuzamos végrehajtása 28 5 – Függő és-párhuzamosság Kétirányú kommunikáció, coroutining produce(O, Out) :- Out = []. produce(N, Out) :- N > 0, N1 is N - 1, Out = [ferrari(Envelope) | Ms], spend(Envelope), produce(N1,Ms). consume([]). consume([ferrari(Envelope) | Ms]) :- Envelope = big_bucks, sell_ferrari_and_buy_beer, consume(Ms). spend(big_bucks). spend(small_bucks). ?-produce(10, X), consume(X).

Prolog programok párhuzamos végrehajtása 29 5 – Függő és-párhuzamosság Problémák a végrehajtáskor A fogyasztó nem köthet 'termelői' változót, fel kell függeszteni. Egyirányú kommunikáció esetén a helyzet a független esethez hasonló, csak a felfüggesztésekkel kell foglalkoznunk. Korutinos esetben problémát okoz a nemdeterminizmus. Három megoldást alkalmazhatunk: o Committed Choice (don't care): egy termelő és egy fogyasztó eredményt fogadunk el. A hívások “elkötelezik” (commit) magukat az egyik klózuk mellett kilépés előtt. (commit operátor ‘|’, hasonló a vágóhoz, de felfelé is vág) o Hagyjuk mindkét célt futni, amíg legfeljebb egy ágon sikeresek. o Minden kombináció kezelése.

Prolog programok párhuzamos végrehajtása 30 6 – Kombinált és-vagy párhuzamosság Kombinált és-vagy párhuzamosság Basic Andorra Model (Andorra-I) Az Aurora ütemezői használhatóak Nemdeterminisztikus cél nem indul el, amíg van determinisztikus, ezek párhuzamosan futnak. Lásd: Prolog jegyzet 192. oldal, 8.2. Ha már csak nemdeterminisztikus cél van, a legbaloldalibbra vagy- elágaztatás történik. Processzorcsoportok

Prolog programok párhuzamos végrehajtása 31 6 – Kombinált és-vagy párhuzamosság Extended Andorra Model és AKL Az AKL nyelv teljes explicit párhuzamosításra ad lehetőséget. Nemdeterminisztikus cél is futhat, amíg konzisztens marad a külső környezettel, egyébként felfüggesztődik. Ha már csak felfüggesztett cél van, minden termelt változókötéshez másolat jön létre a fogyasztókból. (non-deterministic promotion) p(X, Y) :- X = 2, m(Y). p(X, Y) :- X = 3, n(Y). q(X, Y) :- X = 3, t(Y). q(X, Y) :- X = 3, s(Y). r(Y) :- Y = 5. ?- p(X, Y), q(X, Y), r(Y).

Prolog programok párhuzamos végrehajtása 32 6 – Kombinált és-vagy párhuzamosság

Prolog programok párhuzamos végrehajtása 33 6 – Kombinált és-vagy párhuzamosság  Recompute - reuse dilemma, probléma a szekvenciális szemantikával  PEPSys modell: Hashing windows és timestamping Független és-szakaszokat meg kell jelölni Két és-párhuzamos célt futtat egyszerre, több esetén beágyaz És ágon belüli vagy elágazás esetén keresztszoroz A két ág megoldásai együttesen léteznek a memóriában, ezeket állnak párba újonnan érkező megoldásokkal, de bizonyos megoldások visszalépés áldozatai lehetnek, így néha újraszámolódnak, néha újrafelhasználódnak... Nem is valósították meg :/  AO-WAM: Binding arrays, base array, cross-product nodes...

Prolog programok párhuzamos végrehajtása Végszó Különösen érdekesnek találtam... [1]/7: Exploiting Or-parallelism in Optimisation Problems Irodalom: [1] - Parallel Execution of Prolog Programs: A Survey. Gopal Gupta, Khayri A. M. Ali and Mats Carlsson, Manuel V. Hermenegildo [2] - Various articles in: Contributions To Or-Parallel Logic Programming, Péter Szeredi 1997 [3] - The &-Prolog system: Exploiting Independent And-Parallelism, M. V. Hermenegildo, K. J. Greene