Avvisi

3 Luglio 2017

La valutazione della prova è in 24-esimi (max 24 pt). La valutazione del progetto ammonta a max 10 pt, per un massimo complessivo di 34 pt. Online esito della prova di giugno: RISULTATI

14 Giugno 2017

L'esame di venerdì 16 giugno è rinviato - causa sciopero generale trasporti - alla data di venerdì 23 giugno, ore 11.00, aula ALFA

12 Maggio 2017

La lezione del 9 giugno sarà tenuta da Alessandro Petrini (collaboratore del progetto europeo T-NOVA) con un seminario su implementazione CUDA dell'algoritmo Motion Estimation del codec VP8 di Google.
Venerdì 16 giugno è previsto il compitino finale, alle ore 11.00 - aula ALPHA

17 Marzo 2017

L'inizio lezioni, a partire dal 24 marzo, è posticipato alle ore 13.45 per attesa fine lezione di altri corsi

10 Marzo 2017
Il server per le esercitazioni lagrange (cuda.lagrange.di.unimi.it) è dotato di schede Tesla M2090 e Tesla M2050.
Come richiedere un account per la durata del corso:
  • l'account è concesso *solo* a studenti seriamente intenzionati a seguire questo corso e deve provenire necessariamente dall'indirizzo email di ateneo: @studenti.unimi.it
  • per ottenere un account su lagrange è necessario scrivere una mail a root@di.unimi.it e in CC a grossi@di.unimi.it e deve avere come oggetto "Richiesta account per corso GPU"
  • la macchina è raggiungibile da shell via connessione remota: ssh "email-studente"@cuda.lagrange.di.unimi.it
  • NB. gli account hanno durata annuale e verranno disattivati in data 20 dicembre 2017 a meno che non venga fatta esplicita richiesta di rinnovo (accolta solo se esame ancora da sostenere!)
27 Febbraio 2017

Inizio lezioni previsto per venerdì 10 marzo, ore 13.30, aula delta


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

  • 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
  • Sviluppo e implementazione di applicazioni su GPU NVIDIA

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:
  • Orale: colloquio tradizionale sugli argomenti trattati a lezione
  • 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)

Orario lezioni

Venerdì dalle 13.30 alle 17.30, aula Delta (silab)

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 S205, secondo piano del Dipartimento di Informatica di via Comelico.