18/02 Panorama del corso.
Panoramica del corso, obiettivi, tecnologie principali (MPI, ASSIST).
Forme di parallelismo e implementazione nei diversi modelli/linguaggi di programmazione parallela. Esempi di problemi che verranno esaminati del corso: algoritmi di Data Mining, simulazione computazionale, ricerca combinatoria ed ottimizzazione, algoritmi in memoria esterna. Modalità di superamento dell'esame. Programmazione parallela strutturata e non strutturata, cenni a vari modelli di programmazione. MPI: modello a scambio di messagi, motivazioni dello sviluppo, descrizione ad alto livello dello standard e del modello di programmazione SPMD.
21/02 MPI: Introduzione, concetti essenziali e comunicazione punto a punto.
MPMD (multiple program multiple data) e SPMD in MPI. Master slave e data parallel come casi particolari di programmi SPMD. Utilizzo strutturato di MPI e realizzazione di librerie parallele. Concetto di comunicatore, esempi di primitive punto a punto di MPI: send e receive sincrona e asincrona, receive asimmetrica. Standard di riferimento: MPI 1.1 (cap.3) con integrazione MPI 2 (cap.3).
Caratteristiche di ordinamento relativo, (non) fairness e uso delle risorse delle primitive MPI. Alcuni concetti base di MPI:
tipi di dato (tipi base, definiti dall'utente, tipi opachi e handle)
comunicatori (rank, inter/intra-comunicatori, gruppi)
primitive punto a punto (concetti: envelope, completamento locale e globale, primitive bloccanti e non bloccanti, modalità della send)
tipi base delle send (cenni): standard, sincrona, ready, buffered
26/02 MPI: oggetti opachi, MPI Datatypes e loro costruttori
Tipi di dato generali, concetto di datatype (sequenza di tipi base e displacement) e typemap associata. Supporto ad MPI multi-linguaggio e multi architettura: la definizione a run-time dei tipi di dato (validità locale) come meccanismo di integrazione tra il programma nel linguaggio ospite (compilato) e la libreria di comunicazione (collegata). Rappresentazione interna alla libreria MPI, e come tipi opachi; uso dei costruttori forniti da MPI: MPI_TYPE_COMMIT
e MPI_TYPE_FREE
. MPI_TYPE_
(contiguous, vector, hvector, indexed, hindexed, struct). Concetti di size ed extent. Modificatori di extent (_LB
ed _UB
). Matrici a blocchi, triangolari, diagonali, uso di datatype per realizzare stencil e riorganizzazione di dati associata alla comunicazione.
28/02 MPI: comunicatori e gruppi
Differenza tra comunicatori e gruppi, concetto di attributo di un gruppo; primitive di creazione dei gruppi (operazioni booleane, aggiunta), conversione tra gruppi e comunicatori, creazione di comunicatori. Primitive di split e merge degli intra-comunicatori. Inter-comunicatori: creazione, semantica relativa al gruppo locale delle primitive sui comunicatori (MPI_COMM_SIZE
, MPI_COMM_RANK
) e primitive dedicate. Operazioni collettive: significato, semantica non sincronizzante, ordinamento dei messaggi. Barrier, broadcast, gather, scatter, gatherv, scatterv, alltoall.
3/03 MPI operazioni collettive e operatori MPI
Primitive collettive Reduce, ReduceAll. Operatori MPI predefiniti, operatori utente, loro definizione ed applicazione, polimorfismo e meccanismi per la gestione dei datatype. Operazione di scan (parallel prefix). Varianti della semantica delle comunicazione: approfondimento su send sincrona e buffered. Ready-send ed esempio di utilizzo: emettitore di un farm. Operazioni di comunicazione incomplete (receive e varianti della send); meccanismo delle MPI_request
. Controllo delle comunicazioni in sospeso e primitive WAIT
e TEST
. Varianti multiple WAIT_ANY
, TEST_ANY
, WAIT_ALL
, TEST_ALL
. Primitive CANCEL
e MPI_FREE_REQUEST
. Introduzione al controllo del nondeterminismo ed alle primitive MPI_WAIT_SOME
ed MPI_TEST_SOME
.
6/03 MPI - primitive incomplete e persistenti e controllo del nondeterminismo
MPI_TEST_SOME
, MPI_WAIT_ALL
. Operazioni persistenti, semantica, MPI_START
e MPI_STARTALL
. MPI_request attive e non attive relazione con le varianti di MPI_WAIT
ed MPI_TEST
, e con la MPI_CANCEL
. Implementazione di meccanismi di comunicazione a canali tramite MPI, differenze nella semantica. Esempi con il linguaggio LC: implementazione del canale, delle primitive sincrone ed asincrone (via buffered send e processo buffer), del comando alternativo (variante con send incomplete e permanenti, MPI_TEST_SOME
).