Anno di corso: 1

Anno di corso: 2

Crediti: 6
Crediti: 6
Crediti: 6
Crediti: 6
Crediti: 6
Crediti: 6
Crediti: 12
Tipo: A scelta dello studente
Crediti: 3
Tipo: Lingua/Prova Finale
Crediti: 33
Tipo: Lingua/Prova Finale

SISTEMI DI CALCOLO PARALLELO

Scheda dell'insegnamento

Anno accademico di regolamento: 
2015/2016
Anno di corso: 
2
Anno accademico di erogazione: 
2016/2017
Tipo di attività: 
Obbligatorio a scelta
Crediti: 
6
Ciclo: 
Secondo Semestre
Ore di attivita' didattica: 
50
Prerequisiti: 

Conoscenze di architetture degli elaboratori, di elementi di networking, linguaggi di programmazione con particolare riferimento ai linguaggi C/C++e Java, modelli di computabilità e algoritmi e complessità.

Moduli

Metodi di valutazione

Tipo di esame: 
Orale
Modalita' di verifica dell'apprendimento: 

La verifica comprende attività seminariale a cura degli studenti e la discussione di un progetto su un particolare tema affrontato durante il corso.

Valutazione: 
Voto Finale

Obiettivi formativi

Lo studente apprende i paradigmi computazionali delle applicazioni parallele. Per completare l’analisi di tali applicazioni, vengono introdotte ed utilizzate le metriche di prestazione nell’attività di laboratorio su macchine parallele in ambiente MPI e CUDA con gli algoritmi presentati a lezione.

Contenuti

Il Corso presenta una panoramica completa di architetture parallele e dei relativi paradigmi computazionali. Inoltre introduce lo studente alla progettazione ed implementazione di applicazioni parallele in ambiente distribuito e su GP-GPU con particolare attenzione all’ambiente di sviluppo CUDA. Nell'ultima parte viene introdotto il problema delle applicazioni distribuite con accesso a grandi moli di dati, analizzando il framework Hadoop.

Programma esteso

1. Considerazioni di base e misura delle prestazioni.
2. La classificazione delle architetture parallele ed i paradigmi computazionali, con approfondimento delle architetture SIMD e MIMD."
3. Tipologie di interconnessione e modelli di comunicazione.
4. Esempi di piattaforme a memoria condivisa con cenni alle architetture multicore
5. Esempi di piattaforma distribuita: cluster di PC/workstation e su network locale e dedicato, sistemi con acceleratori grafici.
6. Tecniche di parallelizzazione: tipi di decomposizione, mapping, bilanciamento del carico e tecniche di ottimizzazione.
7. Inibitori della parallelizzazione
8. Operazioni di comunicazione base
9. Modelli analitici di programmi paralleli
10. Cenni su alcuni algoritmi paralleli significativi
11. Programmazione su piattaforme a memoria condivisa, introduzione a OpenMP
12. Uso di librerie Message Passing Interface (MPI) quale ambiente di programmazione per la realizzazione di algoritmi paralleli su architetture multiprocessore: inizializzazione, operazioni globali, modularità
13. L’architettura degli acceleratori grafici e i relativi paradigmi computazionali
14. Introduzione all’ambiente di programmazione su acceleratori grafici: ambiente CUDA
15. Filesystem paralleli
16. presentazione del framework Hadoop: il modello Map-Reduce

Bibliografia consigliata

1. S. Rajasekaran, J. Reif, Handbook of Parallel Computing: Models, Algorithms and Applications, Chapman & Hall/CRC, 2008.
2. A. Grama, A. Gupta, G. Karypis, V. Kumar.Introduction to Parallel Computing, 2°Ed., Addison-Wesley, 2003.
3. J. Sanders, E. Kandrot CUDA by Example: An Introduction to General-Purpose GPU Programming, Addison-Wesley Professional, 2010.

Metodi didattici

Lezioni ed esercitazioni in aula. Supporto di materiale in elearning, esercizi di programmazione.