Parallel Computing
Novità
- 27 Gennaio 2017: aggiornamento completo pagina corso 2016-2017.
- 29 Settembre 2017: aggiornamento per edizione corso 2016-2017
- 1 Marzo 2016: creazione pagina web e registro lezioni e laboratorio.
Orario e aule - Ricevimento - Annunci su lezioni
Inizio lezioni a.a. 2016-2017: 29 Settembre 2016. Termine lezioni: 22 Dicembre 2016.
- Lunedì: 10.15-13.15 Aula 110 S. Marta.
- Giovedì: 14.00 - 17.00 Aula 204 S. Marta.
- Sito web dell'orario.
- Registro lezioni 2016-2017: riporta l'argomento di ogni lezione, i riferimenti ai lucidi usati ed ai programmi delle esercitazioni.
Vacanze: -
Ricevimento: Lunedì dalle 17:00 alle 19:00 presso l'ufficio a S. Marta - fissare comunque l'appuntamento per email: marco.bertini@unifi.it
Assenze:
Date esame
E' necessario prenotarsi mediante il modulo web disponibile all'indirizzo: http://sol.unifi.it/prenot/prenot
L'esame viene effettuato presso il MICC o a S. Marta. I locali sono sempre segnalati sul modulo di iscrizione. Le modalità di superamento dell'esame sono riportate sotto.
Le date d'esame sono visibili sul sito ufficiale dell'Università http://sol.unifi.it/docprenot/docprenot:
- 2017: 27 Gennaio (ore 15:00 - presso Via S. Marta, 2). 9 Febbraio (15:00 - presso MICC, Viale Morgagni 65). 23 Febbraio (15:00 - presso MICC, Viale Morgagni 65)
- 2016: 19 Febbraio (15:00 - presso MICC, Viale Morgagni 65). 4 Marzo (9:30 - presso MICC, Viale Morgagni 65).
Lucidi lezioni e materiale collegato
I collegamenti sono generalmente fatti a materiale scritto in inglese, a meno di diversa indicazione. I lucidi sono in formato PDF.
Il programma fatto durante le lezioni è riportato nella pagina web: Registro lezioni 2016-2017 e sul sito di e-learning dell'Università.
Sito e-Learning Unifi con materiale del corso: http://e-l.unifi.it. Tutti gli studenti dell'A.A. 2016-2017 devono iscriversi.
Lucidi e materiale a.a. 2016 - 2017
- Introduction: Parallelism vs. Concurrency vs. Distributed; Types of parallelism; Flynn's taxnomy; Parallel architectures; Metrics for evaluation; Amdahl's law; Gustafson's law
Leggere i capitoli 1-3 di "Principles of Parallel Programming". - Modern CPUs: memory; UMA/NUMA; SIMD.
- Design patterns for parallel programming: design models for parallel programs; safety and liveness; rules of thumbs for designing parallel (multithreaded) applications; design patterns for parallel programming; information exchange.
Leggere cap. 3 di "Parallel Programming for Multicore and Cluster Systems". - Shared memory: threads: threads, deadlocks, livelocks; false sharing.
Leggere cap. 6 di "Principles of Parallel Programming", cap 3 e 6 di "Parallel Programming: For Multicore and Cluster Systems". - Shared memory: Java threads: low-level primitives; thread synchronization; high level framework; locks; concurrent linked list; semaphore; condition variables; callable/future; concurrent collections; producer/consumer example.
Leggere cap. 6 di "Principles of Parallel Programming", cap. 6 di "Parallel Programming: For Multicore and Cluster Systems". - Shared memory: C/C++ Pthreads: PThreads; thread synchronization; shared data; lock-based concurrent data structures.
Leggere cap. 6 di "Principles of Parallel Programming", cap. 6 di "Parallel Programming: For Multicore and Cluster Systems". - Shared memory: C++ threads: C++ multithreading; C++11 thread class; mutex class; conditional variable class; exceptions; locks; atomic types; futures.
- OpenMP: OpenMP thread model; sequential consistency; OpenMP directives.
Leggere cap. 6 di "Principles of Parallel Programming", cap. 6 di "Parallel Programming: For Multicore and Cluster Systems", cap. 5 di "An introduction to parallel programming". - OpenMP directives: for-loop; sections; tasks; OpenMP memory model and synchronization; atomic; lock; critical; producer/consumer.
Leggere cap. 6 di "Principles of Parallel Programming", cap. 6 di "Parallel Programming: For Multicore and Cluster Systems", cap. 5 di "An introduction to parallel programming". - GPU CUDA - part 1: data parallelism; GPU vs. CPU; SIMT; CUDA; "Hello World" in CUDA; managing memory; organizing threads; CUDA examples: summing vectors and matrix multiplication. Leggere cap. 1 e 3 di "Programming Massively Parallel Processors: A Hands-on Approach", leggere cap. 1-2 di "Professional CUDA C Programming".
- GPU CUDA - part 2: blocks and threads; warps; divergence; organizing blocks and threads; 2D and 3D kernels; CUDA memory. Leggere cap. 4-5 di "Programming Massively Parallel Processors: A Hands-on Approach", leggere cap. 3 di "Professional CUDA C Programming".
- GPU CUDA - part 3: efficient programming in CUDA; tiling; tiling and phases; tiling and boundary checks.
Leggere cap. 4-5 di "Programming Massively Parallel Processors: A Hands-on Approach". - GPU CUDA - part 4: CUDA eprformance considerations; memory bandwidth; memory access coalescing.
Leggere cap. 4-6 di "Programming Massively Parallel Processors: A Hands-on Approach". - GPU CUDA - part 5: atomic operations; privatization; algorithms (partitioning / interleaving); parallel patterns: convolution; 1D convolution; 2D convolution; convolution and tiling; evaluating tiling.
Programming Massively Parallel Processors: A Hands-on Approach, D. B. Kirk and W-M. W. Hwu, Morgan Kaufman - Chapt. 8 - GPU CUDA - part 6: 2D convolutions: tile boundaries; using constant memory in convolutions.
Programming Massively Parallel Processors: A Hands-on Approach, D. B. Kirk and W-M. W. Hwu, Morgan Kaufman - Chapt. 8 - Hadoop - part 1: data parallelism; MapReduce; Hadoop basics; A simple Hadoop program: word counter.
leggere "The Art of Concurrency", Paul Butcher, Pragmatic Bookshelf - Chapt. 7. Leggere "Hadoop in Action", Chuck Lam, Manning - Chapt. 1-4 - Hadoop - part 2: Parallelism with combiners and shufflers; input/output data formats; storing data; Hadoop installation modes; runninga MapReduce job.
Leggere "Learning Hadoop 2", Garry Turkington and Gabriele Modena, Packt Publishing - Chapt. 2. Leggere "Hadoop The Definitive Guide", Tom White, O’Reilly - Chapt. 8 - Hadoop - part 3: chaining MapReduce jobs; joining data from different sources.
Leggere "Learning Hadoop 2", Garry Turkington and Gabriele Modena, Packt Publishing - Chapt. 2. Leggere "Hadoop The Definitive Guide", Tom White, O’Reilly - Chapt. 8. Leggere "Hadoop in Action", Chuck Lam, Manning - Chapt. 5 - Lambda architecture: Lambda architecture; batch layer; speed layer; Apache Storm.
Letture consigliate: The Art of Concurrency, Paul Butcher, Pragmatic Bookshelf - cap. 8; Hadoop in Action, Chuck Lam, Manning - cap. 1-4 - Distributed memory: message passing: distributed memory systems; MPI; communication, deadlock and problems; synchronization.
Leggre cap. 7 di "Principles of Parallel Programming", cap. 5 di "Parallel Programming: For Multicore and Cluster Systems", cap. 3 di "An introduction to parallel programming".
Lucidi e materiale anni precedenti:
- -
Modalità di svolgimento dell'esame
L'esame si compone di una prova di mid-term ed un elaborato.
La prova di mid-term consiste in una relazione e presentazione di capitoli di libro assegnati dal docente. Ogni prova ed elaborato può essere sostenuta singolarmente o da un gruppo di massimo due persone. gli elaborati sono selezionati da un set di temi che sono presentati alla fine del corso. Secondo il numero di crediti gli elaborati avranno un grado di difficoltà maggiore. Ogni elaborato è pensato per essere implementato usando una o due diverse tecnologie viste durante il corso, come per es. PThreads, OpenMP, CUDA, etc. Gli elaborati vanno selezionati dalla seguente lista in formato PDF.
Link utili
CUDA SDK: SDK per la programmazione di GPU con CUDA
OpenMP: specifiche ufficiali di OpenMP
OpenMPI implementazione open source delle specifiche MPI
Ambienti di sviluppo/compilatori consigliati
Per lo sviluppo con CUDA è consigliato l'uso di NVIDIA Nsight che è basato su Eclipse. Nsight è disponibile anche come plugin per Visual Studio.
Per lo sviluppo degli esercizi in PThreads, C++11, OpenMP ed OpenMPI & consigliato fortemente l'uso di CLion, un ambiente di sviluppo integrato multipiattaforma con licenza gratuita per gli studenti. Durante il corso verrà usata questa IDE. I software sviluppati durante il corso DEVONO essere forniti come progetti CLion.
Compilatore per Windows: GCC nella distribuzione MinGW
Compilatore per Linux: G++
Compilatore per OSX: la versione di clang++ di Apple (ultime versioni di XCode per OSX) non è adatta per lo sviluppo con OpenMP e OpenMPI. È consigliato installare le ultime versioni di clang++ o g++ da Homebrew o Macports.
Libri di testo
C. Lin, L. Snyder, "Principles of Parallel Programming", Pearson, 2009
D.B. Kirk, W.-m. W. Hwu, "Programming Massively Parallel Processors: A Hands-on Approach", Morgan Kaufmann, 2012
P.S. Pacheco, "An Introduction to Parallel Programming", Morgan Kaufmann, 2012
Libri consigliati
J. Cheng, M. Grossman, T. McKercher, “Professional Cuda C Programming”, Wrox, 2014
T. Rauber, G. Runger, “Parallel Programming: For Multicore and Cluster Systems”, Springer, 2013