Salta ai contenuti. | Salta alla navigazione

Strumenti personali

ALGORITMI PER IL CALCOLO PARALLELO

Anno accademico e docente
Non hai trovato la Scheda dell'insegnamento riferita a un anno accademico precedente? Ecco come fare >>
English course description
Anno accademico
2022/2023
Docente
WALTER BOSCHERI
Crediti formativi
6
Periodo didattico
Secondo Semestre
SSD
MAT/08

Obiettivi formativi

L'obbiettivo principale del corso consiste nel fornire allo studente le basi della programmazione in ambito parallelo, sia per architetture a memoria distribuita che condivisa.

Le principali conoscenze acquisite saranno:
- caratteristiche delle moderne architetture per il calcolo parallelo;
- metriche per la valutazione delle prestazioni di codici paralleli, mediante misure del tempo di calcolo (speedup, scaling ed efficienza);
- introduzione al paradigma MPI per architetture a memoria distribuita: comunicazioni punto-punto e collettive, direttive di riduzione e sincronizzazione;
- introduzione ad OpenMP per architetture a memoria condivisa;
- esempi di utilizzo delle principali librerie di calcolo per l'algebra lineare, fattorizzazioni e problemi agli autovalori: BLAS, ATLAS, LAPACK, MKL e loro implementazioni parallele;
- esempi d'uso di profiler per l'analisi delle performance su CPU;
- calcolo scientifico per la risoluzione di equazioni alle derivate parziali

Le principali abilità saranno:
- Analizzare un algoritmo seriale e individuare una corretta metodologia di suddivisione del carico di lavoro per ottenere un buono speedup;
- Analizzare un algoritmo seriale e individuare una metodologia di accesso ai dati che massimizzi gli accessi a memoria contigui ed allineati.
- Analizzare le performance di un codice quando eseguito su una architettura reale.

Prerequisiti

E’ necessario padroneggiare le seguenti conoscenze fornite dal corso di "Calcolo numerico":
- fattorizzazione QR, fattorizzazione LU e suo utilizzo per la risoluzione di sistemi lineari;
- rappresentazione in virgola mobile, precisione di macchina, aritmetica finita.

Prerequisito consigliato è la familiarità con il linguaggio di programmazione FORTRAN.
Il computer portatile è altamente consigliato.

Contenuti del corso

Introduzione (10 ore)
- Introduzione al calcolo parallelo, architettura di una CPU, costo computazionale;
- Introduzione al linguaggio di programmazione FORTRAN;
- misura di prestazioni (speedup, scaling ed efficienza), codice FORTRAN per misurare il tempo di calcolo in seriale;
- Esempio: implementazione del metodo del gradiente coniugato per la soluzione di sistemi lineari;

Utilizzo di MPI (12 ore)
- Introduzione a MPI, script per la compilazione e il lancio di codici paralleli,
comunicazioni punto-punto bloccanti e non bloccanti, definizione di deadlock ed esempio mediante send/receive,
soluzione del deadlock mediante sendreceive, comunicazioni collettive, riduzioni, direttive di sincronizzazione;
- Esempio: implementazione del metodo del gradiente coniugato mediante MPI;

Approfondimenti
- OpenMP (8 ore)

Esempi di parallelizzazione per il calcolo scientifico applicato a equazioni iperboliche alle derivate parziali (18 ore)
- equazione del calore su griglie strutturate
- equazioni per le correnti a superficie libera su griglie strutturate
- parallelizzazione di griglie non strutturate usando la libreria Metis

Metodi didattici

I temi del corso verranno introdotti in aula mediante l'uso di presentazioni ed esempi pratici.
Possibile applicazione dei codici di calcolo su architettura CINECA.

Modalità di verifica dell'apprendimento

Il livello di raggiungimento degli obiettivi formativi indicati in precedenza verrà verificato attraverso una prova d'esame, composta da due parti:
- presentazione di un progetto svolto autonomamente;
- discussione sui contenuti del corso.
Il testo per i possibili progetti d'esame verrà rilasciato durante il corso.

Testi di riferimento

- Dispense del docente.
- Libro di Testo: V. Kumar, A. Grama, A. Gupta, G. Karypis, Introduction to Parallel Computing: design and analysis of Algorithms, Addison-Wesley, 2003
- Testo per approfondimento: D.P. Bertsekas, J. Tsisiklis, Parallel and Distributed Computation: Numerical Methods, Trentine-Hall, 1989