PROGRAMMAZIONE PARALLELA E HPC
cod. 1007846

Anno accademico 2019/20
3° anno di corso - Secondo semestre
Docente
Settore scientifico disciplinare
Informatica (INF/01)
Field
Discipline informatiche
Tipologia attività formativa
Caratterizzante
56 ore
di attività frontali
6 crediti
sede:
insegnamento
in ITALIANO

Obiettivi formativi

Il corso introduce i principi ed i concetti fondamentali su cui si basano i sistemi paralleli. In particolare, vengono analizzate le architetture moderne, le caratteristiche degli algoritmi paralleli e le metodologie di programmazione per le architetture piu' diffuse (cluster processori, GPU, many-core)

Prerequisiti

Architettura degli Elaboratori, Sistemi Operativi

Contenuti dell'insegnamento

Programmazione parallela su architetture cluster, GPU e manycore.

Programma esteso

- hardware: elaboratori paralleli (multi core, many core, gpu), storage e topologie (richiami), high speed network (infiniband e omnipath),
top500, use case: il cluster hpc unipr

- software: algoritmi paralleli, problem modeling, efficienza, speedup

- parallelismo classico (MPI)

- programmazione di architetture GPU

- openMP

- vettorizzazione di codice (use case: KNL)

- applicazioni: big data, simulazione numerica HPC


Laboratorio: prove sul cluster HPC unipr: gestore code, ambiente software del cluster, profiling, codice parallelo

Bibliografia

Il materiale didattico sara' fornito su Elly (slide delle lezioni e riferimenti bibliografici)

Metodi didattici

Proporre un percorso che, partendo dalle architetture hardware piu' diffuse, propone diverse metodologie di programmazione adatte a tali sistemi.
Il corso prevede, oltre a lezioni teoriche, una serie di esercitazioni pratiche svolte sul cluster HPC di ateneo.

Con riferimento agli Indicatori di Dublino:

Conoscenza e capacità di comprensione
Il corso introduce i primi concetti relativi al calcolo paralello e ad alte prestazioni. Particolare enfasi è data alla comprensione delle dei modelli di calcolo ed algoritmi adatti. I riferimenti per gli approfondimenti sono in italiano e viene utilizzata durante le lezioni la terminologia in lingua inglese come avviamento alla consultazione di letteratura scientifica internazionale.

Capacità di applicare conoscenza e comprensione
Le conoscenze teoriche presentate vengono sempre applicate alla risoluzione di problemi specifici. Le esercitazioni che affiancano il corso sono incentrate sulla risoluzione di esercizi e problemi, con particolare riferimento all’utilizzo dei sistemi paralleli. Spesso i metodi risolutivi vengono presentati sotto forma algoritmica, sviluppando negli studenti la capacità di strutturare procedure utili in numerose parti dell'informatica e non solo nell'ambito HPC.

Autonomia di giudizio
Gli esercizi, che vengono proposti relativamente alla parte teorica svolta a lezione, possono venire risolti individualmente o in gruppo. Il confronto con i compagni di corso, nel lavoro a casa o durante gli svolgimenti in aula, favorisce lo sviluppo di capacità specifiche per poter a chiarire ai compagni o ai docenti le proprie argomentazioni. Spesso gli esercizi proposti possono venire risolti in modi molto diversi e l'ascolto delle soluzioni proposte da altri permette di sviluppare la capacità di individuare strutture comuni, al di là delle apparenti differenze superficiali.

Abilità comunicative
Le numerose discussioni sui diversi metodi per risolvere i problemi proposti consentono di migliorare le capacità di comunicazione. Vengono inoltre abitualmente utilizzate durante le spiegazioni (ed esplicitamente evidenziate in classe) alcune modalità di comunicazione specifiche della tecnologia informatica.

Capacità di apprendimento
Lo studio delle origini delle soluzioni tecnologiche e la loro introduzione motivata da considerazioni quantitative contribuisce a realizzare negli studenti la capacità di apprendere in modo profondo e non soltanto superficiale e ripetitivo. Le conoscenze così acquisite non sono mai rigide e definitive, ma sono perfettamente adattabili ad ogni evoluzione e cambiamento di prospettiva e di contesto.

Modalità verifica apprendimento

Risultati dell'apprendimento e modalità di verifica
Saper comprendere e utilizzare in modo appropriato le tecniche relative alla programmazione di un sistema parallelo. Saper progettare un algoritmo parallelo ed implementarlo su un cluster/acceleratore hardware. Conoscere l'architettura di base delle configurazioni moderne di cluster HPC.

Modalità di verifica/esame
L'esame consiste in un colloquio orale a cui si accede solo previa consegna della prove di laboratorio assegnate durante il corso. Durante l'orale si discutono le consegne di laboratorio, nonche' argomenti di teoria trattati a lezione. In assenza della consegna delle prove di laboratorio, sara' richiesta una prova pratica sugli argomenti di laboratorio.
Non sono previste prove intermedie

Altre informazioni

- - -