HIGH PERFORMANCE COMPUTING
- Anno accademico
- 2021/2022 Programmi anni precedenti
- Titolo corso in inglese
- HIGH PERFORMANCE COMPUTING
- Codice insegnamento
- CM0227 (AF:359543 AR:180699)
- Lingua di insegnamento
- Inglese
- Modalità
- In presenza
- Crediti formativi universitari
- 6
- Livello laurea
- Laurea magistrale (DM270)
- Settore scientifico disciplinare
- INF/01
- Periodo
- II Semestre
- Anno corso
- 1
- Sede
- VENEZIA
- Spazio Moodle
- Link allo spazio del corso
Inquadramento dell'insegnamento nel percorso del corso di studio
Risultati di apprendimento attesi
Gli studenti acquisiscono conoscenze sui modelli di architetture di High Performance Computing, sui paradigmi e sugli ambienti di programmazione parallela, e sulla valutazione delle prestazioni dei sistemi paralleli.
Gli studenti raggiungeranno i seguenti risultati di apprendimento:
Conoscenza e comprensione: i) comprensione dei concetti base del multi-threading e del calcolo distribuito; ii) comprensione dei costi di un programma parallelo (cache, memory, network) e loro modellazione; iii) comprensione dei pattern di programmazione parallela.
Capacità di applicare conoscenza e comprensione: i) capacità di progettare e sviluppare algoritmi paralleli ii) capacità di stimare e misurare la performance di un programma parallelo; iii) capacità di sviluppare algoritmi paralleli tramite l'uso dei pattern di programmazione parallela
Capacità di giudizio: i) capacità di analizzare e confrontare differenti pattern o soluzioni parallele e di scegliere la più appropriata ad un dato problema sulla base di un modello di costo
Abilità comunicative: i) saper esporre in maniera esausitva i risultati sperimentali di una analisi comparativa tra differenti soluzioni parallele
Prerequisiti
Contenuti
- Motivations for Parallel Computing
- Different granularities: Instruction Level Parallelism, Multi-Core, GPU, Distributed Computing
- Examples of large scale applications that require High Performance Computing
2. Instruction level Parallelism
- Introduction to instruction level parallelism
- SIMD paradigm
- SSE and AVX instruction sets
- Intel Intrinsincs
3. Auto-Vectorization
- Data/control dependencies
- Loop Optimizations
- Compilers Auto-vectorization
- Pointer aliasing
- Guidelines for auto-vectorization
4. Cache Aware Algorithms
- Impact of cache in modern architectures
- Cache coherence protocols
- Cache-aware algorithms
- Cache-aware matrix multiplication.
5. Cache Oblivious Algorithms
- Cache-oblivious Models and Algorithms
- Cache-oblivious matrix multiplication
- Cache-oblivious sorting
- Using micro kernels to optimize cache usage and compile auto-vectorization.
- Software tools for evaluating cache performance
6. Thread Parallelism
- Modeling of parallel programs: speed-up, cost-optimality, scalability
- Threads vs. processes, shared memory programming
- C++ std threads, mutexes and condition variables (già fatti ...)
- The OpenMP paradigm: Managing threads and memory management, Parallelizing loops and scheduling policies, Managing parallel sections, Synchronization and introspection
- Multi-threaded algorithms, Impact of parallelism to cache efficiency
- Matrix Multiplication algorithms
7. Patterns of Parallelism
- Modeling parallelism: Task dependency graphs, Task interaction graphs, Parallelism degree and task granularities, Critical path, Mapping guidelines
- Patterns of Parallelism: Embarrassingly parallel problems, Thread pool (farm), Exploratory search, Pipelining, Vertex-centric
- Static vs. dynamic mapping
- Algorithms: quicksort, shellsort, bitonic-sort, prefix sum, connected components
9. HPC on large clusters:
- Distributed file systems
- Fault Tolerance
- The MapReduce paradigm
- The Spark framework
- Algorithms: All Pairs Similarity Search
10. Large-scale data parallelism on GPU:
- GPU architectures
- CUDA for GP-GPU computing
- GPU threads and memory hierarchies
- Parallel patterns and algorithms for GPUs
Testi di riferimento
T. Rauber, G. Rünger, Parallel Programming for Multicore and Cluster Systems, 2nd Ed, Spinger
Modalità di verifica dell'apprendimento
La prova scritta consiste in domande di carattere teorico sugli argementi trattati durante il corso.
Il progetto richiede di sviluppare un algoritmo per uno specifico problema di data anlysis. Lo studente deve scegliere e motivare la soluzione parallela secondo lui più opportuna e consegnare un report che verrà discusso con il docente.