Garantující katedra | Katedra informatiky | Kredity | 4 |
Garant předmětu | doc. Ing. Pavel Krömer, Ph.D. | Garant verze předmětu | doc. Ing. Pavel Krömer, Ph.D. |
Úroveň studia | pregraduální nebo graduální | ||
Jazyk výuky | čeština | ||
Rok zavedení | 2015/2016 | Rok zrušení | |
Určeno pro fakulty | FEI | Určeno pro typy studia | navazující magisterské |
Os. čís. | Jméno | Cvičící | Přednášející |
---|---|---|---|
BAT0014 | Ing. Tarek Batiha | [x] | [ ] |
KRO080 | doc. Ing. Pavel Krömer, Ph.D. | [x] | [x] |
Forma studia | Zp.zak. | Rozsah |
---|---|---|
prezenční | Klasifikovaný zápočet | 2+2 |
kombinovaná | Klasifikovaný zápočet | 10+0 |
Přehled v oblasti návrhu, realizace a hodnocení paralelních algoritmů. Praktické osvojení paralelních programovacích technik pro vybrané paralelní architektury. Pracovní znalosti v oblasti paralelních systémů a jejich programování, zejména: samostatný návrh paralelních algoritmů, resp. paralelizace sekvenčních algoritmů. Praktická realizace paralelního algoritmu na bázi modelu předávání zpráv. Analýza algoritmu a vyhodnocení implementace. Optimalizace a zvyšování efektivity.
Přednášky
Cvičení (v učebně)
Kurz poskytne posluchačům základy pro aktivní práci v oblasti paralelních systémů, algoritmů a programování. Zaměřuje se na praktickou tvorbu programů, aby byli s to využít dnešní výkonnou výpočetní techniku, od paralelních superpočítačů s distribuovanou pamětí přes vícejádrové procesory až po výpočetní akcelerátory a univerzální grafické karty, pro řešení výpočetně náročných úloh z různých aplikačních oblastí.
Důraz je kladen jak na seznámení se se standardními paralelními paradigmaty, rozhraními, jazyky a knihovnami, tak na reflexi aktuálního vývoje v této oblast prostřednictvím představení nejnovějších paralelních platforem a prostředí. Posluchač bude seznámen s tvorbou paralelních aplikací prostřednictvím modelu předávání zpráv (multipočítačů), s programování systémů se sdílenou pamětí (symetrických multiprocesorů) a programováním výpočetních akcelerátorů. Diskutovány však budou také cloudové platformy, model map-reduce nebo paralelní Matlab.
Cvičení budou věnována praktickému návrhu paralelních algoritmů a jejich implementaci v prostředí MPI, OpenMP, UPC, CUDA-C nebo v paralelním Matlabu.
- Sylaby k předmětu Paralelní algoritmy I.
- Introduction to Parallel Computing (2nd Edition). Ananth Grama, George Karypis, Vipin Kumar, Anshul Gupta, Addison-Wesley, 2003
- Using OpenMP: Portable Shared Memory Parallel Programming, Volume 10, Barbara Chapman, Gabriele Jost, Ruud van der Pas, MIT Press, 2008
- Distributed Computing Principles, Algorithms, and Systems, Ajay D. Kshemkalyani, Mukesh Singhal, Cambridge, 2008
- Distributed Systems: Principles and Paradigms, Andrew S. Tanenbaum, Maarten van Steen, Pearson Prentice Hall, 2007
- Patterns for parallel programming. Timothy Mattson, Beverly Sanders, Berna Massingill, Addison-Wesley, 2004
Posluchači během semestru vypracují tři domácí úkoly na přidělená témata z oblasti paralelních algoritmů. Nabízená témata bude zahrnovat paralelní řešení komplexních problémů a použití různých metod a technik paralelních algoritmů. Na domácích úkolech budou studenti pracovat během semestru průběžně. Řešení bude možno konzultovat s vyučujícím během přednášek, cvičení, během osobních konzultací nebo e-mailem.
Další požadavky nejsou kladeny.
Předmět nemá žádné prerekvizity.
Předmět nemá žádné korekvizity.
-
Úvod do problematiky programování paralelních aplikací. Procesy a vlákna. Procesy a vlákna z pohledu operačního systému. SIMD a FMA instrukce moderních procesorů.
-
Sekvenční vs. paralelní programování. Úskalí paralelního programování. Uváznutí (definice, vlastnosti, podmínky, detekce, eliminace).
-
Paralelní vs. distribuované aplikace. Klasifikace paralelních platforem. Systémy se sdílenou a distribuovanou pamětí. Flynnova taxonomie.
-
Programování systémů se sdílenou pamětí. Programování s pomocí vláken. Knihovna pthreads. Vlákna v jazycích Java a C#. Synchronizace a vyloučení, uváznutí.
-
Rozhraní OpenMP. Podpora OpenMP v překladačích. Direktivy a funkce OpenMP. Redukce v OpenMP.
-
Model Fork-Join. Programovací jazyky Cilk a Cilk++. Paralelní Matlab. Paralelní programování v Pythonu, knihovna NumPy.
-
Programování systémů s distribuovanou pamětí. Komunikace pomocí zasílání zpráv. Posix fronty, sockety. Rozhraní MPI, základní funkce MPI. MPI knihovny.
-
Model Partitioned Global Address Space (PGAS). Programovací jazyk Unified Parallel C (UPC).
-
Dávkové (neinteraktivní) spouštění distribuovaných úloh. Plánovače PBSPro a Torque.
-
Programování v prostředí gridu a cloudu. Webové služby, distribuované aplikace s využitím webových služeb. Paradigma Map-Reduce, framework Hadoop.
-
Úvod do programování akcelerátorů. Architektura GPGPU (organizace programu, organizace paměti). Datový paralelismus. Prostředí CUDA a jazyk CUDA-C.
-
Další rozhraní pro programování akcelerátorú: OpenCL, OpenACC, OpenMP 4.
-
Architektura Intel MIC. Způsoby programování MIC a Xeon Phi. Nové a vznikající platformy.
-
Hybridní paralelní aplikace. Programování pomocí MPI-OpenMP, hybridní CPU-GPU architektury.
Obsah cvičení a procvičované úlohy budou korespondovat s látkou probíranou na přednáškách:
-
Přehled prostředí pro tvorbu paralelních aplikací. SIMD instrukce.
-
Implementace jednoduchého programu s více vlákny.
-
Implementace jednoduchého programu ve více procesech. Komunikace pomocí socketů a front.
-
Debugging a profilování paralelních programů.
-
Implementace jednoduchého programu za pomoci OpenMP. Paralelizace sekvenčního programu pomocí OpenMP.
-
Implementace jednoduchého programu v jazyce Cilk++. Příklad paralelního programování v Matlabu.
-
Implementace jednoduchého programu pomocí rozhraní MPI.
-
Implementace jednoduchého programu v jazyce UPC.
-
Použití plánovačů PBS, PBSPro a Torque, příkaz qsub a QSUB direktivy.
-
Implementace jednoduchého map-reduce programu ve frameworku Hadoop.
-
Implementace jednoduchého data-paralelního programu v CUDA-C.
-
Příklady použití OpenCL, OpenACC a OpenMP 4.
-
Programování Intel MIC. Implementace jednoduchého programu pro Intel MIC.
-
Implementace jednoduchého hybridního programu pomocí MPI a OpenMP.