HIGH PERFORMANCE COMPUTING

Francesco MOSCATO HIGH PERFORMANCE COMPUTING

0622700073
DIPARTIMENTO DI INGEGNERIA DELL'INFORMAZIONE ED ELETTRICA E MATEMATICA APPLICATA
CORSO DI LAUREA MAGISTRALE
INGEGNERIA INFORMATICA
2023/2024



OBBLIGATORIO
ANNO CORSO 1
ANNO ORDINAMENTO 2022
PRIMO SEMESTRE
CFUOREATTIVITÀ
324LEZIONE
324ESERCITAZIONE
324LABORATORIO


Obiettivi
L’insegnamento introduce lo studente alle caratteristiche delle architetture parallele, ai paradigmi di computazione parallela ed ai relativi linguaggi e framework.
Al termine del corso lo studente sara in grado di progettare algoritmi paralleli su architetture a memoria condivisa e distribuita utilizzando i linguaggi, gli strumenti e le tecnologie piu appropriate al contesto applicativo unitamente alla misurazione delle prestazioni e dell'efficienza delle soluzioni individuate.

Conoscenze e capacità di comprensione
Architetture ad elevate prestazioni. Architetture parallele e loro programmazione. Architetture a memoria distribuita. Cluster. GPU.

Conoscenze e capacità di comprensione applicate
Sviluppo di applicazioni per architetture a memoria condivisa e a memoria distribuita. Framework per lo sviluppo di applicazioni massivamente parallele secondo il paradigma Map/Reduce. Sviluppo di applicazioni parallele basate su GPU.
Prerequisiti
L'insegnamento richiede conoscenze sull'architettura dei calcolatori e sulla programmazione nei linguaggi C e Java.
Contenuti
Unità didattica 1: Introduzione al Calcolo Parallelo e Modelli
(ORE LEZIONE/ESERCITAZIONE/LABORATORIO 6/2/0)
- 1 (3 ORE Lezione): Architetture ad elevate prestazioni: pipelining, architetture superscalari, hyperthreading. Architetture parallele: tassonomia di Flynn, sistemi a memoria condivisa e distribuita; GPGPU
- 2 (3 ORE Lezione): Valutazione delle prestazioni di programmi paralleli: speedup, efficienza, scalabilità.
- 3 (2 ORE Esercitazione): Esercitazione sul Calcolo di SpeedUp ed Efficienza
CONOSCENZE E CAPACITÀ DI COMPRENSIONE: Conoscenze di modelli e tecniche per il calcolo parallelo con diversi paradigmi e valutazione analitica di speedup ed efficienza
CONOSCENZE E CAPACITÀ DI COMPRENSIONE APPLICATE: Saper valutare lo speed-up di una soluzione parallela valutandone efficienza e scalabilità

Unità didattica 2: Shared Memory ed OpenMP
(ORE LEZIONE/ESERCITAZIONE/LABORATORIO 6/0/6)
- 1 (3 ORE Lezione): Programmazione Parallela con Modello Shared Memory, Introduzione a OpenMP
- 2 (3 ORE Lezione): OpenMP, API, gestione della memoria e dei file, Concetti avanzati e ottimizzazione
- 3 (3 ORE Laboratorio): Utilizzo di OpenMP per l'implementazione di algoritmi di calcolo algebrico
- 4 (3 ORE Laboratorio): Utilizzo di OpenMP per l'implementazione di algoritmi di calcolo scientifico
CONOSCENZE E CAPACITÀ DI COMPRENSIONE: Conoscenze di modelli e tecniche per il calcolo parallelo basato su paradigmi Shared Memory e del framework OpenMP
CONOSCENZE E CAPACITÀ DI COMPRENSIONE APPLICATE: Utilizzo di OpenMP per la realizzazione di versioni parallele di algoritmi di calcolo scientifico

Unità didattica 3: Message Passing ed MPI
(ORE LEZIONE/ESERCITAZIONE/LABORATORIO 6/0/6)
- 1 (3 ORE Lezione): Programmazione Parallela con Modello Message Passing, Introduzione a MPI
- 2 (3 ORE Lezione): MPI, API, gestione della memoria distribuita e dei file, Concetti avanzati e ottimizzazione
- 3 (3 ORE Laboratorio): Utilizzo di MPI per l'implementazione di algoritmi di calcolo algebrico
- 4 (3 ORE Laboratorio): Utilizzo di MPI per l'implementazione di algoritmi di calcolo scientifico
CONOSCENZE E CAPACITÀ DI COMPRENSIONE: Conoscenze di modelli e tecniche per il calcolo parallelo basato su paradigmi Message Passing e del framework MPI
CONOSCENZE E CAPACITÀ DI COMPRENSIONE APPLICATE: Utilizzo di MPI per la realizzazione di versioni parallele e distribuite di algoritmi di calcolo scientifico

Unità didattica 4: GPGPU e CUDA
(ORE LEZIONE/ESERCITAZIONE/LABORATORIO 9/0/7)
- 1 (3 ORE Lezione): Programmazione Parallela con CUDA per GPGPU, Introduzione a CUDA e al framework Google Colab
- 2 (3 ORE Lezione): CUDA, API, gestione dei kernel, thread, Memoria globale, shared; ottimizzazione della distribuzione dei kernel sulle SM
- 2 (3 ORE Lezione): CUDA: Aspetti avanzati. Ottimizzazione dei kernel, utilizzo di shared e texture memory, ottimizzazione dello scambio dei dati da host a device, profiling con nprof
- 3 (3 ORE Laboratorio): Appllicazione delle librerie CUDA per la soluzione di colcoli matriciali
- 4 (2 ORE Laboratorio): Ottimizzazione su shared e texture memory, ottimizzazione dei dati e interleaving host-cpu; valutazione delle prestazioni con nprof
- 5 (2 ORE Laboratorio): valutazione delle prestazioni con nprof
CONOSCENZE E CAPACITÀ DI COMPRENSIONE: Conoscenze di modelli e tecniche per il calcolo parallelo basato su paradigmi CUDA
CONOSCENZE E CAPACITÀ DI COMPRENSIONE APPLICATE: Utilizzo di CUDA per la realizzazione di versioni parallele e distribuite di algoritmi di calcolo scientifico



Unità didattica 5: Gestione di Big Data con Hadoop e Spark
(ORE LEZIONE/ESERCITAZIONE/LABORATORIO 6/0/6)
- 1 (3 ORE Lezione): Introduzione ai Big Data, Map-Reduce
- 2 (3 ORE Lezione): Map-Reduce Patterns, Apache Hadoop, HDFS e SPARK
- 3 (3 ORE Laboratorio): Utilizzo di Docker per realizzazione di un CLuster Hadoop e SPARK
- 4 (3 ORE Laboratorio): Esempi di programmazione distribuita basata su paradigmi MAP-Reduce su cluster Hadoop e Spark
CONOSCENZE E CAPACITÀ DI COMPRENSIONE: Conoscenze di modelli e tecniche per l'analisi di big data basato su paradigmi Map-Reduce su Hadoop e Spark
CONOSCENZE E CAPACITÀ DI COMPRENSIONE APPLICATE: Utilizzo di Hadoop e Spark per la realizzazione di versioni distribuite di algoritmi di analisi dei BIG Data


Unità didattica 6: Progetto
(ORE LEZIONE/ESERCITAZIONE/LABORATORIO 0/0/12)
- 1 (9 ORE Laboratorio): Progettazione di un sistema parallelo per calcolo scientifico applicato ad un algoritmo di calcolo numerico noto: valutazione delle prestazioni nei casi di utilizzo di OpenMP, MPI e Cuda
- 2 (3 ORE Laboratorio): Progettazione di un sistema basato su Hadoop e Spark per l'implementazione di un problema di analisi di Big Data.
CONOSCENZE E CAPACITÀ DI COMPRENSIONE APPLICATE: Progettare, Realizzare e valutare le prestazioni di soluzioni parallele e distribuite a problemi di calcolo scientifico e analisi di Big Data


TOTALE ORE LEZIONE/ESERCITAZIONE/LABORATORIO 33/2/37
Metodi Didattici
L’INSEGNAMENTO CONTEMPLA LEZIONI TEORICHE, ED ESERCITAZIONI PRATICHE DI LABORATORIO.

Verifica dell'apprendimento
LA VALUTAZIONE DEL RAGGIUNGIMENTO DEGLI OBIETTIVI PREFISSATI AVVERRÀ MEDIANTE LA REALIZZAZIONE DI UN PROGETTO DI GRUPPO ED UN COLLOQUIO ORALE. LA VALUTAZIONE TERRÀ CONTO DEI SEGUENTI ASPETTI:
CONOSCENZA DELLE TECNOLOGIE E DELLE METODOLOGIE PRESENTATE NEL CORSO; CAPACITÀ DI PROGETTARE, SVILUPPARE E VALUTARE UN ALGORITMO PARALLELO USANDO LE METODOLOGIE E GLI STRUMENTI PRESENTATI NEL CORSO.
Testi
PETER PACHECO, AN INTRODUCTION TO PARALLEL PROGRAMMING, MORGAN KAUFMANN
I. FOSTER. DESIGNING AND BUILDING PARALLEL PROGRAMS. ADDISON-WESLEY
JASON SANDERS, EDWARD KANDROT, CUDA BY EXAMPLE: AN INTRODUCTION TO GENERAL-PURPOSE GPU PROGRAMMING, ADDISON-WESLEY
GEORG HAGER, GERHARD WELLEIN, INTRODUCTION TO HIGH PERFORMANCE COMPUTING FOR SCIENTISTS AND ENGINEERS, CRC PRESS
TOM WHITE, HADOOP: THE DEFINITIVE GUIDE, 4TH EDITION, 2015, O'REILLY, ISBN: 978-1491901632
BILL CHAMBERS, MATEI ZAHARIA, SPARK: THE DEFINITIVE GUIDE, 2018, O'REILLY, ISBN: 978-1491912218

Altre Informazioni
Il corso è tenuto in lingua inglese.
  BETA VERSION Fonte dati ESSE3 [Ultima Sincronizzazione: 2024-11-05]