Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie współbieżne i rozproszone

Podobne prezentacje


Prezentacja na temat: "Programowanie współbieżne i rozproszone"— Zapis prezentacji:

1 Programowanie współbieżne i rozproszone

2 Programowanie równoległe i rozproszone
dotyczy tworzenia współpracujących ze sobą procesów współbieżnych wykonywanych na komputerach równoległych (czyli albo na superkomputerach posiadających tysiące procesorów, albo na lokalnych czy rozległych sieciach stacji roboczych jedno i wieloprocesorowych)

3 Definicja komputera sekwencyjnego
Komputer von Neumanna Procesor centralny (Central processor unit CPU ) wykonuje program umieszczony w załączonej pamięci, odczytując kolejne instrukcje programu (z pamięci) i zapisując dane (do pamięci)

4 „Wielokomputer” (multicomputer)
Pewna ilość komputerów von Neumanna połączonych siecią (interconnect network) Każdy procesor wykonuje swój program Program ten ma dostęp do swojej pamięci lokalnej, oraz może wysyłać i odbierać komunikaty poprzez sieć. Operacje send/receive używane są do komunikacji z innymi komputerami lub w celu czytania i pisania z/do ich odległych pamięci.

5 Podział ze względu na ilość wykonywanych programów i czytanych danych
MIMD = Multiple Instructions Multiple Data (Wiele programów wiele danych) - każdy procesor wykonuje swój własny program na swoich własnych danych. SIMD = Single Instructions Multiple Data (Pojedynczy program wiele danych) - każdy procesor wykonuje ten sam program na różnych danych.

6 Podział ze względu na ilość wykonywanych programów i czytanych danych
MISD = Multiple Instruction Single Data (Wiele programów te same dane) każdy procesor wykonuje swój własny program na tych samych danych (Praktycznie nie występują) SISD = Single Instruction Single Data (Jeden program te same dane) to klasyczna architektura sekwencyjna (wiele kopii tego samego komputera sekwencyjnego)

7 Podział ze względu na typ pamięci
Komputer o pamięci współdzielonej (shared memory computer) =każdy procesor posiada dostęp do dowolnego fragmentu pamięci, konieczne jest zastosowanie różnych mechanizmów zabezpieczających dany obszar pamięci przed jednoczesnym dostępem wielu procesów (np. semafory)

8 Podział ze względu na typ pamięci
Komputer o pamięci rozproszonej (distributed memory computers) =każdy procesor posiada dostęp do swojego fragmentu pamięci, konieczne jest zastosowanie mechanizmów wymiany informacji pomiędzy procesorami (np. mechanizm przesyłania komunikatów)

9 Podział ze względu na typ pamięci
Hybrydy (mieszańce) =komputery o pamięci rozproszonej, o węzłach wieloprocesorowych

10 na komputerze o pamięci rozproszonej na każdym węźle wykonywane są procesy (programy sekwencyjne) które komunikują się ze sobą, wymieniając dane i synchronizując prace

11 Na komputerze o pamięci współdzielonej wykonywane są wątki działające we wspólnym obszarze pamięci.
Może być tak że każdy wątek wykonywany jest przez jeden procesor. Wtedy wszystkie wątki wykonywaną są równolegle.

12 Może być tak że na komputerze o pamięci współdzielonej mamy więcej wątków niż procesorów i wtedy jeden procesor wykonuje wiele wątków. Wtedy wszystkie wątki przypisane do jednego procesora nie są wykonywane równolegle ale są wykonywane współbieżnie.

13 Może być tak że na komputerze o pamięci rozproszonej mamy wiele programów
wykonywanych przez jeden procesor i wtedy mamy do czynienia z wieloma wątkami pracującymi na jednym węźle, w obrębie obszaru pamięci jednego procesora. Wątki te wtedy wykonywane są współbieżnie ale nie równolegle.

14 Może być tak że na maszynie hybrydowej mamy wiele wątków wykonywanych na
każdym węźle przez wiele procesorów. Jeśli do każdego procesora przypisany jest jeden wątek wówczas mamy do czynienia z równoległym wykonaniem wielu wątków.

15 Modele programowania Task (zadanie) = program sekwencyjny + pamięć lokalna + interface do komunikacji z innymi taskami (kanały komunkacyjne wejścia i wyjścia). Chanel – połączenie wyjściowego portu komunikacyjnego jednego taska z wejściowym portem komunikacyjnym drugiego taska

16 Tasks and Channels (Foster „D&BPP”) (zadania i kanały komunikacyjne)
Obliczenia równoległe składają się z jednego lub więcej tasków. Taski wykonują się współbieżnie Ilość tasków może się zmieniać w trakcie wykonania.

17 Kanały komunikacyjne channels mogą być tworzone dynamicznie.

18 Tasks and Channels (Foster „D&BPP”) (zadania i kanały komunikacyjne)
Akcje wykonywane przez task: read / write (operacja odczytu i zapisu na pamięci lokalnej)

19 Tasks and Channels (Foster „D&BPP”) (zadania i kanały komunikacyjne)
send (wysłanie komunikatu do innego task’a) operacja send odbywa się poprzez kanał komunikacyjny, od wyjścia portu komunikacyjnego jednego tasku do wejścia portu komunikacyjnego drugiego tasku zakładamy że operacja send jest asynchronicza – kończy się natychmiast – proces nie czeka na potwierdzenie odbioru przesłanej wiadomości

20 Tasks and Channels (Foster „D&BPP”) (zadania i kanały komunikacyjne)

21 Tasks and Channels (Foster „D&BPP”) (zadania i kanały komunikacyjne)
receive (odebranie komunikatu od innego task’a)

22 Tasks and Channels (Foster „D&BPP”) (zadania i kanały komunikacyjne)
create (stworzenie nowego task’a)

23 Modele programowania terminate (zakończenie swojego działania)

24 Modele programowania taski mogą być mapowane na fizyczne procesory w różny sposób nie wpływa to na semantykę programu na przykład każdy task może zostać przypisany do oddzielnego procesora, lub wiele tasków może zostać przypisanych do wielu procesorów zakładamy że jeden task nie może być przypisany do wielu procesorów

25 Modele programowania Message Passing
Tym się różni od modelu Tasks and Channels że nie pozwala na tworzenie i usuwanie nowych tasków. Przykład: standard MPI (Message Passing Interface) najbardziej powszechne implementacje standardu: mpich, lam standard PVM (Parallel Virtual Machine)

26 Modele programowania Data parallelism
Te same operacje wykonywane są na wielu strukturach danych Przykład: High Performance Fortran

27 Modele programowania Shared memory programming model
Taski pracują na współdzielonej pamięci konieczne są mechanizmy takie jak semafory w celu zapewnienia synchronizacji dostępu wielu tasków do tego samego obszaru pamięci

28 Wzajemne wykluczanie Założenia modelowe:
System rozproszony składa się z N węzłów (1..N). Jeden węzeł odpowiada jednemu procesowi. Komunikaty wysyłane od jednego procesu do innego dochodzą w tym samym porządku. Każdy komunikat dochodzi w skończonym czasie. Sieć jest w pełni połączona, każdy proces może wysłać bezpośrednio komunikat do każdego innego.

29 Wzajemne wykluczanie Niech Si oznacza zbiór procesów udzielających pozwolenia procesowi i. Wymagane własności algorytmów wzajemnego wykluczania: dla każdej pary indeksów i, j zbiory Si oraz Sj mają elementy wspólne.

30 Wzajemne wykluczanie Pożądane własności algorytmów wzajemnego wykluczania: Zbiory Si, ..., SN są równoliczne. Każdy proces j należy do takiej samej liczby zbiorów Si. Każdy proces i należy do Si.

31 Algorytm scentralizowany
W systemie istnieje jeden koordynator, tylko on może wyrazić zgodę na wejście procesu do sekcji krytycznej Proces wysyła do koordynatora komunikat z żądaniem Kiedy otrzyma od niego komunikat z odpowiedzią, wtedy może wejść do sekcji Po wyjściu wysyła do koordynatora komunikat zwalniający.

32 Algorytm scentralizowany
Koordynator po otrzymaniu żądania sprawdza stan sekcji Jeśli sekcja jest wolna, to wysyła zgodę, np. wstawia żądanie do kolejki Po otrzymaniu komunikatu zwalniającego usuwa z kolejki jeden z komunikatów i wysyła zgodę do czekającego procesu. Jeśli koordynator ulegnie awarii, to jego miejsce musi zająć inny proces.

33 Proces 1 prosi koordynatora o pozwolenie na wejście do sekcji krytycznej. Uzyskuje pozwolenie.

34 Proces 2 prosi o pozwolenie na wejście do tej samej sekcji krytycznej
Proces 2 prosi o pozwolenie na wejście do tej samej sekcji krytycznej. Koordynator nie odpowiada

35 Kiedy proces 1 opuszcza sekcję krytyczną, zawiadamia o tym koordynatora, a ten wówczas wysyła procesowi 2 pozwolenie na wejście do sekcji.

36 Algorytmy wzajemnego wykluczania
W przypadku krążącego żetonu, jeśli każdy proces stale chce wejść do sekcji krytycznej, to każde przesunięcie żetonu skutkuje jednym wejściem do sekcji i jednym wyjściem W przypadku odwrotnym - żaden proces nie chce wejść - żeton może krążyć w pierścieniu bardzo długo nim ktokolwiek wejdzie (liczba komunikatów przypadających na jedno wejście jest nieograniczona)

37 opóźnienie pomiędzy we/wy problemy
algorytm komunikaty we/wy opóźnienie pomiędzy we/wy problemy zcentralizowany 3 2 Możliwa awaria koordynatora rozproszony 2(n-1) Możliwa awaria każdego procesu przekazywanie żetonu 1 do  O do (n-1) Możliwe duże opóźnienie

38 Zegary logiczne jednym z wielu problemów pojawiających się w systemach rozproszonych jest rozbieżność wartości zegarów na poszczególnych węzłach-maszynach każda maszyna może posiadać zegar chodzący z inną prędkością, zegary mogą się śpieszyć bądź spóźniać

39 Zegary logiczne wiele algorytmów i aplikacji w systemach liczących posługuje się pojęciem czasu i zegarem (np. make) w systemie scentralizowanym nie ma problemów z porządkowaniem zdarzeń w czasie w systemie rozproszonym utrzymywanie pojęcia globalnego czasu jest zadaniem niebanalnym, gdyż każdy procesor posługuje się własnym lokalnym zegarem.

40 Zegary logiczne W wielu zastosowaniach wystarczy wzajemna spójność różnych zegarów, ich zgodność z czasem rzeczywistych jest nieistotna Procesy nie muszą się zgodzić co do dokładnej wartości zegara, wystarczy im możliwość porządkowania zdarzeń w czasie

41 Zegary logiczne W systemie rozproszonym utrzymywanie pojęcia globalnego czasu jest zadaniem niebanalnym, gdyż każdy procesor posługuje się własnym lokalnym zegarem W ogólności, czas wirtualny zależy tylko od zdarzeń zachodzących w systemie, a nie od wartości zegarów fizycznych

42 Zegary logiczne istnieje bardzo dużo propozycji zmierzających do synchronizacji zegarów algorytm Cristiana algorytm synchronizacji zegarów Berkeley, protokoły NTP (ang. Network Time Protocol) DTS (ang. Distributed Time Service)

43

44 Algorytm Cristiana Algorytm ten jest przeznaczenie głównie dla środowisk rozproszonych w których jeden z węzłów jest serwerm czasu (ang. time server ) W algorytmie tym zakłada się, że każda maszyna co pewien określony czas wysyła do serwera czasu zapytanie o podanie aktualnego czasu Po otrzymaniu tego zapytania, serwer odpowiada prędko jak tylko może i przesyła aktualny czas UTC

45 Algorytm Cristiana nadawca z kolei, po otrzymaniu informacji o czasie od serwera, zanim ustawi wartość swojego zegara, musi uwzględnić parę kwestii zwykłe przepisanie czasu nadesłanego z serwera mogłoby spowodować, że czas płynie wstecz

46 Algorytm Cristiana Może się tak zdarzyć jeżeli zegar nadawcy wymierza czas zbyt szybko istnieje pewien koszt w postaci czasu komunikacji. aby rozwiązać ten problem nadawca może np. zapamiętać przedział czasowy zawarty pomiędzy momentem T0 , w którym wysłano zapytanie do serwera i momentem T1 , kiedy przyszła odpowiedź z serwera

47 Algorytm Cristiana W najprostszym przypadku przyjmuje się, że połowa tego przedziału jest czasem komunikacji od serwera do klienta (( T1 – T0 ) / 2 ) Jeśli dodatkowo znamy czas (T2 ) przetwarzania zapytania przez serwer, możemy poprawić oszacowanie czasu przez nadawcę i jako czas przesyłania komunikatu bierzemy wtedy połowę wartości ( T1 - T0 - T2 )

48

49 Zegary logiczne istotą zegarów logicznych jest żądanie zapewnienia, by każde zdarzenie w systemie posiadało własną, unikalną etykietę czasową w szczególności by zdarzenie wysłania wiadomości miało zawsze etykietę czasową mniejszą niż zdarzenie odebrania wiadomości (by nie można było odbierać wiadomości „z przyszłości”) spełnienie tych wymagań jest warunkiem koniecznym poprawności niektórych algorytmów (na przykład wielu algorytmów wzajemnego wykluczania

50 Zegary logiczne Pojęcie zegarów logicznych pochodzi od Lamporta
Podczas synchronizowania zegarów korzysta się z relacji uprzedniości (ang. happened-before), która może zachodzić dla dwóch zdarzeń Zapisuje się ją jako: a->b.

51 Relacja Lamporta Relację tę można zaobserwować w dwóch sytuacjach:
Jeśli a i b są zdarzeniami, które zaszły w ramach tego samego procesu i a wystąpiło przed b, to a->b. Jeśli a jest zdarzeniem wysłania komunikatu przez jeden proces, a b zdarzeniem odebrania tego komunikatu przez inny proces, to a->b.

52 Relacja ta jest relacją przechodnią.
Jeśli nie zachodzi a->b ani nie zachodzi b->a, to mówimy, że zdarzenia a i b są współbieżne nic nie można powiedzieć o ich wzajemnym uporządkowaniu w czasie

53 Jest nam potrzebny taki mechanizm mierzenia czasu, że dla każdego zdarzenia a możemy przypisać mu czas zajścia C(a), co do którego zgodzą się wszystkie procesy (można go implementować jako licznik) Musi zachodzić:     a->b, to C(a)->C(b)

54 Implementacja: W każdym procesie Pi definiujemy zegar logiczny Ti.
Zegar można zaimplementować w postaci prostego licznika, zwiększanego między wystąpieniami każdych dwóch kolejnych zdarzeń w procesie. Jeśli a i b zaszły w procesie Pi i a->b, to Ci(a)->Ci(b).     Jeśli a jest zdarzeniem wysłania komunikatu m przez proces Pi, to m niesie stempel Tm = Ci(a).   Pj po odebraniu m w chwili Cj uaktualnia swój czas: Cj' = max(Cj,Tm) + 1.

55 Relacja całkowitego porządku:
1.      Ci(a) < Cj(b) lub 2.      Ci(a) = Cj(b) i Pi < Pj

56 (a) zegary bez synchronizacji, (b) synchronizacja zegarów wg Lamporta

57


Pobierz ppt "Programowanie współbieżne i rozproszone"

Podobne prezentacje


Reklamy Google