wykład 1
Transkrypt
wykład 1
Programowanie Rozproszone i Równoległe Edward Görlich http://th.if.uj.edu.pl/~gorlich [email protected] 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 • Wątki, COM, CORBA, .NET • Visual Studio: C++ i C# – PI • 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.