- 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 applicabili, in particolare, per diversi problemi di machine learning.
Al termine del corso lo studente possiede le basi fondamentali di programmazione parallela in C/C++/CUDA e Python per sistemi multicore, cluster e GPGPU; conosce inoltre i principali paradigmi di programmazione parallela e gli ambienti di programmazione standard OpenMP e CUDA.
Prerequisiti
Conoscenze di base di C/C++ e Python.
Metodi Didattici
Lezioni frontali (80%) e attività di laboratorio (20%)
Nel caso di limitazioni dovute all'emergenza COVID-19 le lezioni in laboratorio saranno sostituite da video lezioni.
Modalità di verifica apprendimento
- Progetto di sviluppo software durante il corso (40% del voto finale)
- Progetto di sviluppo software finale (60% del voto finale)
Per ogni progetto 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 diversi 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
Cenni di strutture dati concorrenti