Wprowadzenie do MPI. Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski
|
|
- Edward Wierzbicki
- 8 lat temu
- Przeglądów:
Transkrypt
1 Wprowadzenie do MPI Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski Maciej Cytowski m.cytowski@icm.edu.pl Maciej Szpindler m.szpindler@icm.edu.pl 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 seti@home 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 Jak używać w MPI? Donald Knuth: We should forget about small efficiencies, say about 97% of
Bardziej szczegółowoProgramowanie 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 Model przesyłania komunikatów Paradygmat send receive wysyłanie komunikatu: send( cel, identyfikator_komunikatu,
Bardziej szczegółowoProgramowanie 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ółowoWprowadzenie 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ółowoProgramowanie 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ółowoProgramowanie 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ółowoWprowadzenie do MPI. Interdyscyplinarne Centrum Modelowania. Matematycznego i Komputerowego Uniwersytet Warszawski
Wprowadzenie do MPI Matematycznego i Komputerowego Uniwersytet Warszawski http:// Maciej Cytowski m.cytowski@icm.edu.pl Maciej Szpindler m.szpindler@icm.edu.pl 31.03.2010 Wprowadzenie do MPI 1 Podziękowania
Bardziej szczegółowoKolejne funkcje MPI 1
Kolejne funkcje MPI 1 Przypomnienie: sieci typu mesh (Grama i wsp.) 2 Topologie MPI Standard MPI abstrahuje od topologii systemu wieloprocesorowego. Sposób uruchamiania aplikacji (mpirun) nie jest częścią
Bardziej szczegółowoOperacje 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ółowoProgramowanie Równoległe Wykład 5. MPI - Message Passing Interface (część 3) Maciej Matyka Instytut Fizyki Teoretycznej
Programowanie Równoległe Wykład 5 MPI - Message Passing Interface (część 3) Maciej Matyka Instytut Fizyki Teoretycznej MPI, wykład 3. Plan: - wirtualne topologie - badanie skalowanie czasu rozwiązania
Bardziej szczegółowoModele programowania równoległego. Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak dla PR PP
Modele programowania równoległego Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak dla PR PP MPP - Cechy charakterystyczne 1 Prywatna, wyłączna przestrzeń adresowa.
Bardziej szczegółowoTryby 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ółowoOperacje grupowego przesyłania komunikatów
Operacje grupowego przesyłania komunikatów 1 Operacje grupowego przesyłania komunikatów Operacje, w ramach których ten sam komunikat lub zbiór komunikatów przesyłany jest pomiędzy więcej niż dwoma procesami
Bardziej szczegółowoModele programowania równoległego. Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak
Modele programowania równoległego Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak MPP - Cechy charakterystyczne 1 Prywatna - wyłączna przestrzeń adresowa. Równoległość
Bardziej szczegółowoProgramowanie 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ółowoProgramowanie 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ółowoProgramowanie 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Ł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ółowoProgramowanie 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ółowoOperacje 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ółowoMessage Passing Interface
Message Passing Interface Interfejs programowania definiujący powiązania z językami C, C++, Fortran Standaryzacja (de facto) i rozszerzenie wcześniejszych rozwiązań dla programowania z przesyłaniem komunikatów
Bardziej szczegółowoJak 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ółowoProgramowanie 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ółowoProgramowanie 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ółowohttp://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ółowoProgramowanie 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ółowo51. 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ółowoRozszerzenia 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ółowoInterfejs 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ółowoTworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1
Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1 Metodologia programowania równoległego Przykłady podziałów zadania na podzadania: Podział ze względu na funkcje (functional
Bardziej szczegółowoProgramowanie 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ółowoTworzenie 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ółowoProgramowanie współbieżne... (5)
Programowanie współbieżne... (5) Andrzej Baran 2010/11 LINK: http://kft.umcs.lublin.pl/baran/prir/index.html 6 FUNKCJI Proste programy MPI można pisać używając tylko 6 funkcji Programowanie współbieżne...
Bardziej szczegółowo5. Model komunikujących się procesów, komunikaty
Jędrzej Ułasiewicz str. 1 5. Model komunikujących się procesów, komunikaty Obecnie stosuje się następujące modele przetwarzania: Model procesów i komunikatów Model procesów komunikujących się poprzez pamięć
Bardziej szczegółowo61 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ółowoWeryfikacja oprogramowania, korzystajacego z MPI
Weryfikacja oprogramowania, korzystajacego z MPI Krzysztof Nozderko kn201076@students.mimuw.edu.pl 23 maja 2005 Wprowadzenie Równoległe obliczenia olbiczenia naukowców sa często bardzo kosztowne obliczeniowo
Bardziej szczegółowoProgramowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz
Programowanie równoległe i rozproszone Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz 23 października 2009 Spis treści Przedmowa...................................................
Bardziej szczegółowoObliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz
Obliczenia równoległe i rozproszone Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz 15 czerwca 2001 Spis treści Przedmowa............................................
Bardziej szczegółowoWstę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ółowoProgramowanie 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ółowoPodstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Bardziej szczegółowoProgramowanie współbieżne Wykład 12 MPI c.d. Rafał Skinderowicz
Programowanie współbieżne MPI c.d. Rafał Skinderowicz Komunikacja grupowa Poprzednio rozważaliśmy komunikację między parami procesów synchroniczna (blokująca) np. MPI Recv, MPI Send asynchroniczna (nieblokująca)
Bardziej szczegółowoTworzenie 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ółowoMETODY 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ółowoNowoczesne 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ółowoIPC: 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ółowoArchitektura 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ółowoTworzenie 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ółowoPARADYGMATY 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ółowoProgramowanie 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ółowoPodstawy 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ółowoKlient-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ółowo2 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ółowoArchitektury 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ółowoPodstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie
Bardziej szczegółowo1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.
1. Pierwszy program // mój pierwszy program w C++ #include using namespace std; cout
Bardziej szczegółowoJę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ółowoProgramowanie 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ółowoPodstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++
Podstawy Informatyki Inżynieria Ciepła, I rok Wykład 10 Kurs C++ Historia Lata 70-te XX w język C (do pisania systemów operacyjnych) "The C programming language" B. Kernighan, D. Ritchie pierwszy standard
Bardziej szczegółowoProgramowanie współbieżne i rozproszone
Programowanie współbieżne i rozproszone WYKŁAD 3 Jan Kazimirski 1 Literatura 2 MPI 2/2 3 Komunikacja blokująca Funkcja MPI_Recv działa w trybie blokującym Powrót z MPI_Recv nastąpi dopiero po odebraniu
Bardziej szczegółowoProgramowanie 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ółowoLaboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach
Laboratorium Systemów Operacyjnych Ćwiczenie 4. Operacje na plikach Wykonanie operacji wymaga wskazania pliku, na którym operacja ma zostać wykonana. Plik w systemie LINUX identyfikowany jest przez nazwę,
Bardziej szczegółowoCzęść 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ółowoJak 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ółowoAplikacja Sieciowa wątki po stronie klienta
Aplikacja Sieciowa wątki po stronie klienta Na ostatnich zajęciach zajmowaliśmy się komunikacją pomiędzy klientem a serwerem. Wynikiem naszej pracy był program klienta, który za pomocą serwera mógł się
Bardziej szczegółowoJava. 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ółowoznajdował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ółowoStrona 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ółowoTemat 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ółowoAlgorytmy 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ółowoJę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ółowoPodstawy 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ółowoPodział 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ółowoMiary Wydajności. Efektywność programu równoległego (E) jest definiowana jako stosunek przyśpieszenia do liczby procesorów
Miary Wydajności Czas wykonania równoległego (Tpar) jest czasem pomiędzy momentem rozpoczęcia obliczeń do momentu gdy ostatni procesor zakończy obliczenia Przyspieszenie (S) jest definiowane jako stosunek
Bardziej szczegółowoI - 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ółowoRPC. 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ółowoObszar 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ółowoOptymalizacja 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ółowoSuperkomputer 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ółowoNiezwykł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ółowoWstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.
Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy Laboratorium 2 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Komentarze Funkcja printf() Zmienne Łańcuchy
Bardziej szczegółowoPytania 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Ć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Ć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ółowoProgramowanie w języku Python. Grażyna Koba
Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i
Bardziej szczegółowoJę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ółowoutworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,
Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz
Bardziej szczegółowoPrzykład MPI: zbiór Mandelbrota
Przykład MPI: zbiór Mandelbrota 1 Zbiór Mandelbrota Zbiór punktów na płaszczyźnie zespolonej, które są quasi-stabilne, kiedy są iterowane funkcją: z k 1 = z k 2 c gdzie z k+1 wartość zespolona w k+1 iteracji,
Bardziej szczegółowoObliczenia rozproszone MPI
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 rozproszonych. Aktualna
Bardziej szczegółowoAlgorytm. 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ółowoMMX 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ółowoLab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.
Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur. 1. Identyfikator funkcji,
Bardziej szczegółowoStruktura 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ółowo5 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ółowoJę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ółowoSzablony 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ółowoSystemy 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ółowoWywoływanie procedur zdalnych
Wywoływanie procedur zdalnych Mechanizm wywołania main(int argc, char* argv[]){ int id, status; id = atoi(argv[1]); status = zabij_proc(id); exit(status) }... int zabij_proces (int pid){ int stat; stat
Bardziej szczegółowoJak 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ółowoInformatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018
Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy
Bardziej szczegółowo