Introduzione a PVM PVM
Transcript
Introduzione a PVM PVM
Introduzione a PVM Salvatore Orlando CALCOLO PARALLELO - S. Orlando 1 CALCOLO PARALLELO - S. Orlando 2 PVM • Sommario – Architettura di PVM – Come inviare e ricevere messaggi – Introduzione alla programmazione con PVM PVM Programming Model • Scopo di PVM è permettere che collezioni dinamiche di computer appaiano come una singola (Parallel) Virtual Machine a memoria distribuita • I task possono essere dinamicamente spawned e killed da ogni altro task • Ogni PVM task può inviare messaggi a tutti gli altri task, una volta noto il tid relativo … – Non abbiamo limiti al numero e alla dimensione dei messaggi • Il modello supporta la tolleranza ai guasti, il controllo delle risorse, il controllo dei processi, reti e nodi eterogenei CALCOLO PARALLELO - S. Orlando 3 L’architettura di PVM pvmd - one PVM daemon per host libpvm - task linked to PVM library tcp host (one per IP address) task task pvmd direct connect task Unix Domain Sockets inner host messages OS network interface pvmds fully connected using UDP task task task task task task task task task internal interconnect task P0 pvmd distributed memory MPP task P1 task P2 pvmd Shared Memory shared memory multiprocessor La collezione di PVMD comunicanti definisce la Virtual Machine (VM). CALCOLO PARALLELO - S. Orlando 4 Step 1 – Enrolling in PVM • I tasks devono esser arruolati (enrolled) nella VM per essere indirizzati myid = pvm_mytid(); printf(“ -> %x”, myid); -> 0x40001 • La prima chiamata a ogni funzione PVM arruola il task nella VM – La prassi è quella di chiamare pvm_mytid() come prima invocazione di PVM CALCOLO PARALLELO - S. Orlando 5 CALCOLO PARALLELO - S. Orlando 6 Inviare e ricevere messaggi • Inviare un messaggio err = pvm_send( dest, tag); Dest = TID of destination; Tag = user-defined distinguishing integer; • Ricevere un messaggio Err = pvm_recv( src, tag); Src = TID of sender Tag = distinguished integer Wildcard in ricezione • Wildcard sono possibili per il tid del sender task, o per il matching tag. • La wildcard è -1 Any sender, specific tag pvm_recv(-1, tag); Specific sender, any message pvm_recv(src, -1); Any sender, any message pvm_recv(-1, -1); CALCOLO PARALLELO - S. Orlando 7 Directory di esempi • Contiene diversi schemi paralleli di programmazione parallela/distribuita • Master/Slave – Il Master inizia tutti gli slave e coordina il loro lavoro e l’ I/O • SPMD (data parallelism) – Stesso programma eseguito su pezzi diversi del problema • Functional (task parallelism) – Task diversi eseguono funzioni differenti dell’applicazione CALCOLO PARALLELO - S. Orlando 8 Esempi Gli esempi illustrano l’uso di PVM, ma servono come template per costruire le proprie applicazioni Supplied examples include: hello hello_other master slave spmd gexample timing timing_slave hitc hitc_slave inheritb imbi gmbi mhf_server mhf_tickle PVM equivalent to hello world Master/slave example SPMD example Group and collective ops. Timing example - comm perf Dynamic load balance Communication context Persistent messages template Message handlers Gli esempi includono anche Makefile.aimk per C e Fortran CALCOLO PARALLELO - S. Orlando 9 Starting PVM Tre modi per far partire PVM pvm [-nhostname] [hostfile] PVM console. Starts PVM or just attaches to running PVM. Recommended way to start and stop PVM 3. xpvm [hostfile] PVM Graphical Interface includes console functions, and more. Starts PVM or attaches to running PVM. pvmd [-nhostname] [hostfile] direct startup, seldom used except for debugging. Option -n useful if host has multiple network cards eg. ATM, ethernet CALCOLO PARALLELO - S. Orlando 10 PVM Console • Quando si esegue pvm dalla console – Se non ci sono VM attive per il particolare utente, fa partire una nuova VM • Un demone pvmd è fatto partire sulla macchina – Se esiste già una VM, la console si arruola nella VM e attende comandi • La console pvm è “esattamente un altro programma pvm”. – Ogni cosa che può essere fatta dalla console, può essere fatta dal programma con apposite API CALCOLO PARALLELO - S. Orlando 11 Costruzione della VM • VM con una singola macchina fisica non sono interessanti – Altre macchine possono essere aggiunte alla VM % pvm pvm> add proxima host proxima added • Si può usare un hostfile che contiene tutti gli host della VM. % pvm hostfile CALCOLO PARALLELO - S. Orlando 12 Alcuni problemi di Startup • PVM necessita di remote shell (rsh/ssh) per aggiungere host alla VM – Dobbiamo fare in modo che i comandi rsh/ssh funzonino senza password • Qualche volta, se la VM non è stata interrotta correttamente, il PVMD può rimanere in esecuzione – Se sono stati osservati malfunzionameti, cerca i file /tmp/pvmd.* e rimuovili CALCOLO PARALLELO - S. Orlando 13 PVM Console pvm> alcuni comandi e loro significato add hostname conf delete hostname halt help [command] kill tid ps -a quit reset spawn trace version Add host(s) to virtual machine (can list several) list hosts in the virtual machine delete hosts from virtual machine shut down PVM and tasks print information about commands and options kill a task list all running tasks exit console - leave PVM and tasks running kill all tasks and reset PVM spawn tasks (many options) set/display trace events print PVM version CALCOLO PARALLELO - S. Orlando 14 Starting tasks • Uso di spawn nella console pvm pvm> spawn -> /bin/date pvm decide dove far partire il task l’opzione “->” forza l’otput sulla console pvm> spawn -> -antares /bin/date fa partire sull’host antares pvm> spawn -> –4 /bin/hostname fa partire 4 copie • pvm_spawn() è l’API del comando per far partire un tasks da un programma PVM CALCOLO PARALLELO - S. Orlando 15 Variabili di ambiente • PVM_ROOT – Il posto dove PVM cerca vari file • PVM_ARCH – codice per le varie architetture – esempio LINUX, SUN4SOL2, SGI5 • Se si invia dalla console: “spawn -> example”, dove PVM cerca gli eseguibili? – $PVM_ROOT/bin/$PVM_ARCH – $HOME/bin/$PVM_ARCH dove entrambi i path sono relativi ad una macchina remota • • • Nella distribuzione debian queste variabili non sono settate I vari file sono copiati (link simbolici) nei path /usr/bin Per lanciare gli eseguibili: – Usare il path assoluto /home/user/…. – Oppure il path relativo alla home directory ./…. CALCOLO PARALLELO - S. Orlando 16 Catturare l’output • L’opzione ‘->’ del comando spawn nella console cattura l’outup del task e lo visualizza in console • L’output remoto è buffered. I dati sono mostrati quando il buffer è pieno o il programma remoto termina • Senza questa opzione, quando i task sono spawned l’output finisce su /tmp/pvml.uid sulla macchina local machine • Dall’interno dei programmi: pvm_catchout(stdout) – Cattura lo standard output/error da uno spawned (children) task e lo copia sul proprio standard output CALCOLO PARALLELO - S. Orlando 17 Messaggi • PVM impiega primitive bufferizzate – I buffer possono contenere dati tipati ed eterogenei – Il contenuto dei messaggi sono definiti dall’utente • L’ordine di unpacking/packing sono definiti dal programma utente – Il tipo dei messaggi non sono inclusi nel messaggio stesso CALCOLO PARALLELO - S. Orlando 18 Esempio di Message buffer floats int nitems Ao A1 A2 Anitems message length • I dati sono impacchettati sulla based di XDR (External Data Representation) => marshaling CALCOLO PARALLELO - S. Orlando 19 Inizializzare un buffer • pvm_initsend(PvmDataDefault) – Inizializza il send-buffer corrente – ATTENZIONE! Il buffer è implicito • Supponi di dover inviare un msg formattato come segue: – Primo entry: integer K, interpretato come il numero di caratteri nella stringa seguente – Prossimi K entries: string data CALCOLO PARALLELO - S. Orlando 20 Esempio – Packing, sending #define TEST 101 pvm_initsend(PvmDataDefault); pvm_pkint(&K, 1, 1); /* pack one integer, note & */ for (i = 0; i < K; i ++) pvm_pkstr(&strings[I]); pvm_send(dest, TEST); Sends the packed message to dest with tag TEST; CALCOLO PARALLELO - S. Orlando 21 Esempio – Ricezione, Unpacking #define TEST 101 pvm_recv(-1, TEST); recv’s the packed message from anybody with tag TEST; Set the current receive buffer for unpacking. pvm_upkint(&K, 1, 1); /* find out how many strings in msg */ for (i = 0; i < K; i ++) pvm_upkstr(&strings[I]); CALCOLO PARALLELO - S. Orlando 22 TIDs revisited • I TID hanno un formato strano – Per scrivere programmi in SPMD-style avremmo bisogno di un più semplice naming – Gli algoritmi SPMD spesso sono basati sull’associazione sull’intervallo contiguo [ 0 – N-1] • PVM usa i Gruppi per semplificare il mapping dei TIDs originali su 0 a N-1 CALCOLO PARALLELO - S. Orlando 23 Note su istallazione ed esecuzione • Gli esempi sono disponibili nella directory /usr/share/doc/pvm – tar zxvf /usr/share/doc/pvm/examples.tar.gz • Viene distribuito il programma aimk, che è un wrapper per make. Usa makefile.aimk per gestire compilazioni per architetture differenti ecc. – aimk è necessario per compilare gli esempi forniti nella distribuzione – Es.: aimk hello.c equivalente a cc –o hello hello.c –lpvm3 gli eseguibili vengono copiati in ./bin/LINUX CALCOLO PARALLELO - S. Orlando 24 Hello • cd examples • Per compilare – gcc -o hello hello.c -lpvm3 – gcc -o hello_other hello_other.c -l pvm3 • Modificare hello.c in modo che usi un path assoluto per lanciare hello_other • Lanciamo la console pvm, che inizializza la VM – Eseguiamo hello: > spawn -> ./examples/hello – Aggiungiamo una macchina e ripetiamo l’esperimento CALCOLO PARALLELO - S. Orlando 25