Parallel Computing (9 CFU, primo semestre)

Obbiettivi

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.

Programma

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.

  1. Prestazioni di un calcolatore:
    Indici di prestazione diretti e inversi, assoluti e relativi. Benchmarks.
  2. 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.
  3. Processori pipeline avanzati:
    Schedulazione dinamica delle istruzioni: architettura di Tomasulo.
    Predizione dei salti (``branch prediction''): tecniche principali.
    Esecuzione speculativa delle istruzioni.
  4. Cenni sui processori superscalari:
    Processori ad avvio multiplo. Schedulazione istruzioni su processori ad avvio multiplo. Processori VLIW.
  5. 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.
  6. 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.
  7. Calcolatori MIMD a memoria comune:
    Struttura a grandi linee. Riduzione dei conflitti di accesso alla memoria. Coerenza di cache: protocolli basati su ``snooping''.
  8. 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.
  9. Modelli di consistenza della memoria principale. Modelli di consistenza debole e loro vantaggi in termini di prestazioni.
  10. Programmazione parallela ad alto livello su calcolatori a spazio di indirizzamento comune: le direttive OpenMP.
  11. 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.
  12. 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.
  13. 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').
  14. Calcolatori paralleli SIMD: processori vettoriali. I discendenti moderni dei calcolatori SIMD: le GPU. Programmazione GPU con OpenCL.
  15. Cenni su I/O parallelo e MPI-I/O

Modalita' di esame

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.

Testi di Riferimento

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.

Prerequisiti

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).

Sillabo (2011)

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