Parallel Computing (9 CFU, primo semestre)
Il modello tradizionale di calcolatore sequenziale rimane ormai confinato
ad ambiti applicativi in cui sono richieste basse capacita' di elaborazione
di informazione (controllo di apparati industriali, telefoni cellulari,
netbook).
In tutti gli altri casi, invece, vengono utilizzati sistemi che impiegano piu'
unita' di calcolo simultaneamente. Tali calcolatori paralleli
richiedono specifiche tecniche di programmazione, al fine di esplicare maggiori
capacita' di elaborazione attraverso il controllo (esplicito o implicito) della
cooperazione tra le varie unita' di calcolo.
Per un esperto in Informatica e' dunque importante conoscere i vari
tipi di architetture parallele oggi disponibili ed essere in grado di
programmare calcolatori paralleli.
Obbiettivo di questo corso e' di fornire conoscenze di base sull'architettura
dei sistemi di elaborazione paralleli, insieme a un minimo di capacita' di
programmazione indispensabili per utilizzare sistemi di questo tipo.
Per quanto riguarda la parte di programmazione, questa riguarda in special modo
la programmazione parallela a scambio di messaggi utilizzando lo standard MPI
su una piattaforma di tipo cluster, ma viene anche esaminato un paradigma
a memoria condivisa basato sulle direttive OpenMP.
Viene inoltre presentata una architettura di calcolo parallelo di tipo GPU
con alcuni esempi di programmazione.
Viene infine affrontato, in maniera introduttiva, il problema dell'I/O
parallelo.
Alcuni degli argomenti sotto elencati potrebbero non essere stati svolti
in questo anno accademico e dunque non essere richiesti per superare l'esame.
Prima di sostenere l'esame, consulta il sillabo degli
argomenti svolti nell'anno accademico corrente.
-
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:
Generalita': 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:
Cooperazione 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.
-
Cenni sulle reti di interconnessione per calcolatori multiprocessore:
Tassonomia. Indirizzamento, instradamento, propagazione dei messaggi
(store-and-forward, virtual cut-through, ``wormhole''). Prestazioni di
comunicazione.
Caratteristiche delle principali reti di interconnessione
(diametro, throughput di bisezione, complessita' realizzativa, espandibilita').
-
Calcolatori paralleli SIMD: processori vettoriali. I discendenti moderni dei
calcolatori SIMD: le GPU. Programmazione GPU con OpenCL.
-
Cenni su I/O parallelo e MPI-I/O
L'esame consiste di una prova orale. La valutazione terra' conto anche
del lavoro svolto in occasione delle esercitazioni pratiche. Per coloro
che non partecipano alle esercitazioni, e' prevista una prova pratica in
laboratorio riguardante la programmazione parallela utilizzando uno dei
paradigmi di programmazione esaminati durante il corso.
John Hennessy, David Patterson:
Architettura degli elaboratori, Apogeo.
Si tratta della traduzione in italiano del testo originale
"Computer Architecture: A Quantitative Approach (4th edition)".
Anche le edizioni precedenti possono andar bene:
Computer Architecture: A Quantitative Approach (3rd edition),
Morgan Kaufmann Publishers.
Architettura dei Computer: Un Approccio Quantitativo,
Jackson Libri (traduzione in italiano della "2nd edition").
Un altro libro consigliato e' il seguente:
David Culler, Jaswinder Pal Singh:
Parallel Computer Architecture: A Hardware/Software Approach,
Morgan Kaufmann Publishers.
Ecco qui la
versione online
del libro di Jan Foster: Designing and Building Parallel Programs,
Addison Wesley.
Il materiale
didattico in linea integra, ma non sostituisce, il libro di testo.
Per seguire con profitto questo corso e' assai opportuno aver padronanza dei
contenuti del corso di Architettura dei Calcolatori (primo anno del corso
di laurea).
3 ottobre 11 - 13
introduzione, indici di prestazione dei calcolatori, benchmark, speedup
4 ottobre 14 - 16
parallelismo pipeline: considerazioni analitiche.
introduzione alle CPU pipeline, conflitti e stalli, conflitti strutturali,
conflitti sui dati, tecnica dell'anticipo
6 ottobre 16 - 18
conflitti sul controllo, istruzioni condizionali.
riordino istruzioni: schedulazione statica; loop unrolling, ridenominazione
registri. dipendenze sul controllo, sui nomi, sui dati
10 ottobre 11 - 13
riordino istruzioni: schedulazione dinamica con lo schema di Tomasulo
october 11th, 14 - 16
branch prediction
october 13th, 16 - 18
speculative execution: reorder buffer in Tomasulo scheme.
multiple-issue CPUs: superscalar, VLIW (EPIC) (sketch)
october 17th, 11 - 13
cache memory and how to exploit it
october 18th, 14 - 16
cache memory and how to exploit it (cont'd)
october 20th, 16 - 18
organization of modern main memory (SDRAM).
exercise on symbolic pipelining, discussion of matrix multiplication
performance
october 24th, 11 - 13
discussion of matrix multiplication performance (follow up).
MIMD parallel computers: introduction, main families, main goals,
main problems (Amdahl law, communication overhead)
october 25th, 14 - 16
shared memory MIMD computers; memory bottleneck and how to alleviate them.
cache coherency by snooping; example: MESI write-invalidate coherency
protocol with write-back caches.
cooperation in shared memory multiprocessors.
synchronization primitives: lock/unlock and their efficient implementation
october 27th, 16 - 18
synchronization primitives: barrier.
memory consistency models and memory fence synchronization primitives
november 3rd, 16 - 18
parallel programming with openmp on shared memory multiprocessor.
examples. homeworks: parallel matrix multiply (by parallelizing the
inner loop), parallel mergesort (paper on parallel merge provided)
november 10th, 16 - 18
discussion on the OpenMP homework.
message passing multiprocessors: sketched architecture, send and
receive primitives with basic parameters, blocking semantics,
implicit synchronization. MPI, example of an MPI program (ping-pong),
SPMD model for parallel programs
14 novembre, 11 - 13
synchronous send/receive, potential deadlocks, nonblocking send/receive
and how to exploit them for overlapping communication with computations
november 15th, 14 - 16
still discussion on the OpenMP homework.
MPI collective communication routines; example: MPI_Barrier, tree-based
implementation. homework: implementing a tree-based barrier using
point to point communications
november 17th, 16 - 18
final discussion on the OpenMP homework
november 21st, 11 - 13
MPI collective communication routines: scatter, gather, allgather, reduce.
MPI derived datatype constructors: MPI_Type_contiguous, MPI_Type_vector,
MPI_Type_indexed; MPI_Type_commit
november 22st, 14 - 16
final discussion on the tree-based barrier homework
november 24th, 16 - 18
load balancing with process "farm" patterns of parallelism.
various individual MPI homeworks assigned, deadline in two weeks
november 28th, 11 - 13
Q & A on the ongoing MPI homework
november 29th, 14 - 16
SIMD computers: vector processors
december 5th, 11 - 13
discussion on the MPI homework, some students did not complete in due time
december 6th, 14 - 16
GPU computing, OpenCL, examples: matrix multiplication with global memory
and with global + local memory, performance evaluation and discussion.
OpenCL homeworks assigned, deadline is end of course
december 12th, 11 - 13
discussion on the MPI homework, some students did not complete in due time.
discussion on OpenCL homework
december 13th, 14 - 16
discussion on the MPI homework, some students did not complete in due time.
discussion on OpenCL homework
december 19th, 11 - 13
discussion on the MPI homework, a student did not complete in due time.
discussion on OpenCL homework
20 dicembre, 14 - 15
discussione dell'esercitazione su OpenCL
22 dicembre, 16 - 18
discussione dell'esercitazione su OpenCL, fine del corso
Ultimo Aggiornamento: Febbraio 2012