Anno accademico 2021-2022

PROGRAMMAZIONE SU ARCHITETTURE PARALLELE

Docenti

Andrea Formisano
Totale crediti
6
Periodo didattico
Secondo Periodo
Tipologia
Affine/Integrativa
Prerequisiti. Programmazione in linguaggio C

Algoritmi e strutture dati

Architettura degli elaboratori.

Sistemi operativi.

Metodi didattici. Le lezioni sono frontali.

Sono previste attività pratiche in modo da permettere agli studenti

di sperimentare direttamente e di mettere in pratica le nozioni

introdotte dal docente.

Modalità di verifica. La prova d’esame prevede una parte scritta e una orale.

La prova scritta può essere sostituita da una prova pratica.

Altre informazioni. –
Obiettivi formativi
Capacità relative alla disciplina

Conoscenza e capacità di comprensione:

lo studente acquisisce conoscenze di base sulla

programmazione parallela e distribuita,

sulle problematiche inerenti alla programmazione su architetture parallele/distribuite, e sui principi di progettazione di applicazioni in ambienti con

comunicazione basata su shared memory e/o message passing.

Capacità di applicare conoscenza e comprensione:

Anche attraverso esercizi pratici, lo studente impara a

valutare ed a scegliere l’adozione del framework e delle

scelte progettuali più adatte alla soluzione di un problema, anche in relazione all’hardware a disposizione, e a progettare una sua soluzione.

Capacità trasversali/soft skills

Autonomia di giudizio:

lo studente acquisisce capacità di valutazione

critica delle tecniche di programmazione e degli algoritmi impiegati nella soluzione di un problema in ambiente parallelo/distribuito.

Abilità comunicative:

lo studente impara a comunicare con terminologia appropriata, le principali nozioni della programmazione parallela/distribuita,

nei contesti degli approcci basati su shared memory e message passing.

Capacità di apprendimento:

lo studente sarà in grado di mettere a frutto le conoscenze di base acquisite, per estendere autonomamente le proprie competenze relativamente a più complessi framework paralleli/distribuiti e moderne achitetture hardware.

Contenuti
Questo corso fornisce una introduzione alla programmazione parallela per moderne architetture multi- e many-core, illustrando i paradigmi basati su message passing e su shared memory. Si forniranno le nozioni di base sui sistemi paralleli e distribuiti e sulle tecniche per la loro programmazione. In particolare verranno affrontati: programmazione parallela su GPU; programmazione in ambiente MPI; programmazione shared memory con OpenMP.

Programma in breve:

Introduzione alle architetture parallele.

Introduzione alla programmazione parallela.

Progetto di algoritmi paralleli.

Soluzioni comparate di problemi con algoritmi paralleli.

Cenni alla analisi e ottimizzazione delle performance.

Testi di riferimento
Programming Massively Parallel Processors.

David B. Kirk, Wen-mei W. Hwu. 3rd edition 2016. Morgan Kaufmann.

CUDA Programming Guide, NVIDIA. Available Online 2020.

Computer Architecture: a quantitative approach.

J.Hennessy, D.Patterson, 6th edition, 2017. Morgan Kaufmann.

The Art of Multiprocessor Programming.

M. Herlihy, N. Shavit, V. Luchangco, M.Spear. Second Ed. 2021. Morgan Kaufmann.

Introduction to parallel computing.

A. Grama, G. Karypis, V. Kumar, A. Gupta. 2003. Pearson.

CUDA by examples.

E. Kandrot, J. Sanders. 2010. Addison-Wesley.

Altro materiale sarà indicato dal docente.