Programowanie współbieżne 1000-214aPWS
Wykład:
● Metody synchronizacji w modelu współbieżnym:
○ zmienne współdzielone (koalgorytmy wzajemnego wykluczania),
○ semafory,
○ monitory.
● Analiza poprawności algorytmów współbieżnych (bez użycia LTL-u).
● Metody synchronizacji w modelu rozproszonym:
○ spotkania, czyli klient-serwer (Ada),
○ wymiana komunikatów (CSP),
○ wspólna przestrzeń adresowa (Linda).
● Spójność i modele spójności:
○ linearizability (or atomicity),
○ sequential consistency,
○ causal consistency,
○ eventual consistency.
● Wydajność w modelu współbieżnym:
○ work, span, speed-up, parallelization-ilustrowane i szacowane programami w CILK-u.
● Metody programowania współbieżnego (wykłady wprowadzające do laboratoriów; synchronizowane z laboratoriami):
○ wątki POSIX,
○ współbieżność w Javie (klasyczna, java.util.concurrency),
○ współbieżność w C11.
Laboratorium:
● Współbieżność POSIX-owa:
○ fork,
○ pthreads (bez cancel),
○ semafory.
● Współbieżność w Javie:
○ monitory,
○ java.util.concurrent.
● Współbieżność w C11/CPP11:
○ atomic data types,
○ transactional memory,
○ task-based parallelism.
Ćwiczenia:
● algorytmy wzajemnego wykluczania-pamięć współdzielona,
● algorytmy wzajemnego wykluczania -rozproszone (przez komunikaty),
● semafory,
● monitory,
● CSP: message passing,
● Ada: randki (model dla klient-serwer),
● Linda: synchronizowana baza danych (model dla rozproszonych struktur danych typu BigTable),
● CILK: obliczanie work, span, parallelism.
Rodzaj przedmiotu
Efekty kształcenia
Wiedza:
● ma uporządkowaną, podbudowaną teoretycznie wiedzę ogólną w zakresie programowania, algorytmów i złożoności, architektury systemów komputerowych, systemów operacyjnych, technologii sieciowych, języków i paradygmatów programowania, baz danych, inżynierii oprogramowania (K_W02);
● zna podstawowe metody projektowania, analizowania i programowania algorytmów (projektowanie strukturalne, rekurencja, metoda dziel i rządź, programowanie z nawrotami, poprawność, metoda niezmienników, złożoność obliczeniowa) (K_W04).
Umiejętności:
● potrafi pisać, uruchamiać i testować programy w wybranym środowisku programistycznym (K_U05);
● projektuje, analizuje pod kątem poprawności i złożoności obliczeniowej oraz programuje algorytmy; wykorzystuje podstawowe techniki algorytmiczne i struktury danych (K_U07);
● rozumie niskopoziomowe zasady wykonywania programów (K_U08);
● opisuje problemy związane z wykonywaniem programów współbieżnych (K_U11);
● potrafi ocenić, na podstawowym poziomie, przydatność rutynowych metod i narzędzi informatycznych oraz wybrać i zastosować właściwą metodę i narzędzia do typowych zadań informatycznych (K_U22)
Literatura
1.M. Ben-Ari "Podstawy programowania współbieżnego i rozproszonego", WNT, 1996.
2.T. Gruźlewski Z. Weiss, "Programowanie współbieżne i rozproszone w przykładach i zadaniach", WNT, 1993
3. M. Herlihy, N. Shavit, Sztuka programowania wieloprocesorowego
4. H. Casanova, A. Legrand, Y. Robert, Parallel Algorithms
5. T. H.Cormen, C. E. Leiserson, R. L. Rivest, C. Stein, Introduction to Alghorithms , 3rd edition
6. W. R. Stevens, Programowanie w środowisku systemu UNIX
7. B. Eckel, Thinking in Java.
Więcej informacji
Dodatkowe informacje (np. o kalendarzu rejestracji, prowadzących zajęcia, lokalizacji i terminach zajęć) mogą być dostępne w serwisie USOSweb: