Wykład 5 Klasyfikacje systemów komputerowych, modele złożoności algorytmów obliczeniowych Spis treści: 1. Klasyfikacja Flynna 2. Klasyfikacja Skillicorna 3. Klasyfikacja architektury systemów pod względem sposobu zrównoleglenia obliczeń 4. Złożoność algorytmów obliczeniowych
Klasyfikacja Flynna systemów komputerowych Przy rozpatrywaniu architektury systemów komputerowych rozważane są następujące podstawowe elementy tych systemów: procesory składające się z bloków wykonawczych i układu sterowania, pamięci układy wejścia/wyjścia. Dla rozważenia sposobu wykonywania obliczeń w systemie komputerowym, prof. Michael Flynn (wtedy pracownik IBM) zaproponował w 1972 roku rozpatrzenie liczby strumieni rozkazów i liczby strumieni strumieni danych istniejących przy wykonywaniu programów w systemie. Na podstawie takich rozważań, M. Flynn podał klasyfikację systemów komputerowych, która jest używana powszechnie do dzisiaj dla określenia ogólnych cech systemu.
Systemy z pojedynczym strumieniem rozkazów i danych - SISD Pierwszym typem systemu jest system z pojedynczym strumieniem rozkazów i danych (ang. Single Instruction Stream Single Data Stream SISD). Odpowiada on systemowi z jednym procesorem. Układ sterowania R Procesor danych D Pamięć główna R System z pojedynczym strumieniem rozkazów i danych SISD
Systemy z pojedynczym strumieniem rozkazów i wieloma strumieniami danych - SIMD Drugim typem systemu jest system z pojedynczym strumieniem rozkazów i wieloma strumieniami danych (ang. Single Instruction Stream Multiple Data Streams SIMD). W systemie SIMD ten sam strumień rozkazów (program) jest wykonywany na wielu różnych strumieniach danych. Aby to zrealizować, system musi zawierać wiele procesorów wykonujących rozkazy przetwarzające dane procesory danych. Wspólny dla wszystkich procesorów układ sterowania pobiera rozkazy z pamięci i rozsyła je do wykonania we wszystkich procesorach danych. Każdy procesor pobiera swoje dane do wykonania.
System SIMD - z pojedynczym strumieniem rozkazów i wieloma strumieniami danych Procesor danych 1 D 1 Pamięć lokalna 1 Pamięć główna R Układ sterowania R Procesor danych 2 D 2 Pamięć lokalna 2 Procesor danych n D n Pamięć lokalna n Rysunek przedstawia realizację takiego modelu wykonania programu w systemie ze wspólną pamięcią rozkazów i rozdzielnymi pamięciami danych. Systemy SIMD są stosowane przede wszystkim dla wydajnego wykonania programów, w których nastąpiło zrównoleglenie metodą dekompozycji danych. Systemy te są popularne w centrach dla intensywnych obliczeń numerycznych.
Systemy z wieloma strumieniami rozkazów i pojedynczym strumieniem danych- MISD Trzecim typem systemu jest system z wieloma strumieniami rozkazów i pojedynczym strumieniem danych (ang. Multiple Instruction Streams Single Data Stream MISD). W systemie MISD następuje wykonanie wielu strumieni rozkazów na tym samym strumieniu danych. System, który ma realizować taki model przetwarzania, zawiera wiele procesorów, przez który przesuwa się strumień danych, na których te procesory wykonują ciągi rozkazów. Występuje tu podobieństwo do potokowego przetwarzania danych, z tym, że stopnie potoku wykonują nie pojedyncze operacje a strumienie rozkazów programy.
System z wieloma strumieniami rozkazów i pojedynczym strumieniem danych - MISD D Układ sterowania 1 R 1 Procesor danych 1 Pamięć główna Układ sterowania 2 R 2 Procesor danych 2 Układ sterowania n R n Procesor danych n
Kolejne procesory przekazują wyniki obliczeń do następnych procesorów. Optymalnym sposobem działania jest przekazywanie wyników między procesorami w tym samym momencie. Wymaga to jednak, aby długości czasu wykonywania rozkazów w procesorach były identyczne lub bardzo zbliżone. Wtedy procesory wzajemnie nie opóźniają swego działania. System MISD może pracować jako serwer, który wykonuje ten sam zestaw programów na stale dostarczanych zbiorach danych. Serwer MISD wykonuje swoje usługi n razy szybciej niż serwer zawierający tylko jeden procesor wykonujący sewkwencyjnie cały zbiór rozkazów wykonywanych na danych (programy wszystkich procesorów od 1 do n). Warunkiem powodzenie jest aby nowe dane były stale dostarczane do procesora 1, w takt przesunięć wyników między wszystkimi procesorami. Systemy typu MISD nie są dostępne na rynku. Można je zbudować z sytemu wieloprocesorowego z rozproszoną lub wspólną pamięcią i wydajnym systemem komunikacji między procesorami, np. opartym na przełączniku krzyżowym.
Systemy z wieloma strumieniami rozkazów i danych - MIMD Ostatnim typem systemu w klasyfikacji Flynna jest system z wieloma strumieniami rozkazów i danych (ang. Multiple Instruction Stream Multiple Data Streams MIMD). W systemie MIMD wykonywanych jest wiele strumieni rozkazów (programów) działających na własnych różnych danych. System, który może zrealizować taki model wykonywania programu musi zawierać wiele procesorów, które niezależnie pobierają rozkazy i dane z pamięci.
Schemat systemu z wieloma strumieniami rozkazów i danych MIMD, opartego na systemie wieloprocesorowym ze wspólną pamięcią Układ sterowania 1 R 1 Procesor danych 1 D 1 Pamięć główna Układ sterowania 2 R 2 Procesor danych 2 D 2 Układ sterowania n R n Procesor danych n D n
Taki model wykonania programu MIMD odpowiada zrównolegleniu programu poprzez dekompozycję kodu na równoległe procesory. Dla takich więc zastosowań systemy MIMD są optymalne. Przy dekompozycji programu tą metodą, należy zwrócić uwagę, by czas wykonania fragmentów programów był w przybliżeniu jednakowy. Tylko wtedy uzyska się dobre przyspieszenie obliczeń. Można to osiągnąć analizując obciążenia procesorów wykonujących fragmenty programu i stosować strategię przypisywania zadań obliczeniowych (programów) na procesory (ang. task allocation) zapewniającą zrównoważenie obciążeń procesorów w systemie (ang. load balancing). Systemy MIMD są obecnie najbardziej popularnym typem systemu równoległego. Najbardziej popularnym systemem łączącym elementy systemu MIMD są przełącznice krzyżowe lub układy wieloszynowe. Stosowane są też statyczne sieci połączeń np. hipersześcian, torus trójwymiarowy. W systemach MIMD są stosowane wszystkie znane rozwiązania pamięci w systemach wieloprocesorowych: pamięć wspólna, rozproszona i wirtualna pamięć wspólna
Klasyfikacja Skillicorna systemów komputerowych Klasyfikacja Davida Skillicorna, profesora Queens University w Kanadzie, służy do opisy struktur systemów równoległych. Klasyfikacja ta jest oparta na modelu zbudowanym z następujących elementów: układy sterujące (procesory instrukcji) - IP (ang. instruction processor) hierachiczna pamięć instrukcji - IM (ang. instruction memory hierarchy) procesory danych (bloki wykonawcze) - DP (ang. data processor) hierachia pamięć danych - DM (ang. data memory hierarchy) układy łączące powyższe elementy.
Hierarchiczna pamięć danych zawiera: pamięć podręczną danych, pamięć operacyjną pamięć dodatkową (np. dyskową). Procesor realizuje dostęp najpierw do pamięci podręcznej. Jeśli potrzebnej danej (adresu) nie ma w pamięci podręcznej, następuje poszukiwanie danej w pamięci operacyjnej. Jeśli dana tam jest, to następuje odczyt potrzebnego bloku do pamięci podręcznej a stamtąd następuje odczyt słowa do procesora. Jeśli danej nie ma w pamięci operacyjnej, bo np. brak jest w niej potrzebnej strony przy stronicowaniu, strona jest sprowadzona do pamięci operacyjnej a następnie blok tej strony jest sprowadzany do pamięci podręcznej, skąd potrzebne słowo (bajt) trafia do procesora.
Hierachiczna pamięć instrukcji jest zbudowana podobnie jak pamięć danych. Pamięć instrukcji zawiera: pamięć podręczną instrukcji, pamięć operacyjną pamięć dodatkową (np. dyskową). Pamięć operacyjna oraz pamięć dodatkowa może być wspólna dla danych i instrukcji lub oddzielna. Tego problemu klasyfikacja Skilicorna nie rozstrzyga i nie przedstawia tego na schematach systemów.
Zadania układu sterującego - procesora instrukcji: wyznaczenie adresu następnej instrukcji do wykonania sterowanie adresacją pamięci instrukcji (ang. addresses) odczyt i dekodowanie instrukcji sterowanie procesorem danych - wysłanie mu instrukcji (ang. instructions) do wykonania wyznaczanie adresów operandów (ang. operand addresses) odbieranie informacji stanu (ang. state) od procesorów danych
Zadania układu wykonawczego - procesora danych: odbiór od układu sterującego instrukcji i adresów dotyczących operandów odczyt operandów z pamięci danych wykonanie instrukcji dotyczących obliczeń na operandach (ang. operands) wyznaczenie informacji stanu dla układu sterującego zapamiętywanie wyników obliczeń w pamięci danych
Układy łączące obejmują następujące typy: połączenia 1 do 1, pojedyncze połączenie, ( oznaczenie 1-1) połączenia n do n, n połączeń pojedynczych idących równolegle (oznaczenie n - n) połączenia 1 do n, rozesłanie informacji do n odbiorców ( rozgłaszanie, ang. broadcast) (oznaczenie 1 - n) połączenia n na n, przełącznik krzyżowy łączący w sobie n wejść z n wyjściami (oznaczenie n x n).
Układy łączące w klasyfikacji Skillicorna
Schemat jednoprocesorowego komputera o modelu von Neumana Para IP-DP z wzajemnymi połączeniami odpowiada procesorowi o harwardzkim modelu architekturalnym. IP to uklad sterujący tego procesora a DP to jego bloki wykonawcze. IP pobiera instrukcje z pamięci instrukcji, dekoduje je i przesyla do wykonania do DP. DP pobiera dane z własnej pamięci danych. DP przesyla informacje o stanie obliczeń do IP, potrzebne dla sterowania w instrukcjach warunkowych.
Schemat systemu wieloprocesorowego SIMD z pamięcią danych wspólną n x n SW to przełącznik krzyżowy. 1 n SW to układ rozgłaszania instrukcji z IP do DP. Strzałki dwukierunkowe oznaczają przesyłanie adresów do pamięci i danych (instrukcji) w potrzebnym kierunku. IP to uklad sterowania pobierający instrukcje dla procesorów wykonawczych DP. Procesory DP mają dostęp poprzez n x n SW do bloków wspólnej pamięci danych.
Schemat systemu wieloprocesorowego SIMD z rozproszoną pamięcią danych. W tym systemie SIMD wymiana danych (częściowych wyników obliczeń) między procesorami DP odbywa się przez przełącznik krzyżowy SW. Kazdy DP ma wlasną lokalną pamięć danych
Schemat systemu wieloprocesorowego MIMD z rozproszoną pamięcią instrukcji i wspólną pamięcią danych. Każda para IP-DP z połączeniem odpowiada klasycznemu procesorowi o modelu von Neumanna. Każdy IP ma własną pamięć instrukcji.wymiana danych (częściowych wyników obliczeń) między procesorami odbywa się przez dostęp DP do wspólnych zmiennych przechowywanych we wspólnej pamięci danych. Wiele modułów tej pamięci, podłączonych do procesorów przez przełącznik krzyżowy SW, jest umieszczonych we wspólnej przestrzeni adresowej.
Schemat systemu wieloprocesorowego MIMD z rozproszonymi pamięciami danych i instrukcji. Każda para IP-DP z połączeniem odpowiada klasycznemu procesorowi o modelu von Neumanna. Każdy IP ma własną pamięć instrukcji. Każdy DP ma własną pamięć danych. Wymiana danych (częściowych wynikow obliczeń) między procesorami danych odbywa się przez przesyłanie komunikatów poprzez przełącznik krzyżowy.
Tabela możliwych architektur według klasyfikacji Skilicorna Kolumny przedstawiają od lewej: numer architektury (Cat), liczbę układów sterujących (IP) w systemie, liczbę procesorów danych (DP) w systemie, typ układów łączących: uklad sterujący z procesorem danych (IP DP), układ sterujący z pamięcią instrukcji (IP IM), procesor danych z pamięcią danych (DP DM), procesory wzajemnie miedzy sobą (DP DP) typ systemu w j. angielskim (Name).
Klasyfikacja architektury systemów pod względem sposobu zrównoleglenia obliczeń Zrównoleglenie funkcjonalne (geometryczne) polega na logicznej dekompozycji kodu programu na równoległe fragmenty wykonywane w różnych procesorach. Taka dekompozycja jest przeważnie nieregularna w sensie kodu i danych. Zrównoleglenie przez dekompozycję danych polega na dekompozycji danych programu miedzy różne procesory w celu wykonania na nich obliczen. Często takie same części kodu programu są różnych procesorach na różnych częściach danych. Dane są tutaj często regularne i regularna jest ich dekompozycja. Odpowiadaja temu dwa typy architektury systemów równoległych: architektura oparta na równoleglości danych (ang. data-parallel architecture), architektura oparta na równoległości funkcjonalnej (ang. function-parallel architecture).
Klasyfikacja architektur systemow rownoleglych ze względu na spoób zrownoleglenia obliczeń
Złożoność obliczeniowa algorytmów Złożoność algorytmu (programu) jest określona przez szybkość wzrostu czasu obliczeń i zajętości pamięci przy realizacji algorytmu w funkcji wzrostu rozmiaru problemu do rozwiązania. Np. w algorytmie sortowania elementów zbioru, rozmiar problemu jest wyznaczony przez liczbę elementów n w zbiorze. W algorytmie mnożenia macierzy, rozmiar problemu to łączna liczba wierszy i kolumn macierzy.
Jeśli przez T(n) oznaczymy maksymalną liczbę kroków obliczeniowych użytych przez algorytm dla rozwiązania problemu rozmiaru n, to funkcja T(n) jest złożonością czasową (time complexity) algorytmu. Jeśli przez S(n) oznaczymy maksymalną liczbę słów pamięci użytych przez algorytm dla rozwiązania problemu rozmiaru n, to funkcja S(n) jest złożonością pamięciową (przestrzenną) (space complexity) algorytmu.
Złożoność asymptotyczna jest to ograniczenie funkcji S lub T, gdy rozmiar problemu zdąża do bardzo dużych wartości. Jeśli dla dużych x, f(x) nie przekracza C g(x), gdzie C jest stałą, to mówimy, że: f jest co najwyżej równa O(g) i piszemy f = O(g) oraz mówimy, że: g jest co najmniej równa Ω(f) i piszemy g = Ω(f). Jeśli dla dużych x, zachodzi jednocześnie f = O(g) i f = Ω(g) to mówimy, że f równa się (jest równoważne) g i piszemy f = Θ(g). Np. dla f(x) = 2x 2 + 5 oraz g(x) = x 2 + 30 zachodzi, że dla x 3 f(x) 2 g(x) oraz g(x) 2 f(x). Stąd f = Θ( x 2 ) oraz g = Θ( x 2 ). W powyższych porównaniach rozważamy jedynie charakter zachowania się funkcji f i g dla bardzo dużych x, wyznaczając ich wartości z dokładnością do tzw. stałej multiplikatywnej C.
Powyższe notacje są używane do określania dolnych lub górnych ograniczeń asymptotycznych złożoności algorytmów. Jeśli np. wiemy, że T (złożoność czasowa pewnego algorytmu) spełnia T = Ω(f), czyli T jest co najmniej równa Ω(f) to mówimy, że ten algorytm ma złożoność asymptotyczną Ω(f). Często słowo asymptotyczny jest pomijane, i mówimy T ma złożoność Ω(f).
Złożoność problemu obliczeniowego jest to minimalna złożoność znaleziona w zbiorze wszystkich znanych algorytmów dla rozwiązania tego problemu. Złożoność wielomianowa problemu wielkość problemu n występuje w podstawie potęg wielomianu określającego złożoność asymptotyczną, np. Θ( n 2 ). Złożoność wykładnicza problemu wielkość problemu n występuje w wykładniku potęgi określającej złożoność asymptotyczną, np. Θ(x n ). Złożoność logarytmiczna problemu wielkość problemu n występuje w logarytmie określającym złożoność asymptotyczną, np. Θ(log n).
Złożoność przykładowych problemów (algorytmy sekwencyjne) Problem Złożoność czasowa Złożoność pamięciowa Sumowanie N P Permutacje N P Sortowanie NlogN P Obliczanie N P mediany FFT NlogN P Mnożenie N 1.5 P 2/3 macierzy Eliminacja Gaussa N 1.5 P 2/lg7 gdzie N i P są odpowiednimi rozmiarami problemu.