LATEST NEWS
TOOL DA INSTALLARE PER ATTIVITA' DIDATTICHE
Per l'utilizzo della virtual machine è necessario scompattare il file e scaricare l'ultima versione di VMPlayer (link).
Si consiglia di scaricare e installare i tools prima della lezione.
SOSPENSIONE LEZIONI PER FESTIVITA' PASQUALI
CAMBIO AULA PER VENERDI 15 MARZO
SLIDES PER LA LEZIONE 2 AGGIORNATE
SALTO LEZIONE DI VENERDI 8 MARZO
ORARIO DELLE LEZIONI
OBIETTIVI DEL CORSO
Gli obiettivi dell’insegnamento sono:
- illustrare le principali caratteristiche ed architetture dei sistemi di computazione ad alte prestazioni sia embedded che high-end: multi-/many-core, GPU, FPGA.
- introdurre le principali problematiche della programmazione parallela e le metodologie per la decomposizione.
- introdurre le principali tecniche di programmazione parallela avanzata in ambiente OpenMP e CUDA.
- introdurre i concetti base della High-Level Synthesis per sistemi FPGA.
- introdurre i concetti base della compilazione e ottimizzazione del codice per sistemi basati su CPU/GPU.
PREREQUISITI
Nozioni di base sulle architetture dei calcolatori, sui linguaggi di programmazione e sui sistemi operativi.
PROGRAMMA DEL CORSO
Architetture parallele:
- Evoluzione dei sistemi di calcolo in architetture eterogenee e parallele;
- Tassonomia dei multicore. Sistemi a memoria distribuita o condivisa. Architetture omogenee vs. eterogenee;
- Novel challenges: Coerenza, sincronizzazione e consistenza nei sistemi shared-memory;
- Architettura delle moderne CPU multicore, delle General-Purpose Graphics Processing Units (GP-GPU) e delle Field Programmable Based Arrays (FPGA);
Progettazione di codice parallelo:
- Performance nei multicore: coverage, granularity, locality;
- Design patterns paralleli, progettazione di software parallelo;
- Analisi e profiling del software;
- Introduzione ai modelli di programmazione per sistemi eterogenei ad elevato parallelismo;
Modelli di programmazione parallela:
- Programmazione su sistemi a memoria condivisa in OpenMP;
- Programmazione su sistemi eterogenei basati su GPU: CUDA;
- Metodologie High-Level Synthesis per accelerazione su sistemi FPGA;
Compilazione per sistemi eterogenei ad elevato parallelismo:
- Struttura di un moderno compilatore. Rappresentazioni intermedie del codice;
- Esempi di analisi e ottimizzazione del codice;
- Un caso di studio: L'infrastruttura di offloading OpenMP;
METODI DIDATTICI
Lezioni frontali tramite slides sugli argomenti teorici; esercitazioni pratiche sull’utilizzo dei modelli di programmazione presentati. Gli studenti lavoratori che non possono frequentare regolarmente le lezioni devono contattare il docente per verificare il materiale didattico necessario alla preparazione dell'esame finale.
TESTI DI RIFERIMENTO
A. Grama, G. Karypis, V. Kumar, A. Gupta: An introduction to Parallel Computing, Addison-Wesley, 2003
M. Quinn: Parallel Programming in C with MPI and OpenMP, McGraw-Hill, 2004
D.B. Kirk, W.W. Hwu: Programming Massively Parallel Processors: A Hands-on Approach, Morgan-Kaufmann, 2012
D.P. Bertsekas and J.N. Tsitsiklis: Parallel and Distributed Computation: Numerical Methods,
Athena Scientific, Hardcover Edition 2015.
T.G. Mattson, B.A. Sanders, B.L. Massingill, Patterns for Parallel Programming, Addison-Wesley, 2005
P. Pacheco: An Introduction to Parallel Programming with MPI, Morgan-Kaufmann, 2011
VERIFICA DELL'APPRENDIMENTO
La valutazione del profitto avviene tramite prova orale alla fine dell’insegnamento Nella prova orale sarà verificata - la conoscenza delle tecniche di programmazione avanzata presentate nell’insegnamento - la conoscenza degli algoritmi paralleli introdotti nell’insegnamento, delle loro proprietà teoriche e delle problematiche relative alla loro implementazione.
RISULTATI ATTESI
Conoscenza e comprensione: lo studente dovrà essere in grado di sviluppare software parallelo adeguato ad affrontare problemi di calcolo scientifico su architetture multiprocessore. Capacità di applicare conoscenza e comprensione: lo studente avrà cognizioni sufficienti per affrontare su sistemi paralleli la risoluzione di alcuni problemi di calcolo scientifico provenienti da applicazioni informatiche complesse. Autonomia di giudizio: lo studente dovrà possedere l'abilità necessaria per individuare le architetture, gli ambienti di programmazione e gli algoritmi adeguati ad una risoluzione parallela di uno specifico problema di calcolo scientifico. Abilità comunicative: lo studente dovrà essere in grado di esporre in modo chiaro le principali caratteristiche degli algoritmi paralleli studiati e discuterne la loro applicabilità in contesti pratici. Capacità di apprendimento: lo studente dovrà essere in grado di approfondire in modo autonomo i principali aspetti degli argomenti proposti nel corso.
SLIDES DELLE LEZIONI
- 04/03/2019 - 0) Introduzione al corso.
- 04/03/2019 - 1) The multicore revolution.
- 05/03/2019 - 2) An Introduction to Parallel Architectures. (Approfondimento: Directory-based cache coherence. Slides dal corso "CMU 15-418 - Parallel Computer Architecture and Programming" di Kayvon Fatahalian, Carnegie Mellon University).
- 12/03/2019 - 3) Hardware Architectures for High-Performance Embedded Systems.
- 15/03/2019 - 4) Understanding Performance in Parallel Programming.
- 18/03/2019 - 5) Parallel Programming Patterns.
- --------------------- OpenMP ----------------------
- 19/03/2019 - 6) OpenMP threading and data.
- 19/03/2019 - 7) OpenMP barriers and critical.
- 25/03/2019 - 8) OpenMP static loops.
- 26/03/2019 - 9) OpenMP dynamic loops.
- 26/03/2019 - 10) OpenMP tasks.
- 10/05/2019 - 17) Heterogeneous OpenMP and PULP.
- --------------------- CUDA ----------------------
- 12/04/2019 - 11) Introduction to GP-GPUs.
- 12/04/2019 - 12) Introduction to CUDA/C programming.
- 29/04/2019 - 13) Parallelism in CUDA.
- 30/04/2019 - 14) Memory and data locality in CUDA.
- 03/05/2019 - 15) Thread execution efficiency.
- 06/05/2019 - 16) Memory access performance.
- --------------------- Others ----------------------
- 07/05/2019 - Instruction-level parallelism.
- --------------------- HLS for FPGA Programming ----------------------
- 13/05/2019 - 18. An Introduction to HLS.
- --------------------- Compilation ----------------------
- 21/05/2019 - 19. Compilation toolchain. (codice fornito nella sezione ESERCITAZIONI sottostante).
- 24/05/2019 - 20. Optimizing Compilers. (codice fornito nella sezione ESERCITAZIONI sottostante).
- 28/05/2019 - 21. The Role of Modern Compilers. (codice fornito nella sezione ESERCITAZIONI sottostante).
- 31/05/2019 - 22. Heterogenous OpenMP Compilation.
- 31/05/2019 - 23. Proposte di progettini.
- 03/06/2019 - SEMINARIO DARIO FAGGIOLI (SUSE) - Speculative Execution HW Bugs.
ESERCITAZIONI
-
Per il codice si veda il materiale sul repository ufficiale del corso
- --------------------- OpenMP, CUDA ----------------------
- --------------------- HLS for FPGA ----------------------
- 13/05/2019 - 01) Vivado Overview.
- 17/05/2019 - 02) Ottimizzazioni in HLS - Convoluzione.
- --------------------- Compilation ----------------------
- 21/05/2019 - Compilation toolchain: CODE SNIPPET 1 -- CODE SNIPPET 2
- 24/05/2019 - Optimizing Compilers: CODE SNIPPET 1 (test.c) -- CODE SNIPPET 2 (func.c)
- 28/05/2019 - The role of modern compilers: CODE SNIPPET (main.c)
TOOLS
PROVE D'ESAME
- SIMULAZIONE 04/06/2019 -- Traccia. -- Soluzione.
- Primo appello estivo 17/06/2019 -- Traccia. -- Soluzione.
- Secondo appello estivo 17/07/2019 -- Traccia. -- Soluzione.
- Appello autunnale 12/09/2019 -- Traccia. -- Soluzione.