Přeskočit na hlavní obsah
Přeskočit hlavičku

Paralelní počítání

Typ studia navazující magisterské
Jazyk výuky čeština
Kód 460-4179/01
Zkratka PCO
Název předmětu česky Paralelní počítání
Název předmětu anglicky Parallel Computing
Kreditů 4
Garantující katedra Katedra informatiky
Garant předmětu prof. Ing. Pavel Krömer, Ph.D.

Subject syllabus

Přednášky:
- Úvod do problematiky paralelního programování. Konkurence, pseudoparalelismus, paralelismus. Procesy a vlákna. Rozšířené instrukční sady, SIMD instrukce.
- Sekvenční vs. paralelní programování. Typické problémy paralelního programování a jejich řešení: synchronizace a vzájemné vyloučení, uváznutí (definice, vlastnosti, podmínky, detekce, eliminace).
- Typy paralelních platforem. Systémy se sdílenou a distribuovanou pamětí. Datový a funkční paralelismus.
- Systémy se sdílenou pamětí. Model fork-join a rozhraní OpenMP. Paralelní konstrukce na různých úrovních abstrakce (promise, future, async, threadpooling, scheduling, load balancing).
- Systémy s distribuovanou pamětí. Modely message passing a bulk synchronous parallel. Posix fronty, sockety. Rozhraní MPI, základní MPI operace.
- Další možnosti v systémech s distribuovanou pamětí: modely bulk synchronous parallel a partitioned global address space.
- Lehký úvod do programování akcelerátorů a koprocesorů. Koncept offloadování výpočtů. Architektura GPGPU (organizace programu, paměti). Datový a funkční paralelismus na GPU. Prostředí CUDA a jazyk CUDA-C, podpora v dalších jazycích (OpenMP).
- Metodika návrhu paralelních algoritmů. Task/channel model paralelního výpočtu. Fosterova návrhová metodologie (rozdělení, komunikace, aglomerace, mapování) a její použití.
- Návrhové vzory v paralelním programování. Hledání konkurence (doménová a datová dekompozice), struktura algoritmu, implementace. Řešení typických scénářů: nezávislé úlohy, replikace a redukce, rozděl a panuj, pipeline.
- Reprezentace a analýza paralelního algoritmu (parallel random access machine, bulk synchronous parallel, informal work depth atp.). Výkon a efektivita paralelního algoritmu.
- Datové struktury pro paralelní algoritmy: zásobník, fronta, pool, spojovaný seznam, hašovací tabulka, stromy, priority. Hlavní rozdíly oproti sekvenčním verzím. Algoritmy pro řešení vybraných problémů: prefix-sum, merging, vyhledávání (orthogonal trees, sorting networks). Rozdíl mezi sekvenčním, naivně paralelním a efektivním paralelním řešením.
- Datové struktury a algoritmy pro paralelní vyhledávání. 2-3 strom, pipelining. Paralelní vyhledávání, vkládání, mazání.
- Paralelní algoritmy a datové struktury pro grafové úlohy. Průchody grafy, hledání nejkratších cest, konektivita, nezávislé komponenty, atd.

Cvičení:
- Řešení výpočetně náročné úlohy za pomoci paralelismu a bez něj. Problém obchodního cestujícího - od triviálně paralelního řešení (brute-force algoritmus) k řešení s použitím IPC (jednoduchá paralelní verze branch-and-bound algoritmu).
- Datový paralelismus nad velkými daty. Datová dekompozice, data paralelní přístup, vektorizace. Paralelní maticové operace a shlukování.
- Paralelní vyhledávání.
- Paralelní algoritmy pro grafové úlohy, grafy a nelinerání datové stuktury. Paralelní implementace iterativní verze algoritmu PageRank.

Literature

1. Sylaby k předmětu Paralelní počítání.
2. Parallel Programming for Multicore and Cluster Systems, 3rd edition. Thomas Rauber, Gudula Rünger. Springer International Publishing, 2023.
3. Introduction to Parallel Computing. Z. J. Czech. Cambridge: Cambridge University Press, 2017.
4. Designing and Building Parallel Programs: Concepts and Tools for Parallel Software Engineering. Ian Foster, Addison Wesley, 1995

Advised literature

1. The OpenMP Common Core: Making OpenMP Simple Again, Timothy G. Mattson, Yun He, Alice E. Koniges. MIT Press, 2019
2. Distributed Systems (3rd ed.), Andrew S. Tanenbaum, Maarten van Steen, 2017
3. Distributed Computing Principles, Algorithms, and Systems, Ajay D. Kshemkalyani, Mukesh Singhal, Cambridge, 2008