slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
PVM programok írása PowerPoint Presentation
Download Presentation
PVM programok írása

Loading in 2 Seconds...

play fullscreen
1 / 43

PVM programok írása - PowerPoint PPT Presentation


  • 65 Views
  • Uploaded on

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.

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' - phiala


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
slide2

Hasznos információk

  • http://kto.web.elte.hu/
  • http://lovei.web.elte.hu/
slide3

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

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

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

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
slide7

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
slide8

Hálózat

  • Programozási nyelvek labor (00-803)‏
  • nyl01.nylab.inf.elte.hunyl02.nylab.inf.elte.hu…nyl40.nylab.inf.elte.hu

slide9

Hálózat

  • ATLASZ
  • CAESAR.ELTE.HU →

ATLASZ.ELTE.HU

  • blade01

...blade14

slide10

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ő
slide11

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
slide12

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;

}

slide13

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;

}

slide14

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>

slide15

Ú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

slide16

Ú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

slide17

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

}

slide18

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

}

slide19

Makefile.aimk

# A lefordítandó programok nevei (szóközzel elválasztott felsorolás)‏

BINS = hello hello_other

slide20

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

slide21

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$

slide22

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

slide23

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

slide24

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
slide25

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

slide26

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

slide27

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

slide28

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

slide29

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$

slide30

Legfontosabb PVM függvények

pvm_mytid() pvm_parent()‏

pvm_spawn() pvm_exit()‏

pvm_initsend() pvm_pk*() pvm_send()‏

pvm_upk*() pvm_recv()‏

slide31

Ü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
slide32

Ü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
slide33

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

slide34

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
slide35

Multicast

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

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
slide37

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>

slide38

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>

slide39

add, conf (3)‏

pvm> add blade03 blade04 blade05

add blade03 blade04 blade05

3 successful

HOST DTID

blade03 c0000

blade04 100000

blade05 140000

pvm>

slide40

add, conf (4)‏

pvm> add blade16

add blade16

0 successful

HOST DTID

blade16 No such host

pvm>

slide41

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
slide42

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

slide43

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