Obliczenia rozproszone z wykorzystaniem Zarys wst u do podstaw :) Zak lad Metod Obliczeniowych Chemii UJ 8 sierpnia 2005
1 e konkretniej Jak szybko, i czemu tak wolno? 2 e szczegó lów 3 Dyspozytor Macierz g estości Obliczenia rozproszone z wykorzystaniem
Co? e konkretniej Jak szybko, i czemu tak wolno? Technika programowania pozwalajaca na równoczesne wykonywanie operacji poprzez jeden lub wiecej komputerów Programowanie rozproszone Rodzaj programowania równoleg lego, wyróżniajacy sie tym że procesory nie maja wspólnej pamieci operacyjnej Obliczenia rozproszone z wykorzystaniem
Po co? e konkretniej Jak szybko, i czemu tak wolno? Żeby przyspieszyć obliczenia oczywiście! Ale też żeby by lo taniej Obliczenia rozproszone z wykorzystaniem
Jak? e konkretniej Jak szybko, i czemu tak wolno? Weź kop e procesorów Po l acz je jakoś I weź kogoś kto zrównolegli kod Obliczenia rozproszone z wykorzystaniem
Architektura e konkretniej Jak szybko, i czemu tak wolno? Jest tego sporo... Systemy ze wspólna pamieci a Symmetric Multiprocessing (SMP) Non-Uniform Memory Architecture (NUMA) Klastry Inne rozwiazania (w tym hybrydowe) Ale... My si e zajmiemy klastrami To samo podejście dzia la na NUMA Na SMP w laściwie też, ale nie jest optymalne Obliczenia rozproszone z wykorzystaniem
Model programowy e konkretniej Jak szybko, i czemu tak wolno? Tak w ogóle Możliwości jest sporo My zajmiemy sie tylko jedna SPMD Single Program Multiple Data (SPMD) Wszystkie procesory wykonuja ten sam program, ale każdy z nich na w lasnych danych. Obliczenia rozproszone z wykorzystaniem
SPMD I e konkretniej Jak szybko, i czemu tak wolno? Obliczenia rozproszone z wykorzystaniem
SPMD II e konkretniej Jak szybko, i czemu tak wolno? 1 Bloki szeregowe wykonywane niezależnie przez każdy w eze l 2 W blokach równoleg lych każdy w eze l wykonuje jedynie cz eść obliczeń 3 W ilogu bloku równoleg lego nast uje redukcja Obliczenia rozproszone z wykorzystaniem
Marzenia a rzeczywistość e konkretniej Jak szybko, i czemu tak wolno? Uruchamiajac obliczenia na n procesorach, chcielibyśmy żeby by ly wykonane n razy szybciej. Niestety, rzadko kiedy tak jest. Czasami zwi ekszenie n może spowodować wyd lużenie obliczeń! Obliczenia rozproszone z wykorzystaniem
Prawo Amdahla e konkretniej Jak szybko, i czemu tak wolno? Przyspieszenie dzia lania programu wynikajace z jego zrównoleglenia wynosi co najwyżej I = ( f + 1 f ) 1 n gdzie f to szeregowa cz eść obliczeń a n to liczba procesorów. Obliczenia rozproszone z wykorzystaniem
A poza tym... e konkretniej Jak szybko, i czemu tak wolno? Z le wiadomości Narzut na komunikacj e Nieoptymalny podzia l problemu Ale jest też dobra Hypercache Obliczenia rozproszone z wykorzystaniem
Co? e szczegó lów Message Passing Interface () Specyfikacja biblioteki przesy lania komunikatów dla potrzeb programowania równoleg lego. Kluczowe cechy Otwarta specyfikacja Przenośność Wydajność Zestandaryzowane interfejsy dla FORTRANu, C, C++ Istniejace interfejsy do wielu innych jezyków De facto standard dla implementacji obliczeń rozproszonych. Obliczenia rozproszone z wykorzystaniem
Skad to wziać e szczegó lów Powszechnie używane, bezp latne implementacje: LAM/ (http://www.lam-mpi.org/) CH (http://www-unix.mcs.anl.gov/mpi/mpich/) Open (http://www.open-mpi.org/), chociaż na razie we wczesnej fazie rozwoju, powinno w nied lugim czasie do l aczyć do tej listy Komercyjne, wyspecjalizowane implementacje, czesto do l aczane przez producentów systemów wieloprocesorowych/rozproszonych Obliczenia rozproszone z wykorzystaniem
Co za dużo to niezdrowo e szczegó lów jest dość rozbudowane, dlatego ogranicz e si e do Tylko C++ Tylko funkcje najbardziej niezb edne w typowym kodzie kwantowochemicznym Obliczenia rozproszone z wykorzystaniem
e szczegó lów Najważniejsze to dobrze zaczać (i niegorzej skończyć) Funkcja 1 Init (int argc, char* argv []) musi być wywo lana przed wywo laniem jakiejkolwiek innej funkcji. Przed zakończeniem programu musi być wywo lana funkcja Finalize (), W przypadku b l edu uniemożliwiajacego poprawne zakończenie należy wywo lać funkcje Abort() 1 Uwaga: wszystkie klasy, funkcje, sta le i zmienne zdefiniowane sa w przestrzeni nazw (namespace). Obliczenia rozproszone z wykorzystaniem
Przyk lad e szczegó lów 1 #i n c l u d e < mpicxx. h> 2 3 i n t main ( i n t a r g c, char * argv [ ] ) 4 { 5 : : I n i t ( a r g c, argv ) ; 6 7 / /... 8 9 : : F i n a l i z e ( ) ; 10 } Obliczenia rozproszone z wykorzystaniem
Komunikatory e szczegó lów Komunikator to podstawowe pojecie w. Komunikator l aczy grupe procesów, umożliwiajac im wymiane danych i synchronizacje. Istnieja różne rodzaje komunikatorów realizujace różne typy i topologie po l aczeń. My bedziemy sie pos lugiwać tylko jednym predefiniowanym komunikatorem, COMM WORLD, l acz acym wszystkie procesy. Obliczenia rozproszone z wykorzystaniem
Podstawowe funkcje e szczegó lów Informacje o środowisku Comm::Get size() zwraca liczb e procesów Comm::Get rank() zwraca numer procesu (od 0 do Comm::Get size() 1) Redukcja Allreduce (void* operand, void* result, int count, Datatype datatype, Op op) powoduje wykonanie operacji na wszystkich wynikach cz eściowych wskazywanych przez operand; wynik jest umieszczany pod adresem wskazywanym przez result Obliczenia rozproszone z wykorzystaniem
Interfejs dyspozytora niedoidy Dyspozytor Macierz g estości 1 c l a s s D i s p a t c h e r : boost : : noncopyable { 2 p u b l i c : 3 typedef 4 s t d : : p a i r<unsigned long, unsigned long > Range ; 5 6 typedef boost : : o p t i o n a l<range> T a s k I n f o ; 7 8 v i r t u a l D i s p a t c h e r ( ) { } 9 10 v i r t u a l T a s k I n f o g e t t a s k ( ) = 0 ; 11 } ; Obliczenia rozproszone z wykorzystaniem
Prosty dyspozytor - interfejs Dyspozytor Macierz g estości 1 c l a s s S t a t i c D i s p a t c h e r : p u b l i c D i s p a t c h e r { 2 p u b l i c : 3 S t a t i c D i s p a t c h e r ( unsigned long n ) ; 4 5 T a s k I n f o g e t t a s k ( ) ; 6 7 p r i v a t e : 8 unsigned long m n0 ; 9 unsigned long m n1 ; 10 } ; Obliczenia rozproszone z wykorzystaniem
Dyspozytor Macierz g estości Prosty dyspozytor - implementacja I 1 S t a t i c D i s p a t c h e r : : S t a t i c D i s p a t c h e r ( unsigned long n ) 2 { 3 const unsigned rank = : :COMM WORLD. Get rank ( ) ; 4 const unsigned s i z e = : :COMM WORLD. G e t s i z e ( ) ; 5 const unsigned long k = n / s i z e ; 6 const unsigned long l = n % s i z e ; 7 i f ( rank < l ) { 8 m n0 = rank * ( k + 1 ) ; 9 m n1 = ( rank + 1 ) * ( k + 1 ) ; 10 } e l s e { 11 m n0 = rank * k + l ; 12 m n1 = ( rank + 1 ) * k + l ; 13 } 14 } Obliczenia rozproszone z wykorzystaniem
Dyspozytor Macierz g estości Prosty dyspozytor - implementacja II 1 D i s p a t c h e r : : T a s k I n f o S t a t i c D i s p a t c h e r : : g e t t a s k ( ) 2 { 3 i f ( m n1 == 0) 4 return T a s k I n f o ( ) ; 5 6 const Range t a s k ( m n0, m n1 ) ; 7 m n0 = 0 ; 8 m n1 = 0 ; 9 10 return t a s k ; 11 } Obliczenia rozproszone z wykorzystaniem
Prosty dyspozytor - uwagi Dyspozytor Macierz g estości Naiwny algorytm Można próbować liej, biorac wagi oparte na wzglednej szybkości wez lów Albo przydzielać zadania dynamicznie Obliczenia rozproszone z wykorzystaniem
Dyspozytor Macierz g estości Macierz g estości - wersja szeregowa 1 f o r ( unsigned i = 0 ; i < n; ++ i ) 2 f o r ( unsigned k = 0 ; k < n; ++k ) 3 f o r ( unsigned l = 0 ; l <= k; ++ l ) 4 P( k, l ) += occ ( i ) * C( k, i ) * C( l, i ) ; 5 6 return P ; Obliczenia rozproszone z wykorzystaniem
Dyspozytor Macierz g estości Macierz gestości - wersja równoleg la - obliczenia czastkowe 1 { 2 s t d : : a u t o p t r<d i s p a t c h e r > d = d i s p a t c h e r ( n ) ; 3 4 while ( D i s p a t c h e r : : T a s k I n f o t a s k i n f o = 5 d >b e g i n t a s k ( ) ) { 6 f o r ( unsigned i = t a s k i n f o >f i r s t ; 7 i < t a s k i n f o >second ; ++ i ) 8 f o r ( unsigned k = 0 ; k < n; ++k ) 9 f o r ( unsigned l = 0 ; l <= k; ++ l ) 10 P( k, l ) += 11 occ ( i ) * C( k, i ) * C( l, i ) ; 12 } 13 } Obliczenia rozproszone z wykorzystaniem
Dyspozytor Macierz g estości Macierz g estości - wersja równoleg la - redukcja 1 u b l a s : : s y m m e t r i c m a t r i x<double> reduced P = 2 u b l a s : : z e r o m a t r i x<double>(n ) ; 3 4 : :COMM WORLD. A l l r e d u c e (P. data ( ). b e g i n ( ), 5 reduced P. data ( ). b e g i n ( ), 6 ( n * ( n + 1 ) ) / 2, 7 : : DOUBLE, : : SUM) ; 8 9 return reduced P ; Obliczenia rozproszone z wykorzystaniem