Programowanie równoległe 4010-PR
Tematyka zajeć:
1. Wprowadzenie do programowania równoległego - prawo Moore'a, superkomputery, taksonomia Flynna - wyk. 2 godz.
2. Wprowadzenie do programowania równoległego - dostęp do pamięci, podstawowe pojęcia - wyk. 2 godz.
3. Wprowadzenie do programowania równoległego - runtime, speedup, prawo Amdahla i Gustafsona, komunikacja, synchronizacja - wyk. 2 godz.
4. Wprowadzenie do programowania równoległego - dekompozycja, zrównoważanie obciążenia, metody projektowania algorytmów równoległych, modele programowania obiektowego, wzorce - wyk. 2 godz.
5. OpenMP - HelloWorld w C bez i z OpenMP, kompilacja i uruchamianie programów w C bez i z OpenMP, konstrukt parallel - lab. 2 godz.
6. OpenMP - kontrola liczby wątków, zmienne dynamiczne ze sterty - wyk. 2 godz.
7. OpenMP - funkcje w C, zmienne private, shared oraz firstprivate, operator redukcji - wyk. 2 godz.
8. OpenMP - tablice dwuwymiarowe (stos, obszar danych, sterta), różne sposoby pomiaru czasu - wyk. 2 godz.
9. OpenMP - funkcje w C, zmienne private, shared oraz firstprivate, operator redukcji, tablice dwuwymiarowe - lab. 2 godz.
10. OpenMP - pętle równoległe, nieiteratywny podział pracy - wyk. 2 godz.
11. OpenMP - pętle równoległe, pomiar czasu, nieiteratywny podział pracy - lab. 2 godz.
12. OpenMP - koordynacja wątków, race condition, deadlock, false sharing, thread safety, dobre praktyki - wyk. 2 godz.
13. OpenMP - obliczenia typu stencil - lab. 6 godz.
14. MPI - wstęp, hello world, typy danych w MPI - wyk. 2 godz.
15. MPI - komunikacja blokująca typu point-to-point - lab. 2 godz.
16. MPI - hello world, komunikacja blokująca typu point-to-point - lab. 2 godz.
17. MPI - komunikacja nieblokująca, pomiar czasu - wyk. 2 godz.
18. MPI - komunikacja nieblokująca - lab. 2 godz.
19. MPI - implementacja wzorca klient-serwer - lab. 2 godz.
20. MPI - Null Mpi Process, operacje kolektywne - wyk. 2 godz.
21. MPI - non-circular shift, operacje kolektywne i obsługa plików: implementacja równoległego wyszukiwania tekstu w pliku tekstowym - lab. 4 godz.
22. PCJ - wstęp, Hello World, Execution Builder - wyk. 2 godz.
23. PCJ - Hello World z PCJ - kompilacja i uruchomienie programu na Topoli - lab. 2 godz.
24. PCJ - metody informujące o ilości zadań i węzłów, zmienne udostępniane - wyk. 2 godz.
25. PCJ - generowanie losowej macierzy, obliczanie sum wierszy, używanie Properties do przekazywania argumentów wywołania - lab. 2 godz.
26. PCJ - synchroniczne i asynchroniczne operacje one-sided i kolektywne - wyk. 2 godz.
27. PCJ - implementacja all-broadcast i all-reduce - lab. 2 godz.
Założenia (opisowo)
Koordynatorzy przedmiotu
W cyklu 2023L: | W cyklu 2024Z: | W cyklu 2023Z: |
Rodzaj przedmiotu
Tryb prowadzenia
Efekty kształcenia
Wiedza: student zna i rozumie:
W1 - zna metody projektowania algorytmów równoległych i rozproszonych oraz analizowania ich złożoności; 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_W02, K_W05]
W2 - zna języki C i Java 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 - ma wiedzę na temat architektury superkomputerów, w tym organizacji dostępu do pamięci oraz stosowanych topologii sieciowych [K_W07]
Umiejętnosci: student potrafi:
U1 - potrafi dobierać narzędzia informatyczne służące do komunikacji w celu wykonania zadań w zespole [K_U09]
U2 - potrafi dobrać model programistyczny oraz stosowne funkcje z bibliotek (OpenMP, MPI i PCJ) do rozwiązania problemu obliczeniowego uwzględniając jego rozmiar i dostępną architekturę [K_U13]
U3 - stosuje zasady BHP podczas pracy z komputerem [K_U14]
U4 - rozróżnia pojęcie złożoności problemu od złożoności algorytmu, potrafi dobrać algorytmy i metody obliczeniowe do rozwiązania problemu uwzględniając ich złożoność obliczeniową [K_U16, K_U17, K_U18]
U5 - potrafi projektować, analizować i implementować algorytmy równoległe i rozproszone uwzględniając ich wydajność i wpływ architektury na sposób wykonywania algorytmów; potrafi zmierzyć i ocenić uzyskane przyspieszenia oraz wykorzystać wyniki do strojenia programów [K_U18,
K_U20]
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_K02, K_K03, K_K05]
K2 - wyszukuje informacje w Internecie poddając je krytycznej ocenie; wykorzystuje je do poszerzenia swojej wiedzy [K_K07]
K3 - przestrzega zasad i norm obowiązujących w zawodzie informatyka [K_K10]
Kryteria oceniania
Student uzyskuje zaliczenie zajęć na podstawie:
1. zaliczenia laboratoriów,
2. egzaminu pisemnego.
Ocena końcowa jest średnią ważoną uzyskanych ocen składowych: zaliczenie laboratoriów ma wagę 2, a egzamin wagę 1.
ad 1. Zaliczenie laboratoriów polega na samodzielnym wykonaniu projektów i przesłaniu ich poprzez platformę OLAT.
Laboratoria można zaliczyć w różny sposób:
- standardowy: wykonanie trzech zadań S1, S2 i S3 (za poprawne i kompletne wykonanie wszystkich zadań ocena 5, za mniej odpowiednio niżej),
- 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,
- ewentualny 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" mile widziane wykresy,
- opis uzyskanych wyników, wnioski,
- polecenie, przy pomocy którego wykonana była kompilacja,
- skrypt SLURM i nazwa klastra/superkomputera, na którym były wykonane obliczenia.
Efekty W1, W2, W3, U1, U2, U4, U5 są weryfikowane wykonaniem projektu wraz ze sprawozdaniem oraz egzaminem, efekty U3, K1, K2, K3 są weryfikowane w sposób ciągły na zajęciach.
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: