Indice
Complementi di Calcolo Parallelo e Distribuito
Docente: Massimo Coppola
Questa pagina è relativa al corso di CCP per l'A.A. 2007-2008 Per il corso 2008-2009 si invitano gli studenti a fare riferimento alla pagina del corso di CCP 08/09 del Prof. Danelutto. |
---|
Il programma del corso di CCP 2008-2009 sarà in buona parte diverso rispetto agli anni precedenti; molti degli argomenti del vecchio corso di CCP saranno invece ripresi nel corso di Applicazioni Parallele e Distribuite, che è riattivato per l'A.A. 2008-2009.
Corso di CCP Anno 2007-2008
Orario delle lezioni
Lunedì | 14-16 | Aula B1 |
---|---|---|
Giovedì | 11-13 | Aula B1 |
Aggiornato al 03/03/08
Ricevimento Di regola il ricevimento si svolge su appuntamento (meglio via e-mail). L'orario riportato è indicativo.
Giovedì | 15-17 | Dipartimento stanza 385 |
---|
Vecchia pagina degli annunci: Corso di CCP : Novità
Informazioni relative agli anni precedenti
CCP 2006/2007 | pagina web del docente | pagina Dokuwiki |
---|---|---|
CCP 2005/2006 | pagina web del docente |
Programma Preliminare
Il corso approfondisce i paradigmi di base e le tecniche della programmazione parallela, introducendo all'utilizzo sia di librerie di programmazione standard, a basso livello, sia di linguaggi di programmazione ad alto livello.
Nel corso vengono studiati da un punto di vista teorico, ed analizzati in pratica con esempi di applicazioni reali, i paradigmi di programmazione a scambio di messaggi ed a memoria condivisa. Tali paradigmi realizzativi sono applicati alle forme di parallelismo di base usate nella programmazione parallela e distribuita, e valutati in termini di performance teorica (analisi delle gerarchie di memoria, modelli di performance), pratica, di efficacia dal punto di vista del software engineering.
- Richiami di valutazione delle prestazioni in parallelo. Il paradigma a scambio di messaggi. Programmazione a basso livello: introduzione ad MPI, concetti base e funzionalità principali. Comunicatori, primitive punto a punto e collettive, tipi di dati.
- Problemi fondamentali: classi data parallel e task parallel, decomposizione del calcolo e bilanciamento del carico. Problemi regolari ed irregolari. Esempi di implementazione delle forme base di parallelismo (pipeline, farm, map, divide et impera …) in C/C++ ed MPI; valutazione delle prestazioni.
- La programmazione parallela ad alto livello: l'ambiente ASSIST. Utilizzo delle forme di parallelismo base in Assist. Esempi di applicazioni e valutazione delle prestazioni.
- Il paradigma a memoria condivisa. Le gerarchie di memoria: memoria centrale / dischi; memoria locale / memoria condivisa. Cenni agli algoritmi per le gerarchie di memoria. Implementazione a software delle memorie condivise: Distributed Virtually Shared Memory. Contenimento e mascheramento della latenza di accesso. Tecniche di programmazione ed esempi di soluzione di problemi tramite memoria condivisa.
- Tra i possibili approfondimenti nella parte finale del corsi o argomenti di progetto: I/O parallelo, algoritmi memory-intensive e data mining parallelo; esempi di applicazioni complesse; applicazione delle metodologie alle piattaforme di griglia.
Materiale didattico
- B. Wilkinson, M. Allen Parallel Programming, 2nd edition. 2005, Prentice-Hall. Disponibile in Biblioteca la prima edizione, C.1.2 w74 INF . Testo Principale.
- A. Grama, A. Gupta, G. Karypis, V. Kumar Introduction to Parallel Computing, 2nd edition. 2003, Addison Wesley. Disponibile in Biblioteca la prima edizione D.1.3 k96 INF
Solo alcune parti, specificate a lezione.
- Standard MPI, versione 1.1
Solo le parti specificate nell'elenco delle lezioni.
- Tutorial di utilizzo del compilatore Assist. Contattare il docente per la versione aggiornata a febbraio 2008. Vecchia versione:Tutorial ASSIST Febbraio 2007
Tutorial del server di esecuzione GEA, versione Novembre 2006. - (Dispense di ASE) — M. Vanneschi, Architetture Parallele e Distribuite. Servizio Editoriale Universitario, Università di Pisa, 2006-07.
- Brevi fotocopie e dispense distribuite durante il corso
Prerequisiti
Si assume la conoscenza del linguaggio C o C++. Sono un prerequisito fondamentale i corsi di Architettura 1 e 2 :
- Architettura degli elaboratori (AE AA008)
- Architetture parallele e distribuite (ASE AA024)
Elenco delle lezioni
L'elenco delle lezioni svolte è disponibile alla pagina apposita.
Prove d'esame
L'esame può essere sostenuto in due modi
- in forma seminariale, con la presentazione ai colleghi di una relazione da produrre anche in forma scritta su un argomento concordato con il docente, che sviluppi il materiale trattato nel corso delle lezioni; tale modalita', salvo casi particolari, e' da considerarsi valida entro le date degli appelli di luglio.
- sotto forma di progetto individuale, ad esempio utilizzando uno dei sistemi software esaminati nel corso per implementare uno degli algoritmi studiati; si terrà conto della soluzione fornita in sé, ma anche della capacità del candidato di valutare aspetti vantaggiosi e svantaggiosi del particolare sistema scelto (si veda in proposito la tabella di valutazione usata nel corso del 2005-06). Sono in generale accettati (previa discussione) progetti implementativi in più ambienti diversi, tra cui MPI e ASSIST, con attenzione al confronto prestazionale ed espressivo tra gli ambienti scelti.
Elenco di possibili argomenti proposti a lezione
Ovviamente per quest'anno non è ancora stato proposto alcun argomento; vi saranno sicuramente proposte relative a modelli di calcolo ed esperimenti su processori multi-core.
Prove assegnate
Studente | Argomento del Seminario/Progetto |
---|---|
D. Buono | Confronto tra modelli di programmazione per GPU : CUDA e Brooks+. Eventuale confronto con altri paradigmi stream : Assist, X10… |
L. Puccini | La libreria a skeleton per multicore Blocklibs. Confronto con altri formalismi a skeleton (p.es. eskel) |
M. Parchi | Il paradigma Map&Reduce e la sua implementazione su diverse architetture. |
I criteri di confronto tra ambienti di programmazione diversi sono riassunti alla pagina Materiale di riferimento per CCP