Obbiettivo di questo corso è di fornire conoscenze di base sull'architettura dei calcolatori paralleli e una certa pratica nella loro programmazione, insieme a un minimo di capacità di valutazione di sistemi di questo tipo.
Lezioni, esercitazioni non guidate, discussioni in aula, studio personale
Prestazioni di un calcolatore: Indici di prestazione diretti e inversi, assoluti e relativi. Benchmarks.
Architettura dei processori pipeline: Prestazioni dei sistemi pipeline e loro valutazione analitica. Struttura di un processore pipeline. Conflitti (strutturali, sui dati, sul controllo) e loro impatto sulle prestazioni. Riduzione dei conflitti e/o del loro effetto sulle prestazioni: tecniche hardware. Il parallelismo a livello istruzioni nei programmi. Come sfruttare meglio il parallelismo a livello istruzioni quando si usano processori pipeline: loop unrolling, ridenominazione registri, riordino delle istruzioni.
Processori pipeline avanzati: Schedulazione dinamica delle istruzioni: architettura di Tomasulo. Predizione dei salti (“branch prediction”): tecniche principali. Esecuzione speculativa delle istruzioni.
Cenni sui processori superscalari: Processori ad avvio multiplo. Schedulazione istruzioni su processori ad avvio multiplo. Processori VLIW.
Memoria cache e prestazioni dei calcolatori: Tecniche hardware per ridurre la penalita’ di cache miss. Tecniche hardware e software per ridurre la frequenza di cache miss. Tecniche hardware per nascondere l’impatto dei cache miss.
Calcolatori multiprocessore MIMD: Generalità: MIMD a memoria comune, MIMD a memoria distribuita con spazio di indirizzamento comune, MIMD a memoria distribuita e scambio di messaggi. Scopi di un calcolatore MIMD. Limiti dei calcolatori MIMD: legge di Amdahl, ritardi di comunicazione.
Calcolatori MIMD a memoria comune: Struttura a grandi linee. Riduzione dei conflitti di accesso alla memoria. Coerenza di cache: protocolli basati su “snooping”. Cooperazione tra processi su calcolatori a spazio di indirizzamento comune: Comunicazione e sincronizzazione. Implementazione di lock/unlock e barrier synchronization su spazio di indirizzamento comune, discussione delle loro prestazioni. Modelli di consistenza della memoria principale. Modelli di consistenza debole e loro vantaggi in termini di prestazioni. Programmazione parallela ad alto livello su calcolatori a spazio di indirizzamento comune: le direttive OpenMP.
Calcolatori MIMD a memoria distribuita e scambio di messaggi: Struttura a grandi linee. Cooperazione tra processi: funzioni di comunicazione basate sullo scambio di messaggi. Funzioni di comunicazione bloccanti vs. non bloccanti, punto-punto vs. collettive, cenni sulla loro implementazione. Funzioni non bloccanti e riordino di istruzioni. Programmazione parallela a scambio di messaggi: il paradigma SPMD. MPI, uno standard per la programmazione parallela a scambio di messaggi. Esercitazioni pratiche sulla programmazione parallela mediante la libreria MPI.
Il concetto di bilanciamento del carico e il suo impatto sulle prestazioni. Tecniche per il bilanciamento dinamico del carico (cenni). Sistemi paralleli di tipo “farm” e loro valutazione analitica.
Per eventuali aggiornamenti si rimanda alla URL
http://www.disi.unige.it/person/CiaccioG/parcomp/programma_corso.html
John Hennessy, David Patterson: Computer Architecture: A Quantitative Approach, Morgan Kaufmann Publishers. La “2nd edition” era disponibile anche in Italiano: Architettura dei Computer: Un Approccio Quantitativo, Jackson Libri.
Ricevimento: Su appuntamento via email
GIUSEPPE CIACCIO (Presidente)
GIOVANNI CHIOLA
FRANCESCO MASULLI
PARALLEL COMPUTING
Esame orale, eventuale esame pratico mediante progetto