- Docente: Moreno Marzolla
- Crediti formativi: 6
- SSD: INF/01
- Lingua di insegnamento: Italiano
- Modalità didattica: Convenzionale - Lezioni in presenza
- Campus: Cesena
- Corso: Laurea in Ingegneria e scienze informatiche (cod. 8615)
Conoscenze e abilità da conseguire
Al termine del corso lo studente possiede le basi fondamentali di programmazione parallela per sistemi multicore, cluster e GPGPU, conosce inoltre i principali paradigmi di programmazione parallela e gli ambienti di programmazione standard C++2011, OpenMP, MPI e OpenCL. L'ambiente di sviluppo usato e' VisualStudio con l'estensione di Intel Parallel Studio.
Contenuti
Programma
- Algoritmi paralleli: modelli di calcolo sincroni e asincroni; pattern per la programmazione parallela
- Introduzione alle architetture per il calcolo parallelo: tassonomia di Flynn; sistemi a memoria condivisa e distribuita; GPGPU
- Pattern per la programmazione parallela (problemi embarassingly parallel; map/reduce; stencil; work farm)
- Programmazione SIMD
- Programmazione parallela su architetture a memoria condivisa con OpenMP
- Programmazione parallela su architetture a memoria distribuita con MPI
- Programmazione di GPU mediante CUDA
- Valutazione delle prestazioni di programmi paralleli
Prerequisiti
Questo corso richiede una buona conoscenza della programmazione in linguaggio C in ambiente Unix/Linux, e delle architetture dei calcolatori (a livello di quanto presentato nel corso di architettura dei calcolatori).
Testi/Bibliografia
- Peter Pacheco, An Introduction to Parallel Programming, Morgan Kaufmann, 2011, ISBN 978-0123742605
- I. Foster. Designing and Building Parallel Programs. Addison-Wesley, 1995, ISBN 978-0201575941; Disponibile liberamente online.
- Jason Sanders, Edward Kandrot, CUDA by Example: An Introduction to General-Purpose GPU Programming, Addison-Wesley, 2010, ISBN 978-0131387683
- Georg Hager, Gerhard Wellein, Introduction to High Performance Computing for Scientists and Engineers, CRC Press; 1 edition (July 2, 2010), ISBN 978-1439811924
Metodi didattici
Lezioni frontali in aula; esercitazioni in laboratorio.
Modalità di verifica e valutazione dell'apprendimento
Le conoscenze acquisite durante il corso verranno valutate mediante una prova scritta e un progetto di programmazione. La prova scritta si compone di alcune domande a quiz e/o a risposta aperta, riguardanti gli aspetti metodologici visti a lezione. Il progetto consiste nella realizzazione di un software, usando gli strumenti visti a lezione, e una relazione associata. Nella valutazione del progetto si terrà conto della correttezza dell'implementazione, della chiarezza ed efficienza del codice, nonché della qualità della relazione.
Strumenti a supporto della didattica
Lucidi delle lezioni; codici di esempio illustrati in laboratorio.
Link ad altre eventuali informazioni
http://www.moreno.marzolla.name/teaching/HPC/
Orario di ricevimento
Consulta il sito web di Moreno Marzolla