Nuova ricerca

ANDREA MARONGIU

Professore Associato
Dipartimento di Scienze Fisiche, Informatiche e Matematiche sede ex-Matematica

Insegnamento: High Performance Computing

Informatica (Offerta formativa 2024)

Obiettivi formativi

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.

Prerequisiti

Per godere appieno dei contenuti del corso, è auspicabile che lo studente abbia le seguenti conoscenze di base:
- Nozioni fondamentali relative all'architettura dei computer, alle gerarchie di memoria e alle metriche di misurazione delle prestazioni computazionali.
- Rudimenti di programmazione imperativa e orientata agli oggetti (C/C++).
- Concetti di base legati ai sistemi operativi.

Possedere questi prerequisiti consentirà allo studente di apprezzare meglio i materiali del corso e di comprenderli più facilmente.

Programma del corso

Architetture parallele (14h):
- 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 (6h):
- 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 (15h):
- 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;

Laboratori (28h)
- Laboratori su OpenMP;
- Laboratori su CUDA;
- Laboratori su HLS;

Metodi didattici

Tutte le ore di lezione saranno svolte in lingua INGLESE.

Lezioni frontali tramite slides sugli argomenti teorici; Esercitazioni pratiche in laboratorio sull’utilizzo dei modelli di programmazione presentati.

Gli studenti avranno a disposizione un laboratorio virtuale accessibile H24 per esercitazioni autonome.

Testi di riferimento

I materiali didattici consistono principalmente nelle slides presentate a lezione, all'interno delle quali sono presenti link per l'approfondimento.

Tutti i materiali sono reperibili all'interno della pagina Moodle del corso (https://moodle.unimore.it/course/view.php?id=7324)

Verifica dell'apprendimento

Nel corso dell’anno accademico sono garantiti sei appelli d’esame per la verifica dell’apprendimento.

L’esame è composto da tre parti, una Valutazione TEORICA, Valutazione PRATICA ed un ORALE.

- Valutazione TEORICA, svolta solitamente in forma scritta della durata di circa un’ora e mezzo, prevede domande a risposta singola e multipla, volte a valutare la conoscenza degli argomenti teorici trattati a lezione, più esercizi o domande a risposta aperta, volti a valutare la comprensione degli aspetti più pratici del corso. Durante la prova NON è ammesso consultare il materiale didattico e libri di testo. La Valutazione TEORICA può avvenire sotto forma ORALE nel caso gli iscritti siano inferiori a 5.

- Valutazione PRATICA è finalizzata alla valutazione delle conoscenze e delle capacità di utilizzo dei modelli di programmazione presentati durante il corso. Per i frenquentati è possibile svolgere la valutazione PRATICA attraverso la presentazione di 3 assignment da svolgere in gruppo durante il corso (in gruppo) ed un breve orale individuale da svolgere in sede d'esame di discussione di tali attività svolte. Per chi non partecipa alle attività di gruppo la valutazione pratica è svolta attraverso un orale dove si valuta, attraverso esercizi pratici, le capacità di utilizzo delle tecniche di programmazione presentate durante il corso.

- ORALE, volto ad approfondire la valutazione della conoscenza di tutti gli aspetti teorici e pratici del corso, e si basa sull’esito della prova scritta (tipicamente una prova scritta appena sufficiente richiede un orale più approfondito rispetto ad una prova scritta ottima. Un quesito o esercizio della prova scritta a cui si è risposto male identifica un punto di probabile approfondimento alla prova orale).

Le prove sono valutate in maniera quantitativa con voto in trentesimi (più possibile lode) in base:
- Al grado di conoscenza dello studente della materia.
- Alle capacità pratiche di utilizzo dei modelli di programmazione presentati.
- Alle capacità di analizzare ed risolvere problemi pratici di parallelizzazione di algoritmi attraverso la rielaborazione delle conoscenze apprese nel corso.

Il voto finale è dato dalla media aritmetica delle tre prove (è necessario comunque essere SUFFICIENTI in tutte e tre le prove per superare l'esame).

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.