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