Avvisi

20 set 2021
L'esame scritto per il secondo appello di settembre si terrà venerdì 24, in sala riunioni 4° piano (ala est) dip. di Informatica di via Celoria 18, alle ore 10.30. Si rammenta che il possesso del green pass è obbligatorio per coloro che svolgeranno l'esame in presenza (aggiornamenti sul sito UNIMI).
25 ago 2021
L'esame scritto per il primo appello di settembre si terrà venerdì 3, in aula Omega di via Celoria 18, alle ore 10.30. Si rammenta che il possesso del green pass è obbligatorio per coloro che svolgeranno l'esame in presenza (aggiornamenti sul sito UNIMI).
29 lug 2021
Esito dello scritto di luglio: appello_lug_21.pdf. I voti sono in 24-esimi. Si rammenta che per completare l'esame occorre presentare un progetto CUDA.
19 lug 2021
L'esame scritto per l'appello di luglio si terrà venerdì 23, in aula V2 di via Venezian (settore didattico), alle ore 10.30. Per coloro che lo svolgeranno in remoto l'appuntamento è alle ore 10.30 su zoom: link. L'esame si svolgerà sulla piattaforma exam.net (exam.net).
15 giu 2021
Esito dello scritto di giugno: appello-giu-21.pdf. I voti sono in 24-esimi. Si rammenta che per completare l'esame occorre presentare un progetto CUDA.
4 giu 2021
L'esame scritto per l'appello di giugno si terrà venerdì 11, in aula 204 di via Celoria 20 (settore didattico), alle ore 10.30.
19 mag 2021
Avviso di seminari/lezioni su Representation learning and generative models a cura di Gabriele Lombardi e Alessandro Ferrari (www.argo.vision).
Data: mercoledì 26 maggio e mercoldì 9 giugno, ore 14.00

Argomenti delle lezioni:
  1. Intro ai modelli generativi (esempio: PCA)
  2. Intro AutoEncoders (AE, SAE, DAE)
  3. Cenni di inferenza variazionale: VAE, VQ-VAE
  4. Cenni su MCMC: Restricted Boltzmann Machine
  5. Basi di GAN: GAN, WGAN, StyleGAN, ProGAN, ConditionalGAN
  6. Cenni sui modelli diffusivi
Link su Microsoft Teams per le due lezioni:
13 mag 2021
Materiale del laboratorio 9 aggiornato.
21 apr 2021
Purtroppo a causa del perdurare di sintomi da covid, la lezione odierna non potrà essere svolta. Per non perdere ulteriore tempo, metterò a dsposizione a breve il materiale usuale della lezione 6 e un breve testo (su github:lab6/doc) sui contenuti per agevolare lo studio individuale e confinare la discussione (durante il prossimo appuntamento) ai soli elementi che risultano non chiari. Vi invito a contattarmi durante la settimana per chiarimenti e sollecito il lavoro di gruppo secondo le (fruttuose) modalità introdotte a lezione (organizzandovi autonomamente).
9 apr 2021
Materiale del laboratorio 4 aggiornato.
17 mar 2021
La lezione odierna, di mercoledì 17 marzo, avrà inizio alle ore 14.00.
9 mar 2021
Sospensione lezione del 10 marzo. La lezione di domani, mercoledì 10 marzo, è sospesa a causa vaccinazione anti-covid.
3 mar 2021
  • Le sercitazioni del corso sono reperibili su github.
  • Per svolgere le esercitazioni del corso (e il progetto d'esame) su Google Colab, seguire le istruzioni contenute nel notebook lab1/CUDA_base.ipynb
  • Per svolgere le esercitazioni del corso (e il progetto d'esame) sul server cuda.lagrange.di.unimi.it, accedere in remoto via ssh. Per essere abilitati all'uso del server, è necessario farne esplicita richiesta (evitare di inoltrare nuova richiesta se già abilitati all'uso!). Pagina con form per la richiesta: account request.
3 mar 2021
Le lezioni si terranno al mercoledì di ogni settimana, con inizio previsto per le ore 14.00, sulla piattaforma zoom.us
link: Link zoom delle lezioni
ID riunione: 979 3373 4214
Passcode: 4FvXQk
25 feb 2021
Inizio corso. La prima lezione è prevista per mercoledì 3 marzo, ore 14.00. Le lezioni saranno online sulla piattaforma zoom. La fine delle lezioni è prevista per il 26 maggio.

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
  • Elementi di deep learning in Python
  • 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
  • Deep learning using Python
  • 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 mercoledì dalle 13.30 alle 17.30 (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.