Nazwa przedmiotu:
Programowanie równoległe i rozproszone
Koordynator przedmiotu:
Ewa Niewiadomska-Szynkiewicz, Andrzej Karbowski, Bartłomiej Kubica
Status przedmiotu:
Fakultatywny ograniczonego wyboru
Poziom kształcenia:
Studia II stopnia
Program:
Informatyka
Grupa przedmiotów:
Przedmioty techniczne - zaawansowane
Kod przedmiotu:
PORR
Semestr nominalny:
1 / rok ak. 2018/2019
Liczba punktów ECTS:
5
Liczba godzin pracy studenta związanych z osiągnięciem efektów uczenia się:
125 (udział w wykładach 30 godz., wykonanie projektu 30 godz., przygotowanie do kolejnych wykładów 15 godz., przygotowanie do realizacji projektu 25 godz., udział w konsultacjach związanych z tematyką wykładów i realizowanym projektem 3 godz., przygotowanie do egzaminu 20 godz., udział w egzaminie 2 godz.)
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:
Znajomość języków programowania (C, C++, Java). Znajomość podstaw programowania równoległego.
Limit liczby studentów:
48
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, karty graficzne), superkomputerach, a także w klastrach, gridach i chmurach. W dalszej części wykładu omawiane są przykłady zastosowania obliczeń równoległych do rozwiązywania złożonych zadań analizy numerycznej - klasycznych oraz związanych z Internetem. 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 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, OpenHMPP, OpenACC) oraz mechanizmu wątków (POSIX lub Java threads) na maszynie równoległej z pamięcią wspólną; 2) Badaniem algorytmów rozproszonych w klastrze z wykorzystaniem oprogramowania: MPI, RPC, Java RMI, UPC; 3) Badaniem efektywności obliczeń hybrydowych - ze zrównolegleniem na wiele rdzeni (SSE, GPU - CUDA i OpenCL); 4) Oceną efektywności różnych narzędzi do zrównoleglania programów napisanych w: Javie, Matlabie, C# uruchamianych na maszynie wielordzeniowej pracującej pod kontrolą systemu UNIX/Linux albo w sieci PC pod kontrolą MS Windows lub Linux.
Treści kształcenia:
Zagadnienia podstawowe: klasyfikacja i architektura komputerów równoległych; procesory wielordzeniowe o strukturze symetrycznej i asymetrycznej (CELL), jednostki wykonawcze SSE/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, 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. Podstawowe informacje o obliczeniach ogólnego przeznaczenia wykorzystujących karty graficzne (GPGPU), pojęcia strumienia i jądra; najważniejsze cechy środowisk oprogramowania: Brook, (MS-R) Accelerator, CUDA, OpenCL. 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ęzyki dyrektyw OpenMP, OpenHMPP, OpenACC. 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ą: Linda, Co-Array Fortran, UPC. Klastry obliczeniowe - budowa, narzędzia i systemy operacyjne, np.: Mosix, Mosix2, OpenSSI, Kerighed. Gridy i chmury obliczeniowe, idea i przykłady realizacji: BOINC, Unicor, Globu. 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.
Metody oceny:
Zaliczenie egzaminu. Zaliczenie projektu (równoległa realizacja zadania obliczeniowego).
Egzamin:
tak
Literatura:
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. Grama A., Kumar V., Gupta A., Karypis G., Introduction to Parallel Computing, 2/E, Addison Wesley , 2003. Dongarra J, et al., The Sourcebook of Parallel Computing, Morgan Kaufmann (Elsevier), 2003. Foster I. and Kesselman C. (Eds.), The Grid 2: Blueprint for a New Computing Infrastructure (Second edition), Morgan Kaufmann (Elsevier), 2004. 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=103A-INxxx-MSP-PORR
Uwagi:

Efekty uczenia się

Profil ogólnoakademicki - wiedza

Charakterystyka PORR_W01
Ma wiedzę na temat prowadzenia obliczeń wektorowych, równoległych i rozproszonych na komputerach wielordzeniowych (wykorzystujących ewentualnie rozszerzenia strumieniowe SSE, karty graficzne), superkomputerach, a także w klastrach i gridach. Zna podstawowe narzędzia i srodowiska do programowania równoległego i rozproszonego. Ma wiedzę dotyczacą sposobów zrównoleglania zadań analizy numerycznej - klasycznych oraz związanych z Internetem.
Weryfikacja: Egzamin obejmujący materiał z wykładu. Wykonanie zadań projektowych.
Powiązane charakterystyki kierunkowe: K_W03, K_W04, K_W05, K_W07, K_W08, K_W09, K_W10
Powiązane charakterystyki obszarowe: I.P7S_WG, III.P7S_WG.o

Profil ogólnoakademicki - umiejętności

Charakterystyka PORR_U01
Potrafi pozyskiwać informacje z literatury krajowej i zagranicznej oraz dostępnych baz danych. Potrafi zaprojektować i wykonać system oprogramowania w równoległym i rozproszonym środowisku sprzętowym. Potrafi przeprowadzić testy wykonanego oprogramowania, dokonać jego oceny i przedstawić wyniki w postaci odpowiednio przygotowanej dokumentacji.
Weryfikacja: Ocena wykonanego oprogramowania i dokumentacji z wynikami badań.
Powiązane charakterystyki kierunkowe: K_U08, K_U09, K_U11, K_U13, K_U01, K_U03, K_U04, K_U05
Powiązane charakterystyki obszarowe: I.P7S_UW, III.P7S_UW.3.o, III.P7S_UW.1.o, I.P7S_UK, I.P7S_UU

Profil ogólnoakademicki - kompetencje społeczne

Charakterystyka PORR_K01
Rozumie, że w informatyce wiedza i umiejętności bardzo szybko stają się przestarzałe. Rozumie potrzebę i zna możliwości dalszego dokształcania się. Potrafi pracować indywidualnie i w zespole informatyków, w tym także potrafi zarządzać swoim czasem oraz podejmować zobowiązania i dotrzymywać terminów.
Weryfikacja: Ocena pracy podczas wykonywania projektu.
Powiązane charakterystyki kierunkowe: K_K01
Powiązane charakterystyki obszarowe: I.P7S_KO