Nazwa przedmiotu:
Programowanie równoległe i rozproszone
Koordynator przedmiotu:
dr hab. inż. Andrzej Karbowski
Status przedmiotu:
Fakultatywny ograniczonego wyboru
Poziom kształcenia:
Studia II stopnia
Program:
Informatyka
Grupa przedmiotów:
Przedmioty kierunkowe
Kod przedmiotu:
PRRUZ
Semestr nominalny:
2 / rok ak. 2019/2020
Liczba punktów ECTS:
5
Liczba godzin pracy studenta związanych z osiągnięciem efektów uczenia się:
120 - 30 godzin wykładów, 30 godzin ćwiczeń projektowych, liczonych w mierze tradycyjnej oraz około 60 godzin pracy własnej
Liczba punktów ECTS na zajęciach wymagających bezpośredniego udziału nauczycieli akademickich:
3
Język prowadzenia zajęć:
polski
Liczba punktów ECTS, którą student uzyskuje w ramach zajęć o charakterze praktycznym:
2
Formy zajęć i ich wymiar w semestrze:
  • Wykład30h
  • Ćwiczenia0h
  • Laboratorium0h
  • Projekt30h
  • Lekcje komputerowe0h
Wymagania wstępne:
Matematyka wyższa na poziomie studiów technicznych I stopnia, programowanie strukturalne, systemy operacyjne
Limit liczby studentów:
30
Cel przedmiotu:
Celem przedmiotu 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, a także w klastrach i gridach. W dalszej części wykładu omówione będą przykłady zastosowania obliczeń równoległych do rozwiązywania złożonych zadań analizy numerycznej - klasycznych oraz związanych z Internetem.
Treści kształcenia:
1. Zagadnienia podstawowe: klasyfikacja i architektura komputerów równoległych; procesory wielordzeniowe o strukturze symetrycznej i asymetrycznej, dodatkowe 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. 2. Miary efektywności obliczeń równoległych (współczynniki przyśpieszenia oraz wydajności, prawa Amdahla i Gustafsona-Barsisa, sprawność i skalowalność) 3. Zagadnienia synchronizacji i wymiany informacji w obliczeniach równoległych, podstawowe mechanizmy: zamek, semafor, monitor, bariera klasyczna i dwuczęściowa, zmienne warunków, komunikaty (synchroniczne, asynchroniczne, blokujące, nieblokujące, buforowane, itd.). 4. 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, OpenACC, OpenMP od wersji 4. 5. Elementy programowania na maszynach z pamięcią wspólną, narzędzia: klasyczne narzędzia systemu UNIX, programowania wielowątkowego (wątki POSIX, wątki w językach Java oraz C#), język dyrektyw OpenMP, 6. Elementy programowania na maszynach z pamięcią lokalną oraz w sieciach komputerowych, klastrach i gridach; narzędzia: środowisko MPI, rodzina narzędzi RPC. Sposoby realizacji rozproszonych systemów z pamięcią wspólną: UPC 7. Algorytmy synchroniczne: podstawowe algorytmy algebry liniowej w wersji równoległej, rozwiązywanie układów równań nieliniowych, równoległe metody optymalizacji 8. 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.
Metody oceny:
Oceny punktowe z dwóch zadań projektowych. Ocena indywidualnego zadania od 0 do 30 punktów. Łączna liczba punktów 60, do zaliczenia wymagane 31 lub więcej punktów. Egzamin obejmujący rozwiązanie zadań rachunkowych oraz odpowiedzi na pytania. Ocena od 0 do 40 punktów. Egzamin uważany jest za zdany po uzyskaniu 21 lub więcej punktów. W razie potrzeby przeprowadzany jest uzupełniający egzamin ustny. Zaliczenie przedmiotu wymaga zaliczenia projektu i zdania egzaminu. Oceny końcowe wystawiane są zgodnie z ogólnie przyjętą skalą, w szczególności ocena 3 (dst) po uzyskaniu 52 do 60 punktów.
Egzamin:
tak
Literatura:
1. Praca zbiorowa pod red. A. Karbowskiego i E. Niewiadomskiej-Szynkiewicz, Programowanie Równoległe i Rozproszone (pozostali autorzy: J. Błaszczyk, M. Kamola, B. Kubica, K. Malinowski, M. Warchoł), Oficyna Wydawnicza PW, 2009. 2. Bertsekas D.P. i Tsitsiklis J.N.,Parallel and Distributed Computation: Numerical Methods, Athena Scientific, 1997. 3. Zbigniew J. Czech Wprowadzenie do obliczeń równoległych (wydanie II), Wydawnictwo Naukowe PWN, 2013
Witryna www przedmiotu:
https://red.okno.pw.edu.pl/witryna/wybor_przedmiotu.php?sub_ed=961
Uwagi:

Efekty uczenia się

Profil ogólnoakademicki - wiedza

Charakterystyka T2A_W02, T2A_W03, T2A_W05, T2A_W07
Podstawowe informacje o możliwościach zwiększenia efektywności działania programów dzięki wykorzystaniu rozwiązań jakich dostarcza współczesna technologia, których podstawą są procesory wielordzeniowe, ich wektorowe jednostki wykonawcze, sieć oraz akceleratory oparte na kartach graficznych.
Weryfikacja: Egzamin
Powiązane charakterystyki kierunkowe: K2_W02, K2_W03, K2_W04, K2_W07, K2_W09, K1_W01
Powiązane charakterystyki obszarowe: I.P7S_WG, III.P7S_WG.o, I.P7S_WK

Profil ogólnoakademicki - umiejętności

Charakterystyka T2A_U01, T2A_U02, T2A_U05, T2A_U08, T2A_U10, T2A_U12, T2A_U15, T2A_U16, T2A_U18,
Po kursie PRR student nabędzie umiejętności oceny w jakim stopniu można poprawić efektywność (czas działania) aplikacji oraz przy pomocy jakich środków umożliwiających wektoryzację, zrównoleglenie lub rozproszenie obliczeń.
Weryfikacja: Egzamin i projekt
Powiązane charakterystyki kierunkowe: K2_U09, K2_U11, K2_U12, K2_U14, K1_U02, K1_U03, K2_U01, K2_U07, K2_U08
Powiązane charakterystyki obszarowe: III.P7S_UW.3.o, I.P7S_UW, III.P7S_UW.4.o, I.P7S_UK, III.P7S_UW.1.o, III.P7S_UW.2.o

Profil ogólnoakademicki - kompetencje społeczne

Charakterystyka T2A_K04, T2A_K06
Znajomość zależnych od nowoczesnych technologii informacyjnych sposobów zwiększenia efektywności działania firm, instytucji, organizacji, itp.
Weryfikacja: Opinia współpracowników, przełożonych, klientów.
Powiązane charakterystyki kierunkowe: K2_K01, K2_K02, K1_K01
Powiązane charakterystyki obszarowe: I.P7S_KO, I.P7S_KK, I.P7S_KR

Profil praktyczny - wiedza

Charakterystyka T2P_W02, T2P_W03, T2P_W04, T2P_W05, T2P_W06, T2P_W07
Znajomość podstawowych narzędzi, standardów przemysłowych stosowanych na całym świecie, programowania równoległego i rozproszonego, w tym: a) dla maszyn z pamięcią wspólną - języka dyrektyw zrównoleglających OpenMP, wątków POSIX b) dla klastrów i gridów oraz maszyn z pamięcią lokalną - standardu MPI (Message Passing Interface) c) dla środowisk hybrydowych - języka wirtualnej pamięci wspólnej Unified Parallel C
Weryfikacja: Poprawne, zgodne z oczekiwaniami działanie odnośnych aplikacji.
Powiązane charakterystyki kierunkowe:
Powiązane charakterystyki obszarowe:

Profil praktyczny - umiejętności

Charakterystyka T2P_U01, T2P_U02, T2P_U03, T2P_U04, T2P_U05, T2P_U07, T2P_U08, T2P_U12, T2A_U15, T2P_U16, T2P_U18, T
1. Umiejętność pisania aplikacji równoległych działających na komputerach z pamięcią wspólną, opartych na wątkach 2. Umiejętność pisania aplikacji równoległych działających na komputerach z pamięcią lokalną oraz w sieciach opartych na przesyłaniu komunikatów 3. Umiejętność skorzystania z akceleratorów opartych na kartach graficznych oraz uniwersalnych
Weryfikacja: Projekt
Powiązane charakterystyki kierunkowe:
Powiązane charakterystyki obszarowe:

Profil praktyczny - kompetencje społeczne

Charakterystyka T2P_K01, T2P_K04, T2P_K06
Przyczynienie się do usprawnienia działania firm, instytucji, organizacji dzięki poprawie efektywności (przyśpieszeniu obliczeń, reakcji na wprowadzane dane, itp.) wykorzystywanych przez nie programów komputerowych.
Weryfikacja: Lepsze oceny instytucji, organizacji, wyższe dochody firmy, itp.
Powiązane charakterystyki kierunkowe:
Powiązane charakterystyki obszarowe: