51. Metody komunikacji nieblokującej.

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

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

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

Jak wygląda praca na klastrze

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

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

IPC: Kolejki komunikatów

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

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

Programowanie w standardzie MPI

Aplikacja Sieciowa wątki po stronie klienta

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

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

Weryfikacja oprogramowania, korzystajacego z MPI

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

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

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

Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:

S Instrukcje programowania instrukcje obsługi Ethernetu

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

Podstawy programowania skrót z wykładów:

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

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

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Języki i techniki programowania Ćwiczenia 2

Klient-Serwer Komunikacja przy pomocy gniazd

Tabela wewnętrzna - definicja

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Lab 9 Podstawy Programowania

Podstawy Programowania C++

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

Zaawansowane programowanie w C++ (PCP)

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Mechanizmy z grupy IPC

external Data Representation

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

Kolejne funkcje MPI 1

Szablony. Szablony funkcji

Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej.

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

Sun RPC/XDR. Dariusz Wawrzyniak 1

Programowanie w języku C++

Jak Windows zarządza pamięcią?

Programowanie w języku C++

ZASADY PROGRAMOWANIA KOMPUTERÓW

MATERIAŁY DO ZAJĘĆ II

Tablice, funkcje - wprowadzenie

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

Podstawy programowania w języku C++

Algorytmy i Struktury Danych. Anna Paszyńska

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

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

Szablony funkcji i szablony klas

Wskaźniki. Programowanie Proceduralne 1

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

Współbieżność w środowisku Java

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Działanie systemu operacyjnego

61 Topologie wirtualne

Operacje grupowego przesyłania komunikatów

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Sun RPC/XDR 10. listopada Dariusz Wawrzyniak (IIPP) 1

external Data Representation

Wskaźniki. Informatyka

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Egzamin z Podstaw informatyki i programowania 2007/2008

Zmienne i struktury dynamiczne

Szablony klas, zastosowanie szablonów w programach

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

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

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Język C++ zajęcia nr 2

Lekcja 5. Funkcje handlemessage() i initialize(), konstruktor i destruktor

Wskaźniki w C. Anna Gogolińska

Pomoc dla użytkowników systemu asix 6 i 7. Drajwer Bufor. Dok. Nr PLP6021 Wersja:

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści

Smarty PHP. Leksykon kieszonkowy

Opis protokołu RPC. Grzegorz Maj nr indeksu:

Wersja dokumentacji1.01. TeleToken API

Iteracyjny serwer TCP i aplikacja UDP

Procesy i wątki. Blok kontrolny procesu. Proces. Proces - elementy. Stan procesu

76.Struktura oprogramowania rozproszonego.

1. Proszę wejść na stronę: poczta.home.pl i zalogować się do nowej skrzynki za pomocą otrzymanych danych.

Działanie systemu operacyjnego

Rozdział 4 KLASY, OBIEKTY, METODY

Podstawy programowania w języku C++

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Działanie systemu operacyjnego

Tablice w argumentach funkcji. Tablicy nie są przekazywane po wartości Tablicy są przekazywane przez referencje lub po wskaźniku

Struktury Danych i Złożoność Obliczeniowa

Wstęp do wskaźników w języku ANSI C

Transkrypt:

51. Metody komunikacji nieblokującej. Funkcje nieblokujace różnia sie od wersji blokujacych przedrostkiem I (immediate) w nazwie oraz jednym dodatkowym argumentem: request, który jest używany do sprawdzenia, czy dana operacja została zakończona Wysyłanie nieblokujące Funkcja MPI Isend: (standardowa) int MPI Isend( void *buf, Funkcja MPI Ibsend: (buforowana) int MPI Ibsend( void *buf, Funkcja MPI Issend: (synchroniczna) int MPI Issend( void *buf, Funkcja MPI Irsend: (natychmiastowa) int MPI Irsend( void *buf,

Odbiór nieblokujący Funkcja MPI Irecv: nie ma argumentu MPI Status może odbierać także komunikaty wysyłane w spospób blokujący (i vice-versa) int MPI Irecv( void *buf, int source, Funkcja MPI Wait: pozwala czekać na zakończenie nieblokującej operacji(wysyłania, odbierania) wskazanej przez argument request pod adresem status wpisuje status zakończonej operacji po zakończeniu funkcja wpisuje pod adresem request wartość MPI REQUEST NULL int MPI Wait(MPI Request *request, MPI Status *status) Funkcja MPI Test: jeżeli operacja o uchwycie wskazywanym przez request skończyła się, to funkcja działa jak MPI Wait i dodatkowo pod adresem flag wpisuje wartość true jeżeli operacja się nie zakończyła, funkcja pod adresem flag wpisuje false i powraca int MPI Wait(MPI Request *request, int *flag, MPI Status *status) Jeśli funkcje MPI Wait i MPI Test sygnalizują zakończenie operacji, to następuje zwolnienie zajmowanych przez nią zasobów. Jawnie można zwolnić zasoby funkcją int MPI Request free( Funkcja MPI Waitany: czeka na zakończenie jakiejkolwiek z count operacji na uchwytach przkazanych w tablicy array of requests indeks (z array of requests) zakończonej operacji jest zapisywany pod adresem index status operacji zapisywany pod adresem status jeśli kilka operacji się zakończyło, funkcja wybiera tylko jedną z nich (dla pozostałych można wywołać ją ponownie) zasoby są zwalniane, a w odpowiednią pozycję tablicy array of requests wpisywane MPI REQUEST NULL int MPI Waitany( MPI Request *array of requests, int *index, MPI Status *status)

Pozostałe funkcje: Funkcja MPI Testany int MPI Testany( MPI Request *request, int *index, int *flag, MPI Status *status) Funkcja MPI Waitall int MPI Waitall( MPI Request *array of requests, MPI Status *array of statuses) Funkcja MPI Testall int MPI Testall( MPI Request *array of requests, int *flag, MPI Status *array of statuses) Anulowanie komunikacji: int MPI Cancel( pozwala przerwać oczekującą nieblokującą komunikację nie oznacza to zwolnienia zasobów (należy użyć MPI Request Free, MPI Wait lub MPI Test) użycie tej funkcji może znacznie spowalniać wykonanie, nie należy jej nadużywać sprawdzenie czy anulowanie się powiodło umożliwia funkcja MPI Test cancelled int MPI Test cancelled(mpi Status *status, int *flag) /jeśli flag=true to status jest nieokreślony/ Sprawdzanie rozmiaru bufora Funkcja MPI Iprobe /wersja nieblokująca (flag=true jeśli komunikat jest gotowy do odbioru)/ int MPI Iprobe( int source, MPI Comm comm, int *flag, MPI Status *status)

52. Komunikacja łączona. Operacja Send-Receive łączy w jednym wywołaniu wysyłanie komunikatu do określonego odbiorcy oraz odbiór od określonego nadawcy innego komunikatu. Użyteczna w cyklicznych operacjach przesunięć: odporna na powstawanie blokad(deadlock) Funkcja MPI Sendrecv: (blokująca) int MPI Sendrecv ( void *sendbuf, int sendcount, MPI Datatype sendtype, int sendtag, void *recvbuf, int recvcount, MPI Datatype recvtype, int source, int recvtag, MPI Status status) 53. Stosowanie typów pochodnych. Typ pochodny można zdefiniować za pomocą specjalnej funkcji (patrz następne pytania) Po zdefiniowaniu nowego typu należy go ustanowić (skompilować) przed użyciem typu do przesyłania komunikatów ale nie koniecznie przed definiowaniem kolejnych typów pochodnych Po zakończeniu używania typu należy zwolnić przydzielone mu zasoby 54. Mapowanie typów. Określa rozłożenie w pamięci obiektów tworzących dany typ danych Typemap - mapa typu - jest to sekwencja par: ( typ podstawowy, przesunięcie w pamieci/w bajtach/ ) typemap={(type 0, disp 0 ),..., (type n 1, disp n 1 )} Sygnatura typu - lista typów zawarytch w typemap: type signature={type 0,..., type n 1 } lb - dolne ograniczenie przesunięć: lb(typemap) = min j (disp j ) ub - górne ograniczenie przesunięć: ub(typemap) = max j (disp j +sizeof(type j )) extent - zakres (różnica ub-lb powiększona o wyrównanie): extent(typemap) = ub(typemap) - lb(typemap) + pad

55. Tworzenie typów pochodnych i ich rodzaje. Ustanowienie typu: int MPI Type commit (MPI Datatype *datatype) ustanawia wskazany typ do komunikacji ustanowiony typ może dalej służyć do tworzenia dalszych typów pochodnych system może dokonać kompilacji wewnętrznej reprezentacji typu pod kątem optymalizacji komunikacji go wykorzystujących Zwolnienie typu: int MPI Type free (MPI Datatype *datatype) zwalnia zasoby zaalokowane przez wskazny typ ustawia wskazanie datatype na MPI DATATYPE NULL zaległ komunikacje wykorzystujące typ będą dokończone normalnie (opoźnienie dealokacji) funkcja nie wpływa na stan typów pochodnych od datatype Rodzaje: 1.Tablica typów int MPI Type contiguous ( najprostszy konstruktor typu pochodnego argument count określa liczbę elementów w tablicy argumant oldtype określa typ składowy wynikowy identyfikator typu jest umieszczany pod adresem newtype przesunięcia powiększane o zakres typu składowego 2.Wektor int MPI Type vector ( int blocklength, int stride, definiuje typ składający się z count bloków, zawierających blocklength elementów typu oldtype każdy między początkami bloków występują odstępy o długości stride elementów oldtype

3.Wektor heterogeniczny int MPI Type hvector ( MPI A int blocklength, int stride, argument stride określa przesunięcia wyrażone w bajtach, a nie w długościach zakresu elementu oldtype typ podstawowy MPI Aint odnosi się do adresów (liczba całkowita przechowująca adres na danej architekturze) 4.Wektor indeksowany int MPI Type indexed ( int *array of blocklengths, int *array of displacements, tablica array of blocklengths określa ilości powieleń count bloków o zakresach odpowiadających zakresowi typu oldtype dla każdego powielenia przesunięcie wyrażone w jednostkach zakresu typu oldtype jest pobierane z odpowiedniego pola tablicy array of displacements argument count określa także rozmiar tablic array of blocklengths i array of displacements 5.Wektor indeksowany heterogeniczny int MPI Type hindexed ( int *array of blocklengths, MPI Aint *array of displacements, przesunięcia w tablicy array of displacements wyrażone są w bajtach 6.Struktura int MPI Type struct ( int *array of blocklengths, MPI Aint *array of displacements, MPI Datatype *array of types, definiuje najogólniejszą postać typu pochodnego typ newtype składa się z count bloków, każdy o innym typie i długości zakresu typy poszczególnych bloków określa tablica array of types, a ich długości (wyrażone liczbą elementów składowych) tablica array of blocklengths elementy tablicy array of displacements określają przesunięcie bloków względem początku

Funkcje pomocnicze int MPI Address (void *location, MPI Aint *address) zwraca adres położenia w pamięci int MPI Type extent (MPI datatype datatype, MPI Aint *extent) zwraca długość zakresu danego typu int MPI Type size (MPI datatype datatype, int *size) zwraca całkowitą wielkość(w bajtach) elementów składowych typu stała MPI BOTTOM oznacza początek obszaru pamięci adresowanego absolutnie np. z użyciem MPI Address Przykład: