Programowanie Rozproszone i Równoległe Edward Görlich http://th.if.uj.edu.pl/~gorlich goerlich@th.if.uj.edu.pl
Motywacja wyboru Programowanie rozproszone równoległość (wymuszona) Oprogramowanie równoległe/rozproszone: Aplikacje biznesowe Obliczenia naukowe, inżynierskie (HPC) Telekomunikacyjne Pospolita równoległość: wątki Platformy komunikacyjne: CORBA, DCOM,.NET remoting, Java RMI.
Plan Wykładu 1 Podstawowe pojęcia i zagadnienia przetwarzania równoległego. Przegląd rozwiązań. Wątki użycie, rozwiązania synchronizacja Technologie wywołań zdalnych przegląd
Plan Wykładu 2 Model COM Interfejsy, IDL Rodzaje serwerów, automatyzacja, przepakowywanie, wątki Wywołania zwrotne, eventy DCOM CORBA Specyfikacja, model usług, elementy składowe Przykładowe rozwiązania
Plan Wykładu 3 Model aplikacji warstwowej COM+, transakcje Programowanie równoległe i rozproszone z użyciem Javy (Java RMI, )
Plan Wykładu 4.NET remoting Omówienie platformy Kanały, formattery Modele aktywacji, wywołania zwrotne Mosty (IIOP,.NET,COM) Klastry obliczeniowe MOSIX MPI Modelowanie procesów współbieżnych Sieci Petriego Uwaga: Zakres materiału może ulec zmianie, istnieje duża szansa że zagadnienia z tej strony nie zostaną zrealizowane
Sposób prezentacji Materiał będzie ilustrowany w oparciu o rozwiązania pod platformę Windows lub platform independent Windows PI Wątki, COM, CORBA,.NET Visual Studio: C++ i C# Java, CORBA
Warunki zaliczenia Zaliczenie ćwiczeń Otrzymanie zaliczenia od prowadzącego ćwiczenia w ustalonym terminie Wykład Egzamin testowy Ocena średnia z ćwiczeń i wyniku egzaminu
Podstawowy przetwarzania równoległego
Równoległość Obliczenia (computing) zadania wykonywane z pomocą komputeraz dla osiągnięcia zamierzonego celu Obliczenia równoległe (Parallel computing) - szybsze rozwiązywanie jednego zadania dzięki użyciu wielu jednostek obliczeniowych(procesorów) Obliczenia współbieżne są wykonywane przez wiele jednoczesnych ścieżek wykonania. (zarówno na komputerze równoległym jak i klasycznym ). Głównym zagadnieniem jest rozwiązywanie konfliktów dostępu do zasobów Definicje pojęć równoległości i współbieżności mogą silnie zależeć od definiującego
Rozproszenie Obliczenia rozproszone (Distributed computing) używają wielu (2+) niezależnych, ale połączonych, jednostek, które współpracują i współdzielą zasoby w celu rozwiązania zadania
Powód Wydajność całkowita: oszczędność czasu rzeczywistego imożliwość rozwiązania większych problemów Stosunek ceny do wydajności: dużo tanich zamiast jednego drogiego Kwestie technologiczne: np. niemożliwość umieszczenia dostatecznej liczby zasobów w jednym komputerze, istniejąca platforma wymaga równoległości Samoistnie równoległe/rozproszone aplikacje: sama istota działania aplikacji wymaga rozproszenia i równoległości Współdzielenie zasobów Dostępność: zapewnienie nieprzerwanego dostepu do usług Rozbudowa istniejącego systemu Bywa korzystne marketingowo
Równoległość danych Rodzaj równoległości implikowany przez strukturę danych. Identyczna operacja jest wykonywana jednocześnie na wszystkich elementach. Dane to na ogół wektory i macierze. Ten rodzaj równoległości często pozwala na dużą równoległość obliczeń. Może być wykorzystana przez architekturę danych równoległych (Data Parallel-architecture) Może zostać przekształcona w równoległość funkcjonalną
Równoległość funkcjonalna Wynika z logiki rozwiązania problemu. Można ją zobaczyć diagramach przepływu sterowania, danych, samych algorytmach. W odróżnieniu od równoległości danych tutaj wykonujemy różne operacje. Dane przepływają do procesów w których są potrzebne. Jest ograniczona przez wzajemne powiązania operacji. Jej schemat jest często nieregularny Poziomy równoległości funkcjonalnej (dostępnej nie mówimy tutaj jeszcze o samym wykonaniu a o elementach programu) Poziom instrukcji Poziom pętli, rekurencje Poziom procedur Poziom programu
Równoległość potokowa (pipeline) Jeżeli diagram przepływu danych jest może zostać zredukowany do prostego grafu skierowanego (najlepiej ścieżki skierowanej) wtedy obliczenia możemy podzielić na kolejne poziomy (stages). Każdy poziom może być wykonywany równolegle. Jeżeli założymy podobny czas wykonania wszystkich kroków to po wypełnieniu potoku danymi osiągamy multiplikatywny wzrost szybkości.