PROGRAMMAZIONE PARALLELA SU ARCHITETTURE GPU

Anno accademico 2018/2019 - 3° anno - Curriculum A
Docente: Giuseppe BILOTTA
Crediti: 6
SSD: INF/01 - Informatica
Organizzazione didattica: 150 ore d'impegno totale, 102 di studio individuale, 24 di lezione frontale, 24 di esercitazione
Semestre:

Obiettivi formativi

Conoscenza e capacità di comprensione: acquisire i fondamenti del calcolo massivamente parallelo su hardware moderno (GPU, CPU multicore, acceleratori) e dello stream computing.

Capacità di applicare conoscenza e comprensione: acquisire le competenze necessarie all'applicazione di quanto appreso per lo sviluppo di software parallelo sfruttando i principali framework per lo sviluppo di applicazioni massivamente parallele (CUDA e OpenCL).

Autonomia di giudizio: acquisire la capacità di identificare paradigmi fondamentali (problemi imbarazzantemente paralleli, riduzioni e scan) e relative opportunità di parallelizzazione.

Abilità comunicative: acquisire la capacità di descrivere con proprietà di linguaggio gli aspetti teorici ed implementativi del calcolo parallelo sulle moderne architetture.

Capacità di apprendimento: acquisire la capacita di comprendere testi specialisitici sull'argomento.


Modalità di svolgimento dell'insegnamento

Il corso è composto da lezioni frontali ed applicative, con lo sviluppo in tempo reale del codice di esempio per la presentazione dei vari argomenti, per permettere agli studenti di acquisire già durante le lezioni la necessaria familiarità con gli aspetti pratici del programma e degli esami.


Prerequisiti richiesti

Conoscenza del linguaggio C.


Frequenza lezioni

Obbligatoria per almeno il 75% delle ore.


Contenuti del corso

  • breve storia delle schede grafiche e nascita del GPGPU
  • fondamenti di GPGPU; introduzione a CUDA
  • programmazione in CUDA di alto livello: l'interfaccia CUDA runtime
  • benchmarking, ottimizzazione e debugging
  • programmazione in CUDA di basso livello: l'interfaccia driver CUDA
  • introduzione all'OpenCL ed alla programmazione GPGPU eterogenea
  • cenni su multi-GPU

Testi di riferimento

NVIDIA CUDA Programming Guide
OpenCL specification


Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

Sono ammesse due modalità per l'esame di fine corso:

  • esame di laboratorio: viene assegnato un problema, da affrontare scrivendo un programma per il calcolo parallelo; durata: 3 ore;
  • progettino finale, da concordare con il docente, e da sviluppare in maniera individuale o al piú in coppia; il progetto va consegnato entro 3 mesi, insieme ad una relazione ed una presentazione orale.

Esempi di domande e/o esercizi frequenti

http://www.dmi.unict.it/~bilotta/gpgpu/esami/