Università degli Studi di Napoli "Parthenope"

Scheda dell'insegnamento

Anno accademico: 
2020/2021
Tipologia di insegnamento: 
Affine/Integrativa
Tipo di attività: 
Obbligatorio
Corso di afferenza: 
Corso di Corso di Laurea Magistrale in INFORMATICA APPLICATA (MACHINE LEARNING E BIG DATA)
Settore disciplinare: 
ANALISI NUMERICA (MAT/08)
Lingua: 
Italiano
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 (2ore). Misura delle prestazioni di un calcolatore e del tempo di esecuzione di un software (2ore). Evoluzione dei supercalcolatori (3ora). Legge di Moore e successive rimodulazioni (1ora). Processori grafici (GPU) e ambiente CUDA: il parallelismo delle GPU. Il General Purpose GPU. Array di multiprocessori (2ore). Unità elaborative delle GPU: host e device, il concetto di kernel, Grid e Blocchi, il pitch ed il concetto di coalescenza (6ore). L’architettura CUDA, organizzazione della memoria (4ore). Programmare in parallelo con CUDA e il linguaggio C (2ore). Le principali routine CUDA: allocazione, de-allocazione e scambio dati (2ore). Invocazione e dichiarazione di un kernel, API per la gestione della memoria, il processo di mapping (4ore). Gestione dei dati 2D: routine per il picth, gestione degli errori e timing (4ore). Allocazione e gestione di strutture dati nella shared memory (3ore). Routine per la sincronizzazione dei thread, il device menagement (3ore). Il toolkit CUDAprof e la sua versione grafica CUDAprofiler (2ore). La libreria CUBLAS di CUDA per le operazioni di base tra matrici e vettori (3ore). Routine predefinite per il passaggio dei dati tra host e device, creazione dell’ambiente CUBLAS, gestione degli errori e routine per le operazioni di base (3ore).

Metodi didattici

Verifica dell'apprendimento

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