Dynamiczne zarzdzanie procesami

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

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

Rozszerzenia MPI-2 1

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

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

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

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

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

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

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

Bash i algorytmy. Elwira Wachowicz. 20 lutego

Sposoby przekazywania parametrów w metodach.

61 Topologie wirtualne

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

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

... Ireneusz Mrozek. Wydział Informatyki

Operacje grupowego przesyłania komunikatów

Biblioteki graficzne MPI - MPE

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

3. Instalator rozpocznie proces instalacji

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

WYKŁAD 10. Wzorce projektowe czynnociowe Command Strategy

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

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

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

Instrukcja obsługi dodatku InsERT GT Smart Documents

Problem decyzyjny naley do klasy NP. (Polynomial), jeeli moe by rozwizany w czasie conajwyej wielomianowym przez algorytm A dla DTM.

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

Tworzenie aplikacji rozproszonej w Sun RPC

Proces tworzenia programu:

Wprowadzenie do kompilatorów

Łagodne wprowadzenie do Message Passing Interface (MPI)

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

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

Bazy danych. Plan wykładu. Proces modelowania i implementacji bazy danych. Elementy ERD. Wykład 2: Diagramy zwizków encji (ERD)

15. Funkcje i procedury składowane PL/SQL

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

Bazy danych. Plan wykładu. Proces modelowania i implementacji bazy danych. Elementy ERD. Wykład 2: Diagramy zwizków encji (ERD)

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

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

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Projektowanie bezpiecze stwa sieci

1. Wprowadzenie do C/C++

Klient-Serwer Komunikacja przy pomocy gniazd

Klonowanie MAC adresu oraz TTL

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

Programowanie współbieżne i rozproszone

Układy VLSI Bramki 1.0

Instytut Teleinformatyki

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1

POZNA SUPERCOMPUTING AND NETWORKING. Wprowadzenie do MPI

Zdalne wywoływanie procedur RPC

Zdalne wywoływanie procedur RPC

1. Wprowadzenie do C/C++

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

Programowanie - wykład 4

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

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

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

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Algorytmy i Struktury Danych

Wstp. Warto przepływu to

Bazy danych Podstawy teoretyczne

SUPLEMENT SM-BOSS WERSJA 6.15

Programowanie wspóªbie»ne

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

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

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

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

Przegldanie stron wymaga odpowiedniej mikroprzegldarki w urzdzeniu mobilnym lub stosownego emulatora.

Message Passing Interface

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

Instalacja programu Sprzeda

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Wska¹niki, tablice dynamiczne wielowymiarowe

Metody Metody, parametry, zwracanie wartości

Struktury. Przykład W8_1

System midzybankowej informacji gospodarczej Dokumenty Zastrzeone MIG DZ ver Aplikacja WWW ver. 2.1 Instrukcja Obsługi

Planowanie adresacji IP dla przedsibiorstwa.

Studium przypadku Case Study CCNA2-ROUTING

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

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

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

Bazy danych. Plan wykładu. Podzapytania - wskazówki. Podzapytania po FROM. Wykład 5: Zalenoci wielowartociowe. Sprowadzanie do postaci normalnych.

Autorzy: Kraków, stycze 2007 Łukasz Dziewanowski Filip Haftek (studenci AGH III roku kierunku Automatyka i Robotyka)

Instalacja programu Sprzeda z motorem. bazy danych Pervasive V8

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Projektowanie algorytmów rekurencyjnych

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Aplikacja Sieciowa wątki po stronie klienta

Optymalizacja komunikacji w systemach rozproszonych i równoległych

Instrukcja 3 Laboratoria 3, 4 Specyfikacja wymagań funkcjonalnych za pomocą diagramu przypadków użycia

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

Język ludzki kod maszynowy

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

WYKŁAD 4 PLAN WYKŁADU. Sieci neuronowe: Algorytmy uczenia & Dalsze zastosowania. Metody uczenia sieci: Zastosowania

Tworzenie bazy danych Biblioteka tworzenie tabel i powiza, manipulowanie danymi. Zadania do wykonani przed przystpieniem do pracy:

Transkrypt:

Dynamiczne zarzdzanie procesami 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 co nowego w MPI-2: równoległe we/wy zdalne operacje na pamici dynamiczne zarzdzanie procesami 3

dynamiczne zarzdzanie procesami trzecim głównym odstpstwem od modelu MPI-1 jest zdolno procesu MPI do: udziału w tworzeniu nowego procesu MPI ustanowienia komunikacji z procesem MPI, który został uruchomiony oddzielnie 4

dynamiczne zarzdzanie procesami główne problemy, na jakie trafiamy przy projektowaniu API dla dynamicznego zarzdzania procesami: utrzymanie prostoty i elastycznoci współdziałanie z systemem operacyjnym, zarzdc zasobów, i zarzdc procesów w złoonym rodowisku programowym unikanie warunków wycigu, które naraaj na szwank poprawno 5

dynamiczne zarzdzanie procesami kluczem do tej poprawnoci jest to, aby operacje dynamicznego zarzdzania procesami były kolektywne, zarówno midzy procesami tworzcymi nowe procesy, jak pomidzy nowo utworzonymi procesami otrzymane zbiory procesów s reprezentowane w interkomunikatorze 6

dynamiczne zarzdzanie procesami interkomunikator komunikator zawierajcy dwie grupy procesów zamiast jednej dwie rodziny operacji oparte na interkomunikatorach: tworzca nowe procesy, nazywa si rozmnaaniem (spawning) ustalajca komunikacj z ju istniejcymi programami MPI nazywa si łczeniem (connecting) 7

dynamiczne zarzdzanie procesami ta ostatnia pozwala aplikacjom na posiadanie struktury równoległy klient /równoległy serwer szczegóły dynamicznego zarzdzania procesami - rozdział 7 ksiki Using MPI-2 8

dynamiczne zarzdzanie procesami dodatkowe kwestie: rozszerzone operacje kolektywne, dla interkomunikatorów (analogiczne do operacji w MPI-1 dla intrakomunikatorów) obsługa C++ i Fortran90, Fortranu na dwóch poziomach: podstawowym i rozszerzonym mieszane programowanie w wielu jzykach zewntrzne interfejsy do bibliotek itp. wtki 9

dynamiczne zarzdzanie procesami MPI-1 nie pozwala na dynamiczne zarzdzanie procesami MPI-2 realizuje to za pomoc funkcji MPI_Comm_spawn, która jest kolektywn operacj na rozmnaajcych si procesach (zwanych parents, rodzicami) i równie kolektywna przy wywołaniach MPI_Init w procesach rozmnaanych (zwanych children, dziemi) 10

dynamiczne zarzdzanie procesami standard MPI-1 nic nie mówi o tym, jak uruchamiane s procesy start procesu wystpuje poza programem MPI, proces MPI wywołujempi_comm_size, aby si dowiedzie ile procesów uruchomiono, oraz MPI_Comm_rank, aby si dowiedzie, który to proces liczba procesów jest ustalona nie póniej ni wtedy, gdympi_init zwraca warto 11

dynamiczne zarzdzanie procesami uytkownicy MPI prosili MPI Forum, aby wróci do tej kwestii, z powodów: migracji uytkowników z PVM i ich przyzwyczaje przy zarzdzaniu procesami wanych klas aplikacji klient serwer i task farming jobs, wymagajcych dynamicznego zarzdzania zadaniami moliwoci pisania rodowiska oblicze równoległych w samym MPI 12

dynamiczne zarzdzanie procesami - agenda tworzenie nowych procesów - kontynuacja MPI_Comm_spawn komunikacja midzy grupami w interkomunikatorze, dwupunktowa (MPI-1) i kolektywna (MPI-2) łczenie dwóch programów MPI, korzystajc z przykładu programu obliczeniowego i wizualizacyjnego mieszane programowanie dyskusja procedur dynamicznego zarzdzania procesami 13

tworzenie nowych procesów podstawy MPI_Comm_spawn wprowadzono na poprzednim kursie przypomnijmy, e MPI_Comm_spawn tworzy interkomunikator zawierajcy jako dwie grupy procesy rozmnaajce (spawning processes) i procesy rozmnoone (spawned processes) 14

tworzenie nowych procesów zbadamy MPI_Comm_spawn szczegółowo, stosujc ponownie przykład mnoenia macierzy z rozdziału 3 pierwszego tomu Using MPI z 1999 roku pokazano ten program jako przykład paradygmatu master-slave zaadaptujemy go, uywajc zmiennej liczby procesów slave, o których uruchomieniu decyduje proces master 15

interkomunikatory dokonamy wpierw przegldu pojcia interkomunikatora interkomunikatory s mało widoczne w MPI-1, ale znaczce w MPI-2, szczególnie w zarzdzaniu procesami zwykły komunikator w MPI jest intrakomunikatorem, składa si z kontekstu i grupy procesów 16

interkomunikatory wyróniajc cech interkomunikatora jest to, e jest zwizany z dwoma grupami procesów, lokaln i zdaln, z punktu widzenia konkretnego procesu procesy s identyfikowane przez numer w grupie, ale komunikat nadany do procesu o danym numerze zawsze trafia do procesu w grupie zdalnej 17

interkomunikatory takie zachowanie si operacji dwupunktowych jest specyfikowane w MPI-1 MPI-1 nie specyfikuje zachowania operacji kolektywnych w interkomunikatorach, a MPI-2 to robi podobnie, jak w przypadku dwupunktowym, komunikacja zachodzi midzy dwoma grupami 18

interkomunikator na rysunku proces 0 z grupy lokalnej przesyła komunikat do procesu 1 w grupie zdalnej 0 0 1 2 1 2 19

przykład: mnoenie macierzy ten sam algorytm co w ksice Using MPI, z tym, e zamiast uruchamia wszystkie procesy poza programem, uruchamiamy jedynie proces nadrzdny master i pozwalamy mu, aby on uruchamiał procesy podległe slave za pomoc funkcji MPI_Comm_spawn 20

mnoenie macierzy oznacza to, e zasadnicz rónic midzy t wersj, a wersj poprzedni MPI-1, jest to, e proces master i procesy slave s oddzielnymi głównymi programami rozwamy pocztek kodu programu dla procesu master, uruchamiany poleceniem mpiexec n 1 master 21

mnoenie macierzy master cz.1! mnoenie macierzy z rozmnaaniem procesów slave PROGRAM main use mpi integer MAX_ROWS, MAX_COLS parameter (MAX_ROWS = 1000, MAX_COLS = 1000) double precision a(max_rows_,max_cols), b(max_cols), c(max_rows) double precision buffer(max_cols), ans integer slavecom integer ierr, status(mpi_status_size) integer i, j, numsent, sender, numslaves integer anstype, rows, cols 22

mnoenie macierzy master cz.1 call MPI_INIT(IERR)! master decyduje, ile procesów slave rozmnoy numslaves = 10 call MPI_COMM_SPAWN( slave, MPI_ARGV_NULL, numslaves, & MPI_INFO_NULL, 0, MPI_COMM_WORLD, &! master inicjuje i nastpnie rozsyła rows = 100 cols = 100! inicjalizuj a i b do 20 j = 1,cols b(j) = 1 do 10 i = 1,rows slavecomm, MPI_ERRCODES_IGNORE, ierr) 23

mnoenie macierzy master cz.1 10 continue 20 continue numsent = 0 a(i,j) = i! nadaj b do kadego procesu slave call MPI_BCAST(b, cols, MPI_DOUBLE_PRECISION, MPI_ROOT, & slavecomm, ierr) 24

mnoenie macierzy master cz.1 program ten mnoy macierzaprzez wektorbi pamita wynik wc równoległo wynika faktu, e iloczyn skalarny wierszy macierzy a przez wektor b odbywa si równolegle zakładamy, e jest wicej wierszy w macierzy a ni procesów, std kady proces wykonuje wiele iloczynów procesy nie pracuj z t sam szybkoci 25

mnoenie macierzy master cz.1 program master nadaje wiersze, jeden po drugim, do procesów slave, a kiedy proces slave zakoczy liczenie, przesyła wynik (iloczyn skalarny) do procesu master okrelamy liczb procesów slave dopiero, gdy proces master wystartuje, pokazujc działanie MPI_Comm_spawn i MPI_Bcast na interkomunikatorze nowe zmienne to interkomunikatorslavecomm, stworzony przez MPI_Comm_spawn, oraz zmienna numslaves, przechowujca liczb procesów slave 26

mnoenie macierzy master cz.1 program tego typu wykonuje pewien rodzaj oblicze, aby wyznaczy liczb procesów slave, które naley rozmnoy (spawn) aby to uproci, na razie zakładamy, e program decyduje aby stworzy dziesi procesów slave i ustawiamy numslaves na warto 10 procesy s tworzone funkcjmpi_comm_spawn : call MPI_COMM_SPAWN( slave, MPI_ARGV_NULL, numslaves, & MPI_INFO_NULL, 0, MPI_COMM_WORLD, & slavecomm, MPI_ERRCODES_IGNORE, ierr) 27

mnoenie macierzy master cz.1 call MPI_COMM_SPAWN( slave, MPI_ARGV_NULL, numslaves, & MPI_INFO_NULL, 0, MPI_COMM_WORLD, & slavecomm, MPI_ERRCODES_IGNORE, ierr) funkcja ta (w wersji Fortran) ma 9 argumentów, 6 wejciowych i 3 wyjciowe: pierwszy to plik wykonywalny, uruchamiany przez nowe procesy, drugi to tablica bdca lini polece dla pliku wykonywalnego, trzeci to liczba procesów slave, które mamy uruchomi 28

mnoenie macierzy master cz.1 call MPI_COMM_SPAWN( slave, MPI_ARGV_NULL, numslaves, & MPI_INFO_NULL, 0, MPI_COMM_WORLD, & slavecomm, MPI_ERRCODES_IGNORE, ierr) czwarty to informacja dodatkowa pity to process root, tutaj 0, bo jest tylko jeden proces master szósty to komunikator, na którym ta funkcja jest kolektywna, czyli MPI_COMM_WORLD 29

mnoenie macierzy master cz.1 call MPI_COMM_SPAWN( slave, MPI_ARGV_NULL, numslaves, & MPI_INFO_NULL, 0, MPI_COMM_WORLD, & slavecomm, MPI_ERRCODES_IGNORE, ierr) 3 argumenty wyjciowe to: siódmy to interkomunikator, tutaj slavecomm, zawierajcy proces master (w grupie lokalnej) i procesy slave (w grupie zdalnej) ósmy to wskazanie, e nie sprawdzamy pojedynczych kodów błdu dziewity to ogólny kod błdu zwracany przez funkcj, okrela czy funkcja jest sukcesem czy nie 30

operacje kolektywne w interkomunikatorze nastpnie proces master inicjuje macierzai wektor b i stosuje operacj kolektywn MPI_Bcast aby nadabdo procesów slave w MPI-1 było to niemoliwe, ale MPI-2 definiuje operacje kolektywne na interkomunikatorach, jak slavecomm rozgłaszanie jest realizowane przez proces root w grupie lokalnej do wszystkich procesów w grupie zdalnej, które w tym przypadku s procesami slave poniewa s dwie grupy, proces wskazuje siebie specjaln wartoci MPI_ROOT 31

operacje kolektywne w interkomunikatorze procesy odbierajce broadcast specyfikuj numer procesu root, tak jak by były w jednej grupie jeeli jest wicej ni jeden proces w grupie lokalnej, zawierajcej proces root, to te pozostałe procesy specyfikuj MPI_PROC_NULL jako warto root 32

operacje kolektywne w interkomunikatorze: rozgłaszanie 2 0 MPI_PROC_NULL 2 MPI_ROOT 2 1 MPI_PROC_NULL 2 3 MPI_PROC_NULL 2 33

komunikacja dwupunktowa w interkomunikatorze reszt kodu procesu master pokazano na kolejnych slajdach numery procesów s midzy0a numslaves-1, poniewa proces master je wskazuje w zdalnej grupie interkomunikatoraslavecomm, a nie jak w MPI-1 w MPI_COMM_WORLD 34

komunikacja dwupunktowa w interkomunikatorze proces master nadaje do wszystkich procesów slave wiersz, na którym maj działa, odbiera od nich odpowied, i przesyła do nich kolejne wiersze, a si wyczerpi nastpnie proces master nadaje komunikat z etykiet 0 do kadego procesu slave, aby wskaza, e obliczenia si skoczyły na koniec, proces master drukuje wektor c bdcy iloczynem a i b 35

mnoenie macierzy master cz.2! nadaj wiersz do kadego procesu slave;! etykietuj numerem wiersza do 40 i = 1,min(numslaves,rows) do 30 j = 1,cols buffer(j) = a(i,j) 30 continue call MPI_SEND(buffer, cols, MPI_DOUBLE_PRECISION, i-1, & i, slavecomm, ierr) numsent = numsent+1 40 continue 36

mnoenie macierzy master cz.2 do 70 i = 1,rows call MPI_RECV(ans, 1, MPI_DOUBLE_PRECISION, & sender = status(mpi_source) anstype = status(mpi_tag) c(anstype) if (numsent.lt. rows) then 50 continue do 50 j = 1,cols MPI_ANY_SOURCE, MPI_ANY_TAG, & slavecomm, status, ierr)! wiersz jest wartoci etykiety = ans! nadaj inny wiersz buffer(j) = a(numsent+1,j) call MPI_SEND(buffer, cols, MPI_DOUBLE_PRECISION, sender, & numsent+1, slavecomm, ierr) numsent = numsent+1 37

mnoenie macierzy master cz.2 else call MPI_SEND(buffer, 0,MPI_DOUBLE_PRECISION, sender, & 0, slavecomm, ierr) endif 70 continue! drukuj odpowied do 80 i = 1,rows print *, c( i, ) =, c(i) 80 continue call MPI_COMM_FREE(slavecomm, ierr) call MPI_FINALIZE(ierr) END PROGRAM main 38

proces slave kod procesu slave pokazano na kolejnych slajdach on jest bardzo podobny do czci slave w wersji dla MPI-1 now cech tutaj jest to, e po MPI_Init, procesy slave mog si porozumiewa ze sob, za pomoc ich MPI_COMM_WORLD, który zawiera wszystkie procesy rozmnoone tym samym MPI_Comm_spawn_call, ale nie z procesem master w tym przykładzie, procesy slave nie komunikuj si ze sob, komunikuj si jedynie z procesem master 39

proces slave aby uzyska komunikator zawierajcy proces master, procesy slave wykonuj: call MPI_COMM_GET_PARENT(parentcomm, ierr) to zwraca wparentcomm interkomunikator stworzony kolektywnym wywołaniem MPI_Comm_spawn w procesie master i MPI_Init w procesach slave lokalna grupa tego komunikatora (z punktu widzenia procesów slave), jest taka sama jak ich grupa MPI_COMM_WORLD 40

proces slave grupa zdalna jest zbiorem procesów, które kolektywnie wywołały MPI_Comm_spawn, która w tym przypadku zawiera jedynie proces master procesy slave wskazuj proces master jako numer 0 w parentcomm, podczas wymiany wierszy i iloczynów skalarnych kiedy procesy otrzymaj komunikat wszystko zrobione (tag=0), wtedy wywołuj MPI_Finalize i wychodz 41

mnoenie macierzy slave! Program slave dla mnoenia macierzy PROGRAM main use mpi integer MAX_COLS parameter (MAX_COLS = 1000) double precision b(max_cols) double precision buffer(max_cols), ans integer i, ierr, status(mpi_status_size) integer row, cols, rows, rank integer parentcom 42

mnoenie macierzy slave call MPI_INIT(ierr) call MPI_COMM_GET_PARENT(parentcomm, ierr)! proces master ma teraz numer 0 w zdalnej grupie! interkomunikatora rodzica.! procesy slave odbieraj b, nastpnie obliczaj! iloczyn a do odbioru komunikatu done rows = 100 cols = 100 call MPI_BCAST(b, cols, MPI_DOUBLE_PRECISION,0, & parentcomm, ierr) call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr) 43

mnoenie macierzy slave if (rank.ge. rows) go to 200! opu, jeeli jest wicej procesów ni prac 90 call MPI_RECV(buffer, cols, MPI_DOUBLE_PRECISION, 0, & MPI_ANY_TAG, parentcomm, status, ierr) if (status)mpi_tag).eq. 0) then go to 200 else row = status(mpi_tag) ans = 0.0 do 100 i = 1,cols ans = ans+buffer(i)*b(i) 100 continue call MPI_SEND(ans, 1, MPI_DOUBLE_PRECISION, 0, row, & parentcomm, ierr) go to 90 endif 44

mnoenie macierzy slave endif 200 continue call MPI_COMM_FREE(parentcomm, ierr) call MPI_FINALIZE(ierr) END PROGRAM main 45

znalezienie liczby dostpnych procesów MPI_UNIVERSE_SIZE daje aplikacji MPI informacje, ile procesów mona uruchomi MPI_UNIVERSE_SIZE jest atrybutem MPI_COMM_WORLD aplikacja wykorzystuje t informacj, ile dodatkowych procesów mona rozmnoy 46

znalezienie liczby dostpnych procesów modyfikacja czci master programu mnoenia macierzy w celu zastosowania MPI_UNIVERSE_SIZE do specyfikacji liczby dostpnych procesów wywołujemy MPI_Comm_get_attr, aby zobaczy, czy atrybut MPI_UNIVERSE_SIZE został ustawiony, jeeli tak, rozmnaamy o jeden proces slave mniej, ni jest ustawione (master te si liczy) 47

znalezienie liczby dostpnych procesów jeeli ten atrybut nie jest ustawiony (universe_size_flag = 0), stosujemy podejcie konserwatywne: tworzymy obiekt MPI_Info, stosujemy predefiniowany klucz soft i podajemy zakres procesów jak w argumencie soft w wywołaniu mpiexec MPI_Comm_spawn zwraca interkomunikator slavecomm, w którym zdalna grupa to rozmnoone procesy slave, rozmiar tej grupy okrela MPI_Comm_remote_size 48

modyfikacja programu master integer softinfo integer (kind=mpi_address_kind) universe_size logical universe_size_flag integer numslaves, i, errcodes(10) call MPI_COMM_GET_ATTR(MPI_COMM_WORLD, MPI_UNIVERSE_SIZE, & universe_size, universe_size_flag, ierr) if (universe_size_flag) then else call MPI_COMM_SPAWN( slave, MPI_ARGV_NULL, universe_size-1, & MPI_INFO_NULL, 0, MPI_COMM_WORLD, & slavecomm, errcodes, ierr) call MPI_INFO_CREATE(softinfo, ierr) call MPI_INFO_SET(softinfo, soft, 1:10, ierr) 49

modyfikacja programu master call MPI_COMM_SPAWN( slave, MPI_ARGV_NULL,10, & softinfo, 0, MPI_COMM_WORLD, & slavecomm, errcodes, ierr) call MPI_INFO_FREE(softinfo, ierr) endif call MPI_COMM_REMOTE_SIZE(slavecomm, numslaves, ierr) do i=1, 10 if (errcodes(i).ne. MPI_SUCCESS) then print *, slave, i, did not start endif enddo print *, number of slaves =, numslaves 50

kod dostpu do wartoci MPI_UNIVERSE_SIZE z C int *universe_size_ptr, universe_size_flag;... MPI_Comm_get_attr( MPI_COMM_WORLD,MPI_UNIVERSE_SIZE, &universe_size_ptr,&universe_size_flag ); if (universe_sixe_flag) { printf( Number of processes available is %d\n, *universe_size_ptr ); } 51

przekazywanie argumentów do procesów rozmnaanych w dotychczasowych przykładach stosowalimympi_argv_null aby wskaza, e procesy rozmnaane s wywołane bez adnych argumentów w linii polece 52

przekazywanie argumentów do procesów rozmnaanych czasem przekazywanie parametrów jest uyteczne na przykład w programie kopiowania równoległego zamiast MPI_Bcast do rozsyłania nazwy pliku wyjciowego do procesów slave, mona uruchomi procesy z argumentem zawierajcym nazw pliku wyjciowego 53

przekazywanie argumentów do procesów rozmnaanych w przypadku gdy chcemy przekaza oddzielne argumenty w linii polece, stosujemy inn funkcj: MPI_Comm_spawn_multiple na przykład dla uruchomienia procesów stosujcych róne pliki wykonywalne 54

przekazywanie argumentów do procesów rozmnaanych char *slave... slave_argv[0] = argv[3] slave_argv[1] = NULL; MPI_Comm_spawn( pcp_slave, slave_argv, num_hosts,hostinfo, 0, MPI_COMM_SELF, &pcpslaves, MPI_ERRCODES_IGNORE ); 55

łczenie procesów MPI pewne aplikacje w sposób naturalny s stworzone z wielu oddzielnych programów jednym z przykładów jest symulacja klimatu stworzona z dwóch programów: symulacji oceanu i symulacji atmosfery innym przykładem jest aplikacja, łczca program wizualizacji z programem symulacji rozpatrzymy teraz ten przykład 56

łczenie procesów MPI jedn z zalet tego podejcia jest to, e wybór programu wizualizacji moe by dokonany w czasie wykonywania programu jest to odmienne od rozmnaania programu wizualizacji przez program symulacji to równie działa, gdy złoonorodowiska uruchomieniowego utrudnia start programu wizualizacji poleceniem mpiexec albo wywołaniem MPI_Comm_spawn 57

łczenie procesów MPI wiele dyskusji dotyczcych standardu MPI na temat łczenia procesów MPI mówi o modelu klient serwer my preferujemy spojrzenie na model MPI jak na model peer-to-peer (równorzdny, kady z kadym), gdzie jeden proces akceptuje połczenia, a drugi proces da połczenia 58

wizualizacja oblicze w programie MPI uruchamiajc symulacj, warto wizualizowa postpy symulacji, za pomoc grafiki trójwymiarowej, do narysowania biecego stanu rozwizania na siatce stosowanej do aproksymacji problemu jako przykład połczenia dwóch programów MPI, rozszerzamy solver Poissona, o połczenie z programem wizualizacji 59

wizualizacja oblicze w programie MPI modyfikacja programu Poissona polega na: program tworzy port i akceptuje połczenie na tym porcie. Port jest nazw, któr inny program moe uy do połczenia si z programem, który ten port utworzył wynikiem tego jest interkomunikator łczcy te dwa programy w kadej iteracji, solver Poissona nadaje biece rozwizanie do programu wizualizacji, stosujc operacje komunikacyjne w interkomunikatorze 60

wizualizacja oblicze w programie MPI pierwsza wersja zakłada, e program wizualizacji jest pojedynczym procesem jest on faktycznie do prosty w kadej iteracji, program odbiera numer iteracji, za pomoc dwupunktowej operacji interkomunikatora, i sam siatk, za pomoc MPI_Gatherv w operacji kolektywnej interkomunikatora 61

wizualizacja oblicze w programie MPI kod do inicjacji argumentów potrzebnych przez MPI_Gatherv stosuje MPI_Gather do odbioru danych, które kady proces w serwerze nadaje do tego programu rysowanie jest realizowane przez program DrawMesh funkcja MPI_Comm_connect ustala połczenie z innymi programami 62

wizualizacja oblicze w programie MPI poniewa decydujemy, aby program wizualizacji był dołczony do programu obliczeniowego, to program wizualizacji staje si klientem programu obliczeniowego argumentami wejciowymi wywołania funkcji MPI_Comm_connect s: nazwa portu, warto info, numer procesu wiodcego albo procesu root, oraz intrakomunikator 63

wizualizacja oblicze w programie MPI program wizualizacji aktualizuje dane przy kadej iteracji i rysuje z nich wykresy rozszerzeniem tego programu mogło by by uruchomienie tego programu w oddzielnym wtku, co pozwoliło by obraca i skalowa wykresy i współdziała z danymi 64

program wizualizacji #include mpi.h #define MAX_PROCS 128 #define MAX_MESH 512*512 int main( int argc, char *argv[] ) { MPI_Comm server; int it, i, nprocs,rcounts[max_procs], rdispls[max_procs]; double mesh[max_mesh]; char port_name[mpi_max_port_name]; MPI_Init( 0, 0 ); 65

program wizualizacji gets( port_name ); /* zakładamy tylko jeden proces w MPI_COMM_WORLD */ MPI_Comm_connect( port_name, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &server ); MPI_Comm_remote_size( server, &nprocs ); /* pobierz liczb wartoci danych z kadego procesu */ MPI_Gather( MPI_BOTTOM, 0, MPI_DATATYPE_NULL, rcounts, 1, MPI_INT, MPI_ROOT, server ); /* oblicz przesunicie siatki */ rdispls[0] = 0; for (i=0; i<nprocs-1; i++) rdispls[i+1] = rdispls[i] + rcounts[i]; 66

program wizualizacji } while (1) { MPI_Recv( &it, 1, MPI_INT, 0, 0, server, MPI_STATUS_IGNORE ); if (it < 0) break; MPI_Gatherv( MPI_BOTTOM, 0, MPI_DATATYPE_NULL, mesh, rcounts, rdispls, MPI_DOUBLE, MPI_ROOT, server ); DrawMesh( mesh ); } MPI_Comm_disconnect( &server ); MPI_Finalize(); return 0; 67

akceptacja połcze z innych programów musimy zmodyfikowa program obliczajcy aproksymacje problemu Poissona, aby akceptował połczenie z programu wizualizacji i nadawał do niego dane do wizualizacji (program obliczajcy aproksymacje jest w Fortranie, program wizualizacji jest w C) oryginalny program jest niezmieniony zmiany s dodatkiem do tego programu 68

akceptacja połcze z innych programów zmiany obejmuj: stworzenie portu do którego łczy si program klienta, w tym celu wywołujemy MPI_OPEN_PORT, który podaje numer portu (ten port jest czytany przez instrukcjgets w programie wizualizacji) kiedy port jest otwarty, program pozwala dołczy si do niego innemu programowi MPI przez wywołanie MPI_COMM_ACCEPT 69

akceptacja połcze z innych programów rodkowa cz kodu nadaje dane do procesu klienta, rozpoczynajc od informacji o dekompozycji danych w procesie obliczeniowym, kontynuujc z licznikiem iteracji i biecymi wynikami w ptli iteracji te operacje komunikacji odpowiadaj wywołaniom komunikacji w programie wizualizacji (kliencie) 70

akceptacja połcze z innych programów ostatnia cz programu zamyka port i odłcza si od klienta wywołujc kolejno: MPI_CLOSE_PORT i MPI_COMM_DISCONNECT ostatnie wywołanie oznacza, e zakoczyła si cała komunikacja na komunikatorze po zamkniciu portu, nazwa portu zwracana przez MPI_OPEN_PORT jest niewana 71

modyfikacja przykładu Poisson a modyfikacja przykładu Poisson a pozwalajca akceptowa połczenia od programu wizualizacji i nadawa dane do niego 72

modyfikacja przykładu Poisson a character*(mpi_max_port_name) port_name integer client... if (myid. eq. 0) then call MPI_OPEN_PORT( MPI_INFO_NULL, port_name, ierr) print *, port_name endif call MPI_COMM_ACCEPT( port_name, MPI_INFO_NULL, 0, & MPI_COMM_WORLD, client, ierr );! nadaj informacj potrzebn do nadania siatki call MPI_GATHER( mesh_size, 1, MPI_INTEGER, & MPI_BOTTOM, 0, MPI_DATATYPE_NULL, & 0, client, ierr ) 73

... modyfikacja przykładu Poisson a! Dla kadej iteracji, nadaj lokaln cz siatki if (myid.eq. 0) then call MPI_SEND( it, 1, MPI_INTEGER, 0, 0, client, ierr ) endif call MPI_GATHERV( mesh, mesh_size, MPI_DOUBLE_PRECISION, & MPI_BOTTOM, 0, 0, & MPI_DATATYPE_NULL< 0, client, ierr )... 74

modyfikacja przykładu Poisson a! Odłcz od klienta przed wyjciem if (myid.eq. 0) then call MPI_CLOSE_PORT( port_name, ierr) endif call MPI_COMM_DISCONNECT( client, ierr) call MPI_FINALIZE( ierr ) 75

porównanie z gniazdami procedury MPI łczenia dwóch grup procesów odpowiadaj prostemu modelowi znanemu z gniazd Unixa podobiestwa wystpuj midzy: MPI_OPEN_PORT procedury socket, bind i listen w gniazdach MPI_COMM_ACCEPT procedura accept MPI_COMM_CONNECT procedury socket i connect 76

porównanie z gniazdami rónice wystpuj midzy: interfejs gniazda ustala połczenie midzy dwoma procesami, a interfejs MPI łczy dwie grupy procesów Forum MPI preferuje si uywanie wtków oraz blokujcych wersji gniazd inne cechy interfejsu gniazda, obejmujce n.p. sterowanie czasami oczekiwania, mona osign w MPI za pomoc pewnych zabiegów implementacyjnych 77

przesyłanie danych midzy grupami procesów jeeli dane s wielkie, program wizualizacji powinien by równoległy, np. wersja MPI programu POV-RAY nadajemy wtedy struktur danych, która jest rozdzielana w jeden sposób na jednej grupie procesów, a w inny na drugiej grupie procesów rozwamy dwie odmienne dekompozycje, gdzie procesy z lewej nadaj do procesów po prawej 78

przesyłanie danych midzy grupami procesów transfer danych midzy programem symulacji (4 procesy) a programem wizualizacji (3 procesy) P3 P2 P1 P0 ---------------- ---------------- ---------------- ---------------- ---------------- P2 P1 P0 siatka w sekcji obliczeniowej siatka w sekcji wizualizacyjnej 79

przesyłanie danych midzy grupami procesów linie cigłe wskazuj dekompozycj siatki midzy procesy, linie przerywane wskazuj podział siatki za pomoc drugiej grupy procesów, strzałki wskazuj transfery P3 P2 P1 P0 ---------------- ---------------- ---------------- ---------------- ---------------- P2 P1 P0 siatka w sekcji obliczeniowej siatka w sekcji wizualizacyjnej 80

przesyłanie danych midzy grupami procesów procedura MPI_Alltoallv jest elastyczniejsz wersj procedury MPI_Alltoall kolektywna procedura w interkomunikatorze kady proces w jednej grupie nadaje róne dane do kadego innego procesu w innej grupie u nas tak nie jest, nie kady proces nadaje do kadego, tam gdzie nie ma danych do nadania ustawiamy sendcounts = 0 81

przesyłanie danych midzy grupami procesów kolejny program oblicza argumenty sendcounts i sdispls dla MPI_Alltoallv, gdzie proces wywołujcy ma wiersze s do e w siatce, a dekompozycja na serwerze wizualizacji jest podany przez tablicm, gdzie m(i) jest liczb wierszy w procesie i MPI_Alltoallv jest uyteczne, gdy grafika jest na stacjach graficznych, a obliczenia na zdalnym superkomputerze 82

r_s = 1 displ = 0 obliczenie argumentów MPI_Alltoallv do i=0, viz_numporcs-1 if (s.ge. r_s + m(i)) then sendcounts(i) = 0 sdispls(i) = 0 elseif (e.lt. r_s) then sendcounts(i) = 0 sdispls(i) = 0 83

enddo else endif obliczenie argumentów MPI_Alltoallv sendcounts(i) = min( e s + 1, r_s + m(i) s) * nx sdispls(i) displ r_s = r_s + m(i) = displ = displ + sencounts(i) 84

publikacja nazwy portu we wczeniejszym przykładzie, zastosowano instrukcjprint aby umieci nazw portu na standardowym wyjciu, a instrukcj gets aby odczyta t nazw na standardowym wejciu jest to całkowicie ogólne, ale troch niezgrabne print *, port_name publikuje nazw portu, podobnie gets( port_name) powoduje, e klient szuka numeru portu 85

publikacja nazwy portu alternatyw do print i gets w MPI-2 jest usługa nazw (name service) program wybiera prywatn nazw zwan nazw usługi nazwa portu jest zwizana z nazw usługi za pomoc procedury MPI_Publish-name t asocjacj usuwa si poprzez MPI_Unpublish_name 86

publikacja nazwy portu proces poszukujcy danego portu przekazuje nazw usługi do MPI_Lookup_name pokaemy teraz zmiany w kodzie programu wizualizacji i symulacji aby zezwoli im na tak publikacj nazw publikacja ma pewne ograniczenia: nazw usługi wybiera programista, std dwóch moe wybra t sam nazw usługi w dwóch rónych aplikacjach, rozwizaniem moe by zcentralizowana rejestracja nazw albo dodanie do nazwy usługi unikalnego identyfikatora uytkownika 87

publikacja nazwy portu w programie wizualizacji: MPI_Lookup_name( Poisson, MPI_INFO_NULL, port_name ); MPI_Comm_connect( port_name, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &server); 88

publikacja nazwy portu w programie symulacji (przykład Poissona): character*(mpi_max_port_name) port_name integer client... if (myid.eq. 0) then endif call MPI_OPEN_PORT( MPI_INFO_NULL, port_name, ierr ) call MPI_PUBLISH_NAME( Poisson, MPI_INFO_NULL, & port_name, ierr ) call MPI_COMM_ACCEPT( port_name, MPI_INFO_NULL, 0, & MPI_COMM_WORLD, client, ierr ); 89

publikacja nazwy portu w programie symulacji (przykład Poissona):... if (myid.eq. 0) then call MPI_UNPUBLISH_NAME( Poisson, MPI_INFO_NULL, & port_name, ierr ) call MPI_CLOSE_PORT( port_name, ierr ) 90

cele dynamicznego zarzdzania procesami przenono (aplikacje uruchamiane dla rónych systemów szeregowanie zada i zarzdzanie procesami, jeden proces na wzeł, zbiór procesów niezmienny, zmiana wymaga operacji kolektywnych) determinizm (zbiór procesów niezmienny) skalowalno i efektywno (operacje kolektywne) 91

czego MPI nie standaryzuje? pewne cechy zalene od implementacji MPI nie standaryzuje si: zarzdcy zadaniami interfejsu uruchomienia procesu 92

podsumowanie omówilimy tutaj podstawowe kwestie dotyczce dynamicznego zarzdzania procesami oczywicie temat stosowania MPI-2 nie został w pełni wyczerpany oddzielnego potraktowania wymaga stosowanie MPI z wtkami 93