- 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)
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
Overview GPGPU, Hardware GPU
CUDA, OpenCL, OpenAAC; compilatore CUDA e strumenti
La memoria nella GPU e suo accesso
Stream e multi-GPU
Utilizzo librerie CUDA