Avvisi

23 set 2024
Esiti dell'appello di settembre: esiti_appello_settembre_2024.pdf.
9 set 2024
L'appello di venerdì 13 settembre si terrà in 101 - Celoria 20 alle ore 9.30
8 lug 2024
L'appello di venerdì 12 luglio si terrà in Aula B7 - Biologia alle ore 9.30
27 giu 2024
Esiti dell'appello di lunedì 24 giugno: esiti_appello_giugno-bis_2024.pdf.
18 giu 2024
L'appello di lunedì 24 giugno si terrà in aula epsilon alle ore 9.30.
17 giu 2024
Esiti dell'appello di venerdì 14 giugno: esiti_appello-giugno_2024.pdf.
10 giu 2024
L'appello di venerdì 14 giugno si terrà in aula V5 (via Venezian), alle ore 9.30.
30 mag 2024
La lezione di giovedì 6 giugno inizierà alle ore 10.30 (per un'ora circa) e verranno proposte idee di progetti per l'esame finale. I progetti sono relativi ad attività di ricerca in corso presso il Phuselab, altri a carattere generale. Fatto salvo la possibilità di proporre liberamente progetti di interesse personale.
21 mar 2024
Sono state aggiornate le due ultime lezioni (slides).
25 feb 2024
NEW - Inizio corso. La prima lezione è prevista per giovedì 7 marzo, ore 9.30, aula TAU.

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
  • Design patterns paralleli: algoritmi su grafo
  • Design patterns paralleli: scan e sort
  • Implementazione di reti neurali profonde in CUDA
  • 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
  • Parallel design patterns: graph algorithms
  • Parallel design patterns: scan and sort
  • Deep neural neworks design using CUDA
  • 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).
  • 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

Giovedì dalle 9.30 alle 13.30, in aula TAU 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.