Skalowalność obliczeń równoległych Krzysztof Banaś Obliczenia Wysokiej Wydajności 1
Skalowalność Przy rozważaniu wydajności przetwarzania (obliczeń, komunikacji itp.) często pojawia się pojęcie skalowalności Ogólnie, choć nie do końca ściśle, oznacza ona dobre zachowanie systemu (sprzętu, środowiska wykonania, programu) w sytuacji rosnącego obciążenia i, najczęściej, rosnących zasobów Mówiąc o skalowalności często rozważa się wydajność jako funkcję rosnącego obciążenia i, ewentualnie, rosnących zasobów Wydajność definiowana jest zależnie od dziedziny (jak to już było wielokrotnie podkreślane) stąd też pojęcia skalowalności bywają różne W dziedzinie Obliczeń Wysokiej Wydajności wprowadza się ścisłe definicje i miary związane ze skalowalnością obliczeń równoległych Krzysztof Banaś Obliczenia Wysokiej Wydajności 2
Przyspieszenie i efektywność obliczeń Miary wydajności obliczeń równoległych: przyspieszenie obliczeń: S(p) = Ts / T (p) Ts czas rozwiązania zadania najlepszym algorytmem sekwencyjnym na pojedynczym procesorze T (p) czas rozwiązania zadania rozważanym algorytmem równoległym na p procesorach (w praktyce często zamiast Ts używa się T (1) ) efektywność zrównoleglenia: E(p) = S(p) / p ideałem jest uzyskanie liniowego przyspieszenia i 100% efektywności (jak musi się zachowywać narzut obliczeń, T narz (p) = T (p) T (1)/p, aby uzyskać przyspieszenie liniowe?) Krzysztof Banaś Obliczenia Wysokiej Wydajności 3
Przyspieszenie i efektywność obliczeń Miary wydajności obliczeń równoległych: obserwacja dla danej liczby procesorów przyspieszenie obliczeń równoległych jest większe dla zadań większych (ten sam problem, ten sam algorytm, ten sam program, zmienia się tylko wielkość zadania) dzieje się tak dla zadań, dla których przy stałym p i rosnącym rozmiarze ilość obliczeń rośnie szybciej niż narzut obliczeń równoległych miara wielkości zadania praca W = liczba operacji wykonywanych przy realizacji zadania można próbować wyrazić przyspieszenie jako funkcję dwóch parametrów liczby procesorów i wielkości zadania, S(p,W) (podobnie efektywność E(p,W)) otrzymuje się funkcję dwóch zmiennych, którą można dalej analizować rozpatrując różne jej przekroje Krzysztof Banaś Obliczenia Wysokiej Wydajności 4
Przyspieszenie skalowane Miary wydajności obliczeń równoległych przyspieszenie skalowane to przyspieszenie jakie uzyskuje się rozważając dla danej liczby procesorów p zadanie o rozmiarze p krotnie większym od zadania rozwiązywanego na pojedynczym procesorze jako funkcja liczby procesorów przyspieszenie skalowane jest równe: S S (p) = T (1, pw 0 ) / T (p, pw 0 ) = p*t (1, W 0 ) / T (p, pw 0 ) liniowe przyspieszenie skalowane uzyskuje się przy powyższych założeniach wtedy, kiedy czas rozwiązania nie zmienia się przy rozwiązaniu zadania o rozmiarze p krotnie większym na p razy więcej procesorach efektywność zrównoleglenia jest wtedy stała Krzysztof Banaś Obliczenia Wysokiej Wydajności 5
Skalowalność programów Miary wydajności obliczeń równoległych analiza przyspieszenia skalowanego i skalowanej efektywności jest czasem w literaturze nazywana badaniem tzw. słabej skalowalności (weak scalability) czyli związanej z wydajnością przy stałym rozmiarze zadania na pojedynczym procesorze słabą skalowalność odróżnia się w takim kontekście od silnej skalowalności (przy stałym całkowitym rozmiarze zadania analiza klasyczna, Amdahla, itp.) program będzie wykazywał taką słabą skalowalność (inaczej skalowalność w sensie słabszym) jeżeli czas rozwiązania zadania p krotnie większego (analizując ściśle należałoby powiedzieć o pracy p krotnie większej ) na p razy większej liczbie procesorów będzie pozostawał niezmieniony (lub rósł tylko nieznacznie) (tak jak w przypadku liniowego przyspieszenia skalowanego) Krzysztof Banaś Obliczenia Wysokiej Wydajności 6
Skalowalność programów Miary wydajności obliczeń równoległych innym z pojęć określających zachowanie programu równoległego dla rosnącego rozmiaru zadania i rosnącej liczby procesorów jest skalowalność równoległa (parallel scalability) program nazywamy skalowalnym równolegle jeżeli istnieje taka funkcja W(p), że efektywność obliczeń równoległych jako funkcja E(W(p), p) jest ograniczona od dołu przez liczbę większą od zera jeśli W(p) jest funkcją liniową mówimy o liniowej skalowalności często jesteśmy zainteresowani tylko takimi funkcjami W(p), dla których wymagany rozmiar pamięci nie przekracza dostępnych zasobów (najczęściej pamięć rośnie liniowo wraz ze wzrostem liczby procesorów) Krzysztof Banaś Obliczenia Wysokiej Wydajności 7
Skalowalność programów Miary wydajności obliczeń równoległych analiza równoległej skalowalności programu jest zbliżona do poszukiwania tzw. funkcji izoefektywności funkcja izoefektywności to taka funkcja W izo (p), dla której efektywność jako funkcja W i p jest stała: E( W izo (p), p ) = const ( > 0 ) geometrycznie chodzi o uzyskanie takiego przekroju wykresu E(W,P) dla którego E=const obliczenia, dla których istnieje funkcja izoefektywności są skalowalne obliczenia liniowo skalowalne mają liniową funkcję izoefektywności Krzysztof Banaś Obliczenia Wysokiej Wydajności 8
Skalowalność programów Miary wydajności obliczeń równoległych istnienie funkcji izoefektywności jest związane z narzutem obliczeń równoległych: narz narz E = S / p = T s /(p T ) = T s /(T s + pt ) = 1/(1+pT /T s ) stała efektywność oznacza, że stosunek całkowitego narzutu wykonania równoległego do czasu obliczeń sekwencyjnych jest stały przy stałym rozmiarze zadania stałą efektywność uzyskuje się gdy narzut całkowity jest stały, czyli narzut na jeden procesor maleje narz odwrotnie proporcjonalnie do liczby procesorów p (pt (p) = const) co praktycznie nigdy nie zachodzi jeśli rozmiar zadania (i czas obliczeń sekwencyjnych) rośnie liniowo wraz z liczbą procesorów wystarcza, aby narzut całkowity także rósł liniowo, czyli aby narzut na jeden procesor pozostawał stały Krzysztof Banaś Obliczenia Wysokiej Wydajności 9
Skalowalność programów Miary wydajności obliczeń równoległych do wykazania, że obliczenia są liniowo skalowalne wystarcza spełnienie jednego z warunków: stałego czasu rozwiązania zadania p krotnie większego na p razy większej liczbie procesorów stałego narzutu wykonania równoległego na jeden procesor dla zadań o rozmiarze rosnącym liniowo wraz z liczbą procesorów liniowej funkcji izo efektywności liniowego przyspieszenia skalowanego obliczeń niewielkie odstępstwa od powyższych warunków charakteryzują programy dobrze skalowalne duże odstępstwa charakteryzują programy nieskalowalne (niespełniające kryterium skalowalności) i źle skalowalne (formalnie spełniające kryterium skalowalności, ale dla silnie rosnących funkcji rozmiaru zadania w zależności od liczby procesorów) Krzysztof Banaś Obliczenia Wysokiej Wydajności 10
Skalowalność obliczeń Skalowalność jest kluczowym pojęciem dla równoległych obliczeń wysokiej wydajności W praktyce nie istnieją programy dające się idealnie zrównoleglić (o liniowym przyspieszeniu), natomiast istnieją programy dobrze skalowalne (o liniowym przyspieszeniu skalowanym) Wydajność przetwarzania (różnie definiowana w różnych dziedzinach zastosowań) daje się często ustalić na podstawie analizy skalowalności W dziedzinie obliczeń wysokiej wydajności (HPC): wydajność = liczba_operacji / czas, co często daje się przybliżyć jako: przyspieszenie*czas_wykonania_1_operacji Krzysztof Banaś Obliczenia Wysokiej Wydajności 11
Przykład Analizując algorytmy równoległe będziemy często posługiwali się prostym modelem wydajności, w którym zakłada się, że: Pewne operacje w algorytmach są dominujące i całkowity czas realizacji tych operacji dobrze przybliża całkowity czas obliczeń na pojedynczym procesorze Wszystkie operacje dominujące zajmują tyle samo czasu Czas ten oznaczamy przez t c Jednostką, w której wyrażamy t c może być jednostka czasu lub np. liczba taktów zegara (to ostatnie ułatwia dostosowanie analizy do konkretnego sprzętu) Poza t c uwzględnia się tylko dwa inne parametry sprzętu charakteryzujące czas komunikacji t s i t w Dające się zrównoleglić obliczenia są idealnie zrównoważone Krzysztof Banaś Obliczenia Wysokiej Wydajności 12
Przykład Obliczenie normy wektora o rozmiarze N N operacji mnożenia i dodawania idealne zrównoleglenie Konieczność uzyskania globalnej sumy pomijalny czas obliczeń, istotny czas komunikacji Algorytm naiwny wszystkie procesory przesyłają swoje sumy częściowe do wybranego procesora Czas realizacji zadania: 2*N*t c /p + p*(t s +8*t w ) Analiza uwzględniająca: przyspieszenie, efektywność, przyspieszenie skalowane, efektywność skalowaną, funkcję izoefektywności, ograniczenia pamięciowe Krzysztof Banaś Obliczenia Wysokiej Wydajności 13
Przykład Krzysztof Banaś Obliczenia Wysokiej Wydajności 14
Przykład Krzysztof Banaś Obliczenia Wysokiej Wydajności 15
Optymalizacja programów równoległych Minimalizacja czasu wykonania programów równoległych (czyli redukcja narzutu równoległego) może zostać osiągnięta przez realizację m.in. następujących kroków: zmniejszenie liczby przesyłanych danych zmniejszenie liczby wymienianych komunikatów (zwiększenie ziarnistości obliczeń) unikanie przepełnienia sieci zmniejszenie liczby dodatkowych operacji (często w sprzeczności ze zmniejszeniem rozmiaru przesyłanych danych) równoważenie obciążenia nakładanie obliczeń i komunikacji optymalne wykorzystanie hierarchii pamięci optymalną realizację obliczeń sekwencyjnych Krzysztof Banaś Obliczenia Wysokiej Wydajności 16