Modele programowania równoległego. Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak dla PR PP

Podobne dokumenty
Modele programowania równoległego. Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak

Programowanie Równoległe Wykład 5. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Tryby komunikacji między procesami w standardzie Message Passing Interface. Piotr Stasiak Krzysztof Materla

Programowanie Równoległe Wykład 4. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie w modelu przesyłania komunikatów specyfikacja MPI. Krzysztof Banaś Obliczenia równoległe 1

Programowanie w standardzie MPI

Operacje grupowego przesyłania komunikatów. Krzysztof Banaś Obliczenia równoległe 1

5. Model komunikujących się procesów, komunikaty

Programowanie współbieżne... (4) Andrzej Baran 2010/11

Message Passing Interface

Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1

Operacje grupowego przesyłania komunikatów

Operacje kolektywne MPI

Architektura sieci połączeń między procesorami, sterowanie komunikacjami, biblioteki komunikacyjne

Programowanie Równoległe Wykład 5. MPI - Message Passing Interface (część 3) Maciej Matyka Instytut Fizyki Teoretycznej

Optymalizacja komunikacji w systemach rozproszonych i równoległych

Weryfikacja oprogramowania, korzystajacego z MPI

Miary Wydajności. Efektywność programu równoległego (E) jest definiowana jako stosunek przyśpieszenia do liczby procesorów

51. Metody komunikacji nieblokującej.

Programowanie współbieżne i rozproszone

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

Jak wygląda praca na klastrze

Programowanie Współbieżne

Klient-Serwer Komunikacja przy pomocy gniazd

Wprowadzenie do MPI. Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1

Kolejne funkcje MPI 1

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Zadania na zaliczenie przedmiotu Przetwarzanie równoległe Zebrał dla roku.ak. 2015/2016 Rafał Walkowiak,

Łagodne wprowadzenie do Message Passing Interface (MPI)

Mechanizmy pracy równoległej. Jarosław Kuchta

Architektury systemów równoległych

Obliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz


61 Topologie wirtualne

Programowanie współbieżne... (2)

Programowanie współbieżne... (12) Andrzej Baran 2010/11

IPC: Kolejki komunikatów

Wprowadzenie do MPI. Interdyscyplinarne Centrum Modelowania. Matematycznego i Komputerowego Uniwersytet Warszawski

Algorytmy i Struktury Danych

POZNA SUPERCOMPUTING AND NETWORKING. Wprowadzenie do MPI

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Programowanie współbieżne i rozproszone

Rozszerzenia MPI-2 1

Wprowadzenie do MPI. Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski

Wywoływanie procedur zdalnych

Wprowadzenie. Dariusz Wawrzyniak 1

Interfejs MPI. Maciej Kasperski, Rafał Kozik. 16 kwietnia 2008

Wywoływanie procedur zdalnych

Pytania przykładowe (z ubiegłych lat) na zaliczenie przedmiotu Przetwarzanie równoległe Przygotował Rafał Walkowiak Poznań 3.01.

Aplikacja Sieciowa wątki po stronie klienta

Wywoływanie procedur zdalnych

Wprowadzenie do programowania współbieżnego

Programowanie współbieżne Wykład 12 MPI c.d. Rafał Skinderowicz

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

ANALIZA EFEKTYWNOŚCI MNOŻENIA MACIERZY W SYSTEMACH Z PAMIĘCIĄ WSPÓŁDZIELONĄ

Zdalne wywoływanie procedur RPC

Zdalne wywoływanie procedur RPC

4. Procesy pojęcia podstawowe

4. Procesy pojęcia podstawowe

Programowanie Równoległe Wykład 6. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

EFEKTYWNOŚĆ MNOŻENIA MACIERZY W SYSTEMACH Z PAMIĘCIĄ WSPÓŁDZIELONĄ

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1

Zdalne wywoływanie procedur RPC 27. października Dariusz Wawrzyniak (IIPP) 1

Programowanie współbieżne Wykład 11 Wprowdzenie do MPI. Rafał Skinderowicz

Zdalne wywoływanie procedur RPC 27. października 2010

Middleware wprowadzenie października 2010

Inżynieria oprogramowania

Middleware wprowadzenie października Dariusz Wawrzyniak (IIPP) 1

Programowanie współbieżne... (5)

ARP Address Resolution Protocol (RFC 826)

Nowoczesne technologie przetwarzania informacji

4. Procesy pojęcia podstawowe

Równoległość i współbieżność

Równoległość i współbieżność

Programownie współbieżne i rozproszone Jędrzej Ułasiewicz 1. Komunikacja. Model procesów komunikujących się poprzez pamięć dzieloną

Systemy rozproszone. Państwowa Wyższa Szkoła Zawodowa w Chełmie. ** Instytut Fizyki Uniwersytet Marii Curie-Skłodowskiej w Lublinie

PHP: bloki kodu, tablice, obiekty i formularze

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

Analiza efektywności przetwarzania współbieżnego. Wykład: Przetwarzanie Równoległe Politechnika Poznańska Rafał Walkowiak Grudzień 2015

ezwroty WebApi Dokumentacja techniczna

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Programowanie Urządzeń Mobilnych. Część II: Android. Wykład 2

Programowanie procesorów graficznych GPGPU

Języki i techniki programowania Ćwiczenia 2

Język C, tablice i funkcje (laboratorium, EE1-DI)

Analiza efektywności przetwarzania współbieżnego

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Programowanie współbieżne... (w13)

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Projektowanie algorytmów równoległych. Zbigniew Koza Wrocław 2012

Bloki anonimowe w PL/SQL

MATERIAŁY POMOCNICZE DO LABORATORIUM Z PRZETWARZANIA RÓWNOLEGŁEGO KWIECIEŃ 2018

Zarządzanie sieciami komputerowymi - wprowadzenie

Transkrypt:

Modele programowania równoległego Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak dla PR PP

MPP - Cechy charakterystyczne 1 Prywatna, wyłączna przestrzeń adresowa. Równoległość definiowana wprost przez programistę. Możliwość uzyskania wysokiej efektywności przetwarzania i skalowalności. Typowy model dla gron stacji roboczych i systemów wielo-komputerowych o niewspółdzielonej przestrzeni adresowej. Message-Passing Programming 2

MPP - Cechy charakterystyczne 2 Elementy danych należą wyłącznie do jednej przestrzeni adresowej dane rozdzielone wprost. Model wzmacnia naturalnie lokalność dostępu do danych. Dostęp do danych nielokalnych wymaga współpracy 2 procesów posiadającego dane i żądającego - konieczność zsynchronizowania procesów. Model łatwo implementowalny w różnych architekturach sprzętowych.

MPP - Struktura programów Asynchroniczne całkowita niezależność przetwarzania trudna analiza kodu ze względu na niedeterminizm powodowany nieokreśloną kolejnością operacji realizowanych współbieżnie. Luźno synchroniczne procesy wykonywane asynchronicznie, lecz grupy procesów synchronizują się co pewien czas dla zrealizowania interakcji. Okresowa synchronizacja pozwala łatwiej wnioskować o przebiegu przetwarzania na podstawie kodu. Ogólnie - różne programy dla różnych procesów SPMD jednakowy kod dla większości procesów, realizacja asynchroniczna bądź luźno-synchroniczna. 6/5/2019 Message-Passing Programming 4

Typy podstawowych operacji Send, Receive Send(void *sendbuf, int nelems, int dest) Receive(void *recvbuf, int nelems, int source) Proces0 Proces1 A=100; Send(&A,1,1); Receive(&A,1,0); printf( %d\n,a); A=0; Jaką wartość wyświetli Proces1? 100? 0? 6/5/2019 Message-Passing Programming 5

Blokujące operacje komunikacyjne wstrzymanie nadawcy i/lub odbiorcy Operacje niebuforowane Możliwe znaczne czasy oczekiwania na odbiorcę/nadawcę, który się spóźnia. Możliwe zakleszczenie przy jednakowej kolejności operacji wysłanie-później-odbiór (odwrotnie też) w ramach obu procesów - konieczna zmiana kolejności operacji np. w programie SPMD. 6/5/2019 Message-Passing Programming 6

Blokujące operacje komunikacyjne Operacje buforowane Niebezpieczeństwo przepełnienia buforów przy braku zsynchronizowanego odbioru danych. Możliwe zakleszczenie przy jednakowej kolejności operacji odbiór-później-wysłanie (tylko takiej kolejności) w ramach obu procesów - konieczna zmiana kolejności operacji np. w programie SPMD. 6/5/2019 Message-Passing Programming 7

Blokujące operacje komunikacyjne realizacje 1. Dane buforowane po stronie nadawcy i odbiorcy (realizacja bez udziału procesora ) nadawca kontynuuje pracę po przepisaniu danych do bufora, sprzęt kopiuje dane między buforami, odbiorca sprawdza zawartość bufora przy operacji odbioru i kontynuuje pracę po przepisaniu komunikatu do obszaru danych. 2. Dane buforowane po jednej stronie (realizuje procesor)- możliwe realizacje: proces nadawcy przerywany, dane kopiowane do zdalnego bufora odbiorcy (wznowienie procesu nadawcy), a następnie kopiowane z bufora do lokacji docelowej po zainicjowaniu operacji odbioru - proces nadawcy zapisuje dane do lokalnego bufora i jest kontynuowany, w momencie gdy odbiorca jest gotowy następuje przerwanie procesu nadawcy i bezpośrednie kopiowanie do lokacji docelowej.

Nie-blokujące operacje komunikacyjne Blokujące operacje komunikacyjne zapewniają stan komunikacji zgodny ze swoim znaczeniem - kosztem oczekiwania (bez buforów) lub kosztem obsługi buforów. Nie-blokujące operacje wspomagane operacją sprawdzenia statusu -?status? dla testowania stanu realizacji (ewentualnego stanu niezgodności znaczeniowej) zapoczątkowanej operacji komunikacji. Oczekiwanie na dostarczenie danych może być wykorzystane na przetwarzanie. 6/5/2019 Message-Passing Programming 9

Nie-blokujące operacje komunikacyjne Nie-blokujące komunikacje nie-buforowane niepoprawna modyfikacja obszaru danych nadawanych i niepoprawny odczyt danych wykorzystywanych przed zakończeniem transmisji. Wspomaganie sprzętowe komunikacji może całkowicie ukryć koszt komunikacji (czas) procesor liczy gdy dane się pojawią. Nie-blokujące komunikacje buforowane wspomagane sprzętowo redukcja czasu niedostępności obszarów danych tylko na czas kopiowania danych tylko z/do buforów realizowane na żądanie procesu (realizacja przesłania).

Praktyczne realizacje Message Passing Interface (MPI) Parallel Virtual Machine (PVM) Implementują blokujące i nie-blokujące operacje komunikacyjne. Blokujące łatwiejsze i bezpieczniejsze programowanie. Nie-blokujące wyższa efektywność poprzez maskowanie kosztów komunikacji, lecz w przypadku błędu niebezpieczeństwo niepoprawnego dostępu do danych komunikujących się procesów. 6/5/2019 Message-Passing Programming 11

MPI Standardowa biblioteka dla modelu programowania równoległego z przesyłaniem komunikatów. http://www.mpi-forum.org/docs/docs.html Minimalny zbiór funkcji to: MPI_Init inicjalizacja MPI MPI_Finalize zakończenie MPI MPI_Comm_size uzyskanie liczby procesów MPI_Comm_rank uzyskanie własnego identyfikatora procesu MPI_Send, MPI_Recv nadanie, odbiór komunikatu 6/5/2019 Message-Passing Programming 12

Cechy MPI Funkcje MPI_Init i MPI_Finalize muszą być wywołane przez wszystkie procesy. Podział procesów na domeny komunikacyjne komunikator mogących się komunikować procesów. Podstawowa domena komunikacyjna to MPI_COMM_WORLD Adresowanie poprzez identyfikator i nazwę domeny. Możliwość etykietowania typu komunikatu i odbierania komunikatu o określonym lub nieokreślonym typie. Możliwość odbierania komunikatu z dowolnego źródła w określonej domenie komunikacyjnej. 6/5/2019 Message-Passing Programming 13

MPI komunikacja między parą procesów - blokująca Podstawowe: funkcja odbioru blokująca, funkcja nadawania blokująca lub nie w zależności od wersji; zawsze buforowana z bezpiecznym dostępem do obszaru danych nadawanych. Możliwość zakleszczenia przy cyklicznych transmisjach przy wersji blokującej nadawania konieczność zapewnienia komplementarnej kolejności operacji nadawania i odbioru. Możliwość nadawania i odbioru w ramach jednej operacji MPI_Sendrecv.

MPI komunikacja między parą procesów - nieblokująca MPI_Isend, MPI_Irecv Konieczność sprawdzenia stanu realizacji operacji czy dane skopiowano z/do bufora przed rozpoczęciem korzystania z bufora/danych. Zmienna typu MPI_Request jest parametrem wywołania (zwraca ID przesłania). MPI_Test sprawdzanie statusu przy użyciu obiektu zapytania MPI_Request MPI_Wait oczekiwanie na zakończenie operacji przy obiekcie MPI_Request 6/5/2019 Message-Passing Programming 15

Operacje kolektywne MPI posiada w zestawie funkcji operacje kolektywne realizowane równolegle przez procesy na danych rozproszonych w ich pamięciach lokalnych. Wszystkie uczestniczące w operacji procesy wywołują ją. Komunikacja niezbędna do zrealizowania operacji jest realizowana niewprost (bez specyfikacji przez programistę). Wszystkie procesy komunikatora wywołują funkcję operacji kolektywnej.

MPI_Bcast( Komunikacja kolektywna rozgłaszanie void* wiadomość, int liczba_danych, MPI_Datatype, int identyf_źródła, MPI_Comm)- rozsyłanie tej samej informacji Message-Passing Programming 17

Komunikacja kolektywna redukcja int MPI_Reduce ( void* dane, void* wyniki, int liczba_danych, MPI_Datatype typ_danych, MPI_op operacja, int korzeń, MPI_Comm komunikator) Dane i wyniki umieszczone w ciągłych obszarach Możliwość określenia ilości zbiorów obiektów podlegających redukcji liczba_danych. Typy używanych danych zależne od operacji i zastosowania. WERSJA: Funkcja MPI_Allreduce wyniki operacji są rozgłaszane do wszystkich procesów nie ma korzenia. Message-Passing Programming 18

Redukcja wszyscy-do-jednego: połączenie elementów lokalnych za pomocą podanej operacji i przesłanie wyniku do podanego odbiorcy (lub wszystkich) - operacje: minimum; maksimum; suma; iloczyn; log/bitowe and, or, xor; pozycja minimum, pozycja maksimum; OPERACJA NA ZEBRANYCH DANYCH Message-Passing Programming 19

Tworzenie komunikatorów operacja kolektywna MPI_Comm_split podział komunikatora Int MPI_split ( MPI_comm istniejący_komunitkator, int klucz_podziału, int numer_procesu, MPI_Comm *nowy_komunikator) Wartość obiektu klucza procesu determinuje przynależność do tworzonego komunikatora. Tworzone są nowe komunikatory w liczbie równej liczbie różnych wartości klucza. Te procesy, które mają jednakowy klucz wchodzą w skład tego samego komunikatora z identyfikatorem numer_procesu. Każdy proces wywołuje funkcję, lecz może być wyłączony z tworzonych komunikatorów (specyficzna wartość klucza podziału). Message-Passing Programming 20

Inne funkcje kolektywne MPI_Gather odbieranie przez jeden proces danych z różnych procesów MPI_Allgather odbieranie przez wszystkie procesy danych z różnych procesów MPI_Scatter rozsyłanie różnych danych z jednego do wielu procesów MPI_Barrier(MPI_comm komunikator) wstrzymywanie przetwarzania do momentu osiągnięcia wywołania przez wszystkie wątki Message-Passing Programming 21

Przykład wykorzystania operacji kolektywnych dla sortowania n liczb z tablicy a[n] - nxn procesów Message-Passing Programming 22

sortowanie n liczb w tablicy a[n] nxn procesów i= id/n; j=id %N; index=0; // zmienne pomocnicze if (a[i]>a[j]) (a[i]==a[j] && (i>j))) w=1; else w=0; // porównanie pary liczb MPI_Comm_split(MPI_COMM_WORLD,i,j,&kom_wiersza); MPI_Reduce(&w,&index,1,MPI_INT,MPI_SUM,0,kom_wiersza); //na której pozycji jest moja liczba MPI_Comm_split(MPI_COMM_WORLD,j,index, &kom_kolumny); If (j==0) // wynik w kolumnie 0 procesie o id=0 w tym komunikatorze MPI_Gather(&a[i],1,MPI_FLOAT,wynik,1,MPI_FLOAT,0,kom_kolumny); // ustaw liczbę na właściwej pozycji 3412 - wyliczony jako suma w nr procesu w komunikatorze kolumny 0011 2 - liczba 3 jest większa od 2 innych (będzie na 2 pozycji licząc od 0) 1011 3 komunikator kolumny - zbieranie wynik w procesie 0 (2,0) 0000 0 1,2,3,4 0010 1 Message-Passing Programming 23

int MPI_Gather(const void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) sendbuf - starting address of send buffer (choice) sendcount - number of elements in send buffer (integer) sendtype - data type of send buffer elements (handle) recvcount - number of elements for any single receive (integer, significant only at root) recvtype - data type of recv buffer elements (significant only at root) (handle) root - rank of receiving process (integer) commcommunicator (handle) Message-Passing Programming 24