1 / 48

PVM programok írása

PVM programok írása. Kozsik Tamás kto @elte.hu http://kto.web.elte.hu/ 2001-2003. 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

jui
Télécharger la présentation

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 Kozsik Tamás kto@elte.hu http://kto.web.elte.hu/ 2001-2003.

  2. 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.

  3. 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.

  4. 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.

  5. 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

  6. 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

  7. 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 • Grid (-: 40 (28) Linux-os PC hálózatba szervezve: ezen teszteljünk, ezen kell bemutatni

  8. Grid • Programozási nyelvek labor (00-803) • nyl01.nylab.inf.elte.hunyl02.nylab.inf.elte.hu…nyl40.nylab.inf.elte.hu • Hálózaton keresztül használható • pandora.inf.elte.hu • jelenleg panda.inf.elte.hu

  9. 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... • vlsoft@heureka.inf.elte.hu

  10. 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ő

  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 kto@nyl02:~/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 nyl14 add nyl14 1 successful HOST DTID nyl14 80000 pvm> conf conf 2 hosts, 1 data format HOST DTID ARCH SPEED DSIG nyl02 40000 LINUX 1000 0x00408841 nyl14 80000 LINUX 1000 0x00408841 pvm> spawn -> hello

  16. Újabb futtatás conf 2 hosts, 1 data format HOST DTID ARCH SPEED DSIG nyl02 40000 LINUX 1000 0x00408841 nyl14 80000 LINUX 1000 0x00408841 pvm> spawn -> hello spawn -> hello [1] 1 successful t80001 pvm> [1:t40002] EOF [1:t80001] i'm t80001 [1:t80001] from t40002: 262146 [1:t80001] EOF [1] finished pvm>

  17. Egy példaprogram megszerzése • Bárki hozzájuthat a hello példaprogramhoza gyakorlat honlapjáról: http://kto.web.elte.hu/oktatas/parhgyak/ • 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...

  18. 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); }

  19. 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); }

  20. 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

  21. Egyszer kell megcsinálni: pandora:~$ ssh nyl02.nylab kto@nyl02:~$ mkdir pvm3 kto@nyl02:~$ mkdir pvm3/bin kto@nyl02:~$ mkdir pvm3/bin/LINUX kto@nyl02:~$

  22. Utána mindig ezt kell csinálni pandora:~$ kauth -f kto@INF.ELTE.HU's Password: pandora:~$ ssh nyl02.nylab kto@nyl02:~$ kauth -f kto@INF.ELTE.HU's Password: kto@nyl02:~$ cd pvm3/src/hello kto@nyl02:~/pvm3/src/hello$ ls Makefile.aimk hello.c hello_other.c kto@nyl02:~/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 kto@nyl01:~/pvm3/src/hello$

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

  24. Jó tudni • A pandoráról is elérhető az a home-könyvtár, ami a nyelvi labor gépeiről látszik. (A pandáról ez nem feltétlenül működik.)/h/mnt/lovarda/teacher/kto • Ha diák lennék:/h/mnt/lovarda/k/kto

  25. 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 kto@nyl01:~$

  26. 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

  27. 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:~$

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

  29. 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. kto@nyl01:~$

  30. Virtuális gép magában • A démon is elindítható magában, konzol nélkül kto@nyl01:~$ pvmd & [1] 627 kto@nyl01:~$ /tmp/filejgp9rM kto@nyl01:~$

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

  32. 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()

  33. Ü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

  34. Ü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

  35. Ü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);

  36. 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

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

  38. 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

  39. add, conf (1) kto@nyl01:~$ pvm pvm> conf conf 1 host, 1 data format HOST DTID ARCH SPEED DSIG nyl01 40000 LINUX 1000 0x00408841 pvm>

  40. add, conf (2) pvm> add nyl02 add nyl02 1 successful HOST DTID nyl02 80000 pvm> conf conf 2 hosts, 1 data format HOST DTID ARCH SPEED DSIG nyl01 40000 LINUX 1000 0x00408841 nyl02 80000 LINUX 1000 0x00408841 pvm>

  41. add, conf (3) pvm> add nyl03 nyl04 nyl05 add nyl03 nyl04 nyl05 3 successful HOST DTID nyl03 c0000 nyl04 100000 nyl05 140000 pvm>

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

  43. 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

  44. hosts példa kto@nyl01:~$ cat hosts nyl01 nyl02 nyl03 kto@nyl01:~$ pvm hosts pvm> conf conf 3 hosts, 1 data format HOST DTID ARCH SPEED DSIG nyl01 40000 LINUX 1000 0x00408841 nyl02 80000 LINUX 1000 0x00408841 nyl03 c0000 LINUX 1000 0x00408841

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

  46. Várható változások • A Grid-es infrastruktúra fejlesztése • Ütemező telepítése

  47. Doksik • man pvm_spawn (stb.) • http://www.elte.hu/~szamcsi/ work/pvm/pvm_2_ToC.html • http://www.inf.elte.hu/valerie/doc/pvm • http://www.inf.elte.hu/valerie/shiva • http://people.inf.elte.hu/hz/parh/parhprg.html • http://kto.web.elte.hu/oktatas/parhgyak/

More Related