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

Save this PDF as:
 WORD  PNG  TXT  JPG

Wielkość: px
Rozpocząć pokaz od strony:

Download "Wprowadzenie do MPI. Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski http://www.icm.edu."

Transkrypt

1 Wprowadzenie do MPI Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski Maciej Cytowski Maciej Szpindler 1

2 Projekt POWIEW Program Obliczeń Wielkich Wyzwań Nauki i Techniki Projekt jest bezpośrednio realizowany przez konsorcjum stworzone przez ICM UW, ACK CYFRONET AGH oraz PCSS IChB PAN. Wielkie wyzwania obliczeniowe w dziedzinach: nauk materiałowych modelowania atmosfery analizy wizualnej neuroinformatyki astrofizyki i kosmologii Wspólne projekty prowadzone przez naukowców i programistów HPC. 2

3 Plan Wstęp Message Passing Interface podstawy Quickstart Przegląd funkcjonalności MPI, kompilacja, uruchamianie zadań Komunikacja point-to-point Hands-on: ping-pong Komunikacja nieblokująca Typy danych MPI Konstrukcja wirtualnych topologii w MPI Komunikacja grupowa 3

4 Środowisko szkoleniowe Logowanie na komputerach w labie: labszk01,, labszk10 (lub własny login) Logowanie do ICM i na komputery obliczeniowe: kdmszk01,, kdmszk10 (lub własny login) Komputer obliczeniowy: halo2 Sposób logowania: 1. Logowanie na komputerach w laboratorium. 2. ssh delta 3. ssh halo2 Materiały szkoleniowe: 4

5 Wstęp: Programowanie równoległe Programowanie równoległe Podstawowa założenie: program lub jego części mogą wykonywać się jednocześnie na więcej niż jednej jednostce obliczeniowej Jednostka obliczeniowa: procesor, rdzeń procesora, wątek sprzętowy, wątek systemowy, inne Różne konstrukcje programów równoległych Równoległość na poziomie algorytmu Równoległość ze względu na dane Równoległość pętli / zadań Automatyczna (systemowa/sprzętowa) równoległość System HPC: Jaguar, ORNL 5

6 Wstęp: od superkomputerów do laptopów Pierwsze komputery równoległe Superkomputery MPP (Cray, Thinking Machines) Serwery SMP (SGI) Ograniczenia w przyśpieszaniu procesorów skalarnych Wprowadzenie równoległości na poziomie procesora (wielo-rdzeniowość) Dziś można mieć w laptopie procesor z 4- lub więcej rdzeniami, karty graficzne mogą mieć setki rdzeni obliczeniowych The TOP500 Project: Looking Back over 15 Years of Supercomputing Experience Hans Werner Meuer 6

7 Wstęp: problemy i apetyt na moc obliczeniową Złożone problemy od dziesięcioleci napędzają zapotrzebowanie na wciąż szybsze komputery Symulacje klimatu i atmosfery Dynamika białek Fizyka wysokich energii Przeszukiwanie olbrzymich zbiorów danych Google itp. Grafika wysokiej jakości Metoda śledzenia promieni w czasie rzeczywistym 7

8 Wstęp: współczesne trendy rozwoju procesorów Wyścig w ilości rdzeni na jeden procesor Kompromis pomiędzy liczbą rdzeni a ich wydajnością Problemy i ograniczenia technologiczne Hierarchiczna równoległość na poziomie sprzętowym Wiele procesorów Wiele rdzeni Wiele wątków Obsługa pamięci, hierarchia i dostęp do pamięci 8

9 Wstęp: modele programowania Modele programowania odpowiadające problematyce obliczeń Trywialna równoległość całkowita niezależność danych Nietrywialna równoległość zależność danych SPMD: Single Program Multiple Data MPMD: Multiple Program Multiple Data Stream (pipeline) Programming Task pool Modele programowania odpowiadające architekturze sprzętowej Współdzielona pamięć szybka komunikacja i synchronizacja; ograniczona liczba procesorów Pamięć rozproszona nieograniczona liczba procesorów; koszt komunikacji rośnie z liczbą procesorów; błędy trudne do wyśledzenia 9

10 Architektury równoległe i sposoby ich programowania Architektury o pamięci współdzielonej (SMP, multi-core, CMT) Wątki (POSIX threads), OpenMP, biblioteki Architektury o pamięci rozproszonej (klastry) MPI Architektury o pamięci/równoległości hierarchicznej (klastry) Wątki + MPI, dziś praktycznie MPI Architektury nietypowe Wątki, dedykowane biblioteki Architektury hybrydowe MPI + dedykowane biblioteki 10

11 Plan Wstęp Message Passing Interface podstawy Quickstart Przegląd funkcjonalności MPI, kompilacja, uruchamianie zadań Komunikacja point-to-point Hands-on: ping-pong Komunikacja nieblokująca Typy danych MPI Konstrukcja wirtualnych topologii w MPI Komunikacja grupowa 11

12 Podstawy: Biblioteka MPI MPI - Message Passing Interface Biblioteka (standard) do tworzenia programów równoległych Pracuje natywnie z C,C++,Fortranem Faktyczny standard programowania w oparciu o wymianę komunikatów Wersja 1.2 (MPI-1) wprowadza około 150 funkcji Wersja 2.1 (MPI-2) rozszerzona o nową funkcjonalność, razem ponad 500 funkcji Składa się z zestawu procedur i funkcji Różne implementacje MPICH / MPICH2 - OpenMPI - Intel MPI ($$$) HP MPI ($$$) 12

13 Podstawy: model równoległości Założenia Pamięć jest rozproszona = model pamięci rozproszonej procesy wymieniają się komunikatami Jawna równoległość Proces odpowiada fizycznej jednostce obliczeniowej Program składa się z procesów podprogramów działających na poszczególnych procesorach Stworzona dla komputerów masywnie równoległych Potrafi obsłużyć setki procesów / procesów Wiele implementacji dobrze pracuje na architekturach z pamięcią współdzieloną SPMD Single Program Multiple Data ten sam podprogram pracuje na każdym procesorze (wiele instancji tego samego programu) 13

14 Podstawy: Komunikator Podstawowa struktura programu równoległego używającego MPI Komunikator zbiór procesów mogących się wzajemnie komunikować W ramach komunikatora każdy proces otrzymuje unikalny identyfikator (numer) tzw. rank Informacja o komunikatorze zawarta jest w zmiennej typu MPI_COMM W czasie inicjacji programu biblioteka tworzy domyślny komunikator o nazwie MPI_COMM_WORLD zawierający wszystkie dostępne procesy Programista może definiować własne komunikatory zawierające podzbiory procesów 14

15 MPI: Pobieranie informacji z komunikatora Liczba (np) dostępnych procesów w ramach komunikatora MPI_Comm_size(MPI_COMM_WORLD, &np) Numer (rank) mojego procesu MPI_Comm_rank(MPI_COMM_WORLD,&rank) (Uwaga Fortran) rank = 0,..., np 1 C: int MPI_Comm_size ( MPI_Comm comm, int *np ); int MPI_Comm_rank ( MPI_Comm comm, int *rank ); Fortran: CALL MPI_COMM_SIZE ( integer comm, integer np, integer ierror ) CALL MPI_COMM_RANK ( integer comm, integer rank, integer ierror ) 15

16 Podstawy: Startowanie i zamykanie sesji Wywołania wszelkich funkcji i procedur biblioteki MPI muszą znajdować się pomiędzy instrukcjami: MPI_Init(&argc, &argv) Inicjuje działanie biblioteki i domyślnego komunikatora (sesję) MPI_Finalize(void) Kończy działanie sesji MPI Funkcje Init i Finalize muszą być wywołane przez wszystkie procesy w ramach sesji C: int MPI_Init ( int *argc, int **argv ); int MPI_Finalize ( ); Fortran: CALL MPI_INIT( integer ierror ) CALL MPI_FINALIZE ( integer ierror ) 16

17 Podstawy: Komunikaty Komunikat paczka danych przesyłana pomiędzy procesami przez łącze / sieć łącząca procesory w ramach komunikatora Paczka składa się z ustalonej liczby elementów określonego typu Aby przesłać paczkę należy zdefiniować: Identyfikator (rank) procesu wysyłającego Identyfikator (rank) procesu odbierającego Adres źródłowy i adres docelowy Typ i wielkość danych przesyłanych w paczce Komunikator 17

18 Podstawy: Podstawowe typy danych Typ MPI Typ języka C Typ MPI Typ Fortran MPI_CHAR signed char MPI_INTEGER INTEGER MPI_SHORT signed short int MPI_REAL REAL MPI_INT MPI_LONG MPI_UNSIGNED_CHAR signed int signed long int unsigned char MPI_DOUBLE_PRECISION MPI_COMPLEX DOUBLE PRECISION COMPLEX MPI_UNSIGNED_SHORT unsigned short int MPI_LOGICAL LOGICAL MPI_UNSIGNED unsigned int MPI_CHARACTER CHARACTER(1) MPI_UNSIGNED_LONG unsigned long int MPI_FLOAT float MPI_DOUBLE double MPI_LONG_DOUBLE long double MPI definiuje własne typy danych, które powinny być odpowiednikami typów w C Dodatkowo MPI_BYTE oraz MPI_PACKED 18

19 Podstawy: przesyłanie komunikatów Podstawowa metoda przesłania komunikatu pomiędzy dwoma procesami Nadawca wywołuje funkcję Send Odbiorca wywołuje funkcję Receive Poszczególne komunikaty odróżnia etykieta (tag) MPI_Send / MPI_Recv to funkcje blokujące tzn. blokują dalsze wykonanie programu do czasu zakończenia komunikacji 19

20 Podstawy: wysyłanie wiadomości C: int MPI_Send ( void *buf, int count, MPI_Datatype datatype, \ int dest, int tag, MPI_Comm comm ); Fortran: CALL MPI_SEND ( <type> buf, integer count, integer datatype, integer dest, integer tag, integer comm, integer ierror ) buf adres tablicy zawierającej wiadomość długości count, zawierającej elementy typu datatype dest numer (rank) procesu odbierającego w ramach komunikatora comm tag etykieta wiadomości 20

21 Podstawy: odbieranie wiadomości C: int MPI_Recv ( void *buf, int count, MPI_Datatype datatype, \ int source, int tag, MPI_Comm comm, \ MPI_Status *status); Fortran: CALL MPI_RECV ( <type> buf, integer count, integer datatype, integer source, integer tag, integer comm, integer status, integer ierror ) buf adres tablicy zawierającej wiadomość długości count, zawierającej elementy typu datatype source numer (rank) procesu wysyłającego w ramach komunikatora comm status zawiera informacje o komunikacji (struktura zawierająca MPI_SOURCE i MPI_TAG) Jedynie wiadomość o zgodnej etykiecie (tag) zostanie odebrana 21

22 Plan Wstęp Message Passing Interface podstawy Quickstart Przegląd funkcjonalności MPI, kompilacja, uruchamianie zadań Komunikacja point-to-point Hands-on: ping-pong Komunikacja nieblokująca Typy danych MPI Konstrukcja wirtualnych topologii w MPI Komunikacja grupowa Zadanie: równoległe rozwiązanie równania Poissona 22

23 Quickstart Zadanie: wyróżniony proces odbiera i wypisuje komunikaty wysyłane przez pozostałe procesy w ramach komunikatora p1 root pn recv & write send 23

24 Quickstart Pliki nagłówkowe C: #include <mpi.h> Fortran: include mpif.h 24

25 Quickstart Wspólna część programu C: int main(int argc, char** argv) { int p, src, dest, rank; int tag = 1; char mes[50]; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &p); MPI_Finalize(); } return 0; 25

26 Quickstart Część programu wykonywana przez proces wysyłający (root) C: for (src = 1; src < p; src++) { MPI_Recv(mes, 50, MPI_CHAR, src, tag, \ MPI_COMM_WORLD, &status); } printf("%s\n", mes); 26

27 Quickstart Częśc programu wykonywana przez pozostałe procesy C: sprintf(mes, "Halo, tu proces %d", rank); dest = 0; MPI_Send(mes, strlen(mes) + 1, MPI_CHAR, dest, tag, \ MPI_COMM_WORLD); 27

28 Quickstart Kompletny program quickstart.c: int main(int argc, char** argv) { int p, src, dest, rank; int tag = 1; char mes[50]; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &p); if ( rank!= 0 ) { sprintf(mes, "Halo, tu proces %d", rank); dest = 0; MPI_Send(mes, strlen(mes) + 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD); } } else { } for (src = 1; src < p; src++) { MPI_Recv(mes, 50, MPI_CHAR, src, tag, MPI_COMM_WORLD, &status); printf("%s\n", mes); } MPI_Finalize(); return 0; 28

29 Quickstart Kompilacja <ustawienie środowiska> >> mpicc quickstart.c Uruchomienie >> mpiexec np 4./a.out 29

30 Quickstart Definicja zadania dla systemu kolejkowego quickstart.pbs: #!/bin/csh #PBS N quickstart #PBS l nodes=1:ppn=4 #PBS l walltime=1:00:00 #PBS q test cd <workdir> <ustawienie środowiska> mpiexec./a.out Wstawienie zadania do kolejki >> qsub quickstart.pbs [Inne komendy: qstat, qstat f JOBID, qdel, ] 30

31 Quickstart Załóżmy, że zamiast odbierać komunikaty od procesów o numerach 1,,p-1 kolejno odbieramy od dowolnego procesu, który w danym momencie nadaje komunikat: C: for (src = 1; src < p; src++) { MPI_Recv(mes, 50, MPI_CHAR, MPI_ANY_SOURCE, tag, \ MPI_COMM_WORLD, &status); } printf("%s\n", mes); 31

32 Quickstart Wprowadź zmianę z poprzedniego slajdu i uruchom program kilkakrotnie Co można zaobserwować? Dlaczego tak się dzieje?? 32

33 Plan Wstęp Message Passing Interface podstawy Quickstart Przegląd funkcjonalności MPI, kompilacja, uruchamianie zadań Komunikacja point-to-point Hands-on: ping-pong Komunikacja nieblokująca Typy danych MPI Konstrukcja wirtualnych topologii w MPI Komunikacja grupowa 33

34 Kompilacja programów W większości implementacji biblioteki dostępne specjalne wrappery (nakładki) kompilatora C mpicc C++ - mpicc / mpicxx Fortran mpif90 / mpif77 Zastępują wywołanie właściwego kompilatora Pozwalają ustalić odpowiednie środowisko dla kompilacji i linkowania źródeł Dla gotowych źródeł często należy jawnie podać (zmienić) nazwę wywołania kompilatora 34

35 Kompilacja programów cd. Binaria kompilowane z biblioteką MPI z reguły nie będą przenaszalne w szczególności pomiędzy różnymi implementacjami MPI Uwaga: rozmiary typów przy mieszanych źródłach C/Fortran mogą wymagać uzgodnienia Niektóre (starsze) implementacje MPI mogą stwarzać problemy na architekturach 64-bitowych 35

36 Uruchamianie zadań Procesy należy startować za pomocą specjalnego narzędzia mpiexec (MPI-2) / mpirun (MPI-1) Uwaga na ustawienie środowiska (dostęp do bibliotek) Podstawowe parametry uruchomieniowe Liczba procesorów ( -n, --np. ) dla klastrów lista węzłów ( -host, -machinefile ) Przekazanie zmiennej środowiskowej ( -x, -env ) Dodatkowe parametry mogą różnić się pomiędzy wersjami biblioteki 36

37 Uruchamianie zadań cd. Klastry wielo-węzłowe korzystają na ogół z systemów kolejkowych System kolejkowy kontroluje przebieg zadań uruchamianych przez mpiexec-a/mpirun-a Należy odpowiednio poinstruować system kolejkowy o wymaganych zasobach System kolejkowy sam określi niezbędne parametry dla mpiexec-a/mpirun-a Uwaga: trudno oszacować ilość pamięci potrzebnej dla programu korzystającego z MPI 37

38 Zarządzanie procesami w MPI Sposób w jaki biblioteka MPI (część systemowa) zarządza procesami zależy od implementacji biblioteki scheduler systemowy demon / serwer kontrolujący procesy oddzielny proces użytkownika zarządzający procesami Różne komunikatory do różnych zadań operacje wejścia wyjścia i obliczenia Procesy dedykowane do specjalnych zadań Standard MPI-2 wprowadza dynamiczne zarządzanie procesami 38

39 Zarządzanie procesami w MPI Ciekawa funkcjonalność (specyficzne dla OpenMPI >= 1.3) mapowanie procesów w ramach przypisania procesów do węzłów: można przypisać logiczne numery procesów (rank-i) do fizycznych procesorów (socket-ów), a nawet do fizycznych rdzeni mapowanie procesów poprzez plik rankfile (-rf) realizowane przez bibliotekę Processor Affinity, dostępną tylko w linuxie przy złożonej komunikacji międzyprocesorowej można zyskać na wydajności 39

40 Plan Wstęp Message Passing Interface podstawy Quickstart Przegląd funkcjonalności MPI, kompilacja, uruchamianie zadań Komunikacja point-to-point Hands-on: ping-pong Komunikacja nieblokująca Typy danych MPI Konstrukcja wirtualnych topologii w MPI Komunikacja grupowa 40

41 Komunikacja point-to-point Najprostsza forma komunikacji Proces wysyła komunikat do innego wybranego procesu Różne tryby komunikacji point-to-point (blokującej) Standardowa - MPI_Send Synchroniczna - MPI_Ssend Asynchroniczna / buforowana - MPI_Bsend Ready - MPI_Rsend różnią się tym jak restrykcyjna ma być sychronizacja Wszystkie tryby są blokujące wysyłanie kończy się w momencie gdy użytkownik może bezpiecznie odczytać i modyfikować bufor wejściowy (tablicę zawierającą komunikat) Odbieranie MPI_Recv działa ze wszystkimi trybami wysyłania 41

42 Różne tryby wysyłania komunikatów Tryb wysyłania Synchroniczny MPI_Ssend Standardowy MPI_Send Buforowany MPI_Bsend Ready send MPI_Rsend Działanie Pełna synchronizacja, nie zakłada wcześniejszego wywołania MPI_Recv, zakończy wykonanie, gdy odbiorca rozpocznie odbieranie Wysyłanie blokujące, biblioteka decyduje o użyciu wewnętrznego bufora Korzysta z bufora użytkownika, nie wymaga wcześniejszego wywołanie MPI_Recv, zakończy wykonanie po umieszczeniu wiadomości w buforze Zakłada wcześniejsze wywołanie MPI_Recv 42

43 Różne tryby wysyłania komunikatów cd. MPI_Bsend wymaga zapewnienia przez użytkownika bufora odpowiedniej wielkości MPI_Buffer_attach tworzy bufor, MPI_Buffer_detach zwalnia bufor W przypadku przepełnienia bufora nastąpi błąd MPI_Rsend zakończy się błędem, jeżeli nie wystąpi wczesniej odpowiednie wywołanie MPI_Recv Potencjalnie niebezpieczne, nie zalecane do użycia 43

44 Plan Wstęp Message Passing Interface podstawy Quickstart Przegląd funkcjonalności MPI, kompilacja, uruchamianie zadań Komunikacja point-to-point Hands-on: ping-pong Komunikacja nieblokująca Typy danych MPI Konstrukcja wirtualnych topologii w MPI Komunikacja grupowa Zadanie: równoległe rozwiązanie równania Poissona 44

45 Hands-on: Ping-Pong Napisz program, w którym dwa procesy przesyłają sobie nawzajem komunikat, tzn. pierwszy proces wysyła liczbę A do drugiego, który po jej odebraniu odsyła ją do pierwszego. Użyj timera do pomiaru czasu przesłania każdej z wiadomości. Sprawdź jak rozmiar wiadomości wpływa na czas jej przesłania. Dodatkowo: Dla każdego rozmiaru wykonaj 64 powtórzenia. Wylicz średnią wydajność w: sekundach MB/s MPI_Wtime() zwraca liczbę podwójnej precyzji, do pomiaru czasu bloku operacji należy wywołać funkcję dwukrotnie i obliczyć różnicę (czas w sekundach) 45

46 Plan Wstęp Message Passing Interface podstawy Quickstart Przegląd funkcjonalności MPI, kompilacja, uruchamianie zadań Komunikacja point-to-point Hands-on: ping-pong Komunikacja nieblokująca Typy danych MPI Konstrukcja wirtualnych topologii w MPI Komunikacja grupowa 46

47 Komunikacja nieblokująca zwróć wykonanie do procesu od razu i pozwól na wykonywanie innej pracy w dalszej części proces powinien sprawdzić (test) lub poczekać (wait) na zakończenie operacji nieblokującej są to operacje wymagane operacja nieblokująca + następująca po niej od razu operacja wait = operacja blokująca stosowane w celu uniknięcia impasów (z ang. deadlocks) oraz bezczynności 47

48 Komunikacja nieblokująca - przykład Operacja wygładzania danych Input: tablica 1D z liczbami zmiennoprzecinkowymi Algorytm: każdemu elementowi tablicy przypisujemy średnią jego dwóch sąsiadów proces ten wykonujemy N-razy Output: tablica z wygładzonymi danymi 48

49 Komunikacja nieblokująca - przykład Wersja skalarna kodu: #define N #define RMAX 8192 int main(int argc, char **argv) { int k,r; int left,right; double I1[N],I2[N]; double *i_old,*i_new,*tmp; r=0; do{ for(k=0;k<n;k++) { left = (k-1+n)%n; right = (k+1)%n; i_new[k] = ( i_old[left] + i_old[right] ) / 2; } tmp=i_old; i_old=i_new; i_new=tmp; // Inicjalizacja I1 for(k=0;k<n;k++) { I1[k]=k; } i_old=i1; i_new=i2; } r++; } while(r<rmax); return (int)(i_new[0]); 49

50 Komunikacja nieblokująca - przykład Operacja wygładzania danych komunikacja blokująca Rozwiązanie naiwne : for(liczba iteracji) wyślij wartości brzegowe do sąsiadów; odbierz wartości brzegowe od sąsiadów; uaktualnij wszystkie elementy; Napotykamy dwa problemy: impas: każdy proces wysyła operacją blokującą, a żaden nie odbiera stan bezczynności: procesy czekają na otrzymanie halo 50

51 Impas (z ang. deadlock) Kod w każdym procesie MPI: MPI_Send(,right_rank, ) MPI_Recv(,left_rank, ) Rozwiązanie w naszym przykładzie: nieparzyste procesy wpierw wysyłają parzyste procesy wpierw odbierają po wykonaniu zamieniają się rolami 51

52 Komunikacja nieblokująca - przykład Wersja MPI blokująca kodu: #include <mpi.h> #define N #define RMAX 8192 int main(int argc, char **argv) { int k,r; int NL; int left,right; double *I1,*I2; double *i_old,*i_new,*tmp; int myproc,nprocs; int rproc,lproc; MPI_Status status; NL=N/nprocs; lproc = (myproc == 0? nprocs-1 : myproc-1); rproc = (myproc == nprocs-1? 0 : myproc+1); I1 = malloc((nl+2)*sizeof(double)); I2 = malloc((nl+2)*sizeof(double)); // Inicjalizacja I1 for(k=1;k<nl+1;k++) I1[k]=myproc*NL+k-1; i_old=i1; i_new=i2; r=0; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &myproc); 52

53 Komunikacja nieblokująca - przykład Wersja MPI blokująca kodu c.d. do{ MPI_Finalize(); if(myproc%2) { MPI_Send(&i_old[1],1,MPI_DOUBLE,lproc,1,MPI_COMM_WORLD); MPI_Send(&i_old[NL],1,MPI_DOUBLE,rproc,2,MPI_COMM_WORLD); MPI_Recv(&i_old[NL+1],1,MPI_DOUBLE,rproc,1,MPI_COMM_WORLD,&status); MPI_Recv(&i_old[0],1,MPI_DOUBLE,lproc,2,MPI_COMM_WORLD,&status); } else { MPI_Recv(&i_old[NL+1],1,MPI_DOUBLE,rproc,1,MPI_COMM_WORLD,&status); MPI_Recv(&i_old[0],1,MPI_DOUBLE,lproc,2,MPI_COMM_WORLD,&status); MPI_Send(&i_old[1],1,MPI_DOUBLE,lproc,1,MPI_COMM_WORLD); MPI_Send(&i_old[NL],1,MPI_DOUBLE,rproc,2,MPI_COMM_WORLD); } } return (int)(i_new[0]); for(k=1;k<nl+1;k++) { left=k-1; right=k+1; i_new[k] = ( i_old[left]+i_old[right]) /2; } tmp=i_old; i_old=i_new; i_new=tmp; r++; } while(r<rmax); 53

54 Komunikacja nieblokująca - przykład Operacja wygładzania danych komunikacja nieblokująca Rozwiązanie: for(liczba iteracji) uaktualnij elementy brzegowe; zainicjuj wysłanie wartości brzegowych; zainicjuj odebranie halo; uaktualnij elementy nie-brzegowe; poczekaj na zakończenie wysyłania; poczekaj na zakończenie odbierania; 54

55 Komunikacja nieblokująca Komunikacja realizowana w 3 krokach: inicjalizacja nieblokującej komunikacji natychmiast zwraca wykonanie do procesu nazwa funkcji rozpoczyna się od MPI_I wykonanie pracy, obliczenia, inna komunikacja czekanie na zakończenie komunikacji nieblokującej Nieblokujące wysłanie: MPI_Isend( ) //wykonanie pracy MPI_Wait( ) Nieblokujący odbiór: MPI_Irecv( ) //wykonanie pracy MPI_Wait( ) 55

56 Nieblokujące wysłanie C: int MPI_Isend( void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request ); int MPI_Wait ( MPI_Request *request, MPI_Status *status ); Fortran: CALL MPI_ISEND( choice buf, integer count, integer datatype, integer dest, integer tag, integer comm, integer request, integer ierror ) CALL MPI_WAIT( integer request, integer status(mpi_status_size), integer ierror ) Uwaga: buf nie powinien być używany pomiędzy Isend a operacją wait 56

57 Nieblokujący odbiór C: int MPI_Irecv( void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request ); int MPI_Wait ( MPI_Request *request, MPI_Status *status ); Fortran: CALL MPI_ISEND( choice buf, integer count, integer datatype, integer source, integer tag, integer comm, integer request, integer ierror ) CALL MPI_WAIT( integer request, integer status(mpi_status_size), integer ierror ) Uwaga: buf nie powinien być używany pomiędzy Irecv a operacją wait 57

58 Zakończenie operacji nieblokujących Oczekiwanie na zakończenie operacji nieblokujących: z użyciem blokującej funkcji MPI_Wait z użyciem pętli, w której sprawdzamy wartość flagi zwróconej z wywołania funkcji MPI_Test (flag == 1 lub.true.) C: int MPI_Wait ( MPI_Request *request, MPI_Status *status ); int MPI_Test ( MPI_Request *request, int *flag, MPI_Status *status); Fortran: CALL MPI_WAIT( integer request, integer status(mpi_status_size), integer ierror ) CALL MPI_TEST( integer request, integer flag, integer status(mpi_status_size), integer ierror) 58

59 Wiele komunikacji nieblokujących Kilka funkcji operujących na grupie komunikacji nieblokujących: poczekaj na zakończenie lub sprawdź status jednej wiadomości z grupy: int MPI_Waitany(int count,mpi_request array_of_requests[],int *index, MPI_Status *status ) int MPI_Testany(int count,mpi_request array_of_requests[],int *index, int *flag, MPI_Status *status ) poczekaj na zakończenie lub sprawdź status wszystkich wiadomości z grupy: int MPI_Waitall(int count,mpi_request array_of_requests[],mpi_status array_of_statuses[] ) int MPI_Testall(int count,mpi_request array_of_requests[],int *flag, MPI_Status array_of_statuses[] ) poczekaj na zakończenie lub sprawdź status tylu wiadomości ile jest możliwe: int MPI_Waitsome(int incount,mpi_request array_of_requests[],int *outcount,int array_of_indices[],mpi_status array_of_statuses[]) int MPI_Testsome(int incount,mpi_request array_of_requests[],int *outcount,int array_of_indices[],mpi_status array_of_statuses[]) 59

60 Plan Wstęp Message Passing Interface podstawy Quickstart Przegląd funkcjonalności MPI, kompilacja, uruchamianie zadań Komunikacja point-to-point Hands-on: ping-pong Komunikacja nieblokująca Typy danych MPI Konstrukcja wirtualnych topologii w MPI Komunikacja grupowa 60

61 Typy danych w MPI Typy określają sposób ułożenia przesyłanych i odbieranych wiadomości w pamięci int MPI_Isend(&buf,1,MPI_FLOAT,0,tag,MPI_COMM_WORLD,&req); Rozróżniamy: typy podstawowe zdefiniowane w ramach biblioteki MPI MPI_CHAR, MPI_SHORT, MPI_INT, MPI_LONG, MPI_UNSIGNED_CHAR, MPI_UNSIGNED_SHORT, MPI_UNSIGNED, MPI_UNSIGNED_LONG, MPI_FLOAT, MPI_DOUBLE, MPI_LONG_DOUBLE, MPI_BYTE typy upakowane, specyfikowane przez MPI_PACKED typy definiowalne, np. wektory, struktury, inne 61

62 Typy podstawowe Typ MPI Typ języka C Typ MPI Typ Fortran MPI_CHAR signed char MPI_INTEGER INTEGER MPI_SHORT signed short int MPI_REAL REAL MPI_INT signed int MPI_DOUBLE_PRECISION DOUBLE PRECISION MPI_LONG signed long int MPI_COMPLEX COMPLEX MPI_UNSIGNED_CHAR unsigned char MPI_LOGICAL LOGICAL MPI_UNSIGNED_SHORT unsigned short int MPI_CHARACTER CHARACTER(1) MPI_UNSIGNED unsigned int MPI_BYTE MPI_UNSIGNED_LONG unsigned long int MPI_PACKED MPI_FLOAT float MPI_DOUBLE double MPI_LONG_DOUBLE long double MPI_BYTE MPI_PACKED 62

63 Typy MPI Typ danych wyspecyfikowany w komendzie send powinien dokładnie odpowiadać typowi wyspecyfikowanemu w komendzie recv MPI_BYTE = 8 znaków binarnych MPI_PACK umożliwia pakowanie elementów różnych typów do jednego bufora MPI_PACK może również reprezentować dowolny typ danych Jeśli nasza wiadomość nie jest tablicą elementów określonego typu, tylko niejednorodną wiadomością zawierająca np. dwie liczby całkowite i tablicę liczb zmiennoprzecinkowych, wówczas musimy skorzystać z jednego z dwóch mechanizmów tworzenia takich wiadomości: pakowanie danych tworzenie własnych typów danych MPI 63

64 Pakowanie danych MPI udostępnia możliwość przesłania bufora pamięci zawierającego spakowane elementy różnych typów Przesłanie takiego elementu wykonujemy przy użyciu typu MPI_PACKED Aby wykorzystać ten mechanizm należy: Spakować dane za pomocą funkcji MPI_PACK Przesłać bufor pamięci za pomocą komendy send Odebrać bufor pamięci za pomocą komendy recv Rozpakować dane za pomocą komendy MPI_UNPACK Rozwiązanie dosyć wygodne, ale związane z kopiowaniem danych do nowego miejsca w pamięci 64

65 Pakowanie danych Pakowanie danych do bufora inkrementalne dodawanie elementów do bufora pakowanie do bufora o nazwie outbuf i rozmiarze outcount, począwszy od pozycji position, danych w liczbie incount pochodzących z bufora inbuf o typie datatype dodatkowo istnieje możliwość skorzystania z grup komunikatorów (np. grup odpowiadających architekturom procesorów) argument position musi zostać przekazany przez adres, gdyż zwracane jest na nim pozycja w buforze wyjściowym po dodaniu nowego elementu (w bajtach) C: int MPI_Pack ( void *inbuf, int incount, MPI_Datatype datatype, void *outbuf, int outcount, int *position, MPI_Comm comm ) Fortran: CALL MPI_PACK(choice inbuf, integer incount, integer datatype, choice outbuf, integer outsize, integer position, integer comm, integer ierror) 65

66 Pakowanie danych Aby przygotować bufor wyjściowy odpowiedniej wielkości możemy wpierw sprawdzić wymagany rozmiar za pomocą funkcji MPI_Pack_Size Fukncja ta zapisuje pod zmienną size ilość bajtów potrzebną do upakowania incount elementów typu datatype C: int MPI_Pack_size (int incount, MPI_Datatype datatype, MPI_Comm comm,int *size ) Fortran: CALL MPI_PACK_SIZE(integer incount, integer datatype, integer comm, integer size, integer ierror) Do rozpakowania danych z przesłanego bufora możemy użyć funkcji MPI_Unpack C: int MPI_Unpack ( void *inbuf, int insize, int *position,void *outbuf, int outcount, MPI_Datatype datatype,mpi_comm comm ) Fortran: CALL MPI_UNPACK(choice inbuf, integer insize, integer position, choice outbuf, integer outcount, integer datatype, integer comm, integer ierror) 66

67 Pakowanie danych - przykład int position, i, j, a[2]; char buff[1000];... MPI_Comm_rank(MPI_COMM_WORLD, &myrank); if (myrank == 0) { position = 0; MPI_Pack(&i, 1, MPI_INT, buff, 1000, &position, MPI_COMM_WORLD); MPI_Pack(&j, 1, MPI_INT, buff, 1000, &position, MPI_COMM_WORLD); MPI_Send( buff, position, MPI_PACKED, 1, 0, MPI_COMM_WORLD); } else /* RECEIVER CODE */ MPI_Recv( a, 2, MPI_INT, 0, 0, MPI_COMM_WORLD) } 67

68 Definiowalne typy danych MPI MPI umożliwia nam definiowanie 3 rodzajów własnych typów: typy reprezentujące ciągły fragment pamięci zawierający elementy tego samego typu MPI_Type_Contiguous typy będące wektorami elementów danego typu, które nie reprezentują ciągłego fragmentu pamięci MPI_Type_Vector typy będące strukturami zawierającymi elementy różnych typów, które niekoniecznie reprezentują ciągły fragment pamięci MPI_Type_Struct 68

69 Ciągłe fragmenty pamięci Najprostszy definiowalny typ danych MPI stary typ nowy typ C: int MPI_Type_contiguous(int count,mpi_datatype oldtype, MPI_Datatype *newtype); Fortran: CALL MPI_TYPE_CONTIGUOUS(integer count, integer oldtype, integer newtype, integer ierror) MPI_Send(&buffer,1,newtype, ); 69

70 Typ wektorowy Używane jeśli interesujące nas wektory danego typu nie reprezentują ciągłego fragmentu pamięci, np. pomiędzy nimi znajdują się elementy, które nie powinny być przesłane/odebrane blocklength = 3 elementy na blok stride= 4 (co ile występuje nowy element) count = 3 bloki C: int MPI_Type_vector(int count,int blocklength,int stride, MPI_Datatype oldtype,mpi_datatype *newtype); Fortran: CALL MPI_TYPE_VECTOR(integer count, integer blocklength, integer stride, integer oldtype, integer newtype, integer ierror) 70

71 Struktury MPI Używane do przesyłania struktur zawierających elementy różnego typu, które niekoniecznie reprezentują ciągły fragment pamięci MPI_INT MPI_DOUBLE Count = 2 Array_of_blocklengths = {3,3} Array_of_displacements = {0,addr1-addr0} Array_of_types = {MPI_INT,MPI_DOUBLE} addr0 blok 0 blok 1 addr1 przerwa, np. jeśli wymagane jest uliniowienie co 8 bajtów C: int MPI_Type_struct(int count,int *array_of_blocklengths, MPI_Aint *array_of_displacements,mpi_datatype *array_of_types, MPI_datatype *newtype); Fortran: CALL MPI_TYPE_STRUCT(integer count, integer array_of_blocklengths(*), integer array_of_displacements(*), integer array_of_types(*), integer newtype, integer ierror) 71

72 Struktury MPI Aby obliczyć przemieszczenie potrzebne są nam adresy poszczególnych bloków Możemy do tego celu użyć funkcji MPI MPI-1 C: int MPI_Address(void* location,mpi_aint *address); Fortran: CALL MPI_ADDRESS(choice location, integer address, integer ierror) MPI-2 C: int MPI_Get_address(void *location, MPI_Aint *address); Fortran: CALL MPI_GET_ADDRESS(choice location(*), integer (KIND=MPI_ADDRESS_KIND) address, integer ierror) 72

73 Zatwierdzenie nowego typu Zanim użyjemy nowego typu danych MPI, musimy go zatwierdzić za pomocą komendy MPI_TYPE_COMMIT Musi być to wykonane tylko raz dla każdego procesu MPI C: int MPI_Type_commit(MPI_Datatype *datatype); Fortran: CALL MPI_TYPE_COMMIT(integer datatype, integer ierror) 73

74 Plan Wstęp Message Passing Interface podstawy Quickstart Przegląd funkcjonalności MPI, kompilacja, uruchamianie zadań Komunikacja point-to-point Hands-on: ping-pong Komunikacja nieblokująca Typy danych MPI Konstrukcja wirtualnych topologii w MPI Komunikacja grupowa 74

75 Wirtualne topologie Wirtualne topologie to mechanizm pozwalający nazywać procesy w komunikatorze w sposób, który lepiej pasuje do schematu komunikacji pomiędzy procesami Wirtualnych topologii użyjemy na przykład jeśli obliczenia wykonywane są na dwu-wymiarowej siatce i każdy proces komunikuje się tylko i wyłącznie ze swoimi najbliższymi sąsiadami w siatce 75

76 Wirtualne topologie Za mechanizmem wirtualnych topologii kryje się czysta arytmetyka liczb całkowitych Zyski ze stosowania tego mechanizmu: prostszy kod czasem lepsza wydajność podpowiadamy bibliotece jak wygląda schemat komunikacji Nowa topologia tworzy nowy komunikator MPI zapewnia funkcje mapowania indeksów: w celu obliczenia numeru procesu na podstawie nazewnictwa stosowanego w topologii w celu obliczenia współrzędnych w topologii na podstawie numeru procesu 76

77 Wirtualne topologie C: int MPI_Cart_create ( MPI_Comm comm_old, int ndims, int *dims, int *periods, int reorder, MPI_Comm *comm_cart ) Fortran: CALL MPI_CART_CREATE(INTEGER COMM_OLD,INTEGER NDIMS,INTEGER DIMS(*), INTEGER PERIODS(*),INTEGER REORDER,INTEGER COMM_CART,INTEGER IERROR) Utworzenie nowego komunikatora o topologii kartezjańskiej ndims wymiar topologii kartezjańskiej (1 linia, 2 torus lub siatka 2D, 3 torus lub sitaka 3D) dims tablica definiująca liczbę procesów w każdym wymiarze periods tablica definiująca czy siatka zawiera zapętlenia w każdym z wymiarów reorder czy pozwalamy na zmianę numerów procesów w nowym komunikatorze 77

78 Wirtualne topologie C: int MPI_Cart_coords ( MPI_Comm comm, int rank, int maxdims, int *coords ) Fortran: CALL MPI_CART_COORDS(INTEGER COMM,INTEGER RANK,INTEGER MAXDIMS, INTEGER COORDS(*),INTEGER IERROR) rank - numer procesu maxdims - rozmiar tablicy coords. Funkcja zapisuje do tablicy coords współrzędne procesu o numerze rank C: int MPI_Cart_rank( MPI_Comm comm,int *coords,int *rank ) Fortran: CALL MPI_CART_RANK(INTEGER COMM,INTEGER COORDS(*),INTEGER RANK, INTEGER IERROR) Funkcja zapisuje pod adresem rank numer procesu o współrzędnych określonych w tablicy coords. 78

79 Wirtualne topologie Jak znaleźć sąsiadów? C: int MPI_Cart_shift ( MPI_Comm comm, int direction, int displ, int *source, int *dest ) Fortran: CALL MPI_CART_SHIFT(INTEGER COMM,INTEGER DIRECTION,INTEGER DISP, INTEGER RANK_SOURCE,INTEGER RANK_DEST,INTEGER IERROR) Funkcja ta przesuwa numer lokalnego procesu wzdłuż wyspecyfikowanego wymiaru, w celu wygenerowania numerów procesów źródłowego i docelowego Numer źródła otrzymany jest poprzez odjęcie displ od n-tej współrzędnej lokalnego procesu, gdzie n równe jest direction. Numer docelowego procesu otrzymywany jest poprzez dodawanie disp do n-tej współrzędnej. Współrzędne numerowane są od zera. Jeśli topologia nie jest periodyczna w wybranym wymiarze, to przy wyliczeniach sąsiadów procesorów brzegowych zostanie zwrócona wartość MPI_PROC_NULL 79

80 Plan Wstęp Message Passing Interface podstawy Quickstart Przegląd funkcjonalności MPI, kompilacja, uruchamianie zadań Komunikacja point-to-point Hands-on: ping-pong Komunikacja nieblokująca Typy danych MPI Konstrukcja wirtualnych topologii w MPI Komunikacja grupowa 80

81 Komunikacja grupowa Komunikacja grupowa, czyli taka, w której uczestniczy grupa procesów MPI Dana funkcja wywoływana jest przez wszystkie procesy w komunikatorze W MPI wyróżniamy następujące typy komunikacji grupowej: Bariera synchronizacyjna operacja Broadcast nadaj wiadomość wielu procesom operacja typu rozrzuć (z ang. scatter) operacja typu zbierz (z ang. gather) operacja wszyscy do wszystkich operacja redukcji (np. globalna suma, globalne maksimum,..) 81

82 Bariera synchronizacyjna C: int MPI_Barrier(MPI_Comm comm); Fortran: CALL MPI_BARRIER(integer comm, integer ierror) Zwykle bariera nie jest potrzebna, gdyż odpowiednia synchronizacja powinna być zapewniona na bazie interfejsu przesyłania komunikatów Może być używana do: debugowania programów równoległych profilingu programów równoległych synchronizacji do operacji I/O 82

83 Operacja Broadcast Operacja polegająca na rozesłaniu tej samej wiadomości do wszystkich procesów grupy C: int MPI_Bcast(void* buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm); Fortran: CALL MPI_BCAST(choice buffer, integer count, integer datatype, integer root, integer comm, integer ierror) 83

84 Operacja scatter Operacja polegająca na rozesłaniu przez proces root wektora sendbuf podzielonego na kawałki sendcount do procesów w grupie (również do siebie) C: int MPI_Scatter(void* sendbuf,int sendcount,mpi_datatype sendtype,void* recvbuf, int recvcount,mpi_datatype recvtype,int root,mpi_comm comm); Fortran: CALL MPI_SCATTER(choice sendbuf, integer sendcount, integer sendtype, choice recvbuf, integer recvcount, integer recvtype, integer root, integer comm, integer ierror) 84

85 Operacja gather Operacja odwrotna do scatter, czyli zebranie kawałków wektora z procesorów w grupie i zapisanie ich w buforze wybranego procesora C: int MPI_Gather(void* sendbuf,int sendcount,mpi_datatype sendtype, void* recvbuf,int recvcount,mpi_datatype recvtype,int root, MPI_Comm comm); Fortran: CALL MPI_GATHER(choice sendbuf, integer sendcount, integer sendtype, choice recvbuf, integer recvcount, integer recvtype, integer root, integer comm, integer ierror) 85

86 Wszyscy do wszystkich Każdy z procesów wysyła do procesu i-tego sendcount kolejnych elementów typu sendtype, poczynając od elementu i*sendtype tablicy sendbuf C: int MPI_Alltoall( void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm ) Fortran: CALL MPI_ALLTOALL(choice sendbuf, integer sendcount, integer sendtype, choice recvbuf, integer recvcount, integer recvtype, integer comm, integer ierror) 86

87 Operacja redukcji Służy do wykonywania globalnej operacji na elementach procesów należących do grupy Operacja typu: d 0 od 1 od 2 o od n-1 d i to dane w procesie o numerze i (skalar lub wektor) o to pewna zdefiniowana operacja Istnieje możliwość skorzystania z gotowych definicji operacji takich jak suma czy maksimum Istnieje możliwość zdefiniowania własnych operacji funkcją MPI_Op_create(..) 87

88 Operacja redukcji globalna suma Chcemy dokonać sumowania pewnej wartości zawartej w inbuf po wszystkich procesach w grupie Użyjemy operacji MPI_SUM Wynik ma zostać zwrócony na resultbuf C: int MPI_Reduce( &inbuf, &resultbuf, 1, MPI_INT, MPI_SUM, root, MPI_COMM_WORLD ); Fortran: CALL MPI_REDUCE( inbuf, resultbuf, 1, MPI_INTEGER, MPI_SUM, root, MPI_COMM_WORLD, ierror) Dostępna jest również operacja MPI_ALLREDUCE (bez parametru root), która jest połączeniem operacji Reduce i Broadcast zwraca wynik w każdym procesie 88

89 Przykład: równoległe obliczanie liczby Pi Całkowanie metodą prostokątów następującego wzoru: 4 1 n x 0 i i ( ) n h 89

90 Przykład: równoległe obliczanie liczby Pi #include "mpi.h" #include <stdio.h> #include <math.h> int main( int argc, char *argv[] ){ } int n, nl, myid, numprocs, i; double PI25DT = ; double mypi, pi, h, sum, x; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); n = 4096; nl = n/numprocs; h = 1.0 / (double) n; sum = 0.0; for (i = myid*nl; i <= (myid+1)*nl; i ++) { } mypi = h * sum; x = h * ((double)i - 0.5); sum += (4.0 / (1.0 + x*x)); MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); if (myid == 0) MPI_Finalize(); return 0; printf("pi wynosi %.16f\n",pi);? Jak skaluje się ten program w zależności od: wielkości zadania n ilości procesów MPI Czy wyniki są powtarzalne? 90

91 Tabela zdefiniowanych operacji redukcji Nazwa operacji MPI_MAX MPI_MIN MPI_SUM MPI_PROD MPI_LAND MPI_BAND MPI_LOR MPI_BOR MPI_LXOR MPI_BXOR MPI_MAXLOC MPI_MINLOC Funkcja Maksimum Minimum Suma Iloczyn Logiczna koniunkcja Koniunkcja binarna Logiczna alternatywa Alternatywa binarna Logiczna alternatywa wykluczająca Binarna alternatywa wykluczająca Maksimum i jego pozycja Minimum i jego pozycja 91

92 Plan Wstęp Message Passing Interface podstawy Quickstart Przegląd funkcjonalności MPI, kompilacja, uruchamianie zadań Komunikacja point-to-point Hands-on: ping-pong Komunikacja nieblokująca Typy danych MPI Konstrukcja wirtualnych topologii w MPI Komunikacja grupowa Zadanie: równoległe rozwiązanie równania Poissona 92

93 Równanie Poisson a metoda różnic skończonych metoda iteracyjna Jacobi ego 5-punktowy krzyżak 93

94 Wymiana brzegu halo Pamięć rozproszona RAM1 CPU1 RAM2 CPU2 RAM3 CPU3 RAM4 CPU4 94

95 Wymiana brzegu halo Pamięć rozproszona RAM1 CPU1 RAM2 CPU2 RAM3 CPU3 RAM4 CPU4 95

96 Wymiana brzegu halo Pamięć rozproszona RAM1 CPU1 RAM2 CPU2 RAM3 CPU3 RAM4 CPU4 96

97 Dziękujemy za uwagę 97

Programowanie Równoległe Wykład 4. 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 Programowanie Równoległe Wykład 4 MPI - Message Passing Interface Maciej Matyka Instytut Fizyki Teoretycznej Jak używać w MPI? Donald Knuth: We should forget about small efficiencies, say about 97% of

Bardziej szczegółowo

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

Programowanie Równoległe Wykład 5. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej Programowanie Równoległe Wykład 5 MPI - Message Passing Interface Maciej Matyka Instytut Fizyki Teoretycznej Dorobiliśmy się strony WWW www.ift.uni.wroc.pl/~koma/pr/index.html MPI, wykład 2. Plan: - komunikacja

Bardziej szczegółowo

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

Wprowadzenie do MPI. Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski Wprowadzenie do MPI Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski http://www.icm.edu.pl Maciej Cytowski m.cytowski@icm.edu.pl Maciej Szpindler m.szpindler@icm.edu.pl

Bardziej szczegółowo

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

Programowanie współbieżne... (4) Andrzej Baran 2010/11 Programowanie współbieżne... (4) Andrzej Baran 2010/11 LINK: http://kft.umcs.lublin.pl/baran/prir/index.html Przykład Zaczniemy od znanego już przykładu: Iloczyn skalarny różne modele Programowanie współbieżne...

Bardziej szczegółowo

Programowanie w standardzie MPI

Programowanie w standardzie MPI Programowanie w standardzie MPI 1 2 Podstawy programowania z przesyłaniem komunikatów Model systemu równoległego w postaci p procesów, każdy z nich z własną przestrzenią adresową, nie współdzieloną z innymi

Bardziej szczegółowo

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

Operacje grupowego przesyłania komunikatów. Krzysztof Banaś Obliczenia równoległe 1 Operacje grupowego przesyłania komunikatów Krzysztof Banaś Obliczenia równoległe 1 Operacje grupowego przesyłania komunikatów Operacje, w ramach których ten sam komunikat lub zbiór komunikatów przesyłany

Bardziej szczegółowo

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

Tryby komunikacji między procesami w standardzie Message Passing Interface. Piotr Stasiak Krzysztof Materla Tryby komunikacji między procesami w standardzie Message Passing Interface Piotr Stasiak 171011 Krzysztof Materla 171065 Wstęp MPI to standard przesyłania wiadomości (komunikatów) pomiędzy procesami programów

Bardziej szczegółowo

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, cd. Krzysztof Banaś Obliczenia równoległe 1 Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1 Środowisko przesyłania komunikatów MPI Rodzaje procedur: blokujące nieblokujące Tryby przesyłania

Bardziej szczegółowo

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

Programowanie Równoległe Wykład 6. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej Programowanie Równoległe Wykład 6 MPI - Message Passing Interface Maciej Matyka Instytut Fizyki Teoretycznej Dorobiliśmy się strony WWW Za tydzień 1. wykład z CUDY (Z. Koza) www.ift.uni.wroc.pl/~koma/pr/index.html

Bardziej szczegółowo

Łagodne wprowadzenie do Message Passing Interface (MPI)

Łagodne wprowadzenie do Message Passing Interface (MPI) Łagodne wprowadzenie do Message Passing Interface (MPI) Szymon Łukasik Zakład Automatyki PK szymonl@pk.edu.pl Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 1/48 Czym jest MPI? Własności

Bardziej szczegółowo

Programowanie współbieżne i rozproszone

Programowanie współbieżne i rozproszone Programowanie współbieżne i rozproszone WYKŁAD 2 Jan Kazimirski 1 MPI 1/2 2 Dlaczego klastry komputerowe? Wzrost mocy obliczeniowej jednego jest coraz trudniejszy do uzyskania. Koszt dodatkowej mocy obliczeniowej

Bardziej szczegółowo

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, cd. Krzysztof Banaś Obliczenia równoległe 1 Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1 MPI dynamiczne zarządzanie procesami MPI 2 umożliwia dynamiczne zarządzanie procesami, choć

Bardziej szczegółowo

Operacje kolektywne MPI

Operacje kolektywne MPI Operacje kolektywne MPI 1 Operacje kolektywne Do tej pory w operacje przesyłania komunikatu miały charakter punkt-punkt (najczęściej pomiędzy nadawcą i odbiorcą). W operacjach grupowych udział biorą wszystkie

Bardziej szczegółowo

Jak wygląda praca na klastrze

Jak wygląda praca na klastrze Jak wygląda praca na klastrze Upraszczając nieco sprawę można powiedzieć, że klaster to dużo niezależnych komputerów (jednostek) połączonych mniej lub bardziej sprawną siecią. Często poszczególne jednostki

Bardziej szczegółowo

Programowanie Współbieżne

Programowanie Współbieżne Programowanie Współbieżne MPI ( główne źródło http://pl.wikipedia.org/wiki/mpi) 1 Historia Początkowo (lata 80) różne środowiska przesyłania komunikatów dla potrzeb programowania równoległego. Niektóre

Bardziej szczegółowo

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

Programowanie współbieżne... (6) Programowanie współbieżne... (6) Andrzej Baran 2010/11 LINK: http://kft.umcs.lublin.pl/baran/prir/index.html Powtórzenie. Proste operacje MPI MPI_send, MPI_recv,...! Programowanie współbieżne... 2 Send-receive

Bardziej szczegółowo

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. Krzysztof Banaś Obliczenia równoległe 1 Programowanie w modelu przesyłania komunikatów specyfikacja MPI Krzysztof Banaś Obliczenia równoległe 1 Środowisko przesyłania komunikatów MPI Rodzaje procedur: blokujące nieblokujące Tryby przesyłania

Bardziej szczegółowo

http://www.mcs.anl.gov/research/projects/mpi/standard.html

http://www.mcs.anl.gov/research/projects/mpi/standard.html z przedmiotu, prowadzonych na Wydziale BMiI, Akademii Techniczno-Humanistycznej w Bielsku-Białej. MPI czyli Message Passing Interface stanowi specyfikację pewnego standardu wysokopoziomowego protokołu

Bardziej szczegółowo

51. Metody komunikacji nieblokującej.

51. Metody komunikacji nieblokującej. 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,

Bardziej szczegółowo

Rozszerzenia MPI-2 1

Rozszerzenia MPI-2 1 Rozszerzenia MPI-2 1 2 Dynamiczne tworzenie procesów Aplikacja MPI 1 jest statyczna z natury Liczba procesów określana jest przy starcie aplikacji i się nie zmienia. Gwarantuje to szybką komunikację procesów.

Bardziej szczegółowo

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

Interfejs MPI. Maciej Kasperski, Rafał Kozik. 16 kwietnia 2008 16 kwietnia 2008 Wprowadzenie Co to jest MPI? Plan prezentacji: co to jest MPI? komunikatory i grupy procesów; przesyłanie komunikatów; komunikacja kolektywna; wirtualne topologie;. Co to jest MPI? Wstęp

Bardziej szczegółowo

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

Programowanie współbieżne Wykład 11 Wprowdzenie do MPI. Rafał Skinderowicz Programowanie współbieżne Wykład 11 Wprowdzenie do MPI Rafał Skinderowicz Programowanie dla modelu z rozproszoną pamiecią Niezależne strumienie instrukcji wykonywane na (być może) oddalonych fizycznie

Bardziej szczegółowo

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

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie

Bardziej szczegółowo

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

Programowanie współbieżne... (12) Andrzej Baran 2010/11 Programowanie współbieżne... (12) Andrzej Baran 2010/11 LINK: http://kft.umcs.lublin.pl/baran/prir/index.html Dekompozycja danych. Wejście. rank 0 rank 1 rank 2 A B C A B C A B C indata indata indata wejście

Bardziej szczegółowo

61 Topologie wirtualne

61 Topologie wirtualne 61 Topologie wirtualne pozwalają opisać dystrybucję procesów w przestrzeni z uwzględnieniem struktury komunikowania się procesów aplikacji między sobą, umożliwiają łatwą odpowiedź na pytanie: kto jest

Bardziej szczegółowo

Wstęp do Programowania, laboratorium 02

Wstęp do Programowania, laboratorium 02 Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite

Bardziej szczegółowo

Nowoczesne technologie przetwarzania informacji

Nowoczesne technologie przetwarzania informacji Projekt Nowe metody nauczania w matematyce Nr POKL.09.04.00-14-133/11 Nowoczesne technologie przetwarzania informacji Mgr Maciej Cytowski (ICM UW) Lekcja 2: Podstawowe mechanizmy programowania równoległego

Bardziej szczegółowo

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

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

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie

Bardziej szczegółowo

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

Architektura sieci połączeń między procesorami, sterowanie komunikacjami, biblioteki komunikacyjne Wykład 4 Architektura sieci połączeń między procesorami, sterowanie komunikacjami, biblioteki komunikacyjne Spis treści: 1. Statyczne sieci połączeń w systemach równoległych 2. Dynamiczne sieci połączeń

Bardziej szczegółowo

IPC: Kolejki komunikatów

IPC: Kolejki komunikatów IPC: Kolejki komunikatów Systemy Operacyjne 2 laboratorium Mateusz Hołenko 7 listopada 2011 Plan zajęć 1 Mechanizmy IPC kolejki komunikatów pamięć współdzielona semafory 2 Kolejki komunikatów kolejka komunikat

Bardziej szczegółowo

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

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Programowanie współbieżne... (w13) PARADYGMATY I JĘZYKI PROGRAMOWANIA Programowanie współbieżne... (w13) Treść 2 Wstęp Procesy i wątki Szybkość obliczeń prawo Amdahla Wyścig do zasobów Synchronizacja i mechanizmy synchronizacji semafory

Bardziej szczegółowo

Programowanie procesorów graficznych GPGPU

Programowanie procesorów graficznych GPGPU Programowanie procesorów graficznych GPGPU 1 GPGPU Historia: lata 80 te popularyzacja systemów i programów z graficznym interfejsem specjalistyczne układy do przetwarzania grafiki 2D lata 90 te standaryzacja

Bardziej szczegółowo

Klient-Serwer Komunikacja przy pomocy gniazd

Klient-Serwer Komunikacja przy pomocy gniazd II Klient-Serwer Komunikacja przy pomocy gniazd Gniazda pozwalają na efektywną wymianę danych pomiędzy procesami w systemie rozproszonym. Proces klienta Proces serwera gniazdko gniazdko protokół transportu

Bardziej szczegółowo

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

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie

Bardziej szczegółowo

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

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

2 Przygotował: mgr inż. Maciej Lasota

2 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania

Bardziej szczegółowo

Architektury systemów równoległych

Architektury systemów równoległych Architektury systemów równoległych 1 Architektury systemów z pamięcią wspólną Architektury procesorów Procesory wielordzeniowe Procesory graficzne Akceleratory Procesory hybrydowe Architektury systemów

Bardziej szczegółowo

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1 Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1 Wprowadzenie Procesory graficzne GPU (Graphics Processing Units) stosowane są w kartach graficznych do przetwarzania grafiki komputerowej

Bardziej szczegółowo

Jak ujarzmić hydrę czyli programowanie równoległe w Javie. dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski

Jak ujarzmić hydrę czyli programowanie równoległe w Javie. dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski Jak ujarzmić hydrę czyli programowanie równoległe w Javie dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski Prawo Moore a Ekonomicznie optymalna liczba tranzystorów w układzie scalonym zwiększa się

Bardziej szczegółowo

Język C zajęcia nr 11. Funkcje

Język C zajęcia nr 11. Funkcje Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji

Bardziej szczegółowo

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

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

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

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

Programowanie współbieżne... (2) Programowanie współbieżne... (2) Andrzej Baran 2010/11 LINK: http://kft.umcs.lublin.pl/baran/prir/index.html Prawo Amdahla - powtórka Wydajność E = S/n (na procesor). Stąd S = En E 1 f + 1 f n 1 fn+1 f

Bardziej szczegółowo

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Temat 1: Podstawowe pojęcia: program, kompilacja, kod Temat 1: Podstawowe pojęcia: program, kompilacja, kod wynikowy. Przykłady najprostszych programów. Definiowanie zmiennych. Typy proste. Operatory: arytmetyczne, przypisania, inkrementacji, dekrementacji,

Bardziej szczegółowo

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Algorytmy i Struktury Danych www.pk.edu.pl/~zk/aisd_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład 12: Wstęp

Bardziej szczegółowo

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

Optymalizacja komunikacji w systemach rozproszonych i równoległych

Optymalizacja komunikacji w systemach rozproszonych i równoległych Optymalizacja komunikacji w systemach rozproszonych i równoległych Szkolenie PCSS, 16.12.2001 literatura W. Gropp, E. Lusk, An Introduction to MPI, ANL P.S. Pacheco, A User s Guide to MPI, 1998 Ian Foster,

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

Podstawy programowania w języku C

Podstawy programowania w języku C Podstawy programowania w języku C WYKŁAD 1 Proces tworzenia i uruchamiania programów Algorytm, program Algorytm przepis postępowania prowadzący do rozwiązania określonego zadania. Program zapis algorytmu

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

Podział programu na moduły

Podział programu na moduły Materiały Podział programu na moduły Informatyka Szczegółowe informacje dotyczące wymagań odnośnie podziału na moduły: http://www.cs.put.poznan.pl/wcomplak/bfiles/c_w_5.pdf Podział programu na moduły pozwala

Bardziej szczegółowo

I - Microsoft Visual Studio C++

I - Microsoft Visual Studio C++ I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i

Bardziej szczegółowo

Superkomputer z Raspberry PI

Superkomputer z Raspberry PI PROJEKTY SOFT Dodatkowe informacje Dziękujemy firmie RS Components za dostarczenie Raspberry PI, które posłużyło do realizacji i testowania opisywanego projektu superkomputera. Fotografia 1. Raspberry

Bardziej szczegółowo

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

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

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

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls ) III RPC Zdalne wywoływanie procedur (ang. Remote Procedure Calls ) 1. Koncepcja Aplikacja wywołanie procedury parametry wyniki wykonanie procedury wynik komputer klienta komputer serwera Zaletą takiego

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

Pytania sprawdzające wiedzę z programowania C++

Pytania sprawdzające wiedzę z programowania C++ Pytania sprawdzające wiedzę z programowania C++ Wstęp 1. Zaprezentuj mechanikę tworzenia programu napisanego w języku C++. 2. Co to jest kompilacja? 3. Co to jest konsolidacja? 4. Co to jest kod wykonywalny?

Bardziej szczegółowo

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

Język C, tablice i funkcje (laboratorium, EE1-DI) Język C, tablice i funkcje (laboratorium, EE1-DI) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Wstęp (tablice) Tablica to uporządkowany ciąg elementów tego samego typu, zajmujących ciągły obszar pamięci.

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Podstawy Programowania Podstawowa składnia języka C++

Podstawy Programowania Podstawowa składnia języka C++ Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include

Bardziej szczegółowo

Ćwiczenie nr: 9 Obliczenia rozproszone MPI

Ćwiczenie nr: 9 Obliczenia rozproszone MPI Ćwiczenie nr: 9 Temat: Obliczenia rozproszone MPI 1. Informacje ogólne MPI (Message Passing Interface) nazwa standardu biblioteki przesyłania komunikatów dla potrzeb programowania równoległego w sieciach

Bardziej szczegółowo

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

Systemy rozproszone. Państwowa Wyższa Szkoła Zawodowa w Chełmie. ** Instytut Fizyki Uniwersytet Marii Curie-Skłodowskiej w Lublinie Systemy rozproszone Rafał Ogrodowczyk *, Krzysztof Murawski **,*, Bartłomiej Bielecki * * Katedra Informatyki Państwowa Wyższa Szkoła Zawodowa w Chełmie ** Instytut Fizyki Uniwersytet Marii Curie-Skłodowskiej

Bardziej szczegółowo

5 Przygotował: mgr inż. Maciej Lasota

5 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 5 1/6 Język C Instrukcja laboratoryjna Temat: Funkcje, parametry linii poleceń, typ wyliczeniowy. 5 Przygotował: mgr inż. Maciej Lasota 1) Parametry linii poleceń. Język C oprócz wprowadzania

Bardziej szczegółowo

Ćwiczenie nr: 9 Obliczenia rozproszone MPI

Ćwiczenie nr: 9 Obliczenia rozproszone MPI Ćwiczenie nr: 9 Temat: Obliczenia rozproszone MPI 1. Informacje ogólne MPI (Message Passing Interface) nazwa standardu biblioteki przesyłania komunikatów dla potrzeb programowania równoległego w sieciach

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

76.Struktura oprogramowania rozproszonego.

76.Struktura oprogramowania rozproszonego. 76.Struktura oprogramowania rozproszonego. NajwaŜniejsze aspekty obiektowego programowania rozproszonego to: Współdziałanie (interoperability) modułów programowych na róŝnych maszynach. Wielokrotne wykorzystanie

Bardziej szczegółowo

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Jak napisać program obliczający pola powierzchni różnych figur płaskich? Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy

Bardziej szczegółowo

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. Struktura programu Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. W ostatnich latach najbardziej używanym stylem oprogramowania

Bardziej szczegółowo

MMX i SSE. Zbigniew Koza. Wydział Fizyki i Astronomii Uniwersytet Wrocławski. Wrocław, 10 marca 2011. Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16

MMX i SSE. Zbigniew Koza. Wydział Fizyki i Astronomii Uniwersytet Wrocławski. Wrocław, 10 marca 2011. Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16 MMX i SSE Zbigniew Koza Wydział Fizyki i Astronomii Uniwersytet Wrocławski Wrocław, 10 marca 2011 Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16 Spis treści Spis treści 1 Wstęp Zbigniew Koza (WFiA UWr) MMX

Bardziej szczegółowo

Języki i metodyka programowania. Wprowadzenie do języka C

Języki i metodyka programowania. Wprowadzenie do języka C Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

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

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r. M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza

Bardziej szczegółowo

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Dr inż. Grażyna KRUPIŃSKA Grazyna.Krupinska@fis.agh.edu.pl D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Wyrażenia 2 Wyrażenia w języku C są bardziej elastyczne niż wyrażenia w jakimkolwiek innym języku

Bardziej szczegółowo

Tworzenie aplikacji rozproszonej w Sun RPC

Tworzenie aplikacji rozproszonej w Sun RPC Tworzenie aplikacji rozproszonej w Sun RPC Budowa aplikacji realizowana jest w następujących krokach: Tworzenie interfejsu serwera w języku opisu interfejsu RPCGEN Tworzenie: namiastki serwera namiastki

Bardziej szczegółowo

Wykład 1

Wykład 1 Wstęp do programowania 1 Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 1 Wprowadzenie Cel wykładów z programowania proceduralnego Wykład jest poświęcony językowi C i jego

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania wykład 2 Piotr Cybula Wydział Matematyki i Informatyki UŁ 2012/2013 http://www.math.uni.lodz.pl/~cybula Język programowania Każdy język ma swoją składnię: słowa kluczowe instrukcje

Bardziej szczegółowo

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

Bardziej szczegółowo

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

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

Bardziej szczegółowo

Księgarnia PWN: Włodzimierz Stanisławski, Damian Raczyński - Programowanie systemowe mikroprocesorów rodziny x86

Księgarnia PWN: Włodzimierz Stanisławski, Damian Raczyński - Programowanie systemowe mikroprocesorów rodziny x86 Księgarnia PWN: Włodzimierz Stanisławski, Damian Raczyński - Programowanie systemowe mikroprocesorów rodziny x86 Spis treści Wprowadzenie... 11 1. Architektura procesorów rodziny x86... 17 1.1. Model procesorów

Bardziej szczegółowo

Enterprise, czyli instytutowy klaster obliczeniowy

Enterprise, czyli instytutowy klaster obliczeniowy Enterprise, czyli instytutowy klaster obliczeniowy Janusz Szwabiński szwabin@ift.uni.wroc.pl Enterprise, czyli instytutowy klaster obliczeniowy p.1/28 Plan wykładu Klastry komputerowe Enterprise od podszewki

Bardziej szczegółowo

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Turbo Pascal jest językiem wysokiego poziomu, czyli nie jest rozumiany bezpośrednio dla komputera, ale jednocześnie jest wygodny dla programisty,

Bardziej szczegółowo

O superkomputerach. Marek Grabowski

O superkomputerach. Marek Grabowski O superkomputerach Marek Grabowski Superkomputery dziś Klastry obliczeniowe Szafy (od zawsze) Bo komputery są duże Półki i blade'y (od pewnego czasu) Większe upakowanie mocy obliczeniowej na m^2 Łatwiejsze

Bardziej szczegółowo

Wprowadzenie do obsługi systemów obliczeniowych PCSS

Wprowadzenie do obsługi systemów obliczeniowych PCSS Wprowadzenie do obsługi systemów obliczeniowych PCSS Marcin Pospieszny Poznańskie Centrum Superkomputerowo-Sieciowe 17 listopada 2011 Plan prezentacji 1 Architektura maszyn 2 Linux: podstawy 3 PBS 4 Aplikacje

Bardziej szczegółowo

Wskaźniki w C. Anna Gogolińska

Wskaźniki w C. Anna Gogolińska Wskaźniki w C Anna Gogolińska Zmienne Zmienną w C można traktować jako obszar w pamięci etykietowany nazwą zmiennej i zawierający jej wartość. Przykład: kod graficznie int a; a a = 3; a 3 Wskaźniki Wskaźnik

Bardziej szczegółowo

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

Tablice (jedno i wielowymiarowe), łańcuchy znaków Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

POZNA SUPERCOMPUTING AND NETWORKING. Wprowadzenie do MPI

POZNA SUPERCOMPUTING AND NETWORKING. Wprowadzenie do MPI Wprowadzenie do MPI literatura W. Gropp, E. Lusk, An Introduction to MPI, ANL P.S. Pacheco, A User s Guide to MPI, 1998 Ian Foster, Designing and Building Parallel Programs, Addison-Wesley 1995, http://www-unix.mcs.anl.gov/dbpp/

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++ Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

Programowanie strukturalne i obiektowe. Funkcje

Programowanie strukturalne i obiektowe. Funkcje Funkcje Często w programach spotykamy się z sytuacją, kiedy chcemy wykonać określoną czynność kilka razy np. dodać dwie liczby w trzech miejscach w programie. Oczywiście moglibyśmy to zrobić pisząc trzy

Bardziej szczegółowo

Funkcja (podprogram) void

Funkcja (podprogram) void Funkcje Co to jest funkcja? Budowa funkcji Deklaracja, definicja i wywołanie funkcji Przykłady funkcji definiowanych przez programistę Przekazywanie argumentów do funkcji Tablica jako argument funkcji

Bardziej szczegółowo

Programowanie współbieżne i rozproszone

Programowanie współbieżne i rozproszone Programowanie współbieżne i rozproszone WYKŁAD 11 dr inż. CORBA CORBA (Common Object Request Broker Architecture) standard programowania rozproszonego zaproponowany przez OMG (Object Management Group)

Bardziej szczegółowo

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

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;

Bardziej szczegółowo

Opis protokołu RPC. Grzegorz Maj nr indeksu:

Opis protokołu RPC. Grzegorz Maj nr indeksu: Opis protokołu RPC Grzegorz Maj nr indeksu: 236095 1 Streszczenie Niniejszy dokument opisuje specyfikację protokołu RQP (Remote Queues Protocol). W jego skład wchodzą: opis celów protokołu; opis założeń

Bardziej szczegółowo

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011 Obsługa plików Systemy Operacyjne 2 laboratorium Mateusz Hołenko 25 września 2011 Plan zajęć 1 Pliki w systemie Linux i-węzły deskryptory plików 2 Operacje na plikach otwieranie i zamykanie zapis i odczyt

Bardziej szczegółowo