72778 - HIGH-PERFORMANCE COMPUTING

Scheda insegnamento

  • Docente Moreno Marzolla

  • Crediti formativi 6

  • SSD INF/01

  • Modalità di erogazione In presenza (Convenzionale)

  • Lingua di insegnamento Italiano

  • Orario delle lezioni dal 25/09/2017 al 19/12/2017

Anno Accademico 2017/2018

Conoscenze e abilità da conseguire

Al termine del corso lo studente: conosce i fondamenti della programmazione parallela, e le principali architetture dei sistemi di calcolo ad alte prestazioni; è in grado di progettare algoritmi paralleli su architetture a memoria condivisa e distribuita; è in grado di implementare algoritmi paralleli utilizzando i linguaggi, gli strumenti e le tecnologie appropriate; è in grado di misurare le prestazioni e l'efficienza di programmi paralleli.

Programma/Contenuti

Programma

  • Algoritmi paralleli: modelli di calcolo sincroni e asincroni; pattern per la programmazione parallela
  • Introduzione alle architetture per il calcolo parallelo: tassonomia di Flynn; sistemi a memoria condivisa e distribuita; GPGPU
  • Pattern per la programmazione parallela (problemi embarassingly parallel; map/reduce; stencil; work farm)
  • Programmazione SIMD
  • Programmazione parallela su architetture a memoria condivisa con OpenMP
  • Programmazione parallela su architetture a memoria distribuita con MPI
  • Programmazione di GPU mediante CUDA
  • Valutazione delle prestazioni di programmi paralleli

Prerequisiti

Questo corso richiede una buona conoscenza della programmazione in linguaggio C in ambiente Unix/Linux, e delle architetture dei calcolatori (a livello di quanto presentato nel corso di architettura dei calcolatori).

Testi/Bibliografia

Metodi didattici

Durante le lezioni in aula vengono introdotti i concetti base della programmazione parallela, e vengono via via descritti i costrutti di programmazione parallela che sono poi oggetto di esercitazioni guidate in laboratorio con la supervisione del docente. Di tutti gli esercizi proposti in laboratorio viene poi fornita una possibile soluzione sul sito Web del corso, allo scopo di supportare le attività di studio individuale.

Modalità di verifica dell'apprendimento

Le conoscenze acquisite durante il corso verranno valutate mediante una prova scritta e un progetto di programmazione. La prova scritta si compone di alcune domande a quiz e/o a risposta aperta, riguardanti gli aspetti metodologici visti a lezione. Il progetto consiste nella realizzazione di una applicazione parallela su specifiche indicate dal docente, usando gli strumenti visti a lezione e in laboratorio. Il programma parallelo deve essere accompagnato da una relazione scritta. Nella valutazione del progetto si terrà conto della correttezza dell'implementazione, della chiarezza ed efficienza del codice, nonché della qualità della relazione.

Strumenti a supporto della didattica

Lezioni: proiezione di diapositive e dimostrazioni pratiche di programmazione parallela al calcolatore, integrate con ulteriori spiegazioni alla lavagna. Tutto il materiale di ogni lezione viene reso disponibile agli studenti prima dell'inizio della lezione stessa.

Attività di laboratorio: le esercitazioni pratiche verranno svolte in ambiente Linux, utilizzando il compilatore gcc con supporto di OpenMP, la libreria MPI and il compilatore CUDA/C. Tutti gli strumenti utilizzati sono liberamente disponibili, allo scopo di favorire l'attività di studio individuale su proprie risorse hardware.

Link ad altre eventuali informazioni

http://www.moreno.marzolla.name/teaching/HPC/

Orario di ricevimento

Consulta il sito web di Moreno Marzolla