Università degli Studi di Napoli "Parthenope"

Scheda dell'insegnamento

Anno accademico: 
2016/2017
Tipologia di insegnamento: 
Affine/Integrativa
Tipo di attività: 
Obbligatorio
Corso di afferenza: 
Corso di Laurea triennale (DM 270) in INFORMATICA
Settore disciplinare: 
ANALISI NUMERICA (MAT/08)
Lingua: 
Italiano
Crediti: 
6
Anno di corso: 
3
Docenti: 
Dott.ssa MARCELLINO Livia
Ciclo: 
Secondo Semestre
Ore di attivita' frontale: 
48

Obiettivi

Il corso introduce all’uso delle metodologie, delle tecniche e degli strumenti per lo sviluppo di algoritmi e software per ambienti di calcolo parallelo (ad alte prestazioni).
Per l’attività di laboratorio, il corso prevede l’impiego del linguaggio di programmazione C/C++ e un’introduzione alle librerie di calcolo parallelo standard (MPI e OpenMP), da utilizzare per lo sviluppo di software parallelo nei differenti ambienti ad alte prestazioni, quali cluster di multiprocessori e/o multicore.
Conoscenza e capacità di comprensione: lo studente deve dimostrare di conoscere i fondamenti del calcolo parallelo, con particolare riguardo alle diverse forme di parallelismo hardware e software e alle strategie di parallelismo per alcuni nuclei computazionali di base della programmazione.
Capacità di applicare conoscenza e comprensione: lo studente deve dimostrare di saper impiegare le strategie studiate e le librerie standard disponibili per sviluppare algoritmi in ambiente ad alte prestazioni, sfruttando le conoscenze relative ai parametri di valutazione del software parallelo e al tipo di hardware disponibile.
Autonomia di giudizio: lo studente deve essere in grado di sapere valutare in maniera autonoma i risultati di un algoritmo parallelo mediante l’analisi di speedup ed efficienza del software.
Abilità comunicative: lo studente deve essere in grado di illustrare un algoritmo parallelo e di documentare la sua implementazione in ambiente ad alte prestazione.
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 di Matematica 1, Programmazione I e Laboratorio di Programmazione 1, Sistemi Operativi e laboratorio di Sistemi Operativi, Algoritmi e Strutture Dati e laboratorio di Algoritmi e Strutture Dati.

Contenuti

Introduzione al calcolo ad alte prestazioni: definizione, motivazioni ed evoluzione dei supercalcolatori (2ore) - Tipi di parallelismo: temporale, spaziale e asincrono. Primo tipo di parallelismo on chip (2ore) – unità pipelined e processori vettoriali (1ora) - Classificazione di Flynn (2ore) - Calcolatori MIMD a memoria condivisa (SM) e a memoria distribuita (DM) (2ore) - Reti di interconnessione (1ora) - Secondo tipo di parallelismo on chip (1ora) - Cluster e architetture multicore (2ore) - Problematiche di base e differenze tra i concetti di calcolo parallelo e di calcolo distribuito: il cloud computing (1ora) - Parametri di valutazione del un software parallelo: Speed-up, overhead ed efficienza di un algoritmo parallelo, legge di Ware-Amdahl (formulazione base e generalizzata), overhead di comunicazione (unitario e totale), speedup ed efficienza scalata, isoefficienza, scalabilità, legge di Gustaffson (5ore) – Somma in parallelo: decomposizione del problema per la I, II e III strategia (in ambiente MIMD Shared-Memory e in ambiente MIMD Distribuited-Memory) (4ore) - Prodotto Matrice per vettore: decomposizione del problema (algoritmi a blocchi) per la I, II e III strategia (in ambiente MIMD Shared-Memory e in ambiente MIMD Distribuited-Memory) (4ore) - MPI (Message Passing Interface): Modello message-passing: caratteristiche e funzioni di base, principali routine per la gestione dei processi e loro comunicazione (funzioni per definire l’ambiente, per le comunicazioni uno a uno, per le comunicazioni collettive, per le operazioni collettive), topologie virtuali: griglie di processori (5ore) - OpenMp (Open specifications for Multi Processing): processi e threads, sincronizzazione e semafori, modello d’esecuzione parallela fork-join, direttive al compilatore, costrutti e clausole, runtime library routines e variabili d’ambiente (6ore) - Scrittura, compilazione ed esecuzione di programmi che utilizzano la libreria MPI e la libreria OpenMp con l’ausilio del linguaggio C/C++ (6ore) . Il servizio cloud computing: AWS. Accesso con Account e Configurazione, gestione delle istanze (4ore)

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 in una prova di laboratorio che verifica la capacità di implementare un semplice programma in ambiente di calcolo ad alte prestazioni (30% del voto), una prova scritta per la valutazione della conoscenza delle strategie parallele relative ai nuclei computazionali di base dell’algebra lineare (40% del voto), una prova orale per esaminare la capacità di analisi di un software parallelo in termini di efficienza (30% del voto).

Testi

L. Marcellino: “Richiami di Calcolo Parallelo 1”, piattaforma di e-learning del Dipartimento di Scienze e Tecnologie, 2014.
A. Grama, G. Karypis, V. Kumar, A. Gupta: “Introduction to Parallel Computing (2nd Edition)”, Ed. Addison Wesley, 2003.
Tutte le lezioni sono disponibili (in formato pdf) sulla piattaforma di e-learning del Dipartimento di Scienze e Tecnologie, insieme con esercizi per autovalutazione, manuali d’uso delle librerie, prove d’esame, articoli recenti sugli argomenti più innovativi.

Altre informazioni