1 / 43

PVM programok írása

PVM programok írása. Hasznos információk. http://kto.web.elte.hu/ http://lovei.web.elte.hu/. 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.

phiala
Download Presentation

PVM programok írása

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PVM programok írása

  2. Hasznos információk • http://kto.web.elte.hu/ • http://lovei.web.elte.hu/

  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: 1989 - 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.hunyl02.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: 262147 [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 blade01 80000 pvm> conf conf 2 hosts, 1 data format HOST DTID ARCH SPEED DSIG atlasz 40000 LINUX64 1 0x00408c41 blade01 80000 LINUX64 1000000 0x00408c41

  16. Újabb futtatás 2 hosts, 1 data format HOST DTID ARCH SPEED DSIG atlasz 40000 LINUX64 1 0x00408c41 blade01 80000 LINUX64 1000000 0x00408c41 pvm> spawn -> hello spawn -> hello [1] 1 successful t80001 pvm> [1:t40002] EOF [1:t80001] i'm t40001 [1:t80001] from t80002: 262146 [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: melinda@m:~$ ssh tothmelinda@caesar.elte.hu tothmelinda@login03:~$ ssh atlasz.elte.hu tothmelinda@atlasz:~$ mkdir pvm3 tothmelinda@atlasz:~$ mkdir pvm3/bin tothmelinda@atlasz:~$ mkdir pvm3/bin/LINUX64 tothmelinda@atlasz:~$

  21. Utána mindig ezt kell csinálni tothmelinda@atlasz:~$ cd pvm3/src/hello tothmelinda@atlasz:~/pvm3/src/hello$ ls Makefile.aimk hello.c hello_other.c tothmelinda@atlasz:~/pvm3/src/hello$ 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 tothmelinda@atlasz:~/pvm3/src/hello$

  22. Utána mindig ezt kell csinálni (2): tothmelinda@atlasz:~/pvm3/src/hello$ ls LINUX Makefile.aimk hello.c hello_other.c tothmelinda@atlasz:~/pvm3/src/hello$ ls LINUX hello hello_other tothmelinda@atlasz:~/pvm3/src/hello$ 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 tothmelinda@atlasz:~/pvm3/src/hello$ ls ~/pvm3/bin/LINUX/ hello hello_other tothmelinda@atlasz:~/pvm3/src/hello$ 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 tothmelinda@atlasz:~$

  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 kto@nyl01:~$ ls /tmp/pvm.11700/ log sock kto@nyl01:~$ id uid=11700(kto) gid=10713(aszt) groups=10713(aszt)‏ kto@nyl01:~$

  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 tothmelinda@atlasz:~$ ls /tmp/pvmd.11700 tothmelinda@atlasz:~$ id uid=11700(tothmelinda) gid=100(users) groups=100(users),8291(pvm) tothmelinda@atlasz:~$

  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. tothmelinda@atlasz:~$

  28. Ilyenkor leállítás • Visszalépni/belépni a konzolba és onnan halt paranccsal ki. tothmelinda@atlasz:~$ pvm pvmd already running. pvm> halt halt Terminated tothmelinda@atlasz:~$

  29. tothmelinda@atlasz:~/pvm3/proba/hello$ cd LINUX/ tothmelinda@atlasz:~/pvm3/proba/hello/LINUX$ ls hello hello_other tothmelinda@atlasz:~/pvm3/proba/hello/LINUX$ pvm pvm> quit quit Console: exit handler called pvmd still running. tothmelinda@atlasz:~/pvm3/proba/hello/LINUX$./hello i'm t40002 from t40003: 262147 tothmelinda@atlasz:~/pvm3/proba/hello/LINUX$ tothmelinda@atlasz:~/pvm3/proba/hello/LINUX$ pvm pvmd already running. pvm> halt halt Terminated tothmelinda@atlasz:~/pvm3/proba/hello/LINUX$

  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 • 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)‏ tothmelinda@atlasz:~$ pvm pvm> conf conf 1 host, 1 data format HOST DTID ARCH SPEED DSIG Atlasz 40000 LINUX64 1 0x00408c41 pvm>

  38. add, conf (2)‏ pvm> add blade02 add blade02 1 successful HOST DTID blade02 80000 pvm> conf conf 2 hosts, 1 data format HOST DTID ARCH SPEED DSIG atlasz 40000 LINUX64 1 0x00408c41 blade02 80000 LINUX64 1000000 0x00408c41 pvm>

  39. add, conf (3)‏ pvm> add blade03 blade04 blade05 add blade03 blade04 blade05 3 successful HOST DTID blade03 c0000 blade04 100000 blade05 140000 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 tothmelinda@atlasz:~$ cat hosts blade01 … blade14 tothmelinda@atlasz:~$ pvm hosts pvm> conf conf 15 hosts, 1 data format HOST DTID ARCH SPEED DSIG atlasz 40000 LINUX64 1000 0x00408c41 blade01 80000 LINUX64 1000 0x00408c41 ... blade14 1c0000 LINUX64 1000 0x00408c41

  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!!!

More Related