Università degli Studi di Napoli "Parthenope"

Scheda dell'insegnamento

Anno accademico: 
2015/2016
Tipologia di insegnamento: 
Affine/Integrativa
Tipo di attività: 
Obbligatorio
Corso di afferenza: 
Corso di Corso di Laurea Magistrale in INFORMATICA APPLICATA
Settore disciplinare: 
ANALISI NUMERICA (MAT/08)
Crediti: 
6
Anno di corso: 
2
Docenti: 
Dott.ssa MARCELLINO Livia
Ciclo: 
Primo Semestre
Ore di attivita' frontale: 
48

Obiettivi

Il corso approfondisce le metodologie, le tecniche e gli strumenti per lo sviluppo di algoritmi e software in ambienti di calcolo ad alte prestazioni, affrontando le problematiche attuali degli strumenti di calcolo avanzato per gli ambienti multicore e GPU.
Per l’attività di laboratorio, il corso prevede l’impiego del linguaggio di programmazione C/C++ e dell’ambiente CUDA di nVIDIA, per lo sviluppo di software parallelo che sfrutta la potenza elaborativa dei moderni processori grafici.
Conoscenza e capacità di comprensione: lo studente deve dimostrare di conoscere i fondamenti del calcolo parallelo, l’organizzazione della gerarchia della memoria dell’ambiente CUDA sia hardware che software e le strategie di parallelizzazione per alcuni nuclei computazionali di base della programmazione con e senza l’uso della shared memory.
Capacità di applicare conoscenza e comprensione: lo studente deve dimostrare di saper impiegare le strategie studiate e le API di CUDA per sviluppare algoritmi in ambiente multicore/GPU, sfruttando le conoscenze relative alle problematiche della parallelizzazione in ambiente ibrido ad alte prestazioni.
Autonomia di giudizio: lo studente deve essere in grado di sapere valutare in maniera autonoma i risultati di un algoritmo parallelo mediante l’analisi delle performance, in termini di guadagno, Gflops e gestione della memoria.
Abilità comunicative: lo studente deve essere in grado di illustrare un algoritmo parallelo e di documentare la sua implementazione in ambiente multicore/GPU.
Capacità di apprendimento: lo studente deve essere in grado di aggiornarsi e approfondire in modo autonomo argomenti e applicazioni specifiche di calcolo parallelo, anche accedendo a banche dati, repository on-line di software parallelo ed altre modalità messe a disposizione dalla rete.

Prerequisiti

È necessario avere acquisito le conoscenze e le competenze trasmesse dai corsi della laurea triennale, tra cui Calcolo Parallelo e Distribuito I ed Elaborazione delle Immagini. Inoltre deve aver acquisito le competenze trasmesse dai corsi della laurea magistrale: Algoritmi e Strutture Dati II, Applicazioni di Calcolo Scientifico e Laboratorio di ACS, Architettura e Programmazione di Reti Avanzate e laboratorio di Architettura e Programmazione di Reti Avanzate, Sistemi Operativi Distribuiti e Lab. di Sistemi Operativi Distribuiti

Contenuti

Il calcolo ad alte prestazioni: definizione e motivazioni - Misura delle prestazioni di un calcolatore e del tempo di esecuzione di un software - Storia dell’evoluzione dei supercalcolatori - Architetture distribuite e multicore - Legge di Moore e successive rimodulazioni - Processori grafici (GPU) e ambiente CUDA: il parallelismo delle GPU (motivazioni, vantaggi e svantaggi) - Il General Purpose GPU - Array di multiprocessori – Unità elaborative delle GPU: host e device - Il concetto di kernel - Grid e blocchi - Il pitch ed il concetto di coalescenza - L’architettura CUDA - Organizzazione della memoria: i registri, la local memory e la shared memory; la constant, la textured e la global memory - Programmare in parallelo con CUDA e il linguaggio C - le principali routine CUDA: allocazione, de-allocazione e scambio dati - Invocazione e dichiarazione di un kernel - API per la gestione della memoria - Il processo di mapping - Gestione dei dati 2D: routine per il picth - Gestione degli errori - Il timing - Allocazione e gestione di strutture dati nella shared memory - Routine per la sincronizzazione dei thread - Il device menagement - Il toolkit CUDAprof e la sua versione grafica CUDAprofiler - La libreria CUBLAS di CUDA per le operazioni di base tra matrici e vettori - Breve introduzione alla librerie BLAS, PBLAS, PLASMA - I livelli di CUBLAS - Routine predefinite per il passaggio dei dati tra host e device - Creazione dell’ambiente CUBLAS - Gestione degli errori. Routine per le operazioni di base.

Metodi didattici

Verifica dell'apprendimento

L’obiettivo della procedura di verifica consiste nel quantificare il livello di raggiungimento degli obiettivi formativi precedentemente indicati.
La procedura di verifica è indicata precisamente nella piattaforma di e-learning del Dipartimento di Scienze e Tecnologie. In sintesi, l’esame consiste nello sviluppo di un progetto assegnato dal docente che consiste nell’implementazione di un software per la risoluzione di un problema reale in ambiente GPU (70% del voto), una prova orale per esaminare la capacità di analisi di un software parallelo in ambiente GPU (30% del voto).

Testi

A. Grama, G. Karypis, V. Kumar, A. Gupta: “Introduction to Parallel Computing (2nd Edition)”. Addison Wesley
J. Sanders, E. Kandrot. Foreword by J. Dongarra: “CUDA BY EXAMPLE: An introduction to General-Purpose GPU Programming”. NVIDIA

Tutte le lezioni sono disponibili (in formato pdf) sulla piattaforma di e-learning del Dipartimento di Scienze e Tecnologie, insieme con esercizi per autovalutazione, il manuale d’uso della libreria, articoli recenti sugli argomenti più innovativi.

Altre informazioni