PVM programok írása Kozsik Tamás 2001-2004.

Slides:



Advertisements
Hasonló előadás
4. alkalom – Hálózat Kezelés
Advertisements

A hálózat működése 1. A DHCP és az APIPA
Tananyag: konzultáció
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,
Hálózati és Internet ismeretek
Operációs Rendszerek I.
Az operációs rendszer.
avagy a hálózatok hálózata
Operációs rendszerek 1. Takács Béla
PVM programok írása. Hasznos információk
Programozás alapjai A programozás azt a folyamatot jelenti, melynek során a feladatot a számítógép számára érthető formában írjuk le. C++, Delphi, Java,
Programozási Nyelvek (C++) Gyakorlat Gyak 01.
LINUX/UNIX PARANCSOK.
Bevezetés a Java programozásba
10. előadás (2004. április 20.) A C előfordító (folytatás) Néhány hasznos compiler opció Egy tanulságos könyvtári függvény Változó hosszúságú argumentum.
11. előadás (2005. május 10.) A make segédprogram Alacsony szintű műveletek és bitmezők Fájl, katalógus rendszer hívások 1.
1 Hálózati Operációs Rendszerek gyakorlat Bevezető Előadó: Bilicki Vilmos
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Fejlett Programozási Technológiák II. Világos Zsolt 1. gyakorlat.
Fejlett Programozási Technológiák II. Világos Zsolt 12. gyakorlat.
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
Ember László Damn Small Linux Microsoft VPC környezetben.
Az operációs rendszerek
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
PVM programok írása Kozsik Tamás
PVM programok írása. Hasznos információk
C++ alapok, harmadik óra
Operációs rendszerek gyakorlat
Delphi programozás 8. ELŐADÁS ADO ActiveX Data Objects.
1 Operációs rendszerek Signal kezelés. 2 SIGNAL kezelés Egyszerű folyamatok közötti kommunikációs (IPC – Inter Process Communication) megoldás. A signal.
1 Operációs rendszerek A UNIX védelmi rendszere. 2 Illetéktelen hozzáférés megakadályozása: az egyes felhasználók adataihoz, az operációs rendszer adataihoz,
Windows Server 2012 Kiadások, licencelés, lehetőségek
Mikrovezérlők, perifériák laboratóriumi gyakorlat 3. óra szeptember 18. Mingesz Róbert v
Operációs rendszer.
Operációs rendszerek gyakorlat 1. Bevezetés Vakulya Gergely.
Hálózat kiépítésével lehetőségünk nyílik más számítógépek erőforrásainak használatára. Osztott háttértár használat: egy számítógép merevlemezének megosztásával.
1.3. Pascal program felépítése Az els ő program. Program ; … Begin … End. Program fej Deklarációs rész Végrehajtó rész.
Programozási nyelvek.
A Magyar ClusterGRID projekt Stefán Péter tudományos munkatárs NIIF Iroda
Készítette: Csíki Gyula
Az operációs rendszerek feladata, fajtái, felépítése
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Neuroszimulátorok tesztelése a DemoGrid rendszeren MTA KFKI Részecske- és Magfizikai Kutatóintézet Biofizikai Osztály
Bevezetés az operációs rendszerek világába TMG SZK.
Komoróczy Tamás 1 Java programozási nyelv A nyelv alapjai.
Fontos információk.
A gyakorlatok munkakörnyezete
Illés Zoltán ELTE Informatikai Kar
Bevezetés az informatikába 4. előadás
Objektum orientált programozás 3. Függvények Nagy Szilvia.
Az Internet alkalmazásai
Objektum orientált programozás
Automatizálási folyamatok az SQL 2012-ben
A Visual Basic nyelvi elemei
Felhő PC demonstráció Gergely Márk MTA SZTAKI Laboratory of Parallel and Distributed Systems
Az operációs rendszer feladata
Illés Zoltán ELTE Informatikai Kar
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
CUDA C/C++ programozás CUDA C bevezetés A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Java web programozás 5..
Bevezetés az informatikába 5. előadás
2. Operációs rendszerek.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Piramis klaszter rendszer
Készítette: Rummel Szabolcs Elérhet ő ség: Linux kezelése.
IT ALAPFOGALMAK OPERÁCIÓS RENDSZEREK.
A CLIPS keretrendszer
PVM programok írása.
Hálózati struktúrák, jogosultságok
Előadás másolata:

PVM programok írása Kozsik Tamás

PVM - Parallel Virtual Machine Szoftver rendszer, mellyel hálózatba kapcsolt számítógépeket egyetlen nagy párhuzamos számítógépként lehet látni és kezelni. Kezdet: Oak Ridge National Laboratory A párhuzamos programok írásának egyik szabványává vált. A publikus változata ingyen elérhető. Sok hardver gyártó biztosítja a saját gépére optimalizált, gyorsabb változatát is.

Felépítése A rendszerben vannak programok, amelyek a felhasználó által írt párhuzamos program futtatását biztosítják. –PVM démon –PVM konzol Vannak C, illetve Fortran77 könyvtárak a párhuzamos programok megírásához.

Használata PVM rendszerbe kapcsolhatunk több - akár különböző típusú - számítógépet. A rendszer a rajta futó programok szempontjából ezek után egy nagy, elosztott memóriájú virtuális számítógépnek látszik. Különböző processzorokon, különböző programokat indíthatunk el. A szinkronizációt és a kommunikációt a PVM könyvtári függvényeivel oldhatjuk meg.

A párhuzamos programok Taszkokból (folyamatokból) épülnek fel Taszk = UNIX/Windows/… program A taszkok a pvm könyvtárat használják –C, C++, Fortran77 A kommunikáció a pvm démonon keresztül történik

Ada taszk vs. PVM Ada task (vagy Java thread): végrehajtási szál –egy programon (processzen) belül –szimulált párhuzamosság, időosztásos ütemezés –light-weight –közös memórián keresztüli kommunikáció, illetve randevú PVM: processz –akár valódi párhuzamosság is, több processzoron –heavy-weight –nincs közös memória, kommunikációs csatornát használunk

Működés Számítógépek hálózatba szervezve A felhasználó jogosult bármelyik gépre bejelentkezni Minden gépen futtat egy pvm démont És futtatja a taszkokat, melyek a démonokon keresztül lépnek egymással kapcsolatba –Egy gépen több taszk is futhat

Lehetőségeink Saját gépünk, akár Linux, akár Windows alatt: elfajuló eset, de fejlesztéshez jó Egyetemi hálózat: nem javasolt –túl sok erőforrást kötne le Siva - 16 processzoros „igazi” párhuzamos számítógép: beteges Nyelvi labor: 40 (28) db Linux-os PC hálózatba szervezve: ezen teszteljünk, ezen kell bemutatni (pandorás jelszó…)

Nyelvi labor Programozási nyelvek labor (00-803) nyl01.nylab.inf.elte.hu nyl02.nylab.inf.elte.hu … nyl40.nylab.inf.elte.hu Hálózaton keresztül használható: master.nylab.inf.elte.hu

Siva PowerXplorer, a Parsytech cégtől 16 db Motorola 601-es PowerPC processzor, plussz 16 db T400-as transputer Minden node-on 8+1 mega RAM Az augusta géphez van kötve, onnan használható 4 dobozból áll, amik közül időnként néhány bekrepál (most 2 doboz megy) Érdemes kipróbálni...

Saját gép Viszonylag egyszerűen hazavihető és feltelepíthető Linux - triviális, Windows picit macerásabb Fejlesztéshez ez is jó Egy processzoron/gépen fut minden taszk Teszteléshez nem elég! –A tesztelés egy része itt is végezhető

Az első program „hello” alkalmazás Két taszk: hello és hello_other Két különálló C program, külön-külön lefordítva A főprogram a hello Elindítja a hello_other-t a PVM-en keresztül

hello.c #include #include "pvm3.h" int main() { int tid; int num; printf("i'm t%x\n", pvm_mytid()); pvm_spawn( "hello_other", (char**)0, 0, "", 1, &tid); pvm_recv(-1, -1); pvm_upkint(&num,1,1); printf("from t%x: %d\n", tid, num); pvm_exit(); return 0; }

hello_other.c #include "pvm3.h" int main() { int tid = pvm_mytid(); int ptid = pvm_parent(); pvm_initsend(PvmDataDefault); pvm_pkint(&tid,1,1); pvm_send(ptid, 1); pvm_exit(); return 0; }

Futtatás pvm pvm> spawn -> hello spawn -> hello [1] 1 successful t40002 pvm> [1:t40002] i'm t40002 [1:t40002] from t40003: [1:t40003] EOF [1:t40002] EOF [1] finished pvm>

Újabb host felvétele a virtuális gépbe pvm> add nyl14 add nyl14 1 successful HOST DTID nyl pvm> conf conf 2 hosts, 1 data format HOST DTID ARCH SPEED DSIG nyl LINUX x nyl LINUX x pvm> spawn -> hello

Újabb futtatás conf 2 hosts, 1 data format HOST DTID ARCH SPEED DSIG nyl LINUX x nyl LINUX x pvm> spawn -> hello spawn -> hello [1] 1 successful t80001 pvm> [1:t40002] EOF [1:t80001] i'm t80001 [1:t80001] from t40002: [1:t80001] EOF [1] finished pvm>

Egy példaprogram megszerzése Bárki hozzájuthat a hello példaprogramhoz a gyakorlat honlapjáról: Innen letölthető a forrás és a Makefile.aimk, aminek segítségével le lehet fordítani Van ott egy másik, ettől picit eltérő hello program is...

hello.c #include #include "pvm3.h" int main() { int cc, tid; char buf[100]; printf("i'm t%x\n", pvm_mytid()); cc = pvm_spawn( "hello_other", (char**)0, 0, "", 1, &tid); if (cc == 1) { cc = pvm_recv(-1, -1); pvm_bufinfo(cc, (int*)0, (int*)0, &tid); pvm_upkstr(buf); printf("from t%x: %s\n", tid, buf); } else printf("can't start hello_other\n"); pvm_exit(); exit(0); }

hello_other.c #include "pvm3.h" int main(){ int ptid; char buf[100]; pvm_mytid(); ptid = pvm_parent(); strcpy(buf, "hello, world from other"); pvm_initsend(PvmDataDefault); pvm_pkstr(buf); pvm_send(ptid, 1); pvm_exit(); exit(0); }

Makefile.aimk # Makefile for PVM targets […] VPATH = $(SDIR) # it could be modified.... BINS = hello hello_other FILES = *.c *.h Makefile.aimk NAME = hello default: $(BINS) % : %.c $(CC) $(CFLAGS) -o $< […] # user's targets hello: hello.c hello_other: hello_other.c

Ez egy jó kis Makefile.aimk # Makefile.aimk - PVM programok fordításához # # Használat: # Ezt a Makefile-t egy tetszőleges... #... BINS= hello hello_other

Mit, hol Programírás, fordítás master.nylab.inf.elte.hu Programok futtatása, tesztelése nyl??.nylab.inf.elte.hu

Fordítás Az aimk parancs a Makefile.aimk fájl alapján hívogatja a fordítót Az aimk parancsnak többféle argumentum adható aimk aimk links

A pvm első használata előtt … létre kell hozni egy könyvtárszerkezetet A felhasználó „home”-könyvtárában: pvm3 pvm3/bin pvm3/bin/LINUX Itt keresi a pvm rendszer a futtatható állományokat

Egyszer kell megcsinálni: master:~$ ssh nyl02.nylab.inf.elte.hu mkdir pvm3 mkdir pvm3/bin mkdir pvm3/bin/LINUX

Utána mindig ezt kell csinálni cd pvm3/src/hello ls Makefile.aimk hello.c hello_other.c aimk making in LINUX/ for LINUX cc -I/usr/lib/pvm3/include -Ddebug -o hello../hello.c - L/usr/lib/pvm3/lib/LINUX -lpvm3 cc -I/usr/lib/pvm3/include -Ddebug -o hello_other../hello_other.c - L/usr/lib/pvm3/lib/LINUX -lpvm3

Ezt projektenként egyszer kell ls LINUX Makefile.aimk hello.c hello_other.c ls LINUX hello hello_other aimk links making in LINUX/ for LINUX cd /h/teacher/kto/pvm3/bin/LINUX ln -s /h/teacher/kto/pvm3/src/hello/LINUX/hello hello ln -s /h/teacher/kto/pvm3/src/hello/LINUX/hello_other hello_other ls ~/pvm3/bin/LINUX/ hello hello_other

Mi mire való Az „aimk” parancs –lefordítja a forrásokat, –elkészíti a futtatható állományokat, és –lepakolja az aktuális könyvtár LINUX alkönyvtárában Az „aimk links” parancs szimbolikus linkeket definiál –a „BINS” alapján (Makefile.aimk) –a futtatható állományok eléréséhez –a ~/pvm3/bin/LINUX könyvtárból

aimk links Ha beállítom a Makefile.aimk-ban a BINS- t, akkor –utána fordítok „aimk”-val, és –ezután hívom az „aimk links” parancsot Ha nem nyúlok a BINS-hez, akkor ezek után csak az „aimk” parancs kell

Még egy megjegyzés Az „aimk links” parancs legelső meghívása során létrejön a szükséges könyvtárstruktúra is... pvm3 pvm3/bin pvm3/bin/LINUX

Futtatás Az nyl??.nylab.inf.elte.hu gépekről Be kell jelentkezni ssh-val valamelyikre Ott lehet elindítani a pvm konzolt, és azon belül a programot… Az azonosítás Kerberos segítségével történik –Kerberos ticket-et kapunk a bejelentkezéskor

Kerberos Amikor a master-re belépünk, kapunk egy Kerberos ticket-et Ez segít bennünket bejelentkezni jelszó megadása nélkül az nyl?? gépekre A pvm rendszernek is szüksége van a ticket- re ahhoz, hogy felépítse a virtuális gépet –bejelentkezik minden host-ra ssh-val, és elindítja ott a pvm démont

Ha lejár a ticket… Elveszti az érvényességét (3 óra elteltével) Utána nem lehet már bejelentkezni vele Meg lehet hosszabbítani a ticket-et Manapság ez a „ kinit –f ” paranccsal megy –ami jelszót kér (pandorás jelszót) –régebben ehhez a „ kauth –f ” kellett

Jó tudni A pandáról is elérhető az a home-könyvtár, ami a nyelvi labor gépeiről látszik. /mnt/cluster/teacher/kto Ha diák lennék: /mnt/cluster/k/kto

PVM indítása Legegyszerűbb, ha belépünk a PVM-konzol programba, és onnan futtatunk. Ez automatikusan elindítja a virtuális gépet is, azaz a PVM démont. Kilépés és a virtuális gép leállítása: halt pvm> halt halt Terminated

PVM démon A virtuális gép (démon) független a konzoltól, anélkül is elindítható Könnyű megfelejtkezni róla, és akkor csak eszi az erőforrásokat Még nagyobb a baj, ha bent ragad a programunk (pl. mert elszállt) –Különösen a Siván, mert ott a gépet tartjuk lekötve, más egyáltalán nem tud dolgozni rajta Legközelebb el sem indul a pvm démon, leáll hibával

Bentragadt PVM program Figyeljük, hogy minden taszkunk rendesen leállt-e Ha nem, lőjük ki a bent ragadtakat Ha a pvm démont nem tudjuk leállítani, lőjük ki azt is Töröljük le a /tmp/pvm. /sock fájlt ls /tmp/pvm.11700/ log sock id uid=11700(kto) gid=10713(aszt) groups=10713(aszt)

Bentragadt PVM program Figyeljük, hogy minden taszkunk rendesen leállt-e Ha nem, lőjük ki a bent ragadtakat Ha a pvm démont nem tudjuk leállítani, lőjük ki azt is Töröljük le a /tmp/pvm.11700/sock fájlt ls /tmp/pvm.11700/ log sock id uid=11700(kto) gid=10713(aszt) groups=10713(aszt)

Ideiglenes kilépés a konzolból A quit paranccsal: a démon, azaz a virtuális gép fut tovább pvm> quit quit Console: exit handler called pvmd still running.

Virtuális gép magában A démon is elindítható magában, konzol nélkül pvmd & [1] 627 /tmp/filejgp9rM

Ilyenkor leállítás Visszalépni/belépni a konzolba és onnan halt paranccsal ki. pvm pvmd already running. pvm> halt halt Terminated

Legfontosabb PVM függvények pvm_mytid()pvm_parent() pvm_spawn()pvm_exit() pvm_initsend()pvm_pkint()pvm_send() pvm_upkint() pvm_recv() pvm_nrecv() pvm_mcast()

Üzenetküldés initsend, pk*, send –pkint, pkdouble… Egy üzenetben sok adat is elküldhető –Több pk* hívás lehetséges –Egy pk hívással egy sorozat adatot lehet becsomagolni az üzenetbe (tömb, mátrix egy oszlopa) Tipikus hiba: egy üzenetet szétdarabolsz

Üzenet fejléce Minden üzenet tartalmaz az adatok mellett egy fejlécet is Üzenettípusok definiálása pvm_send( címzett, fejléc ); A fogadásnál kereshetsz az üzenetsorban a küldő és a fejléc alapján

Üzenetfogadás Üzenetsor (postaláda) Minden folyamatnak van egy üzenetsora pvm_recv( küldő, fejléc ); A -1 azt jelenti, hogy „bármi” pvm_recv( -1,-1 );

Az üzenetfogadás fajtái Blokkoló –pvm_recv –a fogadó folyamat blokkolódik az üzenet megérkezéséig Nem blokkoló –pvm_nrecv –non-blocking receive –ha van üzenet, beolvassuk, egyébként skip

Multicast Ha ugyanazt az üzenetet több folyamatnak is el szeretnénk küldeni pvm_mcast

Hasznos parancsok a PVM konzolban spawnprogram indítása addprocesszorok megfogása confmegfogott processzorok psfutó folyamatok haltleállítás quitideiglenes kilépés

add, conf (1) pvm pvm> conf conf 1 host, 1 data format HOST DTID ARCH SPEED DSIG nyl LINUX x pvm>

add, conf (2) pvm> add nyl02 add nyl02 1 successful HOST DTID nyl pvm> conf conf 2 hosts, 1 data format HOST DTID ARCH SPEED DSIG nyl LINUX x nyl LINUX x pvm>

add, conf (3) pvm> add nyl03 nyl04 nyl05 add nyl03 nyl04 nyl05 3 successful HOST DTID nyl03 c0000 nyl nyl pvm>

add, conf (4) pvm> add nyl12 add nyl12 0 successful HOST DTID nyl12 Can't start pvmd pvm> Nem felejtetted el a kauth-ot?

hosts Készíthetsz egy fájlt, amiben felsorolod azokat a gépeket, amelyeket meg akarsz fogni Ezt a fájlt a konzol indításakor kell átadni paraméterként Nem kell add-dal fogdosni össze a processzorokat

hosts példa cat hosts nyl01 nyl02 nyl03 pvm hosts pvm> conf conf 3 hosts, 1 data format HOST DTID ARCH SPEED DSIG nyl LINUX x nyl LINUX x nyl03 c0000 LINUX x

A beadandó programokról... Sok gépen futtatva kell bemutatni Sok gépen végzett tesztelést kell dokumentálni A tesztelésnek az algoritmus műveletigényéről kell szólnia –pl. “n adat n processzoron O(log n) időben” Példadokumentáció és példaprogramok a gyakorlat honlapján (nem ugyanaz, mint a beadandó feladat!) Zárthelyi!!!

Doksik man pvm_spawn (stb.)