Lezione 1: introduzione al corso

[ 10 mar 2017 ] Introduzione al corso, introduzione alla programmazione GP-GPU, esempi e applicazioni. Cenni su parallelismo nelle architetture, modelli di calcolo parallelo e tassonomia di Flynn. Primo programma in CUDA, esercitazione su array multidimensionali in C.

Lezione 2: il modello di programmazione CUDA

[ 17 mar 2017 ] Modelli per sistemi di calcolo parallelo. Il modello di programmazione di CUDA, organizzazione logica dei thread (griglia e blocchi), il kernel CUDA, trasferimento dati tra memorie host e device. Programma per la stampa degli indici di thread e blocchi e per la somma di matrici in CUDA.


Lezione 3: il modello di esecuzione CUDA (1)

[ 24 mar 2017 ] Lo Streaming Multiprocessor (SM) di CUDA. L'esecuzione di kernel nell'architettura CUDA, la nozione di warp. Le architetture Fermi e Kepler. Il prodotto di matrici diagonali a blocchi (MQDB).

Lezione 4: il modello di esecuzione CUDA (2)

[ 31 mar 2017 ] La gestione dei warp. Il problema della warp divergence e sue possibili soluzioni. La sincronizzazione a livello di device e a livello di thread. I limiti architetturali di risorse. Il problema della parallel reduction e approcci alla sua soluzione CUDA.

Lezione 5: il modello di memoria CUDA (1)

[ 7 apr 2017 ] La gerarchie di memorie CUDA, le caches su GPU, metodi di accesso alla global memory e misura dell'efficienza, la pinned memory, analisi del throughput effettivo della memoria, esempi su uso di strutture ed array e calcolo matrice trasposta

Lezione 6: il modello di memoria CUDA (2)

[ 21 apr 2017 ] La memoria shared, organizzazione hw e logica, casi d'uso tipici, la memoria constant e sua applicazione alla convoluzione 1D e 2D

Lezione 7: stream e concorrenza

[ 28 apr 2017 ] Concorrenza e sincronizzazione in CUDA, gli stream e gli eventi, scheduling di stream, HyperQ, misura del tempo, sincronizzazione tra stream, applicazioni

Lezione 8: parallel pattern design

[ 12 mag 2017 ] Parallel pattern design, algoritmi di somma prefissa parallela (scan), tecniche divide et impera, algoritmi di ordinamento, l'ordinamento bitonico.

Lezione 9: Le librerie CUDA

Aspetti generali sulle librerie standard nella piattaforma CUDA, la libreria curand con applicazione ai metodi Monte Carlo, la libreria cublas per il prodotto matriciale, la libreria cufft per il calcolo della trasformata discreta FFT
[ 19 mag 2017 ]

Lezione 10: programmazione multi-GPU e algoritmi su grafi

[ 26 mag 2017 ] Programmazione multi-GPU, comunicazione peer-to-peer fra diverse GPU, studio di algoritmi su grafi per la colorazione e il minimum spanning tree (MST)

Lezione 11: seminario sul clacolo di stima del moto nel codec VP8 (WebM)

[ 9 giu 2017 ] Codec video, stima del moto, VP8 encoder, parallelizzazione della stima del moto in VP8 e implementazione CUDA

Risorse