Modulo extra: Parallel Virtual Machine (PVM)



Похожие документы
Openmosix e Beowulf: introduzione e confronto

AXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema

Sincronizzazione e comunicazione tra processi in Unix. usati per trasferire ad un processo l indicazione che un determinato evento si è verificato.

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Introduzione a GCC: GNU Compiler Collection

I Socket. Laboratorio Software M. Grotto R. Farina

ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

GDB. The GNU Debugger

Esercizio sulla gestione di file in Unix

Introduzione al Linguaggio C

Introduzione al Python

Sistemi operativi Modulo II I semafori 2 Select

Funzioni. Il modello console. Interfaccia in modalità console

I puntatori e l allocazione dinamica di memoria

CAPITOLO 7 - SCAMBIO DI MESSAGGI

2015 PERIODO D IMPOSTA

Introduzione a Dev-C++

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

HBase Data Model. in più : le colonne sono raccolte in gruppi di colonne detti Column Family; Cosa cambia dunque?

Protezione. Protezione. Protezione. Obiettivi della protezione

I/O su Socket TCP: read()

Sistema di protezione (2) Protezione (1)

Sistema di protezione (1)

Sistemi Operativi (M. Cesati)

Comunicazione. La comunicazione point to point e' la funzionalita' di comunicazione fondamentale disponibile in MPI

Lab. di Sistemi Operativi - Esercitazione n 7- -Gestione dei processi Unix-

Cenni di programmazione distribuita in C++ Mauro Piccolo

Introduzione alla programmazione in C

ZZZ01 Esercizi Vari. Esercizi per preparazione alla prova pratica di laboratorio

Manuale NetSupport v Liceo G. Cotta Marco Bolzon

Esercizio 1. Esercizio 1

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica

IBM SPSS Statistics per Linux - Istruzioni di installazione (Licenza per sito)

Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa. Raccolta prove scritte. Prova scritta

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Manuale Terminal Manager 2.0

Tutorial sugli ambienti di sviluppo: Eclipse e NetBeans

Il compilatore Dev-C++

Allocazione dinamica della memoria - riepilogo

GERARCHIE RICORSIVE - SQL SERVER 2008

Dynamic Linking. Introduzione Creazione di una libreria dinamica Uso di una libreria dinamica

Esercitazione 05. Sommario. Packet Filtering [ ICMP ] Esercitazione Descrizione generale. Angelo Di Iorio (Paolo Marinelli)

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

IBM SPSS Statistics per Mac OS - Istruzioni di installazione (Licenza per sito)

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

ACQUISTI MASSIVI SU SCUOLABOOK

FAQ RISPOSTE A DOMANDE FREQUENTI

Concetto di Funzione e Procedura METODI in Java

Il Software. Il software del PC. Il BIOS


Software Servizi Web UOGA

Dexma Newsletter System

Una prima applicazione in C per l utilizzo delle socket

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

MANUALE UTENTE. TeamPortal Liste Distribuzioni

Sistema Informativo di Teleraccolta EMITTENTI

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena


Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

DevC++ vers Manuale d uso

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

Il comando Make: : uno strumento per la compilazione ed esecuzione di software applicativo. A. Murli - Cacolo Scientifico a.a.

Laboratorio di Algoritmi e Strutture Dati

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

Gestione delle informazioni necessarie all attività di validazione degli studi di settore. Trasmissione degli esempi da valutare.

Configurazione modalità autenticazione utenti sui firewall D-Link Serie NetDefend (DFL-200, DFL-700, DFL-1100)

Comunicazione tra Processi

Esempio produttori consumatori. Primitive asincrone

19. LA PROGRAMMAZIONE LATO SERVER

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Protocolli di Sessione TCP/IP: una panoramica

Online Help StruxureWare Data Center Expert

Inizializzazione, Assegnamento e Distruzione di Classi

TERMINALE. Creazione e gestione di una postazione terminale di Eureka

SendMedMalattia v Manuale d uso

Introduzione alle applicazioni di rete

FileMaker Server 14. Guida alla configurazione dell installazione in rete

MANUALE UTENTE Fiscali Free

GUIDA RAPIDA NOKIA PC SUITE per Nokia Copyright Nokia Mobile Phones Tutti i diritti sono riservati Issue 4

Appello di Informatica B

FASE DEBUGGING: Compiler Linker. controllando che la voce Genera le informazioni per il debug cioè. "Generate debugging information"

Istruzioni per l uso della Guida. Icone utilizzate in questa Guida. Istruzioni per l uso della Guida. Software di backup LaCie Guida per l utente

Monitor. Introduzione. Struttura di un TDA Monitor

Le command line di Java

Blocchi funzione: FbModbusAsciiMs

Laboratorio di programmazione

Programmazione Orientata agli Oggetti in Linguaggio Java

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Mac Application Manager 1.3 (SOLO PER TIGER)

Tecniche di progettazione e sviluppo di applicazioni mobile

Calcolatori Elettronici Parte X: l'assemblatore as88

Транскрипт:

1 Modulo extra: (PVM) Laboratorio di Sistemi Operativi I Anno Accademico 2005-2006 Francesco Pedullà (Tecnologie Informatiche) Massimo Verola (Informatica) Copyright 2005 Francesco Pedullà, Massimo Verola Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be found at: http://www.gnu.org/licenses/fdl.html#toc1

2 Riferimenti Sito web: www.epm.ornl.gov/pvm/pvm_home.html Libro: PVM: A Users' Guide and Tutorial for Networked Parallel Computing Al Geist, Adam Beguelin, Jack Dongarra, Weicheng Jiang, Robert Manchek, Vaidy Sunderam www.netlib.org/pvm3/book/pvm-book.html 2

3 PVM = Software package Standard daemon: pvmd Application program interface (API) Rete di sistemi eterogenei Workstations Supercomputers Unix, NT, VMS, OS/2 3

4 Il processo pvmd3 Gestisce gli host della macchina virtuale Instrada i messaggi Crea, distrugge e gestisce i processi locali Rileva errori ed anomalie Autentica gli utenti Raccoglie gli output Punto di contatto inter-host Un pvmd3 su ciascun host Puo' essere lanciato al boot 4

5 Il programma pvm Console di controllo interattivo Configurazione del PVM Status checking Puo' lanciare pvmd 5

6 Le librerie libpvm - I Linkata con i programmi applicativi Funzioni Comporre i messaggi Send Receive Fornisce le system call verso pvmd Tre librerie: libpvm3.a, libfpvm3.a, libgpvm3.a 6

7 Le librerie libpvm - II libpvm3.a: Inizia e termina i processi Pack, send, e receive dei messaggi Sincronizzazione attraverso barrier Interrogazione e modifica della configurazione di pvm Parla con il pvmd3 locale Effettua la conversione di formato dei dati (XDR) libfpvm3.a Indispensabile per i codici in Fortran libgpvm3.a Necessaria per la gestione dinamica dei gruppi di processi 7

8 8

9 9

10 10

11 Gestione dei processi - I pvm_mytid: Registra il processo chiamante in PVM e genera un task identifier unico se il processo non e' gia' registrato. Restituisce sempre il tid del processo chiamante tid=pvm_mytid(); pvm_parent(): Restituisce il task id del processo che ha chiesto la creazione del processo chiamante ptid=pvm_parent; 11

12 Gestione dei processi - II pvm_spawn(): Lancia nuovi processi PVM Il programmatore puo' specificare l'architettura e il nome della macchina su cui lanciare i processi numt=pvm_spawn("wrk",0,pvmtaskdefault,"",1,&tids[i]); numt=pvm_spawn("wrk",0,pvmtaskarch,"rs6k",1,&tid[i]); pvm_exit(): Avverte il demone locale pvmd che il processo chiamante sta lasciando PVM Deve essere invocata sempre prima della exit() 12

13 Gestione della comunicazione - I Tre passi logici: Allocazione di un buffer Riempimento del buffer Invio del buffer pvm_initsend(): Alloca un buffer Diventa il buffer attivo (per inviare, ne esiste anche uno per ricevere) Utilizzato da tutte le chiamate successive 13

14 Gestione della comunicazione - II pvm_pkdatatype(): Impacchetta i dati del tipo specificato nel buffer di invio attivo Deve avere una corrispondente chiamata di spacchettamento nel processo che ricevera' il contenuto del buffer Gli elementi dei tipi dati strutturati devono essere impacchettati individualmente (per tipo omogeneo) Permette di specificare numero di elementi e stride pvm_upkdatatype(): Spacchetta i dati del tipo specificato dal buffer di ricezione attivo 14

15 Gestione della comunicazione - III pvm_send(): Invia immediatamente i dati nel buffer al task destinazione Associa un tag al messaggio Restituisce 0 se ha successo, altrimenti <0 pvm_send(tids[1],msgtag); pvm_recv(): Blocca il processo ricevente finche' non riceve un messaggio con il tag specificato dal tid specificato Il messaggio viene copiato in un nuovo buffer attivo, che sostituisce il corrente pvm_recv(tid,msgtag); 15

PVM: Hello World! 16 #include <stdio.h> #include "pvm3.h" main() { int cc, tid; char buf[100]; } printf("i'm t%x\n", pvm_mytid()); cc = pvm_spawn("hello_other", 0, 0, "", 1,&tid); if (cc == 1) { cc = pvm_recv(-1, -1); pvm_bufinfo(cc, 0, 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); #include "pvm3.h" main() { int ptid; char buf[100]; } ptid = pvm_parent(); strcpy(buf, "hello, world from "); gethostname(buf + strlen(buf), 64); pvm_initsend(pvmdatadefault); pvm_pkstr(buf); pvm_send(ptid, 1); pvm_exit(); exit(0); 16

17 Altre chiamate per la trasmissione pvm_psend(): Impacchetta ed invia un messaggio con una sola chiamata La sintassi richiede la specifica di un tipo dati valido pvm_nrecv(): Come pvm_recv, eccetto che la chiamata e' non-bloccante Se il messaggio e' arrivato, restituisce il buffer id del nuovo buffer di ricezione Altrimenti restituisce 0 In caso di errore, restituisce <0 rc = pvm_nrecv(tid,msgtag); 17

18 Gestione dei nodi (hosts) pvm_addhosts(): Aggiunge host alla macchina virtuale I nomi devono avere una sintassi uguale a quella delle linee dell'hostfile di pvmd pvm_addhosts(hostarray,4,infoarray); pvm_delhost(): Cancella host dalla macchina virtuale pvm_delhosts(hostarray,4); 18

19 L'anello: master #include <stdio.h> #include <pvm3.h> #define PROC_NUM 3 int main() { int mytid; int children[proc_num]; int res, i; mytid = pvm_mytid(); printf("master: TID is %d\n", mytid); res = pvm_spawn("ring-slave", NULL, PvmTaskDefault, "", PROC_NUM, children); if (res < 1) { printf("master: pvm_spawn error (res=%d)\n", res); pvm_exit(); // send neighbors' TIDs for(i=0; i<proc_num; i++) { pvm_initsend(pvmdatadefault); pvm_pkint(&children[(i-1+proc_num)%proc_num], 1, 1); pvm_pkint(&children[(i+1)%proc_num], 1, 1); pvm_send(children[i], 1); } // test the ring i=1; pvm_initsend(pvmdatadefault); pvm_pkint(&i, 1, 1); pvm_send(children[0], 1); pvm_exit(); return 0; } exit(1); }

20 L'anello: slave int main() { int mytid, lefttid, righttid, sendertid; int res, i, bufid; FILE* cons; cons = fopen("/dev/pts/2", "a"); mytid = pvm_mytid(); sleep(1); fprintf(cons, "\nslave [%d]: started\n", mytid); // get neighbors' TIDs pvm_recv(-1, -1); pvm_upkint(&lefttid, 1, 1); pvm_upkint(&righttid, 1, 1); fprintf(cons, "Slave [%d]: left=%d right=%d\n", mytid, lefttid, righttid); sleep(1); } while(1) { bufid = pvm_recv(-1, -1); pvm_upkint(&i, 1, 1); pvm_bufinfo(bufid, NULL, NULL, &sendertid); fprintf(cons, "Slave [%d]: msg %2d from %d\n", mytid, i, sendertid); sleep(1); i++; pvm_initsend(pvmdatadefault); pvm_pkint(&i, 1, 1); pvm_send(righttid, 1); if (i>20) break; } pvm_exit(); return 0; 20

21 PVM Collective Communication - I pvm_barrier(): Blocca il processo chiamante finche' tutti i processi del gruppo hanno chiamato pvm_barrier() pvm_barrier("worker",5); pvm_bcast(): Invia in maniera asincrona i dati nel buffer attivo ad un gruppo di processi (mittente escluso) pvm_bcast("worker",msgtag); 21

22 PVM Collective Communication - II pvm_mcast(): Invia un messaggio memorizzato nel buffer di invio attivo ai task specificati nel vettore tids[]. Il messaggio non e' inviato al chiamente neanche se e' elencato in tids pvm_mcast(tids,ntask,msgtag); 22

23 PVM Collective Communication - III pvm_gather(): Un membro specificato riceve i messaggi inviati dagli altri membri del gruppo e li raccoglie in un array Tutti i membri del gruppo devono invocare pvm_gather(). Costituisce una barriera implicita pvm_gather(&getmatrix,&myrow,10,pvm_int,msgtag, "workers",root); 23

24 PVM Collective Communication - IV pvm_scatter(): Distribuisce i data a partire dalla radice specificata a tutti i membri del gruppo, radice inclusa Tutti i membri del gruppo devono chiamare pvm_scatter() Ciascun membro riceve una porzione del vettore dalla radice nel proprio vettore locale pvm_scatter(&getmyrow,&matrix,10,pvm_int, msgtag,"workers",root); 24

25 PVM Collective Communication - V pvm_reduce(): Esegue un'operazione di riduzione sui membri del gruppo Tutti i membri del gruppo chiamano con i propri dati locali e il risultato appare sul nodo radice Gli utenti possono definire le proprie funzioni di riduzione ovvero usare funzioni PVM predefinite pvm_reduce(pvmmax,&myvals,10,pvm_int,msgtag, "workers",root); 25

26 Installazione di PVM3 - I Scaricare: pvm3.4.5.tgz da www.netlib.org.pvm rpm da www.rpmfind.net Installare PVM (usare gcc 3.X): tar -zxcf pvm3.4.5.tgz make all Attivare rsh o (meglio) ssh necessario solo nel caso si usi piu' di un host Lanciare la console pvm 26

27 Installazione di PVM3 - II Preparare l'esempio: make all Eseguirlo:./master Chiudere la console comando halt Domande? 27

28 Makefile di esempio PVMDIR = /home/francesco/pvm3 INCDIR = $(PVMDIR)/include LIBDIR = $(PVMDIR)/lib/LINUX BINDIR = $(PVMDIR)/bin/LINUX all: master slave cp master slave $(BINDIR) master: master.c gcc -o master -L$(LIBDIR) -I$(INCDIR) master.c -lpvm3 slave: slave.c gcc -o slave -L$(LIBDIR) -I$(INCDIR) slave.c -lpvm3 clean: rm *.o master slave 28

29 Come chiudere PVM Tutti programmi devono invocare pvm_exit() Alla chiusura, il demone master pvmd3 uccide automaticamente tutti gli altri demoni tutti i processi registrati Sulla console pvm: "halt" Se il demone funziona in background: entrare in modalita' console mode con il comando "pvm" ed eseguire halt. 29

30 Compito di esonero - I Implementare un sistema PVM con le seguenti limitazioni: utilizzo su un solo sistema (nessuna gestione degli host, nessuna conversione di formato, nessuna gestione dei gruppi) implementazione delle call fondamentali (quelle necessarie ad eseguire l'esempio ring con qualunque numero di nodi) implementazione dei soli comandi di console necessari ad eseguire e verificare l'esempio (halt, quit, ps, sig, spawn) un solo programma parallelo in esecuzione (cioe', un solo eseguibile lanciato dalla linea comandi) limitazione delle dimensioni dei messaggi a PIPE_BUF (4K) gestione di un solo buffer di invio e un solo buffer di ricezione 30

31 Compito di esonero - II La consegna deve contenere due file: package pvm3.4.5.tgz di installazione e configurazione compatibile con quello originale di PVM (la procedura di installazione deve essere identica) file test.tgz contenente il makefile di compilazione e installazione del programma di test master-slave modellato su quello dell'esempio (con i comandi all, clean ) a pag. 28 del modulo PVM: http://twiki.di.uniroma1.it/pub/lab_so_1/didatticalso10506/lso1-pvm-aa0506.pdf Il compito di esonero deve essere compilabile ed eseguibile su RedHat/Fedora Core o Suse 31

32 Compito di esonero - III Possibili estensioni: rimozione di una o piu' limitazioni (dimensioni dei buffer, programmi paralleli attivi) call asincrone altre call di comunicazione puntuale call di comunicazione collettiva Ogni nuova funzionalita' deve essere verificabile tramite uno o piu' dei test ufficiali di ORNL (pvm_test) esempio: test16 per pvm_barrier() 32

33 Compito di esonero - IV In caso di estensioni, la consegna deve contenere anche: un documento con la lista delle funzioni e/o comandi addizionali implementati ulteriori target del Makefile in formato test# dove # e' il numero del test della suite pvm_test eventuali ulteriori target (da documentare) 33

34 Sull'uso di gdb - I Per debuggare un processo, si forniscono sulla linea comandi nome dell'eseguibile e pid del processo: gdb program 1234 In alternativa, dalla linea comandi di gdb: attach 1234 file program E' opportuno che il programma sia in attesa, per es.: in sleep per un tempo lungo (e.g., 3600s) di un evento (e.g., lettura da pipe) di un segnale (e.g., SIGUSR1) 34

35 Sull'uso di gdb - II In ogni caso, il processo viene bloccato Dopo l'operazione di attach: inviare il segnale o provocare l'evento per sbloccare il processo il processo rimane bloccato sull'istruzione successiva definire i breakpoint nei punti di interesse ripartire con continue, step o next 35

36 System call select()- I Aspetta alcuni file descriptor finche' non cambiano stato: int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); Tre set di file descriptor (in numero pari a n-1): readfs in attesa di dati in arrivo writefs per vedere se una write non si blocca exceptfs in attesa di eccezioni I set sono modificati al rientro 36

37 System call select()- II timeout e' il tempo massimo di attesa e puo' valere 0 Quattro macro per manipolare i set: FD_ZERO cancella un intero set FD_SET aggiunge un file descriptor al set FD_CLR elimina un file descriptor dal set FD_ISSET verifica se un file descriptor e' nel set (da usare dopo la chiamata) Il valore di ritorno e' il numero dei file descriptor nel set 37

System call select()- esempio 38 int main(void) { fd_set rfds; struct timeval tv; int retval; /* Watch stdin (fd 0) to see */ /* when it has input. */ FD_ZERO(&rfds); FD_SET(0, &rfds); /* Wait up to five seconds. */ tv.tv_sec = 5; tv.tv_usec = 0; /* Don t rely on the value of tv now! */ if (retval == -1) perror("select()"); else if (retval) printf("data is available now.\n"); /* FD_ISSET(0, &rfds) will be true. */ else printf("no data within five seconds.\n"); return 0; } retval = select(1, &rfds, NULL, NULL, &tv); 38