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

High Performance Computing

Laurea in Ingegneria e Scienze Informatiche, Università di Bologna (campus di Cesena), 2023/2024

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

Avvisi

12/2/2024
Sono disponibili i voti della prova scritta dell'8/2/2024.
29/1/2024
La prova scritta di High Performance Computing di lunedì 29 gennaio 2024 è rimandata a giovedì 8/2/2024 ore 14:00 lab 3.1. Tutti coloro che erano iscritti all'esame del 29/1 sono stati spostati al nuovo appello, ma si prega di verificare su AlmaEsami per sicurezza. Le iscrizioni sono state riaperte per consentire a chi voglia aggiungersi di farlo.
28/1/2024
La prova scritta di High Performance Computing prevista per lunedì 29 gennaio 2024 è RIMANDATA causa problemi di salute del docente. Verrà recuperata sperabilmente la settimana successiva, in base alla disponibilità del laboratorio e in accordo con la segreteria didattica. Sarà mia cura informare tutti/e della nuova data appena disponibile. Mi scuso per il disagio.
15/1/2024
Sono disponibili i voti della prova scritta del 10/1/2024. Sono anche forniti alcuni commenti generali sulle risposte.
20/10/2023
Le lezioni di mercoledì 25 e giovedì 26 ottobre 2023 sono annullate per motivi di salute.
18/9/2023
Creata questa pagina.

Introduzione

Questa è la pagina del corso di High Performance Computing, corso di laurea in Ingegneria e Scienze Informatiche, AA 2023/2024, 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.

Il docente del corso è Moreno Marzolla.

Orario di ricevimento: mercoledì subito dopo la lezione; è possibile richiedere un incontro via Teams concordando data e ora via mail.

Come contattare il docente:

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 fornito gratuitamente da NVidia.

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à di norma 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 è di fornire 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 verrà trattata la teoria sulla progettazione e analisi di algoritmi paralleli. Per chi fosse interessato a questi aspetti, vengono forniti alcuni riferimenti bibliografici per approfondimenti. Si presti attenzione al fatto che si tratta di letture molto impegnative, normalmente utilizzate in corsi magistrali (se non addirittura di dottorato di ricerca).

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 2023/2024
Mercoledì 10-12 Lab 4.2
Giovedì 14-17 Aula 2.5

Esame

Specifiche del progetto

Le specifiche del progetto per l'anno accademico 2023/2024 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 2023/2024
Sessione invernale (Gennaio-Febbraio 2024)
I 10/1/2024 ore 10:00 lab 3.1
[Dettaglio punteggi] [commenti alle risposte]
II 8/2/2024 ore 14:00 lab 3.1
[Dettaglio punteggi]
Sessione estiva (Giugno-Luglio 2024)
I TBD
II TBD
III TBD
Sessione autunnale (Settembre 2024)
I TBD

Lezioni e laboratorio

Codice

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

Per l'accesso al server Linux usato per le esercitazioni fare riferimento alle istruzioni sulla piattaforma Virtuale.

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.

20/9/2023 ore 10:00 lab 4.2
Introduzione al corso (Pacheco cap. 1)
[ODP] [PDF]
Per approfondire
21/9/2023 ore 14:00 aula 2.5
Parallel architectures (Pacheco cap. 2 escluso 2.3.3)
[ODP] [PDF]
Per approfondire
27/9/2023 ore 10:00 lab 4.2
Parallel Programming Patterns parte 1 (McCool et al. cap 3)
[ODP] [PDF]
Per approfondire
28/9/2023 ore 14:00 aula 2.5
Parallel Programming Patterns parte 2
4/10/2023 ore 10:00 lab 4.2
Performance Evaluation of Parallel Programs (Pacheco cap. 2.6)
[ODP] [PDF]
Per approfondire
5/10/2023 ore 14:00 aula 2.5
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.
11/10/2023 ore 10:00 lab 4.2
Shared-Memory Programming with OpenMP (Pacheco cap. 5)
[ODP] [PDF]
Per approfondire
12/10/2023 ore 14:00 aula 2.5
Shared-Memory Programming with OpenMP (cont.)
18/10/2023 ore 10:00 lab 4.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. Calcolo del valore approssimato di π [Soluzione]
  3. Frequenze dei caratteri in un documento [Soluzione]
  4. Crivello di Eratostene [Soluzione]
19/10/2023 ore 14:00 aula 2.5
Shared-Memory Programming with OpenMP (part 2)
25/10/2023
Laboratorio annullato. Vengono comunque proposti alcuni esercizi da svolgere in autonomia, che potranno essere discussi con il docente all'inizio della prima lezione utile.
  1. Simulare la clausola schedule(dynamic) [Soluzione]
  2. Ray tracing [Soluzione]
  3. La mappa del gatto di Arnold [Soluzione]
  4. Merge Sort [Soluzione]
26/10/2023
Lezione annullata.
2/11/2023 ore 14:00 aula 2.5
Distributed-Memory Programming with MPI (Pacheco cap. 3)
[ODP] [PDF]
Per approfondire
8/11/2023 ore 10:00 lab 4.2
Lab MPI
  1. Comunicazione ad anello [Soluzione]
  2. Calcolo del valore approssimato di π [Soluzione]
  3. Comunicazione broadcast [Soluzione]
9/11/2023 ore 14:00 aula 2.5
Distributed-Memory Programming with MPI (cont.)
15/11/2023 ore 10:00 lab 4.2
Lab MPI
  1. Insieme di Mandelbrot [Soluzione]
  2. Prodotto scalare [Soluzione]
  3. Calcolo dell'area dell'unione di cerchi [Soluzione]
16/11/2023 ore 14:00 aula 2.5
Distributed-Memory Programming with MPI (cont.)
22/11/2023 ore 10:00 lab 4.2
Lab MPI
  1. Automa cellulare della regola 30 [Soluzione]
  2. MPI Datatype [Soluzione]
  3. Bounding Box [Soluzione]
23/11/2023 ore 14:00 aula 2.5
CUDA Programming
[ODP] [PDF]
Per approfondire
29/11/2023 ore 10:00 lab 4.2
Lab CUDA
  1. Prodotto scalare [Soluzione]
  2. Inversione di array [Soluzione]
  3. Odd-Even Transposition Sort [Soluzione]
30/11/2023 ore 14:00 aula 2.5
CUDA Programming (cont.)
6/12/2023 ore 10:00 lab 4.2
Lab CUDA
  1. Somma di matrici [Soluzione]
  2. Automa cellulare della regola 30 [Soluzione]
  3. L'automa cellulare ANNEAL [Soluzione]
7/12/2023 ore 14:00 aula 2.5
SIMD Programming
[ODP] [PDF]
Per approfondire
13/12/2023 ore 10:00 lab 4.2
Lab SIMD
  1. Prodotto scalare [Soluzione]
  2. Prodotto matrice-matrice [Soluzione]
  3. Mappatura livelli di grigio di una immagine [Soluzione]
14/12/2023 ore 14:00 aula 2.5
Progetto d'esame
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 February 12 2024 informativa sulla privacy