Pvm programok r sa
Download
1 / 58

PVM programok írása - PowerPoint PPT Presentation


  • 76 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' PVM programok írása' - cheung


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Pvm programok r sa

PVM programok írása

Kozsik Tamás

[email protected]

http://kto.web.elte.hu/

2001-2004.


Pvm parallel virtual machine
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.


Fel p t se
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
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
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 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
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
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
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


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

  • [email protected]


Saj t g p
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
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
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;

}


Hello other c
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
Futtatás

[email protected]:~/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>


Jabb host felv tele a virtu lis g pbe
Ú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


Jabb futtat s
Ú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>


Egy p ldaprogram megszerz se
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...


Hello c1
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);

}


Hello other c1
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.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
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


Mit hol
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
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
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
Egyszer kell megcsinálni:

master:~$ ssh nyl02.nylab.inf.elte.hu

[email protected]:~$ mkdir pvm3

[email protected]:~$ mkdir pvm3/bin

[email protected]:~$ mkdir pvm3/bin/LINUX

[email protected]:~$


Ut na mindig ezt kell csin lni
Utána mindig ezt kell csinálni

[email protected]:~$ cd pvm3/src/hello

[email protected]:~/pvm3/src/hello$ ls

Makefile.aimk hello.c hello_other.c

[email protected]:~/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

[email protected]:~/pvm3/src/hello$


Ezt projektenk nt egyszer kell
Ezt projektenként egyszer kell

[email protected]:~/pvm3/src/hello$ ls

LINUX Makefile.aimk hello.c hello_other.c

[email protected]:~/pvm3/src/hello$ ls LINUX

hello hello_other

[email protected]:~/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

[email protected]:~/pvm3/src/hello$ ls ~/pvm3/bin/LINUX/

hello hello_other

[email protected]:~/pvm3/src/hello$


Mi mire val
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
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
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 s1
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
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
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
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
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

    [email protected]:~$


Pvm d mon
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
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

    [email protected]:~$ ls /tmp/pvm.11700/

    log sock

    [email protected]:~$ id

    uid=11700(kto) gid=10713(aszt) groups=10713(aszt)

    [email protected]:~$


Bentragadt pvm program1
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

    [email protected]:~$ ls /tmp/pvm.11700/

    log sock

    [email protected]:~$ id

    uid=11700(kto) gid=10713(aszt) groups=10713(aszt)

    [email protected]:~$


Ideiglenes kil p s a konzolb l
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.

    [email protected]:~$


Virtu lis g p mag ban
Virtuális gép magában

  • A démon is elindítható magában, konzol nélkül

    [email protected]:~$ pvmd &

    [1] 627

    [email protected]:~$ /tmp/filejgp9rM

    [email protected]:~$


Ilyenkor le ll t s
Ilyenkor leállítás

  • Visszalépni/belépni a konzolba és onnan halt paranccsal ki.

    [email protected]:~$ pvm

    pvmd already running.

    pvm> halt

    halt

    Terminated

    [email protected]:~$


Legfontosabb pvm f ggv nyek
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
Ü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
Ü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
Ü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
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
Multicast

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

  • pvm_mcast


Hasznos parancsok a pvm konzolban
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


Add conf 1
add, conf (1)

[email protected]:~$ pvm

pvm> conf

conf

1 host, 1 data format

HOST DTID ARCH SPEED DSIG

nyl01 40000 LINUX 1000 0x00408841

pvm>


Add conf 2
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>


Add conf 3
add, conf (3)

pvm> add nyl03 nyl04 nyl05

add nyl03 nyl04 nyl05

3 successful

HOST DTID

nyl03 c0000

nyl04 100000

nyl05 140000

pvm>


Add conf 4
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
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
hosts példa

[email protected]:~$ cat hosts

nyl01

nyl02

nyl03

[email protected]:~$ 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


A beadand programokr l
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
Doksik

  • man pvm_spawn (stb.)

  • http://people.inf.elte.hu/hz/parh/parhprg.html

  • http://kto.web.elte.hu/oktatas/parhgyak/

  • http://lovei.web.elte.hu/pp/pvm/


ad