ORR W7

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Programowanie w modelu przesyłania 

komunikatów – specyfikacja MPI

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Model przesyłania komunikatów

Prostota modelu

wzbogacenie programu o wywołania procedur wysyłania (send) 

i odbierania (receive) komunikatów (z drobnym dodatkiem 

procedur inicjujących środowisko i zarządzających nim)

Uniwersalność modelu

dostosowanie zarówno do komputerów wieloprocesorowych bez 

pamięci wspólnej, jak i do komputerów z pamięcią wspólną, jak 

też do sieci i klastrów stacji roboczych i komputerów osobistych

Wysoka wydajność i skalowalność obliczeń

narzuty na wykonanie równoległe nie są związane z 

zarządzaniem środowiskiem obliczeniowym, ale z realizacją 

konkretnych algorytmów

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Model przesyłania komunikatów

Paradygmat modelu – jawność procesu komunikacji:

wysyłanie komunikatu:

send( cel, identyfikator, dane, typ, rozmiar )

odbieranie komunikatu:

receive( źródło, identyfikator, dane, typ, rozmiar )

cel 

i

 źródło

 – definiowane w ramach przyjętej konwencji

identyfikator 

– związany z konkretnym komunikatem lub 

typem komunikatów (ułatwia sterowanie procesami 

przesyłania wielu komunikatów)

dane

 – treść komunikatu

typ, rozmiar

 – charakterystyki przesyłanego komunikatu

dwa podstawowe rodzaje operacji – blokujące i nieblokujące

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Środowisko przesyłania 

komunikatów MPI

Interfejs programowania definiujący powiązania z językami 

C, C++, Fortran

Standaryzacja (de facto) i rozszerzenie wcześniejszych 

rozwiązań dla programowania z przesyłaniem komunikatów 

(PVM, P4, Chameleon, Express, Linda) w celu uzyskania:

przenośności programów równoległych

kompletności interfejsu

wysokiej wydajności obliczeń

łatwości programowania równoległego

Opracowany w latach: 1992­95 MPI­1 i 1995­97 MPI­2

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Środowisko przesyłania 

komunikatów MPI

Podstawowe cechy:

niezależność od architektury systemu komputerowego – oparcie na 

pojęciu procesu

model programowania MPMD lub SPMD dla maszyn MIMD 

wielość trybów i sposobów realizacji komunikacji dwupunktowej

rozbudowany zbiór operacji zbiorowych

możliwość definiowania topologii połączeń

definiowane własnych typów danych

ponad 100 funkcji (ale tylko 6 podstawowych)

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Środowisko przesyłania 

komunikatów MPI

Elementy pominięte:

jawne operacje z użyciem pamięci wspólnej

jawne wsparcie wątków

dalej idąca współpraca z systemem operacyjnym:

obsługa przerwań

zdalne wykonanie

aktywne komunikaty

zaawansowana obsługa błędów

założeniem pierwotnym jest, że komunikat wysłany jest zawsze 

prawidłowo przyjęty

implementacje mogą definiować obsługę błędów

narzędzia tworzenia oprogramowania

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Środowisko przesyłania 

komunikatów MPI

Podstawowe części składowe:

procedury przesyłania komunikatów i sterowania procesami (plik 

nagłówkowy 

mpi.h

)

argumenty procedur i wartości zwracane:

predefiniowane elementarne typy danych

nieprzenikalne typy danych, obiekty nieprzenikalne i uchwyty 

do takich obiektów

predefiniowane uchwyty do wybranych zmiennych typów 

nieprzenikalnych (np. komunikatory, topologie)

nazwane stałe całkowite (specjalne wartości powrotne funkcji, 

stany, stałe określające symbole wieloznaczne – dżokery)

typy do wyboru (w C ­ 

(void*)

)

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Środowisko przesyłania 

komunikatów MPI

Podstawowe pojęcia:

komunikator – grupa procesów wyróżniona ze względu na 

realizację wymiany komunikatów (początkowo wszystkie 

uruchomione pod MPI procesy należą do wyróżnionego 

komunikatora MPI_COMM_WORLD, następne komunikatory 

można tworzyć za pomocą odpowiednich procedur)

ranga procesu – kolejny numer przydzielony procesowi w ramach 

komunikatora

obiekty nieprzenikalne (opaque objects obiekty o nieznanej 

strukturze i implementacji, ale znanym sposobie wykorzystania z 

użyciem procedur, których argumentami są uchwyty do obiektów

dżokery (wildcards) – identyfikatory zastępujące wiele możliwych 

wartości

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Środowisko przesyłania 

komunikatów MPI

Podstawowe procedury:

int MPI_Init( int *pargc, char ***pargv) –

 inicjacja środowiska, 

wywoływana jako pierwsza procedura MPI

int MPI_Comm_size(MPI_Comm comm, int *psize)

 – podanie rozmiaru 

komunikatora (liczby procesów tworzących komunikator), 

comm

 

jest uchwytem do nieprzenikalnego obiektu, często będziemy 

zamiennie mowić o obiekcie nieprzenikalnym i uchwycie do niego

int MPI_Comm_rank(MPI_Comm comm, int *prank)

 – podanie rangi 

procesu wywołującego w ramach komunikatora 

comm

 

0 <= *prank < *psize

 )

int MPI_Finalize(void)

 – zakończenie pracy środowiska MPI, najlepiej 

jako ostatnia wywoływana procedura programu

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Środowisko przesyłania 

komunikatów MPI – przykład 1

#include “

mpi.h

int main( int argc, char** argv ){

int rank, size, source, dest, tag, i;

MPI_Init

( &argc, &argv );

MPI_Comm_rank

MPI_COMM_WORLD

, &rank );

MPI_Comm_size

MPI_COMM_WORLD

, &size );

printf(“Mój numer %d, w grupie %d procesów\n”, rank, size);

MPI_Finalize

();

return(0);

}

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Środowisko przesyłania 

komunikatów MPI

Procedury dwupunktowego przesyłania komunikatów:

MPI gwarantuje postęp przy realizacji przesłania (po 

prawidłowym zainicjowaniu pary send­receive co najmniej jedna z 

nich zostaje ukończona)

MPI gwarantuje zachowanie porządku przyjmowania (w 

kolejności wysyłania) dla komunikatów z tego samego źródła, o 

tym samym identyfikatorze i w ramach tego samego komunikatora

MPI nie gwarantuje uczciwości przy odbieraniu komunikatów z 

różnych źródeł

W trakcie realizacji procedur przesyłania może wystąpić błąd 

związany z przekroczeniem limitów dostępnych zasobów 

systemowych

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Środowisko przesyłania 

komunikatów MPI

Procedury dwupunktowego przesyłania komunikatów:

dwa rodzaje procedur: blokujące i nieblokujące

możliwość określenia szczegółowego trybu przesyłania 

komunikatu

parametry procedur:

wskaźnik do początku komunikatu (adres w pamięci)

liczba zmiennych zadanego typu w komunikacie

typ zmiennych określający mapę w pamięci, podającą 

rozmieszczenie zmiennych typów elementarnych 

składających się na zmienną zadanego typu

cel lub źródło (zależnie czy wysyłanie czy odbieranie)

identyfikator komunikatu lub typu komunikatu

identyfikator komunikatora

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Środowisko przesyłania 

komunikatów MPI

Procedury dwupunktowego przesyłania komunikatów:

Przesyłanie blokujące – procedura nie przekazuje sterowania dalej dopóki 

operacje komunikacji nie zostaną ukończone i nie będzie można 

bezpiecznie wykorzystywać ponownie buforów (zmiennych) będących 

argumentami operacji

int MPI_Send(void* buf, int count, MPI_Datatype dtype, int dest, int tag,  

MPI_Comm comm)

 – wysyłanie blokujące

int MPI_Recv(void *buf, int count, MPI_Datatype dtype, int src, int tag, 

MPI_Comm comm, MPI_Status *stat) 

– odbieranie blokujące

Typ danych przy odbiorze nie musi być taki sam jak przy wysyłaniu, 

należy tylko zarezerwować odpowiedni rozmiar pamięci i umieć odczytać 

komunikat (zmienne typów elementarnych) – rzeczywisty rozmiar 

przesłanego komunikatu można odczytać później (

MPI_Get_count

)

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Środowisko przesyłania 

komunikatów MPI – przykład 2

#include “

mpi.h

int main( int argc, char** argv ){ int rank, ranksent, size, source, dest, tag, i; 

MPI_Status

 status;

MPI_Init

( &argc, &argv );

MPI_Comm_rank

MPI_COMM_WORLD

, &rank ); 

MPI_Comm_size

MPI_COMM_WORLD

, &size );

if( rank != 0 ){ dest=0; tag=0; 

MPI_Send

( &rank, 1, 

MPI_INT

, dest, tag, 

MPI_COMM_WORLD

 );

} else {

for( i=1; i<size; i++ ) { 

MPI_Recv

( &ranksent, 1, 

MPI_INT

MPI_ANY_SOURCE

MPI_ANY_TAG

MPI_COMM_WORLD

, &status );

printf(“Dane od procesu o randze: %d (%d)\n”, ranksent, status.

MPI_SOURCE

 );}

}

MPI_Finalize

(); return(0); }

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Środowisko przesyłania 

komunikatów MPI – tryby komunikacji

Dla każdego z rodzajów wysyłania komunikatów 

(blokującego i nieblokującego) można wybrać albo tryb 

standardowy (dotychczas omawiane procedury), w którym 

implementacja MPI decyduje o szczegółach realizacji 

przesłania komunikatu, albo jeden ze specyficznych 

trybów, w którym programista przejmuje większą kontrolę 

nad procesem komunikacji

Wybór trybu specyficznego oznacza określenie możliwych 

dodatkowych mechanizmów przesyłania oraz definicję 

zakończenia operacji wysyłania (co z kolei wskazuje na 

możliwość ponownego użycia bufora danych

background image

Krzysztof Banaś

Obliczenia równoległe i rozproszone.

Środowisko przesyłania 

komunikatów MPI – tryby komunikacji

Tryby komunikacji

buforowany ( 

MPI_Bsend, MPI_Ibsend 

) – istnieje jawnie określony 

bufor używany do przesyłania komunikatów; wysyłanie jest 

zakończone w momencie skopiowania komunikatu do bufora

synchroniczny ( 

MPI_Ssend, MPI_Issend 

) – wysyłanie jest 

zakończone po otrzymaniu informacji, że została wywołana 

procedura odbierania

gotowości ( 

MPI_Rsend, MPI_Irsend 

) – system gwarantuje, że 

procedura odbierania jest gotowa, tak więc wysyłanie jest 

kończone natychmiast


Wyszukiwarka

Podobne podstrony:
W7 zarządzanie zapasami
W7 Mosty
W7 IMMUNOLOGIA INFEKCJI
spoleczna w7
W7 WZNACNIACZ OPERACYJNY RZECZYWISTY
PRI W7 UML
FiR Matma w7 2011
FM zaocz W7 8 pp
Systemy Bezprzewodowe W7
IB w7
w7 kwestie spol bieda 2

więcej podobnych podstron