6. dekompozycja domenowa(zorientowana na podział danych): 7

Transkrypt

6. dekompozycja domenowa(zorientowana na podział danych): 7
6. dekompozycja domenowa(zorientowana na podział danych):
ZASADY:
• Podział danych na małe fragmenty
• Podział obliczeń poprzez związanie poszczególnych operacji z danymi, na których one działają
• Podzielone dane mogą stanowić dane wejściowe, rezultat bądź wyniki pośrednie działania programu
• Predestynowane do podziału są największe bądź najczęściej wykorzystywane struktury danych
• Każdy etap obliczeń może wymagać innego schematu dekompozycji danych
PRZYKŁAD(sześcian):
1-D – dzielimy na warstwy i wykonujemy obliczenia dla poszczególnych warstw(mało rozdrobniona struktura
skutkuje mniejszymi szansami na zrównoleglenie).
2-D – otrzymane wcześniej warstwy dzielimy na mniejsze części. (można wykonywać więcej obliczeń
równolegle)
3-D – najwyższy stopień dekompozycji dla siatki sześciennej. Obliczenia powtarzane dla każdego węzła (każdy
węzeł może być obsługiwany przez osobny procesor), który ma niezależne dane.
Minusy:
• Nie uwzględnia lokalnego obciążenia związanego z obliczeniami. Tzn. dla pewnych danych wymagane
jest bardzo dużo obliczeń, a dla drugiej grupy mniej. Wtedy trzeba dokonać dekompozycji
funkcjonalnej
• Im więcej węzłów tym większy jest narzut komunikacyjny, co powoduje mniejszy wzrost prędkości
obliczeń przy zwiększaniu liczby procesorów(węzłów)
7. dekompozycja funkcjonalna. (zorientowana na podział obliczeń)
ZASADY:
• Podział obliczeń na rozłączne fragmenty
• Zbadanie zależności od danych
– rozłączność danych – pełna dekompozycja
– duże przekrywanie się danych(te same dane wykorzystywane w różnych obliczeniach) –
sygnał sugerujący zastosowanie dekompozycji domenowej
• Pozwala uchwycić strukturę problemu nie oczywistą z punktu widzenia analizy danych
• Podział obliczeń może się łączyć z podziałem kodu, a co za tym idzie z uproszczeniem struktury
projektu
PRZYKŁAD(modelowanie klimatu):
Podział na komponenty
funkcjonalne. Różne obliczenia dla danej
części modelu.
Dla uzyskania większej wydajności
komponenty funkcjonalne mogą dodatkowo
zostać zdekomponowane domenowo.
PLUSY:
Z reguły prosta komunikacja.
Brak problemów z przeciążeniem
obliczeniowym jednego z
komponentów
8. Schematy i kryteria komunikacji.
Kryteria komunikacji
• zrównoważenie obciążenia komunikacyjnego miedzy zadaniami (węzłami)
• Minimalizacja ilości partnerów (najlepiej żeby zadanie potrzebowało jak najmniej danych od innych
zadań)
• Współbieżność komunikacji determinuje skalowalność co powoduje zwiększenie wydajności
• Celem pozostaje współbieżność obliczeń
Schematy komunikacji:
a. Komunikacja lokalna
Obliczenie danego zadania (konsumenta) potrzebuje danych od niewielu innych zadań (producentów)
Nieskomplikowana struktura wymiany danych (kanałów) między producentem (zadanie dostarczające
dane), a konsumentem (obliczane zadanie)
Komunikacja globalna
Jeden proces (zarządca) uczestniczy w całej komunikacji
Obliczenia są wykonywane sekwencyjnie (brak współbieżności)
Niska wydajność
b. Komunikacja synchroniczna
Blokada obliczeń po udostępnieniu danych innemu zadaniu i
oczekiwanie na wynik zwrócony przez inne zadanie
(algorytmy rekurencyjne)
Procesy 0 i 1 uzyskują dane do obliczeń z E 01.E01 musi czekać
z obliczeniami aż dane zostaną zwrócone z procesów 0 i 1.
Komunikacja asynchroniczna
Zadania są wykonywane niezależnie do siebie. Producenci (procesy dostarczające dane) nie wiedzą,
kiedy mają przesłać dane do konsumentów, dlatego konsument musi jawnie żądać danych od
producenta.
Rodzaje podziału danych:
Dane są rozproszone pomiędzy zadania obliczeniowe które okresowo odpytują się nawzajem
Dane rozproszone pomiędzy dedykowane zadania, które udostępniają dane
Współdzielona pamięć (Shared Memory)
c. Statyczna to samo co synchroniczna tylko ze bez blokady (tak mi się wydaje po tym co znalazłem w
necie)
Dynamiczna to samo co asynchroniczna. Komunikacja następuje wtedy gdy zadanie potrzebuje dane i
to zgłosi.
d. Strukturalna=statyczna
Niestrukturalna=dynamiczna
(Granice są bardzo płynne i to są moje wizje po przeczytaniu wykładu i oglądnięciu
kilku stronek w necie)
9. Cele scalania i powielania
Cele scalania i powielania:
• Zmniejszenie kosztów komunikacji poprzez zwiększenie ziarnistości obliczeń i komunikacji
• Zachowanie elastyczności w odniesieniu do skalowania i mapowania
• Zmniejszenie kosztów inżynierii oprogramowania (software engineering)
krótki opis scalania i powielania (niby nie ma w pytaniu ale może się przydać)
Scalanie:
a. Cele:
• Dopasowanie ilości oraz rozkładu zadań do danej architektury sprzętowej (bez sensu dzielić
zadanie na 10 zadań współbieżnych jeśli mamy np. tylko 3 procesory)
• Zastąpienie dużej liczby małych zadań mniejszą liczbą większych zadań
• Określenie czy powielenie danych i obliczeń pomiędzy zadaniami ma sens. (jeśli jest to prosta
operacja, a komunikacja może trwać dłużej, to lepiej powtórzyć część obliczeń w zadaniu)
• Liczba zadań nadal może być większa od liczby procesów
b. Przykłady:
• Wzrost rozmiaru zadania dzięki zmianie wymiaru dekompozycji np. 3D -> 2D
• Zwiększenie ziarnistości poprzez połączenie sąsiednich zadań
• Połączenie gałęzi w schemacie divide-and-conquer
c.
• Połączenie węzłów np. w schemat drzewa poszukiwań
Zalecane gdy komunikacja uniemożliwia współbieżność zadań. Dzięki temu uzyskujemy prostsze
schematy komunikacyjne
Powielanie obliczeń powoduje zmniejszenie komunikacji kosztem zwiększenia obliczeń. Bardzo często
opłacalny zabieg ponieważ komunikacja może trwać dłużej niż kilka prostych obliczeń.
10. Efekt powierzchni do objętości:
• Ilość komunikacji zadania jest proporcjonalna do powierzchni domeny
• Ilość obliczeń jest proporcjonalna do objętości domeny (węzła)
• W problemach wielowymiarowych stosunek komunikacja/obliczenia maleje ze wzrostem pojedynczego
zadania
• Wyżej wymiarowe dekompozycje są zwykle bardziej wydajne – scalanie lepiej wykonywać we wszystkich
wymiarach jednocześnie