Programowanie równoległe 4010-PRa
1. Wprowadzenie do programowania równoległego - prawo Moore'a, superkomputery, taksonomia Flynna (2 godz., wykład)
2. Wprowadzenie do programowania równoległego - dostęp do pamięci, podstawowe pojęcia (2 godz., wykład)
3. Wprowadzenie do programowania równoległego - runtime, speedup, prawo Amdahla i Gustafsona, komunikacja, synchronizacja (2 godz., wykład)
4. Wprowadzenie do programowania równoległego - dekompozycja, zrównoważanie obciążenia, metody projektowania algorytmów równoległych, modele programowania obiektowego, wzorce (2 godz., wykład)
5. OpenMP - HelloWorld w C bez i z OpenMP, kompilacja i uruchamianie programów w C bez i z OpenMP, konstrukt parallel (2 godz., lab.)
6. OpenMP - kontrola liczby wątków, zmienne dynamiczne ze sterty (2 godz., wykład)
7. OpenMP - funkcje w C, zmienne private, shared oraz firstprivate, operator redukcji (2 godz., wykład)
8. OpenMP - tablice dwuwymiarowe (stos, obszar danych, sterta), różne sposoby pomiaru czasu (2 godz., wykład)
9. OpenMP - funkcje w C, zmienne private, shared oraz firstprivate, operator redukcji, tablice dwuwymiarowe (2 godz., lab.)
10. OpenMP - pętle równoległe, nieiteratywny podział pracy (2 godz., wykład)
11. OpenMP - pętle równoległe, pomiar czasu, nieiteratywny podział pracy (2 godz., lab.)
12. OpenMP - koordynacja wątków, race condition, deadlock, false sharing, thread safety, dobre praktyki (2 godz., wykład)
13. OpenMP - obliczenia typu stencil (6 godz., lab.)
14. MPI - wstęp, hello world, typy danych w MPI (2 godz., wykład)
15. MPI - komunikacja blokująca typu point-to-point (2 godz., lab.)
16. MPI - hello world, komunikacja blokująca typu point-to-point (2 godz., lab.)
17. MPI - komunikacja nieblokująca, pomiar czasu (2 godz., wykład)
18. MPI - komunikacja nieblokująca (2 godz., lab.)
19. MPI - implementacja wzorca klient-serwer (2 godz., lab.)
20. MPI - Null Mpi Process, operacje kolektywne (2 godz., wykład)
21. MPI - non-circular shift, operacje kolektywne i obsługa plików: implementacja równoległego wyszukiwania tekstu w pliku tekstowym (4 godz., lab.)
22. PCJ - wstęp, Hello World, Execution Builder (2 godz., wykład)
23. PCJ - Hello World z PCJ - kompilacja i uruchomienie programu (2 godz., lab.)
24. PCJ - metody informujące o ilości zadań i węzłów, zmienne udostępniane (2 godz., wykład)
25. PCJ - generowanie losowej macierzy, obliczanie sum wierszy, używanie Properties do przekazywania argumentów wywołania (2 godz., lab.)
26. PCJ - synchroniczne i asynchroniczne operacje one-sided i kolektywne (2 godz., wykład)
27. PCJ - implementacja all-broadcast i all-reduce (2 godz., lab.)
Kolejność podejmowanych zagadnień oraz szczegółowość ich realizacji może ulec nieznacznym zmianom.
Założenia (opisowo)
Koordynatorzy przedmiotu
Rodzaj przedmiotu
Tryb prowadzenia
Efekty kształcenia
Wiedza - student zna i rozumie:
• W1 - zna metody projektowania algorytmów równoległych i rozproszonych z uwzględnieniem metod dekompozycji oraz wybranych wzorców projektowych oraz metody analizowania złożoności algorytmów, rozróżnia pojęcie złożoności problemu od złożoności algorytmu [K_W02]
• W2 - zna język C oraz biblioteki OpenMP, MPI i PCJ reprezentujące trzy modele programowania; zna różnice pomiędzy tymi modelami, ich ograniczenia, wady i zalety [K_W05]
• W3 - rozumie ograniczenia wydajności algorytmów i programów spowodowane komunikacją, synchronizacją i występowaniem części, które muszą być zrealizowane w sposób sekwencyjny [K_W06]
Umiejętności - student potrafi:
• U1 - potrafi dobrać model programistyczny do rozwiązania problemu obliczeniowego uwzględniając rozmiar problemu i dostępną architekturę [K_U07]
• U2 - potrafi dobrać algorytmy i metody obliczeniowe, w tym stosowne funkcje z bibliotek (OpenMP, MPI i PCJ) do rozwiązania wybranych problemów [K_U09]
• U3 -potrafi przeanalizować algorytm pod kątem jego poprawności i możliwości zastosowania do wybranych problemów [K_U10]
• U4 - potrafi projektować i implementować algorytmy równoległe i rozproszone dobierając odpowiednie narzędzia dostosowane do architektury; potrafi zmierzyć i ocenić uzyskane przyspieszenia oraz wykorzystać wyniki do poprawy parametrów narzędzi [K_U12]
Kompetencje społeczne - student jest gotów do:
• K1 - rozwiązuje zadania indywidualnie i zespołowo dbając o właściwą organizację pracy i jej jakość oraz o szczegóły implementacji rozwiązań; myśli twórczo i przeprowadza wraz z członkami zespołu krytyczną ocenę proponowanych rozwiązań [K_K01]
Kryteria oceniania
Student uzyskuje zaliczenie zajęć na podstawie:
1. zaliczenia laboratoriów (100 pkt) - weryfikacja efektów W2, U1, U2, U3, U4, K1
2. egzaminu pisemnego (100 pkt) - weryfikacja efektów W1, W2, W3
Aby zaliczyć przedmiot z każdej części należy uzyskać przynajmniej 50 punktów. Ocena końcowa jest wystawiana na podstawie średniej arytmetycznej punktów wg skali:
2: 0-50
3: 51-60
3,5: 61-70
4: 71-80
4,5: 81-90
5: 91-100
Możliwe jest podwyższenie oceny pozytywnej o pół oceny w przypadku dużej aktywności studenta na zajęciach (odpowiedzi na pytania, pomysły rozwiązań, udział w dyskusji, pomoc kolegom w rozwiązywaniu problemów, pytania).
Warunkiem zaliczenia przedmiotu jest również oddanie poprzez system OLAT połowy zadań wykonywanych w trakcie zajęć. Zadania można oddawać tylko podczas zajęć będąc na nich fizycznie obecnym.
Zaliczenie laboratoriów polega na samodzielnym wykonaniu projektów i przesłaniu ich poprzez platformę OLAT. Laboratoria można zaliczyć na dwa sposoby:
A. standardowy: wykonanie trzech zadań S1, S2 i S3 (za poprawne i kompletne wykonanie wszystkich zadań ocena 5, za mniej odpowiednio niżej),
B. ambitny: wykonanie jednego z zadań "dla ambitnych".
Do każdego zadania należy załączyć pliki z kodem źródłowym oraz sprawozdanie. Sprawozdanie musi obejmować następujące elementy:
• krótki opis zastosowanego algorytmu/algorytmów i zastosowanych narzędzi,
• opis napotkanych problemów i zastosowanych rozwiązań,
• czasy wykonania dla przynajmniej 1, 2, 4, 8 i 16 wątków/procesów oraz uzyskane przyspieszenia względem wykonania dla 1 wątku/procesu - oprócz wyników "surowych" należy zamieścić wykresy,
• opis uzyskanych wyników, wnioski,
• polecenia, przy pomocy których wykonana była kompilacja,
• skrypt SLURM i nazwa klastra/superkomputera, na którym były wykonane obliczenia.
Student może zostać wezwany na rozmowę dotyczącą wysłanych zadań albo pisemne odpowiedzenie na pytania dotyczące tych zadań w celu weryfikacji samodzielności wykonania zadań oraz stopnia zrozumienia użytych rozwiązań. Wynik może skutkować obniżeniem liczby uzyskanych punktów nawet do 0 oraz pozbawieniem możliwości poprawienia projektów. Student ma obowiązek dogłębnie rozumieć wysłane do oceny zadania.
UWAGA
1. Zwolnienie lekarskie nie zwalnia ze znajomości materiału. Uprawnia jedynie do zindywidualizowanej formy zaliczenia.
2. Osoby, które otrzymały zgodę na indywidualny tok studiów, mają obowiązek zgłosić się koordynatora przedmiotu w celu ustalenia sposobu realizacji wszystkich efektów uczenia się przypisanych do zajęć. W przypadku braku możliwości realizacji wyżej wymienionych efektów koordynator może odmówić zaliczenia przedmiotu.
3. Obecność na zajęciach jest obowiązkowa. W sytuacjach uzasadnionych nieobecności, student zobowiązany jest do niezwłocznego kontaktu z koordynatorem przedmiotu.
Praktyki zawodowe
Nie dotyczy.
Literatura
• Materiały zamieszczone na platformie OLAT
• Pacheco, Peter S. and Matthew Malensek (2022). An introduction to parallel programming. Second edition. Cambridge, MA: Morgan Kaufmann, an imprint of Elsevier. isbn: 978-0-12-804605-0
• Rauber, Thomas and Gudula Rünger (2010). Parallel Programming. Berlin, Heidelberg: Springer Berlin Heidelberg. isbn: 978-3-642-04817-3. doi: 10.1007/978-3-642-04818-0
• Trobec, Roman et al. (2018). Introduction to Parallel Computing. Cham: Springer International Publishing. isbn: 978-3-319-98832-0. doi: 10.1007/978-3-319-98833-7
• OpenMP Application Programming Interface: Version 5.2 November 2021 url: https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-2.pdf
• MPI: A Message-Passing Interface Standard: Version 4.1 (2023). url:
https://www.mpi-forum.org/docs/mpi-4.1/mpi41-report.pdf
Parallel Computing in Java - Manual (2022). url: https://pcj.icm.edu.pl/manual
Więcej informacji
Dodatkowe informacje (np. o kalendarzu rejestracji, prowadzących zajęcia, lokalizacji i terminach zajęć) mogą być dostępne w serwisie USOSweb: