Paralelní a distribuované systémy
(2024/2025, ZS)
Kurz se zabývá základními aspekty paralelních a distribuovaných systémů. Od základů paralelismu, klasických problémů a přístupů k synchronizaci sdílenou pamětí, přes úvod do distribuovaných systému a výběr algoritmů pro řešení jejich základních problémů, až po přehled některých zajímavých moderních distribuovaných systémů.
Zdroje
Seznam zdrojů bude během semestru rozšiřován, zejména o reference ke konkrétním zmínkám z přednášek/cvičení. Podívejte se i k jednotlivým přednáškám a do zdrojů uvedených ve slidech.
- Stránka předmětu ve STAGu
- Distributed systems, Maarten van Steen, Andrew S. Tanenbaum, 2023 | Knihovna | Online
- Principles of concurrent and distributed programming, M. Ben-Ari, Addison-Wesley, 2006 | Knihovna
- Foundations of multithreaded, parallel, and distributed programming, Gregory R. Andrews, 2000 | Knihovna
- Grokking Concurrency, Kirill Bobrov, 2023
- The art of multiprocessor programming, Maurice Herlihy, Nir Shavit, Elsevier, 2008 | Knihovna
- The Little Book of Semaphores, Allen B. Downey, Green Tea Press, 2016 | Online
Zápočet
Pro získání zápočtu budete muset splnit dvě části:
- Programovací úkoly
- Implementujte sdílený čítač ve svém oblíbeném jazyce. Řešení pište pro n vláken, kde n je parametr programu.
- bez synchronizace. Nachystejte příklad, kde se (pravděpodobně) ukážou problémy.
- zkuste použít více možností k tvorbě vláken (virtuální vlákna, ThreadPooly, …) dle možností jazyka
- se synchronizací pomocí Lamportova bakery algoritmu.
- se synchronizací pomocí vhodných synchronizačních primitiv jazyka (zkuste alespoň dvě různá)
- bez synchronizace. Nachystejte příklad, kde se (pravděpodobně) ukážou problémy.
- Implementujte vlastní semafor v jazyce C s pomocí C11 atomics. Použijte svůj semafor pro řešení problému kuřáků.
- Implementujte ve svém oblíbeném jazyce (kromě Go) jednoduchý framework pro simulaci distribuovaného systému a v něm pak implementujte:
- chord systém
- vzájemné vyloučení (libovolnou variantu)
- Raft pro volbu lídra
- Ke všem úkolům nachystejte ukázku.
- Odevzdávat můžete postupně, nebo vše naráz.
- Termín odevzdání je cvičení v zápočtovém týdnu.
- Odevzdává se osobně (popovídáme si nad tím).
- Implementujte sdílený čítač ve svém oblíbeném jazyce. Řešení pište pro n vláken, kde n je parametr programu.
- Nachystat a ostatním přednést informace o možnostech paralelních/distribuovaných výpočtů v nějakém programovacím jazyce:
- Termíny prezentací:
- 7.11.2024 - C#
- 14.11.2024 - Java
- 21.11.2024 - Python
- 28.11.2024 - Javascript
- 5.12.2024 - C a C++
- Požadavky na prezentaci:
- krátké povídání o modelu, možnostech a specifických věcech jazyka, jeho standardní knihovny i nejpoužívanějších knihovnách vztahujících se k paralelismu
- stručný handout pro ostatní s informacemi z prezentace
- ukázky použití paralelismu v daném jazyce (živě na cvičení a v repositáři zveřejněném i pro ostatní)
- Termíny prezentací:
- Tabulka s výsledky.
Zkouška
- Zkouška se skládá ze tří částí:
- Obecný rozhovor o všech tématech kurzu (bez přípravy; přehledově).
- Klasicky vylosovaná otázka ze seznamu níže s písemnou přípravou.
- Rozhovor o jednom vylosovaném článku ze seznamu níže s písemnou přípravou.
- Pro splnění zkoušky musí student splnit všechny tři části (v jednom termínu).
- Nejprve si popovídáme v duchu bodu 1. Pokud to bude v pořádku, přistoupíme k losování otázky a článku z bodů 2 a 3
- Písemná příprava na části 2 a 3 bude max. 30 minut.
- Článek bude během přípravy i rozhovoru k dispozici k nahlédnutí.
- Seznam otázek a článků ke zkoušce bude zveřejněn během semestru.
Seznam otázek
TBA
Seznam článků
- Vyberte si čtyři z následujících článku (tj. dva můžete vyřadit).
- Ze čtyř vybraných budete losovat u zkoušky.
- Odkazy vedou na oficiální zdroje. Kdyby byl s některým problém, ozvěte se.
- Cílem je základní pochopení, tj. otázky typu:
- O čem článek je?
- K čemu to je dobré?
- Co nového přináší?
- Jak to funguje?
- Základní vlastnosti problému/systému/algoritmu popsaného v článku?
- Co si o tom myslíte (o obsahu i o formě článku)?
- Co vás zaujalo nebo vám nebylo jasné?
- …
- MapReduce: Simplified Data Processing on Large Clusters
- ZooKeeper: Wait-free coordination for Internet-scale systems
- In Search of an Understandable Consensus Algorithm (Extended Version)
- On the Parallels between Paxos and Raft, and how to Port Optimizations
- Practical Byzantine Fault Tolerance
- Bitcoin: A Peer-to-Peer Electronic Cash System
Přednášky
- Přednášky jsou ve středu, 16:45-18:15 v místnosti 1.127.
- Obsah přednášek bude doplňován během semestru.
- 25.9.2024 - Úvod
- slidy (v. 11.10.2024)
- Leslie Lamport
- 2.10.2024 - Paralelní systémy, kritická sekce
- slidy (v. 11.10.2024)
- Dijkstra - kritická sekce
- Lamport - Bakery
- 9.10.2024 - Synchronizační primitiva
- slidy (v. 11.10.2024)
- Ben-Ari, kapitoly 6 a 7 (více informací k semaforům a monitorům)
- Herlihy, Shavit, kapitola 17 (bariéry)
- Dokumentace vašeho oblíbeného jazyka (atomické akce, mutex, lock, semafor, monitor, podmíněná proměnná, bariéra, ThreadPool, …)
- Další ve slidech
- 16.10.2024 - Klasické synchronizační problémy
- slidy (v. 16.10.2024)
- Dijkstra - některé klasické problémy
- Parnas - diskuze síly semaforů
- Downey, kapitola 4
- 23.10.2024 - Návrh paralelního systému, úvod do distribuovaných systémů
- slidy
- Fosterova metodologie
- van Steen, Tanenbaum, kapitoly 1 a 2
- Bobrov, kapitoly 7 a 13
- 30.10.2024 - Komunikace v distribuovaných systémech
- slidy
- van Steen, Tanenbaum, kapitola 4
- Bobrov, kapitola 5
- Andrews, kapitoly 7 - 10 (detailnější)
- 6.11.2024 - Koordinace v distribuovaných systémech: čas a vzájemné vyloučení
- slidy
- van Steen, Tanenbaum, kapitola 5 (po vzájemné vyloučení)
- Lamport - logický čas
- Ricart, Agrawala - vzájemné vyloučení
- Apache Zookeeper
- 13.11.2024 - Volba leadera a chord systém
- slidy
- van Steen, Tanenbaum, kapitola 5.4 (volba leadera), kapitola 6.2.3 (chord)
- Ongaro, Ousterhout - Raft
- Stoica et al. - Chord
- 20.11.2024 - Přesunuto ze zdravotních důvodů
Cvičení
- Cvičení jsou ve čtvrtek, 8:00 - 9:30 v místnosti 1.029.
- Obsah cvičení bude doplňován během semestru.
- 26.9.2024 - Úvod | obsah
- 3.10.2024 - Kritická sekce | obsah
- 10.10.2024 - Synchronizační primitiva | obsah
- 17.10.2024 - Problém kuřáků cigaret | obsah
- 24.10.2024 - Návrh PS, Simulace DS | obsah
- 31.10.2024 - Komunkace v distribuovaných systémech | obsah
- 7.11.2024 - Vzájemné vyloučení v distribuovaných systémech, prezentace C# | obsah
- 14.11.2024 - Chord systém, volba leadera, prezentace Java | obsah
- 21.11.2024 - Články ke zkoušce, prezentace Python | obsah