#acl SUAGroup:read,write,admin,delete,revert All:read == Algoritmi paralleli e sistemi distribuiti == '''Numero di crediti ECTS''': 5 (48 ore frontali) '''SSD di riferimento''': INF/01 '''Docente''': W. Spataro '''Prerequisiti''' <
> * Analisi Numerica * Programmazione in C/C++ '''Obiettivi''' Il corso si propone di fornire agli studenti del Corso Specialistica di Informatica: * conoscenze dei fondamenti e aspetti applicativi del calcolo parallelo * conoscenze delle tecniche e metodi di progettazione e realizzazione di algoritmi paralleli * conoscenza approfondita dei principi, strutture e utilizzo dei sistemi di elaborazione paralleli e, in particolare, delle tecniche di programmazione in ambiente Shared-memory e paradigma Message Passing * conoscenza di diversi settori di applicazione del calcolo parallelo e, in particolare, della HPC (High Performance Computing). '''Programma''' * Introduzione al Calcolo Parallelo * Scopi, Concetti e Terminologie * Tassonomia di Flynn * Architetture Parallele * Panoramica sulle macchine parallele * Memoria Condivisa (Multiprocessors) * Memoria Distribuita (Multicomputers) * Architetture Multi-core * Cache Coherence * Architetture Ibride * Modelli di Programmazione Paralleli * Modello a Threads * Modello a Memoria Condivisa * Modello a Memoria Distribuita * Modelli Data Parallel * Altri Modelli * Disegno di Programmi Paralleli * Parallelizzazione automatica e manuale * Partizionamento * Comunicazioni * Sincronizzazione * Load Balancing * Granularità * I/O parallelo * Panoramica su OpenMP - Il linguaggio di riferimento per la programmazione in ambienti a memoria condivisa/data parallel * Concetti generali * Loop paralleli * Variabili tipo private e shared * Sezioni critiche * Parallelismo funzionale * MPI - Il linguaggio di riferimento per la programmazione in ambienti a memoria distribuita * Concetti Generali * Routine di Gestione Ambiente * Comunicazioni Punto-Punto: MPI_Recv e MPI_Send * Comunicazioni Non-bloccanti * Comunicazioni Collettive * Tipi di Dati derivati * Comunicatori e Gruppi * Topologie virtuali * Programmazione GPGPU – La nuova frontiera del Calcolo Parallelo * CUDA C - Il linguaggio di riferimento per la programmazione su schede grafiche * Concetti generali, limiti * CUDA, CUDA C * Gerarchia dei Thread e della Memoria * Concetti di thread, blocco, grid e kernel * Strategia di ottimizzazione: utilizzo della shared memory, coalescenza * Analisi delle Performance * Parallel Overhead * Speedup e Efficienza * Speedup superlineare * Effetto della Granularità sulle Performance * Scalabilità * Legge di Amdahl * Isoefficienza * Algoritmi Paralleli * Calcolo Matriciale * Integrazione numerica * Algoritmi di ricerca e ordinamento * Analisi delle prestazioni di algoritmi paralleli * Laboratorio * Sviluppo di elementi di software parallelo in ambiente MPI e OpenMP su calcolatori paralleli * Sviluppo di elementi di software parallelo in ambiente GPGPU –CUDA C su schede grafiche NVIDIA * Misurazione delle prestazioni '''Bibliografia''' <
> * Ananth Grama et al., Introduction to Parallel Computing, 2/E, Addison-Wesley. * Peter Pacheco, Parallel Programming with MPI. Morgan Kaufmann, 1997 * G. Spezzano, D. Talia “Calcolo parallelo, automi cellulari e modelli per sistemi complessi”, Franco Angeli, Milano, 1999. * I. Foster. Designing and Building Parallel Programs. Addison-Wesley, 1995, Versione online disponibile presso http://www-unix.mcs.anl.gov/dbpp * Materiale del Docente (Reperibile sul sito web personale) '''Tipologia di attività didattiche''' Utilizzo di materiale didattico quali slides, etc. Sviluppo di semplici codici on-the-fly. Interazione attiva con gli studenti durante le lezioni. Lezioni tenuti interamente in inglese. '''Metodi di valutazione''' Il test finale consiste in una prova scritta e nella valutazione di un progetto sviluppato in MPI/OpenMP.