Přeskočit na hlavní obsah
Přeskočit hlavičku
Terminated in academic year 2022/2023

Paralelní algoritmy I

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

Subject syllabus

Přednášky:
==========
1. Ú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ů.

2. Sekvenční vs. paralelní programování. Úskalí paralelního programování. Uváznutí (definice, vlastnosti, podmínky, detekce, eliminace).

3. Paralelní vs. distribuované aplikace. Klasifikace paralelních platforem. Systémy se sdílenou a distribuovanou pamětí. Flynnova taxonomie.

4. 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í.

5. Rozhraní OpenMP. Podpora OpenMP v překladačích. Direktivy a funkce OpenMP. Redukce v OpenMP.

6. Model Fork-Join. Programovací jazyky Cilk a Cilk++. Paralelní Matlab. Paralelní programování v Pythonu, knihovna NumPy.

7. 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.

8. Model Partitioned Global Address Space (PGAS). Programovací jazyk Unified Parallel C (UPC).

9. Dávkové (neinteraktivní) spouštění distribuovaných úloh. Plánovače PBSPro a Torque.

10. 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.

11. Úvod do programování akcelerátorů. Architektura GPGPU (organizace programu, organizace paměti). Datový paralelismus. Prostředí CUDA a jazyk CUDA-C.

12. Další rozhraní pro programování akcelerátorú: OpenCL, OpenACC, OpenMP 4.

13. Architektura Intel MIC. Způsoby programování MIC a Xeon Phi. Nové a vznikající platformy.

14. Hybridní paralelní aplikace. Programování pomocí MPI-OpenMP, hybridní CPU-GPU architektury.

Cvičení:
========
Obsah cvičení a procvičované úlohy budou korespondovat s látkou probíranou na přednáškách:

1. Přehled prostředí pro tvorbu paralelních aplikací. SIMD instrukce.

2. Implementace jednoduchého programu s více vlákny.

3. Implementace jednoduchého programu ve více procesech. Komunikace pomocí socketů a front.

4. Debugging a profilování paralelních programů.

5. Implementace jednoduchého programu za pomoci OpenMP. Paralelizace sekvenčního programu pomocí OpenMP.

6. Implementace jednoduchého programu v jazyce Cilk++. Příklad paralelního programování v Matlabu.

7. Implementace jednoduchého programu pomocí rozhraní MPI.

8. Implementace jednoduchého programu v jazyce UPC.

9. Použití plánovačů PBS, PBSPro a Torque, příkaz qsub a QSUB direktivy.

10. Implementace jednoduchého map-reduce programu ve frameworku Hadoop.

11. Implementace jednoduchého data-paralelního programu v CUDA-C.

12. Příklady použití OpenCL, OpenACC a OpenMP 4.

13. Programování Intel MIC. Implementace jednoduchého programu pro Intel MIC.

14. Implementace jednoduchého hybridního programu pomocí MPI a OpenMP.

Literature

1. Sylaby k předmětu Paralelní algoritmy I.
2. Introduction to Parallel Computing: From Algorithms to Programming on State-of-the-Art Platforms. Roman Trobec, Boštjan Slivnik, Patricio Bulić, Borut Robič. Springer Nature Switzerland, 2018
3. Parallel Programming for Multicore and Cluster Systems. Thomas Rauber, Gudula Rünger. Springer-Verlag Berlin Heidelberg, 2013
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. Using OpenMP-The Next Step: Affinity, Accelerators, Tasking, and SIMD. Ruud van der Pas, Eric Stotzer, and Christian Terboven. MIT Press, 2017
3. Distributed Systems (3rd ed.), Andrew S. Tanenbaum, Maarten van Steen, 2017
4. Distributed Computing Principles, Algorithms, and Systems, Ajay D. Kshemkalyani, Mukesh Singhal, Cambridge, 2008
5. Patterns for parallel programming. Timothy Mattson, Beverly Sanders, Berna Massingill, Addison-Wesley, 2004
6. Introduction to Parallel Computing (2nd Edition). Ananth Grama, George Karypis, Vipin Kumar, Anshul Gupta, Addison-Wesley, 2003