Algorytmy Równoległe i Rozproszone Część IV - Model PRAM



Podobne dokumenty
Algorytmy Równoległe i Rozproszone Część IV - Model PRAM

Algorytmy Równoległe i Rozproszone Część IV - Model PRAM

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Algorytmy dla maszyny PRAM

Algorytmy Równoległe i Rozproszone Część X - Algorytmy samostabilizujące.

Analiza ilościowa w przetwarzaniu równoległym

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Analiza efektywności przetwarzania współbieżnego. Wykład: Przetwarzanie Równoległe Politechnika Poznańska Rafał Walkowiak Grudzień 2015

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Programowanie współbieżne Wstęp do obliczeń równoległych. Rafał Skinderowicz

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

Programowanie równoległe

Algorytmy Równoległe i Rozproszone Część III - Układy kombinacyjne i P-zupełność

Analiza efektywności przetwarzania współbieżnego

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

Wstęp do programowania

Wprowadzenie do złożoności obliczeniowej

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Wykład 8. Drzewo rozpinające (minimum spanning tree)

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych.

Algorytmika Problemów Trudnych

Macierze. Rozdział Działania na macierzach

ĆWICZENIE NR 1 WPROWADZENIE DO INFORMATYKI

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

TEORETYCZNE PODSTAWY INFORMATYKI

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

MATEMATYKA DYSKRETNA - MATERIAŁY DO WYKŁADU GRAFY

Programowanie współbieżne Wykład 2. Iwona Kochańska

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Algorytm. a programowanie -

Informacja w perspektywie obliczeniowej. Informacje, liczby i obliczenia

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Algorytmiczna teoria grafów

Macierzowe algorytmy równoległe

Analiza algorytmów zadania podstawowe

Projektowanie algorytmów równoległych. Zbigniew Koza Wrocław 2012

Rozdział 5. Macierze. a 11 a a 1m a 21 a a 2m... a n1 a n2... a nm

Digraf. 13 maja 2017

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

Znajdowanie skojarzeń na maszynie równoległej

Matematyka dyskretna - 7.Drzewa

Wstęp do programowania

Algorytmy Równoległe i Rozproszone Część II - Sieci porównujące

a) 7 b) 19 c) 21 d) 34

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Programowanie dynamiczne cz. 2

Wstęp do sieci neuronowych, wykład 11 Łańcuchy Markova

System plików warstwa fizyczna

System plików warstwa fizyczna

System plików warstwa fizyczna

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

PROGRAMOWANIE SIECIOWE. METODA ŚCIEŻKI KRYTYCZNEJ

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

Minimalne drzewa rozpinające

Pliki. Operacje na plikach w Pascalu

Obliczenia równoległe

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów

ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Sprawozdanie do zadania numer 2

Drzewa rozpinajace, zbiory rozłaczne, czas zamortyzowany

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

PROBLEMY NIEROZSTRZYGALNE

Algebra WYKŁAD 3 ALGEBRA 1

Algorytmy Równoległe i Rozproszone Część VI - Systemy rozproszone, podstawowe pojęcia

Matematyczne Podstawy Informatyki

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy wyznaczania centralności w sieci Szymon Szylko

Matematyka dyskretna

Ogólne wiadomości o grafach

Programowanie obiektowe

5. Rozwiązywanie układów równań liniowych

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

AiSD zadanie trzecie

Zaawansowane algorytmy i struktury danych

1 Wprowadzenie do algorytmiki

Wykład z Technologii Informacyjnych. Piotr Mika

Algorytm Dijkstry znajdowania najkrótszej ścieżki w grafie

wstęp do informatyki i programowania część testowa (25 pyt. / 60 min.)

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Numeryczna algebra liniowa. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Dynamiczne drzewa. Marian M. Kędzierski. 26 listopada Wstęp Euler-Tour Trees Dynamiczna spójność Algorytm Dinica Link-Cut Trees

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Numeryczna algebra liniowa

Matematyka dyskretna - 8. Egzaminy próbne. Uwaga! Niektórych z tych zadań nie obejmuje program dla studiów zaocznych - proszę się tym nie niepokoić -

Definicje. Algorytm to:

Podstawy Informatyki Systemy sterowane przepływem argumentów

Transkrypt:

Algorytmy Równoległe i Rozproszone Część IV - Model PRAM Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Oficjalna strona wykładu http://www.kaims.pl/ kuszner/arir/ Wykład 15 godzin, Projekt 15 godzin 2015 Strona 1 z 45

1. Powody rozwoju systemów równoległych i rozproszonych wymiana informacji, współdzielenie zasobów, zwiększanie niezawodności poprzez powielanie, zwiększanie wydajności poprzez zrównoleglanie, upraszczanie konstrukcji poprzez specjalizację. Strona 2 z 45

Wymiana informacji zność wymiany informacji pociąga za sobą konieczność budowy systemów, które taką wymianę umożliwiają. W powszechnym użyciu jest wiele takich systemów jak choćby globalna sieć Internet, sieci telefonii stacjonarnej i komórkowej, wewnętrzne sieci komputerowe dużych korporacji przemysłowych, wojskowe i cywilne systemy wczesnego ostrzegania, systemy nawigacji satelitarnej i inne. Strona 3 z 45

Współdzielenie zasobów Wytworzenie, a później utrzymanie niektórych zasobów może być bardzo kosztowne. zne staje się więc współdzielenie ich przez wielu użytkowników. W takim wypadku dla ułatwienia dostępu i uregulowania zasad korzystania z zasobów powstają często rozproszone systemy dostępu i kontroli. Jako przykłady można tu podać np.: teleskop kosmiczny Hubble a, a w mniejszej skali ploter lub drukarkę współdzieloną przez kilku użytkowników. Zasobami mogą być też dane, lub moc obliczeniowa superkomputerów. Strona 4 z 45

Zwiększanie niezawodności poprzez powielanie Systemy rozproszone mogą być potencjalnie bardziej niezawodne. O ile awaria lub zniszczenie samodzielnie działającego komputera uniemożliwa pracę całego systemu, o tyle awaria systemu rozproszonego może być zneutralizowana poprzez zastąpienie niesprawnego elementu poprzez inne działające równolegle. Strona 5 z 45

Zwiększanie wydajności poprzez zrównoleglanie W systemach masowej obsługi powielenie jednostek wykonujących to samo zadanie powoduje wzrost wydajności. Przykładem tutaj mogą być komputery odpowiadające na zapytania kierowane do baz danych. Również w innego rodzaju systemach jeśli tylko realizowane zadania mogą być dzielone na mniejsze części, to możemy przyspieszyć obsługę poprzez zrównoleglenie pewnych operacji. Strona 6 z 45

Upraszczanie konstrukcji poprzez specjalizację Konstrukcja systemów komputerowych może być bardzo złożona. Podobnie jak klasyczna modularyzacja podział systemu na kooperujące części może zaowocować zmniejszeniem złożoności pojedynczych elementów i zarazem uproszczeniem konstrukcji całego systemu. Strona 7 z 45

2. Jakość algorytmów równoległych Czas obliczeń (złożoność algorytmu) Liczba potrzebnych procesorów. Przyjęty model obliczeń Przyspieszenie Efektywność Skalowalność Strona 8 z 45

Przyspieszenie Rozważmy problem, dla którego sekwencyjny algorytm wymaga czasu T s. Dysponujemy algorytmem, który działa w czasie T p przy użyciu P procesorów. Speedup = T s T p Efficiency = T s P T p W jaki sposób obliczamy czasy T s i T p? Strona 9 z 45

Przyspieszenie względne (Relative Speedup) Niech A będzie algorytmem równoległym. RelativeSpeedup(n, p) = T s T p T s =Czas rozwiązania problemu P na jednym procesorze T p =Czas rozwiązania problemu P na p procesorach Strona 10 z 45

Przyspieszenie rzeczywiste (Real Speedup) Niech A będzie algorytmem równoległym. RealSpeedup(n, p) = T s T p T s =Czas rozwiązania problemu najlepszym znanym algorytmem sekwencyjnym, T p =Czas rozwiązania problemu P na p procesorach. W obu wypadkach mierzymy czas na maszynie równoległej. Strona 11 z 45

Przyspieszenie bezwzględne (Absolute Speedup) Niech A będzie algorytmem równoległem. AbsoluteSpeedup(n, p) = T s T p T s =Czas rozwiązania problemu najlepszym znanym algorytmem sekwencyjnym na najszybszym znanym procesorze, T p =Czas rozwiązania problemu P na p procesorach. Strona 12 z 45

Asymptotyczne przyspieszenie rzeczywiste (Asymptotic Real Speedup) Niech S(n) będzie złożonością obliczeniową najlepszego algorytmu sekwencyjnego, a A algorytmem równoległym i P A (n) jego złożonością bez ograniczenia na liczbę procesorów. AsymptoticRealSpeedup(n, p) = S(n) P (n) Strona 13 z 45

Cost Normalized Speedup CNS(n, p) = Speedup(n, p) koszt systemu równoległego koszt systemu sekwencyjnego Strona 14 z 45

Efektywność Efektywność jest miarą ściśle związaną z przyspieszeniem. Ogólnie można zapisać Efficiency(n, p) = Speedup(n, p), p gdzie n jest rozmiarem problemu, a p jest liczbą użytych procesorów. W zależności od tego jaką przyjmiemy miarę przyspieszenia uzyskamy różne miary efektywności. Strona 15 z 45

Skalowalność Intuicyjnie system/algorytm jest skalowalny, jeśli efektywność maleje wolno wraz ze wzrostem rozmiaru problemu i liczby procesorów. Strona 16 z 45

3. W modelu przetwarzania sekwencyjnego kluczową rolę pełni model maszyny RAM (random access machine). Każda taka maszyna składa się z ustalonego programu, jednostki obliczeniowej, taśmy (tylko do odczytu) z danymi wejściowymi, taśmy (tylko do zapisu) na wynik działania programu oraz nieograniczonej pamięci o dostępie swobodnym. Ponadto każda komórka pamięci jest w stanie zapamiętać liczbę całkowitą o nieograniczonym zakresie. Jednostka obliczeniowa nie jest skomplikowana pozwala na wykonywanie najprostszych instrukcji takich jak: kopiowanie komórek pamięci, porównania i skoki warunkowe, podstawowe operacje arytmetyczne itp. Ustalony program użytkownika składa się z ciągu takich instrukcji. Strona 17 z 45

Miarą złożoności programów dla maszyny RAM są typowo czas działania mierzony liczbą wykonanych instrukcji i zużycie pamięci mierzone liczbą wykorzystywanych komórek. Żeby uchronić ten model przed zniekształceniami zabronione jest generowanie bardzo dużych liczb w krótkim czasie. Np. zabrania się generowania liczb o niewielomianowej długości zapisu w wielomianowym czasie. Można to osiągnąć albo przez uważny dobór zestawu instrukcji, albo przerzucając odpowiedzialność na twórców algorytmów dla danego modelu. W ten sposób otrzymujemy gamę równoważnych modeli dla obliczeń sekwencyjnych. Strona 18 z 45

Naturalnym uogólnieniem modelu RAM (ang. random access machine) jest dodanie większej liczby jednostek obliczeniowych. Ideę maszyny PRAM (ang. parallel random access machine) może ilustrować poniższy schemat: Pamięć współdzielona Strona 19 z 45 P 1 P 2 P n

4. Pamięć jest wspólna dla wszystkich procesorów. Każdy procesor jest maszyną typu RAM. Wszystkie procesory działają synchronicznie. Czas działania mierzymy liczbą dostępów do pamięci współdzielonej. Zużycie pamięci liczymy liczbą użytych komórek. Dodatkowym parametrem jest liczba użytych procesorów. Tu zakładamy, że w wielomianowym czasie można użyć tylko wielomianowej liczby procesorów. Strona 20 z 45

Uwagi do założeń Ostatni punkt założeń można rozwiązać np. w taki sposób, że procesor P 1 oblicza potrzebną liczbę procesorów, a następnie włącza je wpisując liczbę do odpowiedniego rejestru. Liczenie dostępów do pamięci ma taki sens praktyczny, że zwykle wszelkie operacje typu komunikacyjnego zabierają znacznie więcej czasu niż obliczenia lokalne. Wadą założenia o jednostkowym czasie dostępu jest, występowanie w rzeczywistych systemach równoległych mechanizmów komunikacji o bardzo zróżnicowanej wydajności. Strona 21 z 45

Dostęp do pamięci Istnieje kilka sposobów modelowania równoległego dostępu do pamięci współdzielonej. We wszystkich modelach zakładamy oddzielenie operacji zapisu i odczytu. Przyjmujemy, że maszyna PRAM działa w cyklu składającym się z: (jeśli potrzeba) czytaj z pamięci współdzielonej, (jeśli potrzeba) wykonaj obliczenia lokalne, (jeśli potrzeba) pisz do pamięci współdzielonej. W ten sposób zakładamy, że nie ma konfliktów typu: jednoczesny zapis/odczyt. Strona 22 z 45

Pozostają jednak konflikty typu: jednoczesny zapis/zapis i odczyt/odczyt. Generalnie możliwości są następujące: maszyna EREW-PRAM: (ang. exclusive read exclusive write) nie dopuszcza się konfliktów żadnego rodzaju, maszyna CREW-PRAM: (ang. concurrent read exclusive write) dopuszcza się konflikty typu jednoczesny odczyt, maszyna ERCW-PRAM: (ang. exclusive read concurrent write) dopuszcza się konflikty typu jednoczesny zapis, maszyna CRCW-PRAM: (ang. concurrent read concurrent write) dopuszcza się zarówno konflikty typu jednoczesny odczyt jak i jednoczesny zapis. Przy czym w przypadku dopuszczenia jednoczesnego odczytu (CREW, CRCW) zakładamy, że wszystkie procesory przeczytają żądaną komórkę pamięci. W przypadku dopuszczenia jednoczesnego zapisu sytuacja jest bardziej złożona. Strona 23 z 45

Rozwiązywanie konfliktów typu jednoczesny zapis ECR (equality conflict resolution) - jednoczesny zapis się powiedzie, jeśli wszystkie procesory próbują zapisać to samo. PCR (priority conflict resolution) - zapis udaje się tylko procesorowi o najwyższym priorytecie. ACR (arbitrary conflict resolution) - jednemu z procesorów zapis się powiedzie. Strona 24 z 45

5. Twierdzenie 1 Każdy układ kombinacyjny o rozmiarze n, głębokości d i stopniu wejściowym bramek ograniczonym przez stałą da się symulować na p-procesorowej maszynie CREW- -PRAM w czasie O(n/p + d). Ćwiczenie 1 Uzasadnij twierdzenie Brenta (zob. Cormen str 793). Strona 25 z 45

6. Algorytm 1: Iloczyn skalarny 1: for i = 1 to n in parallel do 2: c i = a i b i 3: end for 4: p = n/2 5: while p > 0 do 6: for i = 1 to p in parallel do 7: c i = c i + c i+p 8: end for 9: p = p/2 10: end while We: Tablice współrzędnych a[1 : n] i b[1 : n] Wy: Liczba będąca iloczynem skalarnym wektorów a i b. Model: EREW PRAM. Czas O(lg n) i O(n) procesorów. Strona 26 z 45

Algorytm 2: Koniunkcja logiczna 1 1: result=true 2: for i = 1 to n in parallel do 3: if A[i]==FALSE then 4: result=false 5: end if 6: end for We: Tablica wartości logicznych A[1 : n]. Wy: result Model: ERCW PRAM. Czas O(1) i O(n) procesorów. Strona 27 z 45

Algorytm 3: Koniunkcja logiczna 2 1: result=false 2: for i = 1 to n in parallel do 3: result=a[i] 4: end for We: Tablica wartości logicznych A[1 : n]. Wy: result Model: ERCW-ECR PRAM. Czas O(1) i O(n) procesorów. Ćwiczenie 2 Uzasadnij poprawność powyższych algorytmów. Strona 28 z 45

7. Obliczenia w drzewie binarnym Algorytm 4: Koniunkcja logiczna 3 1: p = n/2 2: while p > 0 do 3: for i = 1 to p in parallel do 4: A[i] = A[2i 1]A[2i] 5: end for 6: p = p/2 7: end while We: Tablica wartości logicznych A[1 : n]. Wy: result Model: EREW PRAM. Czas O(lg n) i O(n) procesorów. Strona 29 z 45

8. (przeskakiwanie) pozwala na tworzenie równoległych algorytmów dla list. Przykład Problem list-ranking obliczanie odległości obiektu od końca listy. Niech A będzie tablicą obiektów, a Link[i] = j oznacza, że element j następuje w liście po elemencie i. Jeśli Link[i] = 0, to nie ma kolejnego elementu, i jest elementem ostatnim. Przez Head oznaczymy pierwszy element na liście. Strona 30 z 45

Algorytm 5: List Ranking 1: for i = 1 to n in parallel do 2: Rank[i]=1 3: Next[i]=Link[i] 4: end for 5: for j = 1 to lg n do 6: for i = 1 to n in parallel do 7: if Next[i] 0 then 8: Rank[i]+ = Rank[N ext[i]] 9: Next[i] = Next[Next[i]] 10: end if 11: end for 12: end for We: Tablice A[1 : n], Link[1 : n]. Wy: Rank[1:n] Model: EREW PRAM. Czas O(lg n) i O(n) procesorów. Strona 31 z 45

Na rysunku znajdują się procesory oznaczone prostokątami w kolejności wskazywanej przez Link. Strzałki obrazują wartość N ext, a liczby wpisane w każdy prostokąt wartości Rank. 1 1 1 1 1 1 1 2 2 2 2 2 2 1 Strona 32 z 45 4 4 4 4 3 2 1

9. Metoda cyklu Eulera Niech G = (V, E) spójny graf prosty. Możemy utworzyć graf G o tym samym zbiorze wierzchołków V oraz zbiorze krawędzi E otrzymanym przez zastąpienie każdej nieskierowanej krawędzi E e = {u, v} poprzez dwie krawędzie skierowane (u, v) i (v, u). Fakt 2 Otrzymany w ten sposób graf jest Eulerowski. Strona 33 z 45

Rozważmy teraz drzewo T. Zaczniemy od znalezienia cyklu Eulera w T = (V, E ). Niech v V będzie wierzchołkiem w T, a N(v) = {u 0, u 1, u 2,..., u deg(v) 1 } listą sąsiadów. Istotne jest, że dla każdego wierzchołka v zbiór sąsiadów N(v) musi być uporządkowany. Dla każdej krawędzi (u i, v) definiujemy następnik succ(u i, v) = (v, u i+1(mod deg(v)) ) Fakt 3 Tak zdefiniowana funkcja succ (następnik) definiuje cykl Eulera w T. Strona 34 z 45

Przykład Zakładając kolejność sąsiadów: 1 : {2}, 2 : {1, 3, 4}, 3 : {2}, 6 4 : {2, 5}, 5 5 : {4, 6, 7, 8}, 6 : {5}, 7 : {5}, 4 8 : {5, 9, 10}, 9 : {8}, 10 : {8, 11}, 11 : {10}, 1 2 3 7 8 9 10 11 Strona 35 z 45 Na tym rysunku uzyskamy cykl: 1, 2, 3, 2, 4, 5, 6, 5, 7, 5, 8, 9, 8, 10, 11, 10, 8, 5, 4, 2, 1

Mając krawędzie drzewa ułożone w cykl możemy stosować metody typu pointer jumping dla drzew. Otrzymujemy w ten sposób metodę konstruowania algorytmów przy użyciu O(n) procesorów i logarytmicznym czasie działania. Ćwiczenie 3 Zaprojektuj efektywny algorytm równoległy obliczania sumy wszystkich elementów zapamiętanych w strukturze drzewiastej. Strona 36 z 45

Kolejność Postorder We: Drzewo T = (V, E) z korzeniem r wyróżnionym poprzez relację p, gdzie p(u) = v - oznacza v jest rodzicem u w drzewie T oraz w T w formie relacji succ. Wy: Dla każdego wierzchołka jego numer w kolejności Postorder post(v). Strona 37 z 45

Algorytm 6: Kolejność Postorder 1: for każda krawędź (u, v) in parallel do 2: if u = p(v) then 3: krawędź ma wagę w(u, v) = 0 4: else 5: krawędź ma wagę w(u, v) = 1 6: end if 7: end for 8: Znajdź sumę wag na krawędziach stosując pointer jumping 9: for każdy wierzchołek (v) in parallel do 10: post(v) = suma prefiksowa wag w na łuku (v, p(v)). 11: end for Model: CREW PRAM, czas O(log n) i O(m) procesorów. Strona 38 z 45

Przykład Motywacja w(4, 2) = 0, w(2, 1) = 0, w(1, 2) = 1, w(2, 4) = 1, w(4, 3) = 0, w(3, 4) = 1, w(4, 5) = 0, w(5, 6) = 0, w(6, 5) = 1, w(5, 7) = 0, w(7, 5) = 1, w(5, 8) = 0, w(8, 10) = 0, w(10, 11) = 0, w(11, 10) = 1, w(10, 8) = 1, w(8, 5) = 1, 1 2 4 3 w(5, 9) = 0, w(9, 5) = 1, w(5, 4) = 1 5 6 7 8 9 Strona 39 z 45 10 11

Ćwiczenie 4 Zaprojektuj algorytm typu EREW PRAM, który w czasie O(log n) oblicza rozmiary poddrzew o korzeniach we wszystkich węzłach drzewa binarnego. Strona 40 z 45

10. Algorytm Floyda-Warshalla Rozważmy graf G = (V, E), w którym z każdą krawędzią skojarzono nieujemną wagę w ij. Uzupełniając przekątną zerami: w ii = 0 i pozostałe wagi wartością nieskończoność: w ij = (jeśli nie ma krawędzi z i do j) otrzymamy macierz wag W = (w ij ). Algorytm Floyda-Warshalla pozwala obliczyć długość najkrótszej ścieżki z i do j, jak też i jej przebieg. Odtworzenie każdej ścieżki umożliwi macierz (p ij ), w której element p ij pokazuje wierzchołek poprzedni w stosunku do j w najkrótszej ścieżce z i do j. Strona 41 z 45

Algorytm 7: 1: for i = 1 to n in parallel do 2: for j = 1 to n in parallel do 3: d ij = w ij 4: p ij = i 5: end for 6: end for 7: for k = 1 to n do 8: for każda para i, j, gdzie 0 < i, j n i i, j k in parallel do 9: if d ij > d ik + d kj then Motywacja 10: d ij = d ik + d kj 11: p ij = p kj 12: end if 13: end for 14: end for Strona 42 z 45 We: Graf w postaci macierzy wag w ij Wy: Macierze d ij i P ij Model: CREW PRAM. Czas O(n) i O(n 2 ) procesorów.

Ćwiczenie 5 Zaprojektuj algorytm typu CREW PRAM, który w czasie O(n) znajdzie przechodnie domknięcie relacji binarnej. Strona 43 z 45

11. przez ranking Czas O(log n) i O(n 2 ) procesorów. We: Wektor do posortowania X = [x 1,... x n ] Model: CREW PRAM. Strona 44 z 45

Algorytm 8: przez ranking 1: for każda para i, j, gdzie 0 < i, j n in parallel do 2: if x i > x j then 3: c ij = 1 4: else 5: c ij = 0 6: end if 7: end for 8: for i = 1 to n in parallel do 9: policz r i = n j=1 c ij 10: end for 11: for i = 1 to n in parallel do 12: ustaw element i na pozycji r i + 1 w tablicy wynikowej 13: end for Strona 45 z 45