Avvisi

20 set 2022
L'esame scritto di venerdì 23 settembre si terrà in aula 302, via Celoria (settore didattico), alle ore 10.00.
25 lug 2022
Esiti dello scritto del 22 luglio: risultati.
18 lug 2022 - NEW
L'esame scritto di venerdì 22 luglio si terrà in aula Epsilon, via Celoria 18, alle ore 10.00.
28 giu 2022
L'esame scritto di venerdì 1° luglio si terrà in PhuseLab (4° piano), via Celoria 18, alle ore 10.00.
16 giu 2022
Esiti dello scritto del 10 giugno: risultati.
9 giu 2022
L'esame scritto di domani 10 giugno si terrà in Aula 209, via Celoria 20, alle ore 10.00.
1 giu 2022
Materiale: le prime 10 lezioni (slide + lab) si trovano su github, i video delle ultime due lezioni, relative ai seminari su generative models, si trovano sul sito Ariel-GPUcomputing e il laboratorio su github.
Esame: le modalità d'esame sono quelle definite nel syllabus, per la parte relativa ai seminari le domande riguarderanno solo le principali definizioni dei modelli presentati e loro utilizzo (senza la parte formale riguardante le dimostrazioni). Per i progetti seguire le linee indicate nella sezione specifica del sito. Gli appelli della sessione estiva sono previsti nelle date: 10/06, 1/07 e 22/07.
16 mag 2022
Avviso di seminari/lezioni su generative models a cura di Gabriele Lombardi (www.argo.vision).
Data: lunedì 23 maggio e lunedì 30 maggio, ore 14.00, aula Sigma

Argomenti delle lezioni:
  1. Intro ai modelli generativi
  2. Intro Autoencoder e denoising autoencoder
  3. Cenni di inferenza variazionale: VAE, VQ-VAE
  4. Maximum mean discrepancy
  5. Normalizing Flows
  6. GAN
Link su per le due lezioni su Teams:
16 mag 2022
Nella Sezione Misc trovate i testi consigliati per approfondire la piattaforma CUDA e il relativo modello di programmazione.
10 mag 2022
Aggiornato il notebook CUDA_lab9_TODO.ipynb nella parte di generazione di matrici definite positive e e il passaggio a doppia precisione per limitare errori di calcolo numerico.
22 mar 2022
Caricato sul sito github del corso (sotto utils) un tutorial base su python. Aggiornati i notebook di lab3 e lab4.
15 feb 2022
Inizio corso. La prima lezione è prevista per lunedì 28 febbraio, ore 14.00, aula Sigma Lab. Le lezioni saranno diffuse in sincrono sulla piattaforma zoom. Tuttavia, per ragioni ben note è fortemente consigliata la partecipazione in presenza a meno di motivi stringenti per farlo da remoto. Inoltre, per indicazioni ribabidite anche dal recente Collegio Didattico, non verranno registrate. La fine delle lezioni è prevista per il 30 maggio.

Riunione pianificata in Zoom per le lezioni.
Scarica e importa i seguenti file iCalendar (.ics) nel tuo sistema di calendario:


ID riunione: 858 5702 7081
Passcode: 348539

Syllabus

Obiettivi del corso

Questo corso ha come obiettivo l'apprendimento delle principali tecniche di programmazione parallela per lo sviluppo di applicazioni su architetture multicore, come le GPU (Graphics Processing Units), progettate per il calcolo parallelo ad elevate prestazioni. A questo fine viene impiegata l'architettura hw/sw CUDA e il relativo linguaggio CUDA C per lo sviluppo su GPU NVIDIA. L'attività ha quindi un duplice scopo: da un lato un approccio metodologico alla programmazione parallela e al disegno di algoritmi secondo consolidati pattern di parallelismo, dall'altro la pratica di laboratorio per lo sviluppo di applicazioni parallele seguendo un processo di valutazione, parallelizzazione, ottimizzazione delle prestazione e deployment su sistemi ibridi CPU-GPU

Programma del corso (ita)

  • Introduzione ai sistemi di calcolo eterogenei basati su CPU e GPU
  • Il concetto di GPGPU (General Purpose GPU) programming
  • Architetture di calcolo parallelo
  • Il modello di programmazione CUDA
  • Il modello di esecuzione CUDA
  • Il modello di memoria CUDA
  • Stream, concorrenza e ottimizzazione delle prestazioni
  • Librerie di CUDA SDK accelerate da GPU
  • Programmazione e computazione multi-GPU
  • Pattern di parallelismo negli algoritmi
  • Librerie Python accelerate su GPU
  • Sviluppo e implementazione di applicazioni su GPU NVIDIA

Course program (eng)

  • Introduction to heterogeneous system architectures based on CPU and GPU
  • Meaning of general purpose GPU programming (GPGPU)
  • Parallel architectures
  • The CUDA programming model
  • The CUDA execution model
  • The CUDA memory model
  • Stream, concurrency and performance optimization
  • GPU-accelerated CUDA libraries
  • Multi-GPU programming
  • Parallel design patterns
  • Accelerated Python libraries
  • Application development on NVIDIA GPUs

Prerequisiti

Sono requisiti essenziali le basi di teoria e pratica della programmazione e una buona conoscenza del linguaggio ANSI C standard

Esame

L'esame consiste di due parti:
  • Scritto: domande aperte sugli argomenti trattati a lezione (max 24/30 punti). L'esame scritto potrebbe tradursi in esame orale (a distanza) secondo il perdurare dell'emergenza pandemica.
  • Progetto: sviluppo di un progetto basato sul linguaggio CUDA C rivolto ad applicazioni in cui il calcolo parallelo ottiene uno speedup significativo (vedi pagina dei progetti d'esame, max 10/30 punti)

Orario lezioni

Le lezioni si svolgeranno online (mod sincrona) il lunedì dalle 13.30 alle 17.30, in aula Sigma Lab (sito ufficlale), secondo semestre (Marzo-Giugno).

Ricevimento

Il ricevimento studenti si tiene su appuntamento da concordare di volta in volta via e-mail (grossi@di.unimi.it). Il luogo è la Stanza 4016, quarto piano del Dipartimento di Informatica di via Celoria 18.