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

High Performance Computing
Laurea in Ingegneria e Scienze Informatiche, Università di Bologna, 2021/2022

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

Avvisi

28/4/2022
Le date degli esami scritti della sessione estiva (giugno/luglio 2022) sono state pubblicate su AlmaEsami. Gli esami si svolgeranno in presenza (salvo disposizioni diverse da parte dell'Ateneo) ma con le stesse modalità dei precedenti appelli, cioè al computer usando EOL.
19/2/2022
Il server isi-raptor03 è nuovamente disponibile.
17/2/2022
Causa interruzione dell'energia elettrica in sala server, devo procedere allo spegnimento del server isi-raptor03. L'energia dovrebbe essere ripristinata nel fine settimana/inizio prossima settimana.
14/2/2022
Sono disponibili i voti dell'esame del 9/2/2022, assieme ad alcuni commenti generali e alla soluzione completa dell'esercizio su MPI (non era richiesto di scrivere codice, ma ritengo utile proporre un programma completo per illustrare l'algoritmo)
19/1/2022
Sono disponibili i voti dell'esame del 12/1/2022, assieme ad alcuni commenti generali e alla soluzione completa dell'esercizio su MPI (non era richiesto di scrivere codice, ma ritengo utile proporre un programma completo per illustrare l'algoritmo)
1/12/2021
Ultima lezione del corso
13/11/2021
Le date degli esami scritti della sessione invernale (gennaio/febbraio 2022) sono state pubblicate su AlmaEsami. Gli esami si svolgeranno in modalità esclusivamente online.
21/9/2021
La lezione di giovedì 23/9 si terrà in lab 2.2 anziché lab 3.1
27/8/2021
Creata questa pagina.

Introduzione

Questa è la pagina del corso di High Performance Computing, corso di laurea in Ingegneria e Scienze Informatiche, AA 2021/2022, Università di Bologna (campus di Cesena). Il corso fornisce agli studenti 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 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 di programmazione parallela svolte a lezione. Verrà messo a disposizione un server Linux configurato con il software necessario; per le modalità di accesso si faccia riferimento alle apposite istruzioni.

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

Generalmente verranno proposti più esercizi di quanti possano essere realisticamente svolti nel tempo disponibile. Non mi aspetto che vengano svolti tutti durante il laboratorio, ma preferisco lasciare un po' di scelta in modo che ciascuno possa trovare qualcosa di proprio interessante.

Testi di riferimento

Materiale per approfondimenti

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

Per chi vuole approfondire consiglio di soffermarsi èoù sugli aspetti metodologici (progettazione di algoritmi paralleli), perché sono un ottimo investimento a lungo termine dato che non diventano 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!

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 del corso di High Performance Computing, AA 2021/2022
Lunedì 09:00—12:00 Aula 2.4
Mercoledì 15:00—18:00 Lab 2.2 (dalla seconda settimana in poi)
Giovedì 15:00—18:00 Lab (prima settimana, 23/9/2021)

Esame

Specifiche del progetto per l'AA 2021/2022

Specifiche del progetto [PDF] [sorgenti] Consegna tramite virtuale entro le ore 23:59 del 30 settembre 2022

Regole 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 2021/2022
Sessione invernale (Gennaio-Febbraio 2022)
I 12/1/2022
[Voti] [Alcuni commenti] [mpi-rotate-right.c]
II 9/2/2022
[Voti] [Alcuni commenti] [mpi-first-pos.c]
Sessione estiva (Giugno-Luglio 2022)
I 10/6/2022 ore 10:00 lab 3.1
II 22/6/2022 ore 10:00 lab 3.1
III 7/7/2022 ore 10:00 lab 3.1
[Voti]
Sessione autunnale (Settembre 2022)
I TBD

Lezioni e laboratorio

Codice

HPC2122.zip: esempi di programmazione illustrati durante il corso.

Istruzioni per l'accesso al server usato in laboratorio.

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 l'anno accademico precedente; saranno possibili modifiche durante il corso, specialmente prima delle lezioni.

20/09/2021 ore 09:00 aula 2.4 [Link Teams]
Introduzione al corso (Pacheco cap. 1)
[ODP] [PDF] [video]
Per approfondire
23/09/2021 ore 15:00 lab 3.1 2.2 [Link Teams]
Introduzione (cont.)
Parallel architectures (Pacheco cap. 2 escluso 2.3.3)
[ODP] [PDF] [video]
Per approfondire
27/9/2021 ore 09:00 aula 2.4 [Link Teams]
Performance Evaluation of Parallel Programs (Pacheco cap. 2.6)
[ODP] [PDF] [video]
Per approfondire
29/9/2021 ore 15:00 lab 2.2 [Link Teams]
Parallel Programming Patterns (McCool et al. cap 3)
[ODP] [PDF] [video]
Per approfondire
4/10/2021 ore 9:00 aula 2.4 [Link Teams]
Parallel Programming Patterns (cont.)
[video]
6/10/2021 ore 15:00 lab 2.2 [Link Teams]
Parallelizing Loops
[ODP] [PDF] [video]
11/10/2021 ore 9:00 aula 2.4 [Link Teams]
Shared-Memory Programming with OpenMP (Pacheco cap. 5)
[ODP] [PDF] [video]
Per approfondire
13/10/2021 ore 15:00 lab 2.2 [Link Teams]
Lab OpenMP
[video]
[Istruzioni per l'accesso al server]
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. Frequenza dei caratteri [Soluzione]
  5. Il crivello di Eratostene [Soluzione]
  6. Scan inclusiva [Soluzione]
18/10/2021 ore 9:00 aula 2.4 [Link Teams]
Shared-Memory Programming with OpenMP (cont.)
[video]
20/10/2021 ore 15:00 lab 2.2 [Link Teams]
Lab OpenMP
[video]
[Istruzioni per l'accesso al server]
  1. Ray tracing [Soluzione]
  2. Loop-carried dependencies [Soluzione]
  3. Merge Sort [Soluzione]
  4. Simulare clausola schedule(dynamic) [Soluzione]
  5. La mappa del gatto di Arnold [Soluzione]
25/10/2021 ore 9:00 aula 2.4 [Link Teams]
Distributed-Memory Programming with MPI (Pacheco cap. 3)
[ODP] [PDF] [video]
Per approfondire
27/10/2021 ore 15:00 lab 2.2 [Link Teams]
Lab MPI
[video]
[Istruzioni per l'accesso al server]
  1. Comunicazione ad anello [Soluzione]
  2. Comunicazione broadcast [Soluzione]
  3. Calcolo del valore approssimato di π [Soluzione]
  4. Somma del contenuto di un array [Soluzione]
1/11/2021
No lezione
3/11/2021 ore 15:00 lab 2.2 [Link Teams]
Lab MPI
[video]
[Istruzioni per l'accesso al server]
  1. Insieme di Mandelbrot [Soluzione]
  2. Prodotto scalare [Soluzione]
  3. Calcolo dell'area dell'unione di cerchi [Soluzione]
8/11/2021 ore 9:00 aula 2.4 [Link Teams]
Distributed-Memory Programming with MPI (cont.)
[video]
10/11/2021 ore 15:00 lab 2.2 [Link Teams]
Lab MPI
[video]
[Istruzioni per l'accesso al server]
  1. Bounding Box [Soluzione]
  2. MPI Datatype [Soluzione]
  3. Automa cellulare della regola 30 [Soluzione]
  4. (Esercizio extra) Ricerca parallela su array [Soluzione]
15/11/2021 ore 9:00 aula 2.4 [Link Teams]
CUDA Programming
[ODP] [PDF] [video]
Per approfondire
17/11/2021 ore 15:00 lab 2.2 [Link Teams]
Lab CUDA
[video]
[Istruzioni per l'accesso al server]
  1. Prodotto scalare con CUDA [Soluzione]
  2. Inversione di array [Soluzione]
  3. Odd-Even Transposition Sort [Soluzione]
  4. (Esercizio extra) Oscillatori accoppiati [Soluzione]
22/11/2021 ore 9:00 aula 2.4 [Link Teams]
CUDA Programming (cont.)
[video]
24/11/2021 ore 15:00 lab 2.2 [Link Teams]
Lab CUDA
[video]
[Istruzioni per l'accesso al server]
  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]
29/11/2021 ore 9:00 aula 2.4 [Link Teams]
SIMD Programming
[ODP] [PDF] [video]
Per approfondire
1/12/2021 ore 15:00 lab 2.2 [Link Teams]
Ultima lezione
Seminario prof. Andrea Bartolini (DEI-UniBO); video sulla piattaforma Virtuale
Alcuni esercizi di laboratorio, se avanzerà tempo:
[Istruzioni per l'accesso al server]
  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 July 11 2022 informativa sulla privacy