Strumenti Utente

Strumenti Sito


roberto.alfieri:user:reti:concorrente

Programmazione Concorrente e Distribuita

PROGRAMMA SEQUENZIALE: specifica l'esecuzione sequenziale di una lista di istruzioni. La sua esecuzione e' un PROCESSO.

PROGRAMMA CONCORRENTE: specifica due o più programmi sequenziali che possono essere eseguiti concorrentemente come processi paralleli.

Modelli di Programmazione

La libreria Berkeley Socket fornisce una intefaccia per la programmazione di rete nel transport layer, con un semplice livello di astrazione a scambio di datagrammi (sendto() - recvfrom() ) o a stream (read() - write() )

Livelli di astrazione piu' elevati possono essere realizzati a livello applicativo introducendo un layer di interfaccia tra l'applicazione e il trasporto, denominato Middleware.

I modelli di programmazione realizzati con middleware sono classificabili in 3 categorie:

A chiamata Remota di Procedura o Metodo
  • Il server esegue funzioni o metodi che il client chiama come se fossero locali.
  • Principali implementazioni: Sun RPC, XMLRPC, Soap.
Comunicazioni orientate ai Messaggi
  • Interfaccia a scambio di messaggi con funzionalità piu' avanzate (e.g. buffering, sincronizzazione, comunicazioni collettive, ecc.).
  • Principali implementazioni: MPI e PVM.
Comunicazioni orientate agli Stream
  • Il trasmettitore invia un flusso continuo di dati con un rate stabilito.
  • Principali implementazioni: RTP.

Metodologie di Progetto

Da DBPP

Partizionamento

Analisi dell'algoritmo sequenziale.

  • Deretminare il tempo di esecuzione in funzione della dimensione del problema.
  • Valutare se esistono parti non-paralellizzabili.
  • Indivuduare di tutti i possibili task concorrenti in cui e' possibile scomporre l'algoritmo.

Comunicazioni

Individuare le necessità di comunicazioni tra i vari task distinguendo tra comunicazioni punto-punto e globali. Quantificare i messaggi e stimare i tempi trasferimento in base a latenza e bandwidth per le diverse reti a disposizione (Shared Memory, High Speed Network, tcp).

Agglomerazione

Si passa dall'astratto al concreto. Al crescere del numero di task cresce la quantità di comunicazione per unità di computazione (comm/comp ratio) e cala l'efficienza.
Studiare l'andamento delle prestazioni al variare del numero di processori P e della dimensione del problema.

Mapping

Si determina dove i task devono essere eseguiti, tenendo conto dell'architettura (Shared Memory, tcp, High speed Network). Studiare il tempo di Idle, implementato un eventuale algoritmo di load-balancing e valutato l'utilizzo di primitive non bloccanti (comm/comp overlapping).


Riferimenti : "Programmazione concorrente e distribuita" Ancillotti, Boari, Ed. McGraw-Hill, "Sistemi Distribuiti" Tanenbaum, Van Steen, Ed. Pearson

roberto.alfieri/user/reti/concorrente.txt · Ultima modifica: 30/08/2012 16:05 da roberto.alfieri