1 / 58

PVM programok írása

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

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

  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ényeivel 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. 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

  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. 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ó…)

  9. Nyelvi labor • 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ó: master.nylab.inf.elte.hu

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

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

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

  13. 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; }

  14. 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; }

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

  16. Ú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

  17. Ú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>

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

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

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

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

  22. Ez egy jó kis Makefile.aimk • http://lovei.web.elte.hu/pp/pvm/ # Makefile.aimk - PVM programok fordításához # # Használat: # Ezt a Makefile-t egy tetszőleges ... # ... BINS= hello hello_other

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

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

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

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

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

  28. Ezt projektenként egyszer kell kto@master:~/pvm3/src/hello$ ls LINUX Makefile.aimk hello.c hello_other.c kto@master:~/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@master:~/pvm3/src/hello$ ls ~/pvm3/bin/LINUX/ hello hello_other kto@master:~/pvm3/src/hello$

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

More Related