Nazwa przedmiotu:
Programowanie równoległe i rozproszone
Koordynator przedmiotu:
Rajmund Kożuszek
Status przedmiotu:
Fakultatywny dowolnego wyboru
Poziom kształcenia:
Studia II stopnia
Program:
Informatyka
Grupa przedmiotów:
Przedmioty techniczne - zaawansowane
Kod przedmiotu:
PORR
Semestr nominalny:
2 / rok ak. 2021/2022
Liczba punktów ECTS:
4
Liczba godzin pracy studenta związanych z osiągnięciem efektów uczenia się:
1. liczba godzin kontaktowych – 62 godz., w tym obecność na wykładach 30 godz., obecność na zajęciach projektowych 30 godz., obecność na egzaminie 2 godz. 2. praca własna studenta – 55 godz., w tym realizacja projektu 35 godz., opracowanie wyników projektu i przygotowanie prezentacji 5 godz., przygotowanie do egzaminu 15 godz. Łączny nakład pracy studenta wynosi 117 godz., co odpowiada 4 pkt. ECTS.
Liczba punktów ECTS na zajęciach wymagających bezpośredniego udziału nauczycieli akademickich:
2,12 pkt. ECTS, co odpowiada 62 godz. kontaktowym
Język prowadzenia zajęć:
polski
Liczba punktów ECTS, którą student uzyskuje w ramach zajęć o charakterze praktycznym:
2,39 pkt. ECTS, co odpowiada 35 godz. realizacji projektu plus 5 godz. przygotowania prezentacji plus 30 godz. spotkań projektowych
Formy zajęć i ich wymiar w semestrze:
  • Wykład30h
  • Ćwiczenia0h
  • Laboratorium0h
  • Projekt30h
  • Lekcje komputerowe0h
Wymagania wstępne:
(-)
Limit liczby studentów:
45
Cel przedmiotu:
Celem jest przedstawienie podstawowych wiadomości na temat prowadzenia obliczeń wektorowych, równoległych i rozproszonych na komputerach wielordzeniowych (wykorzystujących ewentualnie rozszerzenia strumieniowe SSE, AVX, karty graficzne), superkomputerach, klastrach, gridach i chmurach.
Treści kształcenia:
Wykład: Zagadnienia podstawowe: klasyfikacja i architektura komputerów równoległych; procesory wielordzeniowe, jednostki wykonawcze SSE, AVX, Altivec oraz GPU; obliczenia: wektorowe, współbieżne, równoległe, rozproszone, strumieniowe; rodzaje oprogramowania realizującego równoległość, istotne paradygmaty i modele programowania równoległego. Miary oceny efektywności obliczeń równoległych (współczynniki przyśpieszenia oraz wydajności, prawa Amdahla i Gustafsona-Barsisa, sprawność i skalowalność). Zagadnienia synchronizacji i wymiany informacji w obliczeniach równoległych, podstawowe mechanizmy: zamek, semafor, monitor, bariera klasyczna i dwuczęściowa, dane specyficzne wątków, zmienne warunków, komunikaty (przesyłanie: synchroniczne, asynchroniczne, blokujące, nieblokujące, buforowane, itd.). Wektoryzacja obliczeń we współczesnych komputerach opartych na architekturze x86, sposób wykorzystania jednostek wykonawczych SSE/AVX. Podstawowe informacje o obliczeniach ogólnego przeznaczenia wykorzystujących karty graficzne (GPGPU), pojęcia strumienia i jądra; najważniejsze cechy środowisk oprogramowania: CUDA, OpenCL. OpenACC. Elementy programowania na maszynach z pamięcią wspólną, narzędzia: klasyczne narzędzia systemu UNIX, programowania wielowątkowego (wątki POSIX, wątki standardu C11, wątki w językach Java oraz C#), język dyrektyw OpenMP. Elementy programowania na maszynach z pamięcią lokalną oraz w sieciach komputerowych, klastrach, gridach, chmurach; narzędzia: środowisko MPI, rodzina narzędzi RPC (w tym dokładniej gRPC). Przetwarzanie Big Data – modele, paradygmat MapReduce, środowiska i platformy (Hadoop, Apach Spark). Modele przetwarzania w chmurze, architektura chmury obliczeniowej, technologie (OpenStack). Algorytmy synchroniczne: podstawowe algorytmy algebry liniowej w wersji równoległej, rozwiązywanie układów równań nieliniowych, równoległe metody optymalizacji. Algorytmy całkowicie lub częściowo asynchroniczne: założenia, zbieżność, zastosowanie do rozwiązywania dużych układów równań liniowych i nieliniowych, optymalizacji statycznej, routingu, szeregowania linków w wyszukiwarkach, itp. Projekt: Celem projektu jest zdobycie podstawowych praktycznych umiejętności w posługiwaniu się równoległym środowiskiem do obliczeń oraz wykonanie przykładowych obliczeń na maszynach równoległych, wielordzeniowych (także z wykorzystaniem SSE/AVX i GPU), jak również w klastrze stacji roboczych. Przewidywane są zadania związane z: 1) badaniem algorytmów synchronicznych z wykorzystaniem dyrektyw zrównoleglających kompilatora (OpenMP) oraz mechanizmu wątków (POSIX, C11 lub Java threads) na maszynie równoległej z pamięcią wspólną; 2) badaniem algorytmów rozproszonych w klastrze z wykorzystaniem oprogramowania: MPI, gRPC, Java RMI; 3) badaniem efektywności obliczeń hybrydowych - ze zrównolegleniem na wiele rdzeni oraz simdyzacją (SSE/AVX, GPU); 4) oceną efektywności różnych narzędzi do zrównoleglania programów napisanych w: Javie, Matlabie, C#, Pythonie Go uruchamianych na maszynie wielordzeniowej pracującej pod kontrolą systemu UNIX/Linux albo w sieci PC pod kontrolą MS Windows; 5) oceną różnych platform przetwarzania Big data (Hadoop, Apache Spark).
Metody oceny:
Projekt jest realizowany w grupach 2-3 osobowych. Projekt obejmuje implementację sekwencyjnej wersji podanego algorytmu oraz jego 2 lub 3 (w zależności od liczności grupy) wersji równoległych oraz przeprowadzenie eksperymentalnej oceny efektywności wykonanych implementacji. Wymagane jest wykonanie wersji wykorzystującej narzędzia do programowania na maszynach z pamięcią wspólną i lokalną. Wyniki prac są podsumowane w sprawozdaniu i prezentowane przez studentów w czasie ostatniego terminu zajęć wykładowych (wymagane prezentacje). Zakłada się, że zajęcia projektowe z udziałem prowadzącego to 2 godziny tygodniowo (konsultacje). Realizacja projektu, przygotowanie sprawozdania i prezentacji to 40 godz. w semestrze.
Egzamin:
tak
Literatura:
1. Karbowski, E. Niewiadomska-Szynkiewicz (red.), Programowanie Równoległe i Rozproszone Oficyna Wydawnicza PW, 2009. 2. Trobec, R., Slivnik, B., Bulić, P. i Robič, B., Introduction to Parallel Computing: From Algorithms to Programming on State-of-the-Art Platforms, Springer, 2018. 3. Czech, Z.J., Wprowadzenie do obliczeń równoległych, Wyd. 2, PWN, 2019. 4. Bertsekas D.P. i Tsitsiklis J.N.,Parallel and Distributed Computation: Numerical Methods, Athena Scientific, 1997.
Witryna www przedmiotu:
https://usosweb.usos.pw.edu.pl/kontroler.php?_action=katalog2/przedmioty/pokazPrzedmiot&prz_kod=103B-INISY-MSP-PORR
Uwagi:
(-)

Efekty uczenia się