- Principles of Parallel Programming, Calvin Lyn and Lawrence Snyder, Pearson
- Parallel Programming for Multicore and Cluster Systems, Thomas Dauber and Gudula Rünger, Springer
- Programming Massively Parallel Processors, David B. Kirk and Wen-mei W. Hwu, Morgan Kaufmann
- An introduction to Parallel Programming, Peter Pacheco, Morgan Kaufmann
Obiettivi Formativi
Scopo del corso è introdurre gli studenti alle tecniche di programmazione parallela e ad alta performance.
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 CUDA.
Prerequisiti
Conoscenze di C/C++ e Java.
Metodi Didattici
Lezioni frontali (80%) e attività di laboratorio (20%)
Modalità di verifica apprendimento
- Relazione e presentazione durante il corso (30% del voto finale)
- Progetto di sviluppo software finale (70% del voto finale)
Per la relazione e presentazione ad ogni studente viene assegnato un capitolo di libro sulla programmazione parallela da studiare.
Per il progetto di programmazione deve essere scritta una relazione tecnica ed una presentazione che descrive il lavoro e riporta la performance rispetto ad una versione sequenziale del progetto.
Gli elaborati sono scelti dagli studenti da una lista proposta dal docente. Possono essere svolti singolarmente o in coppia.
L'elaborato è mirato a dimostrare le capacità di:
- Saper implementare un software parallelo usando uno (corso a 6 crediti) o due (corso a 9 crediti) dei framework e strumenti visti a lezione
- Saper valutare gli effetti e differenze della programmazione parallela rispetto a quella sequenziale
- Saper misurare la performance di un programma parallelo rispetto ad uno sequenziale
- Saper scrivere una relazione tecnica ed effettuare una presentazione tecnica.
Programma del corso
Livelli di parallelismo (istruzioni, transazioni, task, thread, memoria.)
Modelli di parallelismo (SIMD, MIMD, SPMD)
CPU e architetture parallele
Design Pattern per Programmazione concorrente (Master/Worker; Message passing)
Parallelization strategies, task parallelism, data parallelism, e work sharing
Programmazione parallela in C/C++ (C++11)/Java
Strutture dati concorrenti