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