You are in: Home » Teaching » HPC 2022-2023

High Performance Computing

Laurea in Ingegneria e Scienze Informatiche, Università di Bologna, 2022/2023

[ Avvisi | Introduzione | Programma | Esame | Lezioni e laboratorio ]

Questa è la pagina dell'edizione precedente del corso. L'edizione più recente è disponibile a questo indirizzoa.

Avvisi

17/9/2023
Questa edizione del corso è conclusa. Ricordo che c'è tempo fino al 30/9/2023 per la consegna del progetto. La pagina dell'edizione più recente del corso è disponibile a questo indirizzo.

Introduzione

Questa è la pagina del corso di High Performance Computing, corso di laurea in Ingegneria e Scienze Informatiche, AA 2022/2023, Università di Bologna (campus di Cesena). Il corso fornisce le conoscenze teoriche e pratiche necessarie per progettare, implementare e analizzare programmi paralleli su architetture a memoria condivisa e distribuita. In particolare, durante il corso gli studenti e le studentesse impareranno a realizzare programmi paralleli usando OpenMP, MPI e CUDA/C.

Prerequisiti: Questo corso richiede una buona conoscenza della programmazione in linguaggio C e delle architetture dei calcolatori (a livello di quanto presentato nel corso di architettura dei calcolatori). Lavoreremo in ambiente Linux utilizzando prevalentemente software libero (compilatore GCC, libreria Open MPI; per la programmazione CUDA useremo il software proprietario NVIDIA, dato che al momento mancano alternative libere adeguate). È quindi auspicabile avere già acquisito confidenza con l'ambiente Unix/Linux e i suoi strumenti di sviluppo.

Programma, libri di testo e orario

Programma di massima

Laboratorio

Durante il corso verranno svolte esercitazioni di laboratorio per acquisire pratica con le tecniche viste a lezione. Verrà messo a disposizione un server Linux configurato con il software necessario; per le modalità di accesso si faccia riferimento alle istruzioni sulla piattaforma Virtuale.

All'inizio di ogni laboratorio, il docente fornisce le implementazioni seriali di alcuni programmi che risolvono semplici problemi. Scopo dell'esercitazione è di parallelizzare la versione seriale usando le tecniche indicate di volta in volta. Uno degli esercizi verrà svolto dal docente in modo guidato.

Verranno proposti più esercizi di quanti possano essere realisticamente svolti nel tempo disponibile. Non mi aspetto che vengano svolti tutti durante il laboratorio: l'intento è lasciare un po' di scelta in modo che ciascuno possa trovare qualcosa di proprio interessante.

Testi di riferimento

I seguenti testi coprono la gran parte del materiale che vedremo a lezione e in laboratorio; tuttavia, essi non sostituiscono la frequenza di lezioni e laboratori, che restano essenziali per una preparazione solida e completa.

Materiale per approfondimenti

In rete si trova molto materiale per approfondire gli argomenti trattati nel corso. Si tenga presente che i libri su OpenMP, MPI e CUDA tendono ad invecchiare velocemente man mano che nuove versioni delle specifiche sono rese disponibili (tuttavia non tratteremo le ultime versioni delle librerie, dato che comunque sarebbero poco e male supportate dai compilatori).

Per mancanza di tempo, nel corso non tratteremo in modo approfondito gli aspetti metodologici di progettazione e analisi di algoritmi paralleli. Se da un lato questi argomenti potrebbero sembrare un po' teorici, sono in realtà importanti e costituirebbero un ottimo investimento a lungo termine, perché non diventano mai obsoleti come succede con le tecnologie. Sarebbe infatti inutile conoscere le ultime novità, ad es., di MPI ma non essere in grado di progettare un algoritmo parallelo efficiente in grado di sfruttarle!

Di seguito vengono forniti alcuni riferimenti bibliografici per chi fosse interessato a questi aspetti. Prestare attenzione al fatto che si tratta di libri piuttosto impegnativi (pensate al libro di algoritmi e strutture dati, in cui però gli algoritmi e le strutture dati sono paralleli).

Orario delle lezioni

Le lezioni si svolgeranno in parte online e in parte presso il nuovo campus universitario di Cesena. Le lezioni in aula saranno comunque trasmesse in diretta streaming, in modo che sia possibile seguirle anche da remoto.

Alcune lezioni potrebbero subire delle variazioni rispetto all'orario; si prega di fare riferimento al calendario delle lezioni che verrà aggiornato di volta in volta.

Orario High Performance Computing, AA 2022/2023
Lunedì 9:00—12:00, aula 2.4
Mercoledì 15:00—18:00, lab 2.2

Esame

Specifiche del progetto per l'AA 2022/2023

Le specifiche sono disponibili sulla piattaforma Virtuale.

Modalità d'esame

Per sostenere la prova scritta è obbligatorio iscriversi tramite AlmaEsami. Le liste di iscrizione chiudono alcuni giorni prima per consentire la gestione degli aspetti logistici dell'esame, per cui è necessario iscriversi per tempo. Le date delle prove scritte sono riportate nella tabella seguente:

Prove scritte di High Performance Computing 2022/2023
Sessione invernale (Gennaio-Febbraio 2023)
I Martedì 10 gennaio ore 13:00 lab 3.3
[voti] [Alcuni commenti] [omp-gaussian-elimination.c]
II Giovedì 9 febbraio ore 11:00 lab 3.1
[voti] [Alcuni commenti] [mpi-my-reduce.c]
Sessione estiva (Giugno-Luglio 2023)
I Giovedì 15 giugno ore 10:00 lab 3.1
[voti]
II Giovedì 29 giugno ore 10:00 lab 3.1
III Mercoledì 26 luglio ore 10:00 lab 3.1
[voti]
Sessione autunnale (Settembre 2023)
I Venerdì 8 settembre ore 10:00 lab 3.1
[voti]

Lezioni e laboratorio

Codice

HPC-2022-2023.zip: esempi di programmazione illustrati durante il corso.

Lucidi e altro materiale

I lucidi non sostituiscono né i testi di riferimento né la frequenza delle lezioni e dei laboratori, che costituiscono importanti elementi per una buona preparazione dell'esame; i lucidi rappresentano uno schema di parte delle lezioni. Ringrazio chi mi segnalerà eventuali errori.

I lucidi al momento disponibili sono quelli usati nel precedente anno accademico; saranno possibili modifiche durante il corso, specialmente prima delle lezioni.

19/9/2022 ore 09:00 aula 2.4
Introduzione al corso (Pacheco cap. 1)
[ODP] [PDF]
Per approfondire
21/9/2022 ore 15:00 lab 2.2
Parallel architectures (Pacheco cap. 2 escluso 2.3.3)
[ODP] [PDF]
Per approfondire
26/9/2022
Lezione annullata causa sospensione della didattica
28/9/2022 ore 15:00 lab 2.2
Parallel Programming Patterns (McCool et al. cap 3)
[ODP] [PDF]
Per approfondire
3/10/2022 ore 9:00 aula 2.4
Parallel programming patterns (cont.)
Performance Evaluation of Parallel Programs (Pacheco cap. 2.6)
[ODP] [PDF]
Per approfondire
5/10/2022 ore 15:00 lab 2.2
Performance Evaluation of Parallel Programs (cont.)
Parallelizing Loops
[ODP] [PDF]
Per approfondire
  • Lealie Lamport, The Parallel Execution of DO Loops, Communications of the ACM 17, vol 2, feb 1974, pp. 83—93. Questo è l'articolo in cui viene introdotto il metodo degli iperpiani per l'allineamento dei loop, ammesso che tale allineamento esista.
  • Giacomo Aloisi, OPoly: an OpenMP polyhedral compiler. In questa tesi di laurea che ho seguito tempo fa viene presentato un software in grado di allineare automaticamente dei cicli annidati utilizzando il metodo degli iperpiani di Lamport.
10/10/2022 ore 9:00 aula 2.4
Shared-Memory Programming with OpenMP (Pacheco cap. 5)
[ODP] [PDF]
Per approfondire
12/10/2022 ore 15:00 lab 2.2
Lab OpenMP
Per l'accesso al server fare riferimento alle istruzioni sulla piattaforma Virtuale.
Nota: vengono proposti più esercizi di quanti realisticamente possano essere svolti nelle ore di laboratorio; quello che non si riesce a fare durante il laboratorio viene lasciato per casa.
  1. Decifrare un messaggio cifrato [Soluzione]
  2. Prodotto scalare [Soluzione]
  3. Calcolo del valore approssimato di π [Soluzione]
  4. Frequenze dei caratteri in un documento [Soluzione]
  5. Crivello di Eratostene [Soluzione]
17/10/2022 ore 9:00 aula 2.4
Shared-Memory Programming with OpenMP (part 2)
19/10/2022 ore 15:00 lab 2.2
Lab OpenMP
  1. Simulare la clausola schedule(dynamic) [Soluzione]
  2. Ray tracing [Soluzione]
  3. La mappa del gatto di Arnold [Soluzione]
  4. Merge Sort [Soluzione]
  5. Loop-carried dependences [Soluzione]
24/10/2022 ore 9:00 aula 2.4
Distributed-Memory Programming with MPI (Pacheco cap. 3)
[ODP] [PDF]
Per approfondire
27/10/2022 ore 15:00 lab 2.2
Lab MPI
  1. Comunicazione ad anello [Soluzione]
  2. Comunicazione broadcast [Soluzione]
  3. Calcolo del valore approssimato di π [Soluzione]
  4. Somma del contenuto di un array [Soluzione]
31/10/2022
Lezione annullata causa sospensione della didattica
2/11/2022 ore 15:00 lab 2.2
Lab MPI
  1. Insieme di Mandelbrot [Soluzione]
  2. Prodotto scalare [Soluzione]
  3. Calcolo dell'area dell'unione di cerchi [Soluzione]
7/11/2022 ore 9:00 aula 2.4
MPI
9/11/2022 ore 15:00 lab 2.2
Lab MPI
  1. Automa cellulare della regola 30 [Soluzione]
  2. MPI Datatype [Soluzione]
  3. Bounding Box [Soluzione]
  4. Ricerca parallela su array [Soluzione]
14/11/2022 ore 9:00 aula 2.4
CUDA Programming
[ODP] [PDF]
Per approfondire
16/11/2022 ore 15:00 lab 2.2
Lab CUDA
  1. Prodotto scalare [Soluzione]
  2. Inversione di array [Soluzione]
  3. Odd-Even Transposition Sort [Soluzione]
  4. Oscillatori accoppiati [Soluzione]
21/11/2022 ore 9:00 aula 2.4
CUDA Programming
23/11/2022 ore 15:00 lab 2.2
Lab CUDA
  1. Somma di matrici [Soluzione]
  2. Automa cellulare della regola 30 [Soluzione]
  3. L'automa cellulare ANNEAL [Soluzione]
  4. (Esercizio extra) La mappa del gatto di Arnold [Soluzione]
28/11/2022 ore 9:00 aula 2.4
Seminario prof. Bartolini [slide]
(a seguire) SIMD Programming
[ODP] [PDF]
Per approfondire
30/11/2022 ore 15:00 lab 2.2
Ultima lezione del corso
Lab SIMD
  1. Prodotto scalare [Soluzione]
  2. Prodotto matrice-matrice [Soluzione]
  3. Mappatura livelli di grigio di una immagine [Soluzione]
  4. La mappa del gatto di Arnold [Soluzione]
This page validates as XHTML 1.0 strict This page validates as CSS Check the accessibility of this page with WAVE
This page was last updated on September 17 2023 informativa sulla privacy