Biblioteki graficzne MPI - MPE



Podobne dokumenty
Komunikacja kolektywna w środowisku MPI

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

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

Proces tworzenia programu:

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

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

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

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

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

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

1. Wprowadzenie do C/C++

Argumenty wywołania programu, operacje na plikach

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

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

1. Wprowadzenie do C/C++

Rysowanie punktów na powierzchni graficznej

Sposoby przekazywania parametrów w metodach.

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

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

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

Podstawowe obiekty AutoCAD-a

Część 4 życie programu

Operacje grupowego przesyłania komunikatów

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Pobieranie argumentów wiersza polecenia

I - Microsoft Visual Studio C++

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

Biblioteka standardowa - operacje wejścia/wyjścia

Podział programu na moduły

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Optymalizacja komunikacji w systemach rozproszonych i równoległych

Dodawanie grafiki i obiektów

Zadania do wykonaj przed przyst!pieniem do pracy:

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Programowanie w standardzie MPI

Podstawy programowania w C++

Wykład 8: klasy cz. 4

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

Enterprise, czyli instytutowy klaster obliczeniowy

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

Wstęp do Programowania, laboratorium 02

Operacje wejścia/wyjścia odsłona pierwsza

3. Instalator rozpocznie proces instalacji

Schematy blokowe. Algorytmy Marek Pudełko

Laboratorium 9 (Więcej Aktywności, w Androidzie)

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

geometry a w przypadku istnienia notki na marginesie: 1 z 5

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

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

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

5 Przygotował: mgr inż. Maciej Lasota

Program SMS4 Monitor

Funkcje zawarte w bibliotece < io.h >

Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9

Wskaźniki w C. Anna Gogolińska

1.Wstęp. 2.Generowanie systemu w EDK

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

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

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

INSTYTUT TECHNIKI Zakad Elektrotechniki i Informatyki mdymek@univ.rzeszow.pl FLASH

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Utworzenie pliku. Dowiesz się:

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Lekcja 8 - ANIMACJA. 1 Polecenia. 2 Typy animacji. 3 Pierwsza animacja - Mrugaj ca twarz

Funkcje zawarte w bibliotece < io.h >

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

KONKURS PRZEDMIOTOWY INFORMATYCZNY DLA UCZNIÓW GIMNAZJUM

Praktyka programowania projekt

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

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Zmienne, stałe i operatory

Ćwiczenie nr 3. Temat: Definicje i wykorzystanie funkcji, parametry funkcji

Wstęp do programowania

Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. 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

Zadanie 2: Arytmetyka symboli

Programowanie komputerowe. Zajęcia 1

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Wprowadzenie do QT OpenGL

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Instrukcja obsługi programu Pilot PS 5rc

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24

Instrukcja obsługi programu MechKonstruktor

Janusz Ganczarski. OpenGL Pierwszy program

Zastosowanie programu Microsoft Excel do analizy wyników nauczania

Język C i C++. Podstawy. Zagadnienia do opanowania. Przykład 1. (modyfikuj kod, aby zrealizować punkty 5., 7.)

Wskaźniki. Informatyka

Programowanie - wykład 4

Transkrypt:

Biblioteki graficzne MPI - MPE Michał Sajkowski Mirosław Kupczyk

literatura [Chan1998] A. Chan, W. Gropp, E. Lusk, User s Guide formpe: Extensions to MPI Programs, ANL 1998. Web pages for MPI and MPE: http://wwwunix.mcs.anl.gov/mpi/www/ [Chan2005] A. Chan, D. Ashton, R. Lusk, W. Gropp, Jumpshot-4 Users Guide, ANL, May 2005 2

literatura [Gropp1999] W. Gropp, E. Lusk, A. Skjellum, Using MPI. Portable Parallel Programming with the Message Passing Interface, 2nd edition, The MIT Press 1999 [PerfVis] Performance Visualization for Parallel Programs, http://wwwunix.mcs.anl.gov/perfvis/ 3

literatura [Meglicki2004] Z. Meglicki, High Performance Data Management and Processing, I590, Section 7462, Indiana University, April 2004, 407 pages. 4

co to jest MPE? MPE (Multi-Processing Environment) jest to pakiet zapewniajcy programicie kompletny zestaw narzdzi analizy wydajnoci programów MPI pakiet ten zawiera: biblioteki profilujce programy uytkowe narzdzia wizualizacji 5

biblioteki profilujce zawieraj programy do tworzenia plików dziennika (logi) pliki te mona tworzy na trzy sposoby: rcznie za pomoc wywoła MPE w programie MPI automatycznie przez linkowanie bibliotek MPE łcznie oboma sposobami 6

biblioteki profilujce MPE oferuje obecnie trzy biblioteki profilujce: bibliotekladów (Tracing Library) bibliotek animacji (Animation Library) bibliotek dzienników (Logging Library) 7

biblioteka ladów ledzi wszystkie wywołania MPI kade wywołanie MPI jest poprzedzone lini zawierajc numer procesu w MPI_COMM_WORLD procesu wywołujcego, po której jest linia wskazujca e wywołanie si zakoczyło wiele programów nadawania i obioru wskazuje warto licznika, etykiety i partnera (dest/source) wyjcie jest kierowane na wyjcie standardowe 8

biblioteka animacji prosty program animacji w czasie rzeczywistym wymaga X-window 9

biblioteka dzienników najczciej wykorzystywana biblioteka w MPE tworzy podstawy dla generowania dzienników z programów MPI formaty plików dziennika: CLOG, ALOG i SLOG 10

formaty plików dziennika CLOG format domylny, zbiór zdarze etykietowanych czasem ALOG dla kompatybilnoci wstecznej SLOG Scalable LOG, najmocniejszy, przekształcany z CLOG (preferowane), albo generowany przy wykonywaniu programu MPI (zmienna MPE_LOG_FORMAT ustawiona na SLOG) 11

programy uytkowe konwertery formatu dziennika (clog2slog) programy wydruku dziennika (slog_print) 12

narzdzia wizualizacji programy do wywietlania dziennika (upshot dla ALOG, jumpshot-2 dla CLOG i jumpshot-3 dla SLOG) 13

mechanizmy tworzenia dziennika dziennik zdarze: kady element dziennika ma tylko etykiet czasow dziennik stanów: kady element dziennika zawiera etykiet czasow zdarzenia pocztkowego i zdarzenia kocowego dziennik graficzny: element dziennika to w pełni graficzny obiekt 14

formaty plików dziennika dziennik zdarze: ALOG, BLOG, CLOG dziennik stanów: SLOG-1 dziennik graficzny: SLOG-2 15

ALOG przykład: plik ASCII zdarze i stanów [Meglicki2004]: -7 0 0 0 0 42890-8 0 0 1 0 0-11 0 0 0 0 0-13 0 13 14 0 0 cyan:boxes BCAST -13 0 25 26 0 0 purple:2x2 REDUCE 16

SLOG-2 przykład [Meglicki2004]: Number of Drawables = 16 Number of Unmatched Events = 0 Total ByteSize of the logfile = 3688 timeelapsed between 1 & 2 = 873 msec timeelapsed between 2 & 3 = 50 msec 17

cele biblioteki MPE analiza i wizualizacja programu MPI wizualizacja danych obsługiwanych przez program MPI 18

wyposaenie programu MPI w mechanizmy MPE omówimy teraz, korzystajc z analizy przedstawionej w [Meglicki2004], sposób wyposaenia programu MPI w mechanizmy MPE 19

wyposaenie programu MPI w mechanizmy MPE jak wyposay program jak czyta dziennik wykorzystywane narzdzia wizualizacji przykład zaczerpnity z [Meglicki2004] 20

wyposaenie programu MPI w mechanizmy MPE MPE zapewnia zaawansowane narzdzia do zapisu zdarze i stanów programu do dziennika dzienniki s tworzone na bieco i zapisywane w pamici, aby zminimalizowa wpływ zapisu na działanie programu po zakoczeniu programu zapisywany jest plik dziennika 21

wyposaenie programu MPI w mechanizmy MPE zapisowi do dziennika towarzysz dokładne etykiety czasowe pozwala to okreli i rozwiza problemy z synchronizacj, komunikacj oraz zapewni optymalizacj tych działa moemy w ten sposób wpływa na wykonanie programu 22

wyposaenie programu MPI w mechanizmy MPE tworzenie dziennika z etykietami czasowymi, zwane tworzeniem dziennika MPE, jest realizowane domylnie obowizuje zasada, e wszystko, co zdarzy si w programie, jest zapisywane w dzienniku dziennik mona potem dostosowa do potrzeb 23

wyposaenie programu MPI w mechanizmy MPE aby uruchomi tworzenie dziennika MPE, przy kompilacji programu naley dolinkowa bibliotek lmpe: jeeli programem kompilowanym jest program MPI wyliczania liczby π, o nazwie cpi, mamy: mpicc c cpi cpi.c llmpe -lmpe 24

wyposaenie programu MPI w mechanizmy MPE wtedy po wykonywaniu programu cpi: mpiexec n 8 cpi w treci wyniku działania programu pojawi si dwie linie: Writing logfile. Finished writing logfile. a w katalogu plik dziennika cpi.clog 25

wyposaenie programu MPI w mechanizmy MPE mona przekształci plik dziennika clog w plik slog2, poleceniem: clogt0slog2 cpi.clog i otrzyma bardziej czytelny plik cpi.slog2 a nastpnie uruchomi program jumpshot na pliku slog2 26

wyposaenie programu MPI w mechanizmy MPE jumpshot jest stosunkowo duym programem w jzyku Java, który czyta plik slog2 i wywietla zdarzenia i stany programu w postaci wielu długich, poziomych termometrów, gdzie kady termometr odpowiada jednemu procesowi 27

wyposaenie programu MPI w mechanizmy MPE przesyłanie komunikatów jest oznaczane za pomoc strzałek, łczcych róne termometry w ten sposób łatwo zobaczy, kiedy komunikat został nadany, a kiedy odebrany rónym stanom procesu odpowiadaj róne kolory termometru 28

wyposaenie programu MPI w mechanizmy MPE przykład z jumpshot-4 [Chan2005]: 29

wyposaenie programu MPI w mechanizmy MPE obliczanie moe by oznaczone kolorem czerwonym, czekanie na dane kolorem czarnym, itp. okno wywietlajce termometry nazywa si Timeline Window duy program moe dawa nieczytelny rysunek, który mona oglda za pomoc opcji szkła powikszajcego 30

wyposaenie programu MPI w mechanizmy MPE w celu dopasowania zapisu dziennika, naley program MPI jawnie wyposay w odpowiednie mechanizmy zacytujemy przykład wyposaenia programu MPI w mechanizmy MPE, podany w [Meglicki2004], analizujcy znany program cpi.c, znajdujcy si w dokumentacji MPICH2 31

wyposaenie programu MPI w mechanizmy MPE #include <mpi.h> #include <mpe.h> #include <math.h> #include <stdio.h> double f( double ); double f(double a) { return (4.0 / (1.0 + a*a)); } 32

wyposaenie programu MPI w mechanizmy MPE int main( int argc, char *argv[]) { int n, myid, numprocs, i, j; double PI25DT = 3.141592653589793238462643 double mypi, pi, h, sum, x; double startwtime = 0.0, endwtime; int namelen; int event1a, event 1b, event2a, event2b, event3a, event3b, event4a, event4b; char processor_name[mpi_max_processor_name]; MPI_Init(&argc, &argv); 33

wyposaenie programu MPI w mechanizmy MPE MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_Size(MPI_COMM_WORLD, &myid); MPI_Get_processor_name(processor_name, &namelen); printf(stderr,"process %d running on%s\n", myid, processor_name); MPE_Init_log(); 34

wyposaenie programu MPI w mechanizmy MPE /* we event ID z MPE, uytkownik nie powinien przydziela event ID */ event1a = MPE_Log_get_event_number(); event1b = MPE_Log_get_event_number(); event2a = MPE_Log_get_event_number(); event2b = MPE_Log_get_event_number(); event3a = MPE_Log_get_event_number(); event3b = MPE_Log_get_event_number(); event4a = MPE_Log_get_event_number(); event4b = MPE_Log_get_event_number(); 35

wyposaenie programu MPI w mechanizmy MPE if (myid == 0) { MPE_Describe_state(event1a, event1b, "Broadcast", "red"); MPE_Describe_state(event2a, event2b, "Compute", "blue"); MPE_Describe_state(event3a, event3b, "Reduce", "green"); MPE_Describe_state(event4a, event4b, "Sync", "orange"); } if (myid == 0) { n = 1000000; startwtime = MPI_Wtime(); } 36

wyposaenie programu MPI w mechanizmy MPE MPI_Barrier(MPI_COMM_WORLD); MPE_Start_log(); for (j = 0; j < 5; j++) { MPE_Log_event(event1a, 0, "start broadcast"); MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); MPE_Log_event(event1b, 0, "end broadcast"); 37

wyposaenie programu MPI w mechanizmy MPE MPE_Log_event(event4a, 0, "Start Sync"); MPI_Barrier(MPI_COMM_WORLD); MPE_Log_event(event4b, 0, "End Sync"); MPE_Log_event(event2a, 0, "start compute"); h = 1.0 / (double) n; sum = 0.0; for (i = myid + 1; i <=n; i += numprocs) { x = h * ((double)i 0.5); sum += f(x); } 38

wyposaenie programu MPI w mechanizmy MPE mypi = h * sum; MPE_Log_event(event2b, 0, "end compute"); MPE_Log_event(event3a, 0, "start reduce"); MPI_Reduce(&mypi, &pi,1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPE_Log_event(event3b, 0, "end reduce"); } MPE_Finish_log("cpilog "); if (myid == 0) { 39

wyposaenie programu MPI w mechanizmy MPE if (myid == 0) { endwtime = MPI_Wtime(); printf("pi is approximately %.16f, Error is %.16f\n", pi, fabs(pi PI25DT)); printf("wall clock time = %f\n", endwtime-startwtime); } } MPI_Finalize(); return(0); 40

wyposaenie programu MPI w mechanizmy MPE program ten mona zlinkowa z bibliotek lmpe nastpujco: mpicc o cpilog cpilog.c lmpe po uruchomieniu, generuje si plik cpilog.clog, który nastpnie jest przetwarzany za pomoc clogt0slog2 i ogldany programem jumpshot 41

wyposaenie programu MPI w mechanizmy MPE przyjrzyjmy si bliej programowi wyposaonemu w mechanizmy MPE wywołanie funkcji MPE_Init_log() inicjuje podsystem tworzenia dziennika ta funkcja jest wywołana jawnie, kiedy program jest zlinkowany z bibliotek -lmpe 42

wyposaenie programu MPI w mechanizmy MPE zalet jawnego zapisu dziennika jest moliwo wyboru, co si zapisuje przy linkowaniu programu z bibliotekami llmpe lmpe, funkcja ta jest wywołana przez bibliotek llmpe zaraz na pocztku programu, w sposób niejawny wtedy wszystko jest zapisywane w dzienniku 43

wyposaenie programu MPI w mechanizmy MPE po inicjacji zapisu dziennika, definiuje si zdarzenia, przydzielajc dynamicznie generowane liczby całkowite zdarzeniom: event1a = MPE_Log_get_event_number(); event1b = MPE_Log_get_event_number(); event2a = MPE_Log_get_event_number(); event2b = MPE_Log_get_event_number(); event3a = MPE_Log_get_event_number(); event3b = MPE_Log_get_event_number(); event4a = MPE_Log_get_event_number(); event4b = MPE_Log_get_event_number(); 44

wyposaenie programu MPI w mechanizmy MPE nastpnie definiuje si stany wywołujc funkcje MPE_Describe_state: if (myid == 0) { MPE_Describe_state(event1a, event1b, "Broadcast", "red"); MPE_Describe_state(event2a, event2b, "Compute", "blue"); MPE_Describe_state(event3a, event3b, "Reduce", "green"); MPE_Describe_state(event4a, event4b, "Sync", "orange"); } 45

wyposaenie programu MPI w mechanizmy MPE definicje nie podaj jeszcze czym s te zdarzenia, ale teraz programista musi podj decyzj zdarzenia event1a i event1b to pocztek i koniec rozgłaszania (broadcast) kiedy dziennik jest analizowany przez program jumpshot, czas trwania rozgłaszania jest oznaczony czerwonym paskiem 46

wyposaenie programu MPI w mechanizmy MPE podobnie, obliczenie moe by oznaczone na niebiesko, MPI_Reduce na zielono, a czas trwania MPI_Barrier na pomaraczowo std działania oznaczone na niebiesko maj tu znaczenie pozytywne, a innym kolorem negatywne 47

wyposaenie programu MPI w mechanizmy MPE definicja stanu jest okrelana dla jednego procesu, pozostałe j akceptuj sam zapis dziennika rozpoczyna si wywołaniem funkcji MPE_Start_log() wtedy podajemy, co oznacza dane zdarzenie, poczynajc od zdarzenia event1a do zdarzenia event4b 48

wyposaenie programu MPI w mechanizmy MPE funkcja MPE_Log_event zapisuje zdarzenie event1a, oznaczajce start broadcast, tu przed wywołaniem MPI_Bcast : MPE_Log_event(event1a, 0, "start broadcast"); MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); MPE_Log_event(event1b, 0, "end broadcast"); i zdarzenie event1b, oznaczajce end broadcast tu po zakoczeniu MPI_Bcast jumpshot pokazuje ten czas na czerwono 49

wyposaenie programu MPI w mechanizmy MPE podobnie moemy zakreli wywołanie funkcji MPI_Barrier zdarzeniami event4a i event4b : MPE_Log_event(event4a, 0, "Start Sync"); MPI_Barrier(MPI_COMM_WORLD); MPE_Log_event(event4b, 0, "End Sync"); 50

wyposaenie programu MPI w mechanizmy MPE równie moemy oznaczy całe obliczanie zdarzeniami event2a i event2b : MPE_Log_event(event2a, 0, "start compute"); h = 1.0 / (double) n; sum = 0.0; for (i = myid + 1; i <=n; i += numprocs) { x = h * ((double)i 0.5); sum += f(x); } mypi = h * sum; MPE_Log_event(event2b, 0, "end compute"); 51

wyposaenie programu MPI w mechanizmy MPE i na koniec zaznaczamy wywołanie MPI_Reduce zdarzeniami event3a i event3b : MPE_Log_event(event3a, 0, "start reduce"); MPI_Reduce(&mypi, &pi,1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); MPE_Log_event(event3b, 0, "end reduce"); 52

wyposaenie programu MPI w mechanizmy MPE wywołanie funkcji MPE_Finish_log("cpilog "); zamyka dziennik i zapisuje go do pliku cpilog.clog to wywołanie jest wydane jawnie, kiedy stosuje si linkowanie jedynie z bibliotek lmpe kiedy jest linkowanie z bibliotekami llmpe i lmpe, wtedy plik jest generowany automatycznie 53

wyposaenie programu MPI w mechanizmy MPE poniewa programista moe si pomyli, wtedy lepiej stosowa automatyczny zapis do dziennika 54

grafika MPE stworzono j dla równoległego wywietlania danych z wielu procesów w jednym oknie X zawiera programy rysujce i dwa programy odczytujce pozycj myszki oraz prostokt zakrelany myszk pokaemy przykład grafiki MPE z wykorzystaniem programu cxgraphics.c z ksiki [Meglitski2004] 55

grafika MPE oto kod programu cxgraphics.c : #include <stdio.h> #include <stdlib.h> #include "mpe.h" #include "mpe_graphics.h" int main( int argc, char** argv ) { MPE_XGraph graph; int ierr, mp_size, my_rank; MPE_Color my_color; char ckey; 56

grafika MPE MPI_Init( &argc, &argv ); MPI_Comm_size( MPI_COMM_WORLD, &mp_size ); MPI_Comm_rank( MPI_COMM_WORLD, &my_rank ); ierr = MPE_Open_graphics( &graph, MPI_COMM_WORLD, NULL, if ( ierr!= MPE_SUCCESS ) { } -1, -1, 400, 400, 0 ); fprintf( stderr, "%d : MPE_Open_graphics() fails\n", my_rank ); ierr = MPI_Abort( MPI_COMM_WORLD, 1 ); 57

grafika MPE my_color = (MPE_Color) (my_rank + 1); if ( my_rank == 0 ) ierr = MPE_Draw_string( graph, 187, 205, MPE_BLUE, "Hello" ); ierr = MPE_Draw_circle( graph, 200, 200, 20+my_rank*5, my_color ); ierr = MPE_Update( graph ); if ( my_rank == 0 ) { fprintf( stdout, "Hit any key then return to continue " ); fscanf( stdin, "%s", &ckey ); fprintf( stdout, "\n" ); } 58

grafika MPE MPI_Barrier( MPI_COMM_WORLD ); ierr = MPE_Close_graphics( &graph ); MPI_Finalize(); } return 0; 59

grafika MPE program ten linkuje i kompiluje si poleceniem: mpicc -o cxgraphics cxgraphics.c -lmpe -L/usr/X11R6/lib -lx11 lm nastpnie mona go uruchomi poleceniem: mpiexec n 16 cxgraphics program ten rysuje proste figury geometryczne i wywietla napisy w kolorze 60

grafika MPE wyjanijmy wpierw procedury graficzne w programie: po inicjacji MPI: MPI_Init( &argc, &argv ); MPI_Comm_size( MPI_COMM_WORLD, &mp_size ); MPI_Comm_rank( MPI_COMM_WORLD, &my_rank ); program otwiera okno X11: ierr = MPE_Open_graphics( &graph, MPI_COMM_WORLD, NULL, -1, -1, 400, 400, 0 ); 61

grafika MPE ierr = MPE_Open_graphics( &graph, MPI_COMM_WORLD, NULL, -1, -1, 400, 400, 0 ); &graph to wskanik do zmiennej MPE_Xgraph, po otwarciu okna, procedury rysujce odnosz si do rysunku graph komunikator nazwa ekranu, moe bynull rozmiar okna 400pixels x 400pixels 0, to tryb niekolektywny funkcji 62

grafika MPE poniewa jest to tryb niekolektywny, wiele procesów zwraca róne odpowiedzi testuje si jak inne błdy były obsługiwane fragmentem programu: if ( ierr!= MPE_SUCCESS ) { } fprintf( stderr, "%d : MPE_Open_graphics() fails\n", my_rank ); ierr = MPI_Abort( MPI_COMM_WORLD, 1 ); 63

grafika MPE if ( ierr!= MPE_SUCCESS ) { } fprintf( stderr, "%d : MPE_Open_graphics() fails\n", my_rank ); ierr = MPI_Abort( MPI_COMM_WORLD, 1 ); proces, któremu nie udało si uzyska dostpu do ekranu X11 i otworzy swojej czci okna X11, pisze komunikat o błdzie i rezygnuje, co moe zakoczy cały program MPI 64

grafika MPE zakładajc, e tak si nie stało, proces definiuje swój kolor: my_color = (MPE_Color) (my_rank + 1); a proces o numerze 0 wywietla słowo hello w oknie: if ( my_rank == 0 ) ierr = MPE_Draw_string( graph, 187, 205, MPE_BLUE, "Hello" ); 65

grafika MPE if ( my_rank == 0 ) ierr = MPE_Draw_string( graph, 187, 205, MPE_BLUE, "Hello" ); pierwszy argument funkcji MPE_Draw_string to graph zwracany przez MPE_Open_graphics drugi i trzeci to współrzdne pocztku łacucha w pikselach, wzgldem lewego górnego rogu okna, czwarty to kolor łacucha, ostatni to sam łacuch (tekst) 66

grafika MPE teraz kady proces rysuje koło własnego koloru, o rodku w punkcie (200,200): ierr = MPE_Draw_circle( graph, 200, 200, 20+my_rank*5, my_color ); argumenty funkcji to: graph, współrzdne rodka, promie koła w pikselach, kolor nastpnie wywoływana jest funkcja: ierr = MPE_Update( graph ); 67

grafika MPE nastpnie wywoływana jest funkcja: ierr = MPE_Update( graph ); zapewniajca, e wszystko co jest rysowane na obiekcie graph jest przekazane do okna X11 68

grafika MPE w tym momencie program czeka na uytkownika, a co napisze na klawiaturze w przeciwnym razie obraz zniknie prawie natychmiast: if ( my_rank == 0 ) { } fprintf( stdout, "Hit any key then return to continue " ); fscanf( stdin, "%s", &ckey ); fprintf( stdout, "\n" ); MPI_Barrier( MPI_COMM_WORLD ); 69

grafika MPE zauwamy, e to process 0 jest odpowiedzialny za konsol inne procesy czekaj na barier bariera musi by, gdy mamy potem: ierr = MPE_Close_graphics( &graph ); 70

grafika MPE gdyby tak nie było, inne procesy mogłyby pobra swoje czci rysunku, ale poniewa jest bariera, mog to zrobi dopiero po napisaniu czego przez uytkownika na klawiaturze program koczy si standardowo: MPI_Finalize(); } return 0; 71

grafika MPE Wszystkie procesy współdziel ten sam obiekt graph. Kady proces ma dostp do dowolnego piksela to zaley od programisty, czy one sobie nie przeszkadzaj 72

Jumpshot-4 [Chan2005] 73

Jumpshot-4 [Chan2005] 74