Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
PVM programok írása
2
Hasznos információk
3
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.
4
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.
5
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ényekkel oldhatjuk meg.
6
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
7
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
8
Hálózat Programozási nyelvek labor (00-803)
nyl01.nylab.inf.elte.hu nyl02.nylab.inf.elte.hu … nyl40.nylab.inf.elte.hu …
9
Hálózat ATLASZ CAESAR.ELTE.HU → ATLASZ.ELTE.HU blade01 ... blade14
10
Saját gép Viszonylag egyszerűen hazavihető és feltelepíthető
Linux – triviális(pvm, pvm-dev), Windows picit macerásabb Fejlesztéshez ez is jó Egy (több) processzoron/gépen fut minden taszk Teszteléshez nem elég! A tesztelés egy része itt is végezhető
11
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
12
hello.c #include <stdio.h> #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; }
13
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; }
14
Futtatás tothmelinda@atlasz:~/pvm3/src/hello0$ 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>
15
Újabb host felvétele a virtuális gépbe
pvm> add blade01 add nyl14 1 successful HOST DTID blade pvm> conf conf 2 hosts, 1 data format HOST DTID ARCH SPEED DSIG atlasz LINUX x00408c41 blade LINUX x00408c41
16
Újabb futtatás 2 hosts, 1 data format HOST DTID ARCH SPEED DSIG
atlasz LINUX x00408c41 blade LINUX x00408c41 pvm> spawn -> hello spawn -> hello [1] 1 successful t80001 pvm> [1:t40002] EOF [1:t80001] i'm t40001 [1:t80001] from t80002: [1:t80001] EOF [1] finished
17
hello.c #include <stdio.h> #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); }
18
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); }
19
Makefile.aimk # A lefordítandó programok nevei (szóközzel elválasztott felsorolás) BINS = hello hello_other
20
Egyszer kell megcsinálni:
ssh ssh atlasz.elte.hu mkdir pvm3 mkdir pvm3/bin mkdir pvm3/bin/LINUX64
21
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
22
Utána mindig ezt kell csinálni (2):
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/ pvm pvm> spawn -> hello
23
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
24
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) Legközelebb el sem indul a pvm démon, leáll hibával
25
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.<id>/sock fájlt ls /tmp/pvm.11700/ log sock id uid=11700(kto) gid=10713(aszt) groups=10713(aszt)
26
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/pvmd.11700 id uid=11700(tothmelinda) gid=100(users) groups=100(users),8291(pvm)
27
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.
28
Ilyenkor leállítás Visszalépni/belépni a konzolba és onnan halt paranccsal ki. pvm pvmd already running. pvm> halt halt Terminated
29
Console: exit handler called pvmd still running. i'm t40002
cd LINUX/ ls hello hello_other pvm pvm> quit quit Console: exit handler called pvmd still running. i'm t40002 from t40003: pvmd already running. pvm> halt halt Terminated
30
Legfontosabb PVM függvények
pvm_mytid() pvm_parent() pvm_spawn() pvm_exit() pvm_initsend() pvm_pk*() pvm_send() pvm_upk*() pvm_recv()
31
Üzenetküldés initsend, pk*, send Egy üzenetben sok adat is elküldhető
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
32
Ü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
33
Ü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);
34
Az üzenetfogadás fajtái
„Szinkron” pvm_recv a fogadó folyamat blokkolódik az üzenet megérkezéséig „Aszinkron” pvm_nrecv non-blocking receive ha van üzenet, beolvassuk, egyébként skip
35
Multicast Ha ugyanazt az üzenetet több folyamatnak is el szeretnénk küldeni pvm_mcast
36
Hasznos parancsok a PVM konzolban
spawn program indítása add processzorok megfogása conf megfogott processzorok ps futó folyamatok halt leállítás quit ideiglenes kilépés
37
add, conf (1) pvm> conf conf 1 host, 1 data format
pvm pvm> conf conf 1 host, 1 data format HOST DTID ARCH SPEED DSIG Atlasz LINUX x00408c41 pvm>
38
add, conf (2) pvm> add blade02 add blade02 1 successful HOST DTID
pvm> conf conf 2 hosts, 1 data format HOST DTID ARCH SPEED DSIG atlasz LINUX x00408c41 blade LINUX x00408c41 pvm>
39
add, conf (3) pvm> add blade03 blade04 blade05
3 successful HOST DTID blade03 c0000 blade blade pvm>
40
add, conf (4) pvm> add blade16 add blade16 0 successful HOST DTID
blade16 No such host pvm>
41
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
42
hosts példa blade01 … blade14 pvm> conf conf
cat hosts blade01 … blade14 pvm hosts pvm> conf conf 15 hosts, 1 data format HOST DTID ARCH SPEED DSIG atlasz LINUX x00408c41 blade LINUX x00408c41 ... blade14 1c LINUX x00408c41
43
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” Géptermi zárthelyi!!!
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.