LATEST NEWS

SLIDES SEMINARIO DARIO FAGGIOLI - SUSE

Le slides del seminario di Dario Faggioli (SUSE) del 3/6/2019 su speculative execution and Hardware bugs sono disponibili nella sezione SLIDES DELLE LEZIONI.

TOOL DA INSTALLARE PER ATTIVITA' DIDATTICHE

Si informano gli studenti che dalla pagina del corso, nella sezione TOOLS a fine pagina, è possibile scaricare la Virtual Machine per la piattaforma HERO, propedeutica alla lezione di domani 10 Maggio e a tutto il blocco sulla compilazione delle prossime settimane.
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

Si comunica che durante le festivita' pasquali, le lezioni verranno sospese dal 19 Aprile al 28 Aprile compresi. La lezione del 19 Aprile non avra' luogo, e ricominceremo lunedi' 29 Aprile.

CAMBIO AULA PER VENERDI 15 MARZO

Causa lavori di manutenzione al secondo piano, la lezione di HPC del venerdi 15 Marzo 2019 si terrà nel LABORATORIO BASE AL PIANO TERRA dell'edificio di matematica.

SALTO LEZIONE DI VENERDI 8 MARZO

In occasione dell'iniziativa UNIMORE ORIENTA del giorno 8 Marzo 2019 tutte le attività didattiche sono sospese.

ORARIO DELLE LEZIONI

L'orario delle lezioni è online A QUESTO LINK. Le slides per le prime lezioni sono su questa pagina nella sezione SLIDES 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

ESERCITAZIONI

PROVE D'ESAME