POZNA SUPERCOMPUTING AND NETWORKING. Wtki w MPI. Michał Sajkowski

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

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

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

Sposoby przekazywania parametrów w metodach.

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

... Ireneusz Mrozek. Wydział Informatyki

Optymalizacja komunikacji w systemach rozproszonych i równoległych

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

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

Rozszerzenia MPI-2 1

Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation).

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

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

WYKŁAD 12. Wzorce projektowe czynnociowe State Mediator

zdefiniowanie kilku grup dyskusyjnych, z których chcemy odbiera informacje, dodawanie, usuwanie lub edycj wczeniej zdefiniowanych grup dyskusyjnych,

Programowanie wspóªbie»ne

1. Klasa typu sealed. Przykład 1. sealed class Standard{ class NowyStandard:Standard{ // błd!!!

Operacje grupowego przesyłania komunikatów

WYKŁAD 10. Wzorce projektowe czynnociowe Command Strategy

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

Bazy danych Transakcje

Programowanie w standardzie MPI

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

Poradnik korzystania z serwisu UNET: Dostp do poczty elektronicznej ze strony WWW

Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.

Wstęp do programowania

Message Passing Interface

Mikrokontroler ATmega32. Tryby adresowania Rejestry funkcyjne

obsług dowolnego typu formularzy (np. formularzy ankietowych), pobieranie wzorców formularzy z serwera centralnego,

Programowanie współbieżne WYKŁADY - CZ. 5EX. PRZYKŁAD. LICZBY PIERWSZE. Andrzej Baran

Architektury systemów równoległych

Wstp. Warto przepływu to

Klonowanie MAC adresu oraz TTL

Bazy danych. Zaliczenie. Literatura. Strony WWW. Wykład 1: Wprowadzenie do baz danych. Semestr 1

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

61 Topologie wirtualne

Programowanie wspóªbie»ne

Wzorce projektowe kreacyjne

Wprowadzenie do kompilatorów

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

Planowanie adresacji IP dla przedsibiorstwa.

Programowanie Obiektowe

Zaawansowane programowanie w C++ (PCP)

Temat: Technika zachłanna. Przykłady zastosowania. Własno wyboru zachłannego i optymalnej podstruktury.

{Opracowała Małgorzata Roguska} Tematy lekcji:

Temat: Problem minimalnego drzewa Steinera. Definicja problemu. Zastosowania. Algorytm dokładny Hakimi. Algorytmy aproksymacyjne.

POZNA SUPERCOMPUTING AND NETWORKING. Wprowadzenie do MPI

Przycisk pracy. Przycisk stopu/kasowanie

Dynamiczne zarzdzanie procesami

FUNKCJE UYTKOWNIKA. Rozbrajanie systemu pod przymusem [Kod przymusu] Blokowanie linii

Multipro GbE. Testy RFC2544. Wszystko na jednej platformie

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

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

Projektowanie algorytmów rekurencyjnych

NAZWY I ADRESY W SIECIACH IP PODZIAŁ NA PODSIECI

stopie szaro ci piksela ( x, y)

Spis treci. Dzie 1. I Wprowadzenie (wersja 0911) II Dostp do danych biecych specyfikacja OPC Data Access (wersja 0911)

" # # Problemy budowy bezpiecznej i niezawodnej globalnej sieci szerokopasmowej dla słub odpowiadajcych za bezpieczestwo publiczne

Biblioteki graficzne MPI - MPE

WYKŁAD 11. Wzorce projektowe czynnociowe Iterator TemplateMethod

1) Grafy eulerowskie własnoci algorytmy. 2) Problem chiskiego listonosza

Metody Metody, parametry, zwracanie wartości

.! $ Stos jest list z trzema operacjami: dodawanie elementów na wierzch stosu, zdejmowanie elementu z wierzchu stosu, sprawdzanie czy stos jest pusty.

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

Ateus - Helios. System domofonowy

Szukanie najkrótszych dróg z jednym ródłem

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

Linux Adam Bułak Ha Nhat Viet Damian Klata

Technologie obiektowe

Poradnik korzystania z serwisu UNET: Konfiguracja programu pocztowego

Temat: Problem najkrótszych cieek w grafach waonych, cz. I: Algorytmy typu label - setting.

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/ / 24

Wzorcowy załcznik techniczny, do umowy w sprawie przesyłania faktur elektronicznych pomidzy Firm A oraz Firm B

Pakiety i interfejsy. Tomasz Borzyszkowski

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

Temat: Struktury danych do reprezentacji grafów. Wybrane algorytmy grafowe.

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Podstawy programowania komputerów

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

WYKŁAD 9. Wzorce projektowe czynnociowe Observer Visitor

Wzorce (szablony) template<class T> {definicja wzorca} lub template<class TypElementu> lub template<class TypElementu1, class TypElementu2>

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Gramatyki regularne i automaty skoczone

Podział Internetu radiowego WIFI konfiguracja

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

Proces tworzenia programu:

POZNA SUPERCOMPUTING AND NETWORKING. Rozszerzenia standardu MPI: MPI-2

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Programowanie współbieżne i rozproszone

Wykład 4: Klasy i Metody

Poprawa efektywnoci metody wstecznej propagacji bdu. Jacek Bartman

POZNA SUPERCOMPUTING AND NETWORKING CENTER. Wprowadzenie do systemu operacyjnego Linux zarzdzanie procesami

Stawiajc krzyyk w odpowiedniej wartoci mona zapisa dowolnego binarnego reprezentanta liczby dziesitnej x x x x x

oraz spełnia warunki: (*) dla wszystkich wierzchołków

Wstęp. do języka C na procesor (kompilator RC51)

Poniszy rysunek przedstawia obraz ukoczonej powierzchni wykorzystywanej w wiczeniu.

Mozilla Firefox PL. Wykorzystanie certyfikatów niekwalifikowanych w oprogramowaniu Mozilla Firefox PL. wersja 1.1

Transkrypt:

Wtki w MPI Michał Sajkowski

literatura wykład opracowany na podstawie: W. Gropp, E. Lusk, R. Thakur, Using MPI-2, The MIT Press 1999 W. Gropp, E. Lusk, A. Skjellum, Using MPI, 2nd. Ed., The MIT Press 1999 2

troch historii MPI-1 zostało zaprojektowane, aby dobrze współpracowa z wtkami MPI-2 dodało cechy, aby poprawi zdolno implementacji MPI do zwikszenia efektywnoci jednowtkowych i wielowtkowych programów 3

agenda pojcie wtku i jego przydatno podstawowe informacje o wtkach (wtki a procesy) współdziałanie MPI z wtkami (funkcja MPI_Init_thread, program zwikszania licznika) implementacja nieblokujcych operacji kolektywnych programowanie mieszane 4

wtek wtki tworz istotny model programowania, który dzieli proces na pojedyncz przestrze adresow i jeden lub wicej wtków sterowania daj naturalny model programowania dla symetrycznych wieloprocesorów s te efektywnym sposobem ukrycia opónie w operacjach o wysokich opónieniach 5

wtek wtek jest pojciem atomowym wykonania w procesie MPI. Kady proces MPI ma główny wtek i moe mie dodatkowe wtki, pod warunkiem, e jest dostpne rodowisko programowania bezpieczne ze wzgldu na wtki i pakiet wtków interfejs MPI jest bezpieczny ze wzgldu na wtki, ale nie wie MPI z adn norm poziom bezpieczestwa wtku w implementacji MPI wprowadzaj funkcje w MPI-2 6

wtek kiedy cała pami jest współdzielona, moe by zastosowana do systemów wielowtkowych, w których pojedynczy proces (przestrze adresowa) posiada kilka liczników programu i stosów wykonania model pozwala na szybkie przełczanie midzy wtkami, i nie wymaga wyranych operacji na pamici, moe by wic przeniesiony do programu w Fortranie powstaje problem: kady stan programu (zmienne programowe) jest współdzielony przez wszystkie wtki jednoczenie niezalenie, wtek moe mie pami lokaln 7

wtek a proces proces to element, który komunikuje si z innymi procesami proces definiuje si jako przestrze adresow razem z biecym stanem, zawierajcym licznik programu, wartoci rejestru, i stos wywoła do podprogramów kiedy proces ma tylko jeden licznik programu, wykonuje tylko jedn rzecz w danej chwili, wtedy jest jednowtkowy 8

wtek a proces wiele procesów moe by wykonanych przez jeden procesor poprzez współdzielenie czasu, std procesor wykonuje wicej rzeczy w jednej chwili, a proces nie uogólnienie procesu wprowadza wiele liczników programu, wartoci rejestru, i stosów wywoła podprogramów, współdzielc przestrze adresow procesu wtkiem nazywamy trójk (licznik programu, zbiór rejestrów, stos) wtek jest bardzo podobny do procesu co do jego praw, ale nie posiada własnej przestrzeni adresowej 9

wtek a proces motywacj wtków jest umoliwienie modelu programowania współbienego w pojedynczym procesie, z bardzo szybkim przełczaniem sterowania CPU z jednego wtku na drugi, wynikajcym z faktu nie angaowania, albo niewielkiego angaowania zarzdzania pamici 10

wtek a proces pojedyncze wtki nie s widoczne poza procesem std komunikacja MPI pomidzy procesami wielowtkowymi nie adresuje pojedynczych wtków wtki procesu mog wykonywa operacje MPI w imieniu swoich procesów 11

wtek a MPI stosowanie wtków łcznie z przesyłaniem komunikatów jest szczególnie wygodne, z nastpujcych powodów: wtki zapewniaj naturaln implementacj nieblokujcych operacji komunikacyjnych wtek moe by utworzony do wykonania blokujcej operacji odbioru, tak długo jak si blokuje tylko sam wtek, a nie proces, daje to efekt nieblokujcego odbioru to samo dotyczy nadawania 12

wtek a MPI wtki mog zwikszy wygod i efektywno implementacji operacji kolektywnych wtki staj si modelem programowania równoległego wybranego dla maszyn o współdzielonej pamici z symetryczn wieloprocesowoci wtki poprawiaj wydajno, pomagajc uczyni systemy o duych opónieniach systemami bardziej tolerancyjnymi na opónienia 13

wtek a proces systemy wtków, gdzie system operacyjny (jdro) nie jest zaangaowany w zarzdzanie poszczególnymi wtkami, nazywa si wtkami uytkownika wtki uytkownika s szybsze od wtków jdra, ale pewne wywołania blokuj wszystkie wtki w procesie zawierajcym wtek, który dokonał wywołania read, write, recv i send 14

wtek a proces MPI Forum było wiadome wagi istnienia wtków, i chciało, aby MPI było bezpieczne ze wzgldu na wtki w czasie powstawania MPI-1 nie było jasnej definicji wtku kwesti rozstrzyga MPI-2, wspomagajc programy wielowtkowe 15

bezpieczestwo wtku aby wtki mogły by stosowane w połczeniu z bibliotek przesyłania komunikatów, biblioteka musi dobrze współpracowa z wtkami t cech nazywamy bezpieczestwem wtku oznacza ona, e wiele wtków moe wykonywa wywołania biblioteki przesyłania komunikatów bez interferencji ze sob 16

bezpieczestwo wtku niebezpieczestwo wtku wystpuje, gdy od systemu przesyłania komunikatów oczekuje si, e utrzymuje on pewne czci stanu procesu, a nie jest to moliwe dla wicej ni jednego wtku w danym czasie niektóre biblioteki stosuj pojcie ostatnio odebranego komunikatu dla uniknicia przekazywania argumentu statusu zapamitanego na stosie procesu 17

bezpieczestwo wtku kod uytkownika wtedy wyglda nastpujco: recv(msg, type); src = get_src(); len = get_len(); podejcie to działa dla przypadku jednego wtku dla wielu wtków, moe by jednoczenie realizowane wiele odbiorów, i przy wywołaniu get_src, nie wiadomo dla którego komunikatu ródło ma by zwrócone 18

bezpieczestwo wtku MPI rozwizuje ten problem, zwracajc ródło jako cz statusu, który zwykle znajduje si na stosie danego wtku problem zasobu, bdcego własnoci biblioteki przesyłania komunikatów, zamiast wtku uytkownika, moe powsta te dla innych struktur danych, jak bufory komunikatów, pola błdu, czy biece konteksty MPI jest zaprojektowane tak, aby było bezpieczne pod wzgldem wtków 19

bezpieczestwo wtku przy stosowaniu MPI z wtkami, nie wystarczy, aby implementacja MPI była bezpieczna ze wzgldu na wtki biblioteka wtków musi bywiadoma implementacji MPI do tego stopnia, e wykonanie operacji blokujcej spowoduje, e biecy wtek oddaje sterowanie do innego wtku w procesie, zamiast spowodowa blokad procesu 20

bezpieczestwo wtku kiedy przychodzi komunikat, wtek czekajcy na niego powinien by ponownie uruchomiony co wicej, kiedy nastpuje wywołanie systemowe, system operacyjny powinien zablokowa tylko ten wtek, który dokonał wywołania, a nie wszystkie wtki, inaczej wikszo elastycznoci wtków na poziomie uytkownika jest stracona 21

bezpieczestwo wtku jest jakoci semantyki oprogramowania, która gwarantuje, e niezalenie wykonywane wtki nie interferuj ze sob, poprzez dostp do danych przeznaczonych dla innego wtku implementacja bezpieczestwa wtku wymaga eliminacji wikszoci stanów globalnych i wyranego zarzdzania pozostałymi stanami globalnymi MPI jest zaprojektowany tak, aby był bezpieczny ze wzgldu na wtki 22

bezpieczestwo wtku dwa wtki w tym samym procesie MPI odbierajce w tym samym komunikatorze wtek 1 wtek 2 ----------------------------------------------------------- MPI_Probe( s, t, comm, &st1) MPI_Probe( s, t, comm, &st2) MPI_Get_count( &st1, d, &n1) MPI_Get_count( &st2, d, &n2) MPI_Recv( a, n1, d, s, t, MPI_Recv( b, n2, d, s, t, comm, &st ) comm, &st ) 23

bezpieczestwo wtku dwa wtki próbuj odebra komunikat z procesu o numerze s w komunikatorze comm z typem danych d załómy dalej, e proces o numerze s ma nada dwa komunikaty, jeden o długoci 1, i drugi o długoci 10 moliwe wyniki kodu pokazujce długoci komunikatu zwracane przez MPI_Probe i MPI_Recv 24

bezpieczestwo wtku przypadek wtek 1 wtek 2 Probe Recv Probe Recv 1 2 3 4 1 1 1 10 1 1 10 10 10 10 1 1 1 10 1 1 25

moliwe wykonanie wtków wtek 1 MPI_Probe( s, t,comm, &status1 ) MPI_Get_count( &status1, d, &n1 ) oba wywołania MPI_Probe MPI_Recv( a, n1,d, s, t, comm, status ) wtek 2 MPI_Probe( s, t, comm, &status2 ) widz ten sam komunikat MPI_Get_count( &status2, d, &n2 ) MPI_Recv( b, n2, d, s, t, comm, status ) 26

moliwe wykonanie wtków oba wtki wywołujmpi_probe zanim oba wywołaj MPI_Recv std oba wtki dowiaduj si o pierwszym komunikacie od procesu o numerze s, komunikat ten ma rozmiar 1 nastpnie drugi wtek odbiera ten komunikat za pomoc MPI_Recv nastpnie pierwszy wtek próbuje odebra komunikat z licznikiem n1 = 1 poniewa pierwszy komunikat został ju odebrany, pierwszy wtek widzi drugi komunikat o rozmiarze 10 co powoduje błd MPI_ERR_TRUNCATE 27

bezpieczestwo wtku istnieje kilka sposobów, aby unikn tego problemu klasyczny sposób w programowaniu wielowtkowym to mechanizm wzajemnego wykluczania, taki jak zamek (lock), od MPI_Probe do MPI_Recv, chronicy przed ingerencj innego wtku MPI daje inne podejcie: poniewa komunikacja w rónych komunikatorach jest niezalena, tak długo jak aden komunikator nie jest stosowany przez wicej ni jeden wtek, nie potrzeba wzajemnego wykluczania 28

bezpieczestwo wtku MPI tak zaprojektowano, aby był implementowany w sposób bezpieczny ze wzgldu na wtki kiedy stosujesz wielowtkowo w programie, a Twoja implementacja nie jest bezpieczna, moesz otrzyma nieprzewidywalne wyniki 29

programy jeszcze jedna wersja nxtval (zwikszanie licznika i zwrot wartoci) implementacja nieblokujcych operacji kolektywnych testowanie poziomu wsparcia wtków 30

MPI i wtki MPI_1 został zaprojektowany aby był bezpieczny ze wzgldu na wtki z wyjtkiem MPI_Probe i MPI_Iprobe, nie ma stanu globalnego ani pojcia biecej wartoci w specyfikacji MPI W MPI-2, programy we/wy zawierajce wyrane offsety (MPI_File_read_at) daj bezpieczn alternatyw operacji seek 31

MPI i wtki problem przenonoci w aplikacjach wielowtkowych ze wzgldu na podział na wtki uytkownika i wtki jdra, wymaga, aby wywołania MPI blokowały jedynie wtek wywołujcy kiedy aplikacja stosuje MPI dla komunikacji miedzy procesami, a jest wielowtkowa, to jest wtedy przenona 32

MPI i wtki jeden wtek moe rozpocz operacj nieblokujc, a inny wtek (ale tylko jeden) moe j zakoczy potrzebne s operacje, zabezpieczajce przed niespójnymi aktualizacjami lokalizacji pamici 33

funkcja MPI_Init_thread funkcja ta da poziomu wsparcia wtku, i zwraca gwarantowany poziom wtku podamy obecnie poziomy wsparcia wtku, w kolejnoci wzrastajcej ogólnoci wszystkie wartoci poziomu wsparcia s liczbami całkowitymi i s uporzdkowane tak, e ogólniejsza warto jest wiksza ni wszystkie bardziej restryktywne poziomy 34

poziomy wsparcia wtku MPI_THREAD_SINGLE: tylko jeden wtek (uytkownika) MPI_THREAD_FUNNELED: wiele wtków uytkownika, ale tylko główny wtek moe dokona wywoła MPI MPI_THREAD_SERIALIZED: wiele wtków uytkownika moe dokona wywoła MPI, ale tylko jeden wtek w danej chwili to robi MPI_THREAD_MULTIPLE: pełna dowolno, dowolny wtek moe dokona wywołania w dowolnym czasie 35

funkcja MPI_Init_thread MPI_Init_thread moe by uyta zamiast MPI_Init to znaczy kiedy program MPI-1 startuje z MPI_Init i koczy simpi_finalize, to program MPI-2 startuje od MPI_Init albo MPI_Init_thread, a koczy simpi_finalize wtek w kadym procesie, który wywołałmpi_init lub MPI_Init_thread, który jest nazwany głównym wtkiem, jest równie tym jedynym wtkiem w procesie, który wywołuje MPI_Finalize 36

funkcja MPI_Init_thread najbardziej przyjaznym wtkom jest poziom MPI_THREAD_MULTIPLE programy MPI mog by wtedy stosowane w dowolnej kombinacji z wtkami MPI sam nie tworzy wtków, s one tworzone osobno przez biblioteki i kompilatory 37

wersjanxtval z uyciem wtków program zwikszania licznika z uyciem wtków wtek zapewnia tutaj licznik wtek stosuje blokujcy odbiór, aby czeka na dania nowej wartoci, a zwraca dane blokujcym nadawaniem kod programu przedstawiony jest na kolejnych slajdach 38

wersjanxtval z uyciem wtków proces o numerze 0 tworzy wtek w init_counter dowolny proces, moe wywoła counter_nxtval, aby pobra biec warto i zwikszy j o warto incr program stop_counter stosuje MPI_Barrier do zapewnienia, e aden proces nadal nie próbuje korzysta z licznika 39

wersjanxtval z uyciem wtków proces o numerze 0 nadaje komunikat do samego siebie, odebrany jest on w programie counter_routine, działajcym w oddzielnym wtku odbiór tego komunikatu powoduje wyjcie z counter_routine, koczc wtek wywołanie pthread_join w stop_counter, powoduje, e proces który utworzył wtek, czeka a wtek si zakoczy 40

wersjanxtval z uyciem wtków kod zaley od gwarancji MPI, e blokujce wywołanie MPI blokuje jedynie wtek wywołujcy to wymaga trybu MPI_THREAD_MULTIPLE, ale tylko jeden proces potrzebuje takiego poziomu wsparcia inne procesy nie potrzebuj wtków, wtedy stosuj poziom wsparcia MPI_THREAD_SINGLE 41

wersjanxtval z uyciem wtków zmienna thread_id jest globalna, to chroni przed tym, aby wicej ni jeden licznik był aktywny w danym czasie w jednym procesie MPI zapewnia wygodny sposób dołczenia tej zmiennej do komunikatora wyjciowego counter_comm_p, za pomoc atrybutów 42

wersjanxtval z uyciem wtków void *counter_routine(mpi_comm *counter_comm_p ) { init incr, ival = 0; MPI_Status status; while (1) { MPI_Recv( &incr, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, *counter_comm_p, &status ); if (status.mpi_tag == 1) return ); MPI_Send( &ival, 1, MPI_INT, status.mpi_source, 0, *counter_comm_p ); ival += incr; } } 43

wersjanxtval z uyciem wtków /* omawiamy jak eliminowa t zmienn globaln w tekcie */ static pthread_t thread_id; void init_counter( MPI_Comm comm, MPI_Comm *counter_comm_p ) { int rank; MPI_Comm_dup( comm, counter_comm_p ); MPI_Comm_rank( comm, &rank ); if (rank == 0) pthread_create( &thread_id, NULL, counter_routine, counter_comm_p ); } 44

wersjanxtval z uyciem wtków /* dowolny proces moe to wywoła, aby pobra i zwikszy przez warto */ void counter_nxtval( MPI_Comm counter_comm, int incr, int *value ) { } MPI_Send(&incr, 1, MPI_INT, 0, 0, counter_comm); MPI_Recv(value, 1, MPI_INT, 0, 0, counter_comm, MPI_STATUS_IGNORE); 45

wersjanxtval z uyciem wtków /* kady proces w counter_comm (włczajc numer 0!) musi wywoła zatrzymanie licznika */ void stop_counter( MPI_Comm *counter_comm_p ) { } int rank; MPI_Barrier( *counter_comm_p); MPI_Comm_rank( *counter_comm_p, &rank ); if (rank == 0) { MPI_Send( MPI_BOTTOM, 0, MPI_INT, 0, 1, *counter_comm_p ); pthread_join( thread_id, NULL ); } MPI_Comm_free( counter_comm_p ); 46

nieblokujce operacje kolektywne wikszo operacji nieblokujcych moe by widziana, jak by były implementowane jako operacje blokujce w oddzielnych wtkach to jest przyczyna, dlaczego nieblokujce operacje kolektywne nie s zawarte w MPI-2, gdy mog by implementowane przez wywołanie odpowiadajcej operacji blokujcej z wykorzystaniem oddzielnego wtku 47

nieblokujce operacje kolektywne przykładem jest MPI_Comm_accept operacja ta nie moe by usunita, (nie jest nieblokujca), std program MPI wywołujcy MPI_Comm_accept nie moe si kontynuowa, a nie nastpi powrót z MPI_Comm_accept moemy uy inny program MPI, który wykona puste danie połczenia do samego siebie, aby spełni MPI_Comm_accept 48

kod nawizania i rozłczenia połczenia integer wxit_msg, server parameter (exit_msg = -1)... call MPI_COMM_CONNECT( port_name, MPI_INFO_NULL, 0, &MPI_COMM_SELF, server, ierr ) call MPI_BCAST(exit_msg, 1, MPI_INTEGER, MPI_ROOT, &server, ierr ) call MPI_COMM_DISCONNECT(server, ierr) 49

programowanie mieszane połczenie przesyłania komunikatów z technikami współdzielenia pamici tryb wtku MPI: MPI_THREAD_FUNNELED tylko jeden wtek wykonuje wywołanie MPI wtek musi okreli, czy jest głównym wtkiem, wywołujc MPI_Is_thread_main inne wtki wyliczaj zadanie zrównoleglenie ptli przez wtki 50

testowanie poziomu wsparcia wtków kod wykorzystuje fakt uporzdkowania wartoci poziomów wsparcia do uproszczenia testu MPI_Query_thread i MPI_Is_thread_main mog by uyte, nawet gdy MPI jest inicjowane przezmpi_init zamiast przez MPI_Init_thread 51

testowanie poziomu wsparcia wtków int thread_level, thread_is_main; MPI_Query_thread( &thread_level ); MPI_Is_thread_main( &thread_is_main ); if (thread_level > MPI_THREAD_FUNNELED (thread_level == MPI_THREAD_FUNNELED && thread_is_main)) {... moemy zrobi wywołania MPI } 52

testowanie poziomu wsparcia wtków else { printf( Błd, program robi wywołania MPI\n\ Ten wtek ich nie wspomaga\n ); return 1; }... 53

stosowanie programów MPI z OpenMP w OpenMP uytkownik moe kontrolowa liczb wtków zmiennymi rodowiska w MPI moe ustawi t liczb program omp_set_num_threads zwraca liczb wtków 54

kod do ustawienia wtków OpenMP w programie MPI MPI_Comm_rank( MPI_COMM_WORLD, &rank ); if (rank == 0) { nthreads_str = getenv( OMP_NUM_THREADS ); if (nthreads_str) else nthreads = atoi( nthreads_str ); nthreads = 1; } MPI_Bcast( &nthreads, 1, MPI_INT, 0, MPI_COMM_WORLD ); omp_set_num_threads( nthreads ); 55

podsumowanie omówilimy tutaj podstawowe kwestie wtków w MPI temat ten nie wyczerpuje problematyki MPI nastpnym krokiem bdzie omówienie bibliotek graficznych w MPI 56