High Performance Computing
Laurea in Ingegneria e Scienze Informatiche, Università di Bologna, 2019/2020
Salta all'introduzione
Questa è la pagina dell'edizione 2019/2020 del corso.
La pagina della nuova edizione 2020/2021 è disponibile qui.
- 2/6/2020
- Per chi deve ancora consegnare il progetto: non è necessario includere i file di input forniti con il codice seriale. Sono molto voluminosi e rendono l'invio difficoltoso (oltre a essere superflui, dato che ne ho già una copia)
- 19/5/2020
- Nota sull'accesso al server: i tecnici hanno cambiato l'indirizzo IP del frontend si-alfa.csr.unibo.it nei giorni scorsi. In caso di difficoltà a collegarsi può essere necessario eliminare le vecchie credenziali del frontend dalla propria configurazione di ssh (su sistemi Linux sono nel file .ssh/known_hosts e si possono rimuovere eseguendo il comando ssh-keygen -R si-alfa.csr.unibo.it; potrebbe essere necessario dare il comando più volte).
- 14/5/2020
- Sono disponibili le date degli appelli d'esame della sessione estiva (giugno/luglio 2020); la prova si svolgerà online. È possibile iscriversi tramite AlmaEsami. Nota: vista la situazione emergenziale, se il numero di iscritti lo consentirà la prova scritta potrebbe essere convertita in un colloquio orale.
- 11/2/2020
- I voti della prova scritta del 6/2/2020 sono disponibili su AlmaEsami. I dettagli dei punteggi assegnati ad ogni esercizio, e alcuni commenti generali sono consultabili qui. Ricordo che ai fini del calcolo della media, 30L ha peso 30, ma l'eventuale lode potrà essere usata per assegnare la lode come voto finale.
- 7/2/2020
- Doit-Systems, azienda che opera nel settore HPC, propone stage/tirocini a Maranello (sono previsti incentivi per chi si deve spostare); chi fosse interessato mi contatti.
- 18/1/2020
- I voti della prova scritta del 14/1/2020 sono disponibili su AlmaEsami. I dettagli dei punteggi assegnati ad ogni esercizio, e alcuni commenti generali sono consultabili qui. Ricordo che ai fini del calcolo della media, 30L ha peso 30, ma l'eventuale lode potrà essere usata per assegnare la lode come voto finale.
- 27/11/2019
- Per chi fosse interessato: alcune aziende attive in ambito HPC (in nessun ordine particolare): Doit-Systems, E4 Computer Engineering, CINECA (divisione supercalcolo), ENI, HPE (Hewlett Packard Enterprise), Eurotech, ECMWF (European Centre for Medium-Range Weather Forecasts, il nuovo datacenter è a Bologna), ...
- 27/11/2019
- Ultima lezione del corso.
- 12/11/2019
- Ricordo che il laboratorio di domani mercoledì 13 novembre terminerà alle ore 16:00
- 27/10/2019
- Sono disponibili le date degli appelli d'esame (scritti) della sessione invernale (gennaio/febbraio 2020). È possibile iscriversi tramite AlmaEsami.
- 7/9/2019
- Slide di presentazione del corso.
Salta al programma del corso e libri di testo
Questa è la pagina del corso di High
Performance Computing, corso di laurea in Ingegneria
e Scienze Informatiche, AA
2019/2020, 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.
Torna in cima alla pagina.
Salta alla modalità d'esame
Programma di massima
- Architetture parallele: sistemi a memoria condivisa e distribuita; GPGPU
- Pattern per la programmazione parallela: problemi embarassingly parallel; work farm; partitioning; reduce; stencil
- Valutazione delle prestazioni di programmi paralleli: speedup, efficienza, scalabilità
- Programmazione parallela su architetture a memoria condivisa con OpenMP
- Programmazione parallela su architetture a memoria distribuita con MPI
- Programmazione di GPU con CUDA/C
- Programmazione SIMD; estensioni SIMD dei processori Intel
Testi di riferimento
-
Peter Pacheco, An
Introduction to Parallel Programming, Morgan Kaufmann,
2011, ISBN 978-0123742605
Errori noti del libro, a cura dell'autore.
Buon testo introduttivo sulle architetture
parallele e sulla programmazione parallela; di questo libro
verranno trattate le parti relative all'introduzione generale
sulle architetture, programmazione OpenMP e MPI. Non verrè
trattata la parte relativa alla programmazione mediante
Pthread. Il libro, purtroppo, non tratta la programmazione di
GPU.
-
CUDA C programming guide
Guida di programmazione CUDA/C, liberamente disponibile sul sito di NVIDIA.
Materiale per approfondimenti
-
Norm
Matloff, Programming on
Parallel Machines: GPU, Multicore, Clusters and more,
liberamente disponibile online con licenza Creative Commons.
Questo libro è liberamente disponibile online,
e copre la maggior parte degli argomenti affrontati a lezione,
ossia OpenMP, MPI e CUDA. Si tratta di una bozza ancora in fase di
stesura, il che significa che certe parti sono incomplete o
mancano del tutto. È comunque molto utile come supporto
allo studio del materiale di questo corso.
-
Georg Hager, Gerhard Wellein, Introduction to High Performance Computing for Scientists and Engineers, CRC Press,
2010, ISBN 9781439811924
Questo libro contiene una parte introduttiva
sulle architetture parallele e sullo sviluppo di algoritmi
paralleli; prosegue poi con la programmazione OpenMP e MPI. Il
libro è ricco di esempi e considerazioni sulle prestazioni
di applicazioni parallele; purtroppo non tratta la programmazione
di GPU. Il codice di esempio è in C e FORTRAN. Si tratta
secondo me di un ottimo volume di approfondimento per chi desideri
andare oltre le spiegazioni viste a lezione.
-
I. Foster. Designing and Building Parallel
Programs. Addison-Wesley, 1995, ISBN 978-0201575941
Questo libro è liberamente disponibile
online (cliccare sul titolo); il contenuto è un po' datato,
ma la parte generale sulle metodologie di programmazione e di
valutazione delle prestazioni resta comunque valida.
-
Jason Sanders, Edward Kandrot, CUDA by Example: An Introduction to General-Purpose GPU Programming, Addison-Wesley, 2010, ISBN 978-0131387683
Questo libro tratta la programmazione delle
GPU mediante CUDA. Altre risorse indicate per chi già
conosce CUDA e desidera approfondire tecniche efficienti di
programmazione, sono GPU Gems 2 e GPU Gems 3 (entrambi
disponibili online).
-
Michael McCool, Arch D. Robison, James Reinders,
Structured Parallel Programming, Morgan Kaufmann, 2012, ISBN 978-0-12-415993-8
Contiene una buona introduzione ai pattern per la programmazione parallela. Questo libro è liberamente scaricabile dal sito dell'editore, collegandosi dalla rete di Ateneo.
Guide introduttive alla shell Linux
(per chi non ha seguito il corso di Sistemi Operativi con il prof. Vittorio Ghini)
Torna in cima alla pagina.
Salta all'orario delle lezioni
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:
Specifiche del progetto per l'AA 2019/2020
Specifiche del progetto [PDF] (consegna entro le ore 23:59 del 30 settembre 2020)
Regole d'esame
- L'esame consiste in una prova scritta, della durata di 60 minuti,
e un progetto di programmazione su specifiche fornite dal
docente.
- La prova scritta si compone di quattro domande e/o semplici
esercizi, e ha lo scopo di verificare la conoscenza prevalentemente
degli aspetti teorici/metodologici del corso. Il voto della prova
scritta è espresso in trentesimi (massimo 30).
- Sono disponibili alcuni esempi di prove d'esame: primo esempio; secondo esempio; terzo esempio.
- Il progetto di programmazione, da svolgere
individualmente, ha lo scopo di verificare la
padronanza delle tecniche di programmazione parallela illustrate a
lezione. Il voto del progetto è espresso in trentesimi (massimo 30).
- Il progetto dovrà essere accompagnato da una relazione che
descriva e giustifichi le scelte implementative, e illustri le
prestazioni e la scalabilità della soluzione proposta.
- Le due prove sono indipendenti, e possono essere
sostenute in ordine qualsiasi. Ciascuna prova si considera superata
con un punteggio di almeno 18/30.
- I voti restano validi fino all'ultima sessione d'esame
dell'edizione corrente del corso, quindi fino al 30 settembre
2020. Dopo tale data, tutti i voti in sospeso vengono persi,
e si ricomincia da capo con la nuova edizione del corso. In
particolare, il progetto va tassativamente consegnato entro le
23:59 del 30 settembre 2020.
- Il voto finale si calcola come:
VotoFinale = VotoScritto × 0.4 + VotoProgetto × 0.6
arrotondando il risultato all'intero più vicino (xxx.49 viene arrotondato per difetto, xxx.5 viene arrotondato per eccesso). La lode può
essere assegnata, a discrezione del docente, in casi di prova scritta e progetto di qualità particolarmente elevata.
Torna in cima alla pagina.
Salta ai lucidi delle lezioni
Tutte le lezioni si svolgeranno presso il nuovo campus universitario
di Cesena.
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 2019/2020
Lunedì |
9:00—12:00, Aula 3.7 |
Mercoledì |
14:00—17:00, Lab 2.2 |
Torna in cima alla pagina.
Salta al codice di esempio
I lucidi non sono da considerare come sostitutivi né
dei testi di riferimento né della frequenza alle lezioni, che
costituiscono importanti elementi per una buona preparazione
dell'esame; i lucidi messi a disposizione costituiscono soltanto 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.
Salvo dove diversamente indicato, i lucidi delle lezioni sono
distribuiti con licenza Creative
Commons Attribution-Share Alike 4.0 International (CC BY-SA 4.0).
- 18/9/2019 ore 14:00 lab 2.2
- Introduzione al corso (Pacheco cap. 1)
[ODP] [PDF]
- 23/9/2019 ore 9:00 aula 3.7
- Parallel architectures
(Pacheco cap. 2 escluso 2.3.3)
[ODP] [PDF]
- 25/9/2019 ore 14:00 lab 2.2
- Performance Evaluation of Parallel Programs (Pacheco cap. 2.6)
[ODP] [PDF]
- 30/9/2019 ore 9:00 aula 3.7
- Parallel Programming Patterns (McCool et al. cap 3)
[ODP] [PDF]
- 2/10/2019 ore 14:00 lab 2.2
- Parallelizing Loops
[ODP] [PDF]
- 7/10/2019 ore 09:00 aula 3.7
- Shared-Memory Programming with OpenMP (Pacheco cap. 5)
[ODP] [PDF]
- 9/10/2019 ore 14:00 lab 2.2
- Lab OpenMP
[ODT] [PDF] [ex1-openmp.zip] [possibili soluzioni] [Istruzioni per la connessione al server]
- 14/10/2019 ore 09:00 aula 3.7
- Shared-Memory Programming with OpenMP (cont.)
- 16/10/2019 ore 14:00 lab 2.2
- Lab OpenMP
[ODT] [PDF] [ex2-openmp.zip] [possibili soluzioni]
- 21/10/2019 ore 09:00 aula 3.7
- Distributed-Memory Programming with MPI (Pacheco cap. 3)
[ODP] [PDF]
- 23/10/2019 ore 14:00 lab 2.2
- Lab MPI
[ODT] [PDF] [ex1-mpi.zip] [possibili soluzioni]
- 28/10/2019 ore 09:00 aula 3.7
- Distributed-Memory Programming with MPI (cont.)
- 30/10/2019 ore 14:00 lab 2.2
- Lab MPI
[ODT] [PDF] [ex2-mpi.zip] [possibili soluzioni]
- 4/11/2019 ore 09:00 aula 3.7
- CUDA Programming
[ODP] [PDF]
- 6/11/2019 ore 14:00 lab 2.2
- Lab CUDA
[ODT] [PDF] [ex1-cuda.zip] [possibili soluzioni]
- 11/11/2019 ore 09:00 aula 3.7
- CUDA Programming (cont.)
- 13/11/2019 ore 14:00 lab 2.2 (termina alle 16:00)
- Lab CUDA
[ODT] [PDF] [ex2-cuda.zip] [possibili soluzioni]
- 18/11/2019 ore 09:00 aula 3.7
- SIMD Programming
[ODP] [PDF]
- 20/11/2019 ore 14:00 lab 2.2
- Lab SIMD
[ODT] [PDF] [ex1-simd.zip] [possibili soluzioni]
- 25/11/2019 ore 09:30 aula 3.7
- Seminario dr. Andrea Bartolini:
Sviluppo e progettazione di apparati di
supercalcolo in ER
[PDF]
- 27/11/2019 ore 14:00 lab 2.2
- Presentazione del progetto d'esame
Torna in cima alla pagina.
HPC1920.zip: esempi di
programmazione illustrati durante il corso.
Istruzioni per
l'accesso al server usato in laboratorio.
Torna in cima alla pagina.