Lezione 1

[ 7 mar 2024 ] Introduzione al corso, introduzione al concetto GP-GPU, uso delle GPU in contesti HPC, parallelismo dei dati e dei task, sistemi paralleli e tassonomia di Flynn, il modello SIMT, la piattaforma CUDA.

Lab 1

[ 7 mar 2024 ] Allocazione dinamica in C, prodotto di matrici diagonali a blocchi. HelloWorldGPU: primo programma CUDA, somma di vettori in CUDA.


Esercitazione: Lab1 (github)

Lezione 2

[ 14 mar 2024 ] programmazione multithreading, sistemi di calcolo paralleli, processi e thread, pthread in unix, modello di programmazione parallela CUDA, organizzazione gerarchica dei thread, esecuzioni di kernel, uso basilare della memoria


Lab 2

[ 14 mar 2024 ] gerarchia di thread in CUDA, grid, block e thread ID, somma di vettori 1D e matrici 2D, flipping di immagini con pthread e CUDA


Esercitazione: Lab2 (github)

Lezione 3

[ 21 mar 2024 ] modello di esecuzione CUDA, streaming multiprocessor, warp e loro gestione, divergenza nei warp, sincronizzazione di thread, parallel reduction, operazioni atomiche


Lab 3

[ 21 mar 2024 ] divergenza, parallel reduction, istogramma di un'immagine e operazioni atomiche, prodotto MQDB parallelo


Esercitazione: Lab3 (github)

Lezione 4

[ 4 apr 2024 ] Il modello di memoria CUDA, tipi di memoria: registri, shared memory, local memory, constant memory, texture memory e global memory, la shared memory: uso e patter di accesso, allocazione statica e dinamica di shared memory


Lab 4

[ 4 apr 2024 ] esercitazione su parallel reduction, prodotto di matrici e di convoluzione


Esercitazione: Lab4 (github)

Lezione 5

[ 11 apr 2024 ] unrolling, HW overview CPU/GPU, elementi base dell’architettura GPU, le famiglie di GPU e l’evoluzione delle (micro)architetture, prestazioni legate alle risorse architetturali, profiling, unrolling, parallelismo dinamico


Lab 5

[ 11 apr 2024 ] esercitazione su unrolling e parallelismo dinamico


Esercitazione: Lab5 (github)

Lezione 6

[ 18 apr 2024 ] La global memory, pinned & unified memory, Memory bandwidth, coalescenza e pattern di accesso alla global memory


Lab 6

[ 18 apr 2024 ] esercitazione su uso della memoria, strutture e matrice trasposta


Esercitazione: Lab6 (github)

Lezione 7

[ 2 mag 2024 ] Gradi di concorrenza in CUDA, CUDA stream: creazione, uso e sincronizzazione, uso tipico: sovrapporre trasferimento dati ed esecuzione kernel, scheduling di eventi e Hyper Q, CUDA eventi: creazione, uso e sincronizzazione, misura del tempo mediante eventi


Lab 7

[ 2 mag 2024 ] esercitazione su stream ed eventi in tabular e prodotti MQDB


Esercitazione: Lab7 (github)

Lezione 8

[ 9 mag 2024 ] Librerie CUDA, cuBLAS per calcoli di algebra lineare, cuRAND per la generazione di dati random, cuFFT per il calcolo veloce della trasformata di Fourier


Lab 8

[ 9 mag 2024 ] esercitazione su librerie CUDA


Esercitazione: Lab8 (github)

Lezione 9

[ 16 mag 2024 ] misure di complessità negli algoritmi paralleli, Parallel patterns: algoritmi su grafi e sorting, algoritmo parallelo Breadth-First Search (BFS), algoritmo algoritmo greedy parallelo Luby per Graph Coloring (GC), grafo del WEB con pagerank


Lab 9

[ 16 mag 2024 ] esercitazione su algoritmi su grafi.


Esercitazione: Lab9 (github)

Lezione 10

[ 23 mag 2024 ] Parallel patterns: aperazioni scan, prefix sum, algoritmi di sorting QuickSort, mergeSort e bitonicSort


Lab 10

[ 23 mag 2024 ] esercitazione su algoritmi di sorting


Esercitazione: Lab10 (github)

Lezione 11

[ 30 mag 2024 ] Linear neural networks, Multilayer perceptron, Implementazione CUDA e python, Kernel python con Numba e Cupy con moltiplicazione matrici, istogramma, MQDB


Lab 11

[ 30 mag 2024 ] esercitazione su NN CUDA e python


Esercitazione: Lab11 (github)