Obliczenia rozproszone z wykorzystaniem MPI

Transkrypt

Obliczenia rozproszone z wykorzystaniem MPI
Obliczenia rozproszone z wykorzystaniem MPI
Zarys wstepu
do podstaw :)
,
Grzegorz Mazur
Zaklad Metod Obliczeniowych Chemii UJ
8 sierpnia 2005
Plan
Programowanie równolegle
MPI
Przyklady
1
Programowanie równolegle
Wstep
,
Troche, konkretniej
Jak szybko, i czemu tak wolno?
2
MPI
Wstep
,
Troche, szczególów
3
Przyklady
Dyspozytor
Macierz gestości
,
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, konkretniej
Jak szybko, i czemu tak wolno?
Co?
Programowanie równolegle Technika programowania pozwalajaca
,
na równoczesne wykonywanie operacji poprzez jeden
lub wiecej
komputerów
,
Programowanie rozproszone Rodzaj programowania równoleglego,
wyróżniajacy
sie, tym że procesory nie maja, wspólnej
,
pamieci
operacyjnej
,
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, konkretniej
Jak szybko, i czemu tak wolno?
Po co?
Żeby przyspieszyć obliczenia oczywiście!
Ale też żeby bylo taniej
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, konkretniej
Jak szybko, i czemu tak wolno?
Jak?
Weź kope, procesorów
Polacz
, je jakoś
I weź kogoś kto zrównolegli kod
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, konkretniej
Jak szybko, i czemu tak wolno?
Architektura
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 sie, zajmiemy klastrami
To samo podejście dziala na NUMA
Na SMP wlaściwie też, ale nie jest optymalne
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, konkretniej
Jak szybko, i czemu tak wolno?
Model programowy
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 wlasnych danych.
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, konkretniej
Jak szybko, i czemu tak wolno?
SPMD I
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, konkretniej
Jak szybko, i czemu tak wolno?
SPMD II
1
Bloki szeregowe wykonywane niezależnie przez każdy weze
, l
2
W blokach równoleglych każdy weze
, l wykonuje jedynie cześć
,
obliczeń
3
W epilogu bloku równoleglego nastepuje
redukcja
,
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, konkretniej
Jak szybko, i czemu tak wolno?
Marzenia a rzeczywistość
Uruchamiajac
, obliczenia na n procesorach, chcielibyśmy żeby
byly wykonane n razy szybciej.
Niestety, rzadko kiedy tak jest.
Czasami zwiekszenie
n może spowodować wydlużenie obliczeń!
,
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, konkretniej
Jak szybko, i czemu tak wolno?
Prawo Amdahla
Przyspieszenie dzialania programu wynikajace
z jego
,
zrównoleglenia wynosi co najwyżej
I =
1−f
f +
n
−1
gdzie f to szeregowa cześć
obliczeń a n to liczba procesorów.
,
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, konkretniej
Jak szybko, i czemu tak wolno?
A poza tym...
Zle wiadomości
Narzut na komunikacje,
Nieoptymalny podzial problemu
Ale jest też dobra
Hypercache
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, szczególów
Co?
Message Passing Interface (MPI)
Specyfikacja biblioteki przesylania komunikatów dla potrzeb
programowania równoleglego.
Kluczowe cechy MPI
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.
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, szczególów
Skad
, to wziać
,
Powszechnie używane, bezplatne implementacje:
LAM/MPI (http://www.lam-mpi.org/)
MPICH (http://www-unix.mcs.anl.gov/mpi/mpich/)
OpenMPI (http://www.open-mpi.org/), chociaż na razie
we wczesnej fazie rozwoju, powinno w niedlugim czasie
dolaczyć
do tej listy
,
Komercyjne, wyspecjalizowane implementacje, czesto
,
dolaczane
przez producentów systemów
,
wieloprocesorowych/rozproszonych
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, szczególów
Co za dużo to niezdrowo
MPI jest dość rozbudowane, dlatego ogranicze, sie, do
Tylko C++
Tylko funkcje najbardziej niezbedne
w typowym kodzie
,
kwantowochemicznym
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, szczególów
Najważniejsze to dobrze zaczać
, (i niegorzej skończyć)
Funkcja1 Init (int argc , char* argv []) musi być wywolana
przed wywolaniem jakiejkolwiek innej funkcji MPI.
Przed zakończeniem programu musi być wywolana funkcja
Finalize (),
W przypadku bledu
uniemożliwiajacego
poprawne zakończenie
,
,
należy wywolać funkcje, Abort()
1
Uwaga: wszystkie klasy, funkcje, stale i zmienne zdefiniowane sa, w
przestrzeni nazw (namespace) MPI.
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, szczególów
Przyklad
1
2
3
4
5
6
7
8
9
10
#i n c l u d e < mpicxx . h>
i n t main ( i n t a r g c , char * a r g v [ ] )
{
MPI : : I n i t ( a r g c , a r g v ) ;
// ...
MPI : : F i n a l i z e ( ) ;
}
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, szczególów
Komunikatory
Komunikator to podstawowe pojecie
w MPI. Komunikator
,
laczy
grup
e
procesów,
umożliwiaj
ac
im
wymiane, danych
,
,
,
i synchronizacje.
,
Istnieja, różne rodzaje komunikatorów realizujace
różne typy
,
i topologie polaczeń.
,
My bedziemy
sie, poslugiwać tylko jednym predefiniowanym
,
komunikatorem, COMM WORLD, lacz
wszystkie procesy.
, acym
,
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Wstep
,
Troche, szczególów
Podstawowe funkcje
Informacje o środowisku
Comm::Get size()
zwraca liczbe, procesów
Comm::Get rank()
zwraca numer procesu (od 0 do Comm::Get size()−1)
Redukcja
Allreduce (void* operand, void* result ,
int count , MPI Datatype datatype, Op op)
powoduje wykonanie operacji na wszystkich wynikach cześciowych
,
wskazywanych przez operand; wynik jest umieszczany pod adresem
wskazywanym przez result
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Dyspozytor
Macierz gestości
,
Interfejs dyspozytora niedoidy
1
2
3
4
5
6
7
8
9
10
11
class Dispatcher : boost : : noncopyable {
public :
typedef
s t d : : p a i r<unsigned long , unsigned long > Range ;
t y p e d e f b o o s t : : o p t i o n a l<Range> T a s k I n f o ;
virtual ˜ Dispatcher () {}
virtual TaskInfo get task () = 0;
};
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Dyspozytor
Macierz gestości
,
Prosty dyspozytor - interfejs
1
2
3
4
5
6
7
8
9
10
class StaticDispatcher : public Dispatcher {
public :
S t a t i c D i s p a t c h e r ( unsigned long n ) ;
TaskInfo get task ( ) ;
private :
unsigned long m n0 ;
unsigned long m n1 ;
};
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Dyspozytor
Macierz gestości
,
Prosty dyspozytor - implementacja I
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 )
{
const unsigned r a n k = MPI : : COMM WORLD. G e t r a n k ( ) ;
const unsigned s i z e = MPI : : COMM WORLD. G e t s i z e ( ) ;
const unsigned long k = n / s i z e ;
const unsigned long l = n % s i z e ;
i f ( rank < l ) {
m n0 = r a n k * ( k + 1 ) ;
m n1 = ( r a n k + 1 ) * ( k + 1 ) ;
} else {
m n0 = r a n k * k + l ;
m n1 = ( r a n k + 1 ) * k + l ;
}
}
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Dyspozytor
Macierz gestości
,
Prosty dyspozytor - implementacja II
1
2
3
4
5
6
7
8
9
10
11
Dispatcher : : TaskInfo StaticDispatcher : : get task ()
{
i f ( m n1 == 0)
return TaskInfo ( ) ;
const Range t a s k ( m n0 , m n1 ) ;
m n0 = 0 ;
m n1 = 0 ;
return task ;
}
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Dyspozytor
Macierz gestości
,
Prosty dyspozytor - uwagi
Naiwny algorytm
Można próbować lepiej, biorac
, wagi oparte na wzglednej
,
szybkości wez
lów
,
Albo przydzielać zadania dynamicznie
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Dyspozytor
Macierz gestości
,
Macierz gestości
- wersja szeregowa
,
1
2
3
4
5
6
f o r ( unsigned i = 0 ; i < n; ++ i )
f o r ( unsigned k = 0 ; k < n; ++ k )
f o r ( unsigned l = 0 ; l <= k ; ++ l )
P( k , l ) += o c c ( i ) * C( k , i ) * C( l , i ) ;
return P;
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Dyspozytor
Macierz gestości
,
Macierz gestości
- wersja równolegla - obliczenia czastkowe
,
,
1
2
3
4
5
6
7
8
9
10
11
12
13
{
s t d : : a u t o p t r<D i s p a t c h e r > d
= dispatcher (n );
while ( Dispatcher : : TaskInfo t a s k i n f o =
d−>b e g i n t a s k ( ) ) {
f o r ( unsigned i = t a s k i n f o−> f i r s t ;
i < t a s k i n f o−>s e c o n d ; ++ i )
f o r ( unsigned k = 0 ; k < n; ++ k )
f o r ( unsigned l = 0 ; l <= k ; ++ l )
P( k , l ) +=
o c c ( i ) * C( k , i ) * C( l , i ) ;
}
}
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI
Plan
Programowanie równolegle
MPI
Przyklady
Dyspozytor
Macierz gestości
,
Macierz gestości
- wersja równolegla - redukcja
,
1
2
3
4
5
6
7
8
9
u b l a s : : s y m m e t r i c m a t r i x<double > r e d u c e d P =
u b l a s : : z e r o m a t r i x<double>(n ) ;
MPI : : COMM WORLD. A l l r e d u c e (P . d a t a ( ) . b e g i n ( ) ,
reduced P . data ( ) . begin ( ) ,
(n * ( n + 1)) / 2,
MPI : : DOUBLE , MPI : : SUM) ;
return reduced P ;
Grzegorz Mazur
Obliczenia rozproszone z wykorzystaniem MPI