Łagodne wprowadzenie do Message Passing Interface (MPI)

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

Download "Łagodne wprowadzenie do Message Passing Interface (MPI)"

Transkrypt

1 Łagodne wprowadzenie do Message Passing Interface (MPI) Szymon Łukasik Zakład Automatyki PK Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 1/48

2 Czym jest MPI? Własności MPI MPI-2 Implementacje MPI Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 2/48

3 Czym jest MPI? Czym jest MPI? Własności MPI MPI-2 Implementacje MPI MPI to standard przesyłania wiadomości (komunikatów) pomiędzy procesami programów równoległych działajacych na jednym lub więcej komputerach. Implementowany jest najczęściej w postaci bibliotek, do wykorzystania w programach tworzonych w Fortranie, C, C++, Ada. Pierwsza wersja standardu MPI: MPI-1, ukazała się w maju 1994 r., druga (i obecnie obowiazuj aca) MPI-2 w 1998 roku. Standard MPI ma status public-domain i jest dostępny w sieci Internet pod adresem Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 3/48

4 Własności MPI Czym jest MPI? Własności MPI MPI-2 Implementacje MPI architektura programu - niezależne procesy operujace na różnych danych (MIMD), zapewnia przenośność programów, możliwość stosowania zarówno dla multiprocesorów jak i multikomputerów, udostępnia mechanizmy komunikacji jeden - jeden oraz grupowej, pozwala na tworzenie (intra- i inter-) komunikatorów, zapewnia możliwość definiowania nowych typów danych, umożliwia wykonywanie obliczeń i operacji globalnych, pozwala na definiowanie topologii procesów Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 4/48

5 MPI-2 Czym jest MPI? Własności MPI MPI-2 Implementacje MPI Najnowszy standard umożliwia: równoległe operacje wejścia-wyjścia, zdalne operacje na pamięci, dynamiczne zarzadzanie struktura procesów bioracych udział w obliczeniach. Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 5/48

6 Implementacje MPI Czym jest MPI? Własności MPI MPI-2 Implementacje MPI MPICH2 wieloplatformowa (gridy: MPICH-G2), ogólnodostępna www: LAM/MPI projekt zawieszony, ogólnodostępna www: Open MPI kontynuacja LAM/MPI, ogólnodostępna www: WMPI folklor - dla Windows, płatna www: HP-MPI, IBM-MPI, SGI-MPI implementacje specjalizowane Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 6/48

7 Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 7/48

8 Użyta notacja i uwagi ogólne Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa definicje podano w składni języka C, IN/OUT/INOUT przy argumencie oznacza parametr wejściowy, wyjściowy i modyfikowany przez funkcję, comm to komunikator, który odpowiada oddzielnej strukturze komunikacji, specyfikuje on grupę procesów, które do niego należa MPI_COMM_WORLD to specyficzny komunikator grupujacy wszystkie procesy, które właczyły się do systemu MPI od jego uruchomienia src,dest definiuja numery procesów źródłowych i docelowych komunikatu tag określa znacznik typu komunikatu gdy długość danych jest krótsza od bufora, pozostałe pola bufora nie sa nadpisywane. Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 8/48

9 Podstawowe funkcje Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa Inicjalizacja biblioteki: OUT int MPI_Init(IN int *argc, IN char ***argv); obliczeń: OUT int MPI_Finalize(void); Numer bież acego procesu w danym komunikatorze: OUT int MPI_Comm_rank(IN MPI_Comm comm, OUT int *rank); Ilość procesów w komunikatorze: OUT int MPI_Comm_size(IN MPI_Comm comm, OUT int *size); Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 9/48

10 Komunikacja blokujaca jeden do jednego Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa Wysyłanie danych: OUT int MPI_Send(IN void* buf, IN int count, IN MPI_Datatype datatype, IN int dest, IN int tag, IN MPI_Comm comm); Odbieranie: OUT int MPI_Recv(OUT void* buf, IN int count, IN MPI_Datatype datatype, IN int source, IN int tag, IN MPI_Comm comm, OUT MPI_Status *status); Uwagi: w odwołaniach można użyć stałych MPI_ANY_SOURCE i MPI_ANY_TAG MPI_STATUS jest struktura o polach MPI_SOURCE, MPI_TAG, MPI_ERROR ; sprawdzanie ilości odebranych danych realizuje MPI_Get_count testowanie czy wiadomość nie nadeszła - MPI_Probe Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 10/48

11 Przykład - kom. blokujaca Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa #include < s t d i o. h> #include <mpi. h> void main ( i n t argc, char argv ) { i n t myrank ; MPI_Status s t a t u s ; double a [ ] ; MPI_Init (& argc, &argv ) ; MPI_Comm_rank (MPI_COMM_WORLD, &myrank ) ; i f ( myrank == 0) MPI_Send ( a, 100, MPI_DOUBLE, 1, 17, MPI_COMM_WORLD) ; else i f ( myrank == 1 ) MPI_Recv ( a, 100, MPI_DOUBLE, 0, 17, MPI_COMM_WORLD, &s t a t u s ) ; MPI_Finalize ( ) ; } Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 11/48

12 Typy danych MPI Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa Typ 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 MPI_PACKED Typ C signed char signed short int signed int signed long int unsigned char unsigned short int unsigned int unsigned long int float double long double brak brak Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 12/48

13 Pakowanie danych Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa Pakowanie danych do bufora: OUT int MPI_Pack(IN void* inbuf, IN int incount, IN MPI_Datatype datatype, OUT void *outbuf, IN int outsize, INOUT int *position, IN MPI_Comm comm); Rozpakowywanie: OUT int MPI_Unpack(IN void* inbuf, IN int insize, INOUT int *position, OUT void *outbuf, IN int outcount, IN MPI_Datatype datatype, IN MPI_Comm comm); Uwaga: position jest wskaźnikiem do bufora ci agłego (przy wysyłaniu - bufora nadawczego outbuf, przy odbieraniu - bufora odbiorczego inbuf) przesuwanym automatycznie przez funkcje. Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 13/48

14 Przykład - pakowanie Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa i n t p o s i t i o n, i, j, a [ 2 ] ; char b u f f [ ] ;.... MPI_Comm_rank (MPI_COMM_WORLD, &myrank ) ; i f ( myrank == 0) { / /NADAWCA p o s i t i o n = 0 ; MPI_Pack(& i, 1, MPI_INT, b u ff, 1000, &p o s i t i o n, MPI_COMM_WORLD) ; MPI_Pack(& j, 1, MPI_INT, b u ff, 1000, &p o s i t i o n, MPI_COMM_WORLD) ; MPI_Send ( b u ff, p o s i t i o n, MPI_PACKED, 1, 0, MPI_COMM_WORLD) ; } else / / ODBIORCA MPI_Recv ( a, 2, MPI_INT, 0, 0, MPI_COMM_WORLD) Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 14/48

15 Typy użytkownika Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa Do definiowania własnych typów służy rodzina funkcji MPI_TYPE: OUT int MPI_Type_contiguous(IN int count, IN MPI_Datatype oldtype, OUT MPI_Datatype *newtype); OUT int MPI_Type_vector(IN int count, IN int blocklength, IN int stride, IN MPI_Datatype oldtype, OUT MPI_Datatype *newtype); OUT int MPI_Type_struct(IN int count, IN int *array_of_blocklengths, IN MPI_Aint *array_of_displacements, IN MPI_Datatype *array_of_types, OUT MPI_Datatype *newtype); Aby używać nowego typu danych należy dokonać operacji: OUT int MPI_Type_commit (INOUT MPI_datatype *datatype); Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 15/48

16 Przykład - typy użytkownika Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 16/48

17 Przykład - typy użytkownika Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa #include " mpi. h " # def ine SIZE 4 i n t main ( argc, argv ) i n t argc ; char argv [ ] ; { i n t numtasks, rank, source =0, dest, tag =1, i ; f l o a t a [ SIZE ] [ SIZE ] = { 1. 0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, } ; f l o a t b [ SIZE ] ; MPI_Status s t a t ; MPI_Datatype columntype ; MPI_Init (& argc,& argv ) ; MPI_Comm_rank (MPI_COMM_WORLD, &rank ) ; MPI_Comm_size(MPI_COMM_WORLD, &numtasks ) ; Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 17/48

18 Przykład - typy użytkownika Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa MPI_Type_vector ( SIZE, 1, SIZE, MPI_FLOAT, &columntype ) ; MPI_Type_commit(& columntype ) ; i f ( numtasks == SIZE ) { i f ( rank == 0) { for ( i =0; i < numtasks ; i ++) MPI_Send(&a [ 0 ] [ i ], 1, columntype, i, tag, MPI_COMM_WORLD) ; } MPI_Recv ( b, SIZE, MPI_FLOAT, source, tag, MPI_COMM_WORLD, &s t a t ) ; p r i n t f ( " rank=%d b=%3.1 f %3.1 f %3.1 f %3.1 f \ n ", rank, b [ 0 ], b [ 1 ], b [ 2 ], b [ 3 ] ) ; } else p r i n t f ( " Must s p e c i f y %d processors. Terminating. \ n ", SIZE ) ; MPI_Finalize ( ) ; } Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 18/48

19 Tryby komunikacji Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa Polecenia MPI_Send i MPI_Recv realizuja tryb standardowy - wysyłanie MOŻE (ale nie musi) być buforowane (brak oczekiwania na odpowiednie MPI_Recv). Inne tryby to: Buforowany (MPI_Bsend i MPI_Brecv) - wysyłanie odbywa się niezależnie od tego czy została wywołana funkcja odbierajaca ; zwraca sterowanie natychmiast, niezależnie od wystapienia funkcji odbioru, Synchroniczny (prefix S) - wysyłanie niezależnie od tego czy została wywołana funkcja odbierajaca ; zwraca sterowanie po odebraniu wiadomości Przygotowany (prefix R) - wiadomość może być wysłana dopiero wtedy, gdy została wywołana funkcja odbierajaca, w przeciwnym wypadku funkcja wysyłajaca zwraca bład. Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 19/48

20 Tryby komunikacji Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 20/48

21 Komunikacja nieblokujaca Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa Funkcja zwraca sterowanie od razu nie czekajac na wykonanie operacji. OUT int MPI_IXsend(IN void *buf, IN int count, IN MPI_Datatype dtype, IN int dest, IN int tag, IN MPI_Comm comm, OUT MPI_Request *request); OUT int MPI_IXrecv(OUT void *buf, IN int count, IN MPI_Datatype dtype, IN int source, IN int tag, IN MPI_Comm comm, OUT MPI_Request *request); Uwaga: X={,B,S,R} Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 21/48

22 Komunikacja nieblokujaca Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa request jest wskaźnikiem realizacji żadania którego stan można sprawdzić funkcjami - blokujac a i nieblokujac a: OUT int MPI_Wait(INOUT MPI_Request *request, OUT MPI_Status *status); OUT int MPI_Test(INOUT MPI_Request *request, OUT int *flag, OUT MPI_Status *status); Uwaga: flag=true gdy opisywana wskaźnikiem request operacja została zakończona. Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 22/48

23 Przykład - kom. nieblokujaca Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa typedef struct { char data [ MAXSIZE ] ; i n t d a tasize ; MPI_Request req ; } B u f f e r ; B u f f e r b u f f e r [ ] ; MPI_Status s t a t u s ;... MPI_Comm_rank (comm, &rank ) ; MPI_Comm_size(comm, &size ) ; i f ( rank!= size 1) { / i n i c j a l i z a c j a producent a l o k u j e swój b u for / } b u f f e r = ( B u f f e r ) malloc ( sizeof ( B u f f e r ) ) ; while ( 1 ) { / main loop / / producent wypełnia b u for danych i zwraca i c h i l o ś ć / produce ( b u f f e r >data, &b u f f e r >d a tasize ) ; / po czym j e wysyła / MPI_Send ( b u f f e r >data, b u f f e r >datasize, MPI_CHAR, size 1,tag,comm) ; } Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 23/48

24 Przykład - kom. nieblokujaca Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa else { } } / rank == s i z e 1; kod konsumenta / / konsument a l o k u j e jeden b u for dla każdego producenta / b u f f e r = ( B u f f e r ) malloc ( sizeof ( B u f f e r ) ( size 1)); for ( i =0; i < size 1; i ++) / r o z p o c z n i j odbiór od każdego producenta / MPI_Irecv ( b u f f e r [ i ]. data, MAXSIZE, MPI_CHAR, i, tag, comm, &( b u f f e r [ i ]. req ) ) ; for ( i =0; ; i =( i +1)%( size 1)) { / główna p ę t l a oczekiwanie / } MPI_Wait (&( b u f f e r [ i ]. req ), &s t a t u s ) ; / sprawdź i l e danych d o t a r ł o / MPI_Get_count(& status, MPI_CHAR, &( b u f f e r [ i ]. d a tasize ) ) ; / o p r ó ż n i j b u for i r o z p o c z n i j nowy proces odbioru / consume ( b u f f e r [ i ]. data, b u f f e r [ i ]. d a tasize ) ; MPI_Irecv ( b u f f e r [ i ]. data, MAXSIZE, MPI_CHAR, i, tag, comm, &( b u f f e r [ i ]. req ) ) ; Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 24/48

25 Komunikacja grupowa Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa OUT int MPI_Bcast (INOUT void* buffer, IN int count, IN MPI_Datatype datatype, IN int rank, IN MPI_Comm comm); UWAGA: Synchronizacja w operacjach grupowych odbywa się za pomoca barier: OUT MPI_Barrier(IN MPI_Comm comm); Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 25/48

26 Komunikacja grupowa Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa OUT int MPI_Reduce (IN void* send_buffer, OUT void* recv_buffer, IN int count, IN MPI_Datatype datatype, IN MPI_Op operation, IN int rank, IN MPI_Comm comm); Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 26/48

27 Komunikacja grupowa Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa OUT int MPI_Gather (IN void* send_buffer, IN int send_count, IN MPI_datatype send_type, OUT void* recv_buffer, IN int recv_count, IN MPI_Datatype recv_type, IN int rank, IN MPI_Comm comm); Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 27/48

28 Komunikacja grupowa Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa OUT int MPI_Allgather (IN void *sendbuf, IN int sendcount, IN MPI_Datatype sendtype, OUT void *recvbuf, IN int recvcount, IN MPI_Datatype recvtype, MPI_Comm comm); Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 28/48

29 Komunikacja grupowa Użyta notacja i uwagi ogólne Podstawowe funkcje Komunikacja blokujaca jeden do jednego Przykład - kom. blokujaca Typy danych MPI Pakowanie danych Przykład - pakowanie Typy użytkownika Przykład - typy użytkownika Tryby komunikacji Komunikacja nieblokujaca Przykład - kom. nieblokujaca Komunikacja grupowa OUT int MPI_Scatter (IN void *sendbuf, IN int sendcnt, IN MPI_Datatype sendtype, OUT void *recvbuf, int recvcnt, IN MPI_Datatype recvtype, IN int root, IN MPI_Comm comm); Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 29/48

30 Równoległe we-wy Przykład równoległego zapisu Przykład równoległego odczytu Zdalne operacje na pamięci (RMA) Przykład: RMA Dynamiczna struktura obliczeniowa Przykład: dynamiczny model master-slave Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 30/48

31 Równoległe we-wy Równoległe we-wy Przykład równoległego zapisu Przykład równoległego odczytu Zdalne operacje na pamięci (RMA) Przykład: RMA Dynamiczna struktura obliczeniowa Przykład: dynamiczny model master-slave Realizacja: zapis do pliku jest analogia nadawania komunikatu do systemu plików odczyt z pliku jest analogia odbierania komunikatu z systemu plików MPI-2 zawiera analogie do operacji Uniksowych: open, close, seek, read i write. Funkcje: MPI_File_open(); MPI_File_write(); MPI_File_read(); MPI_File_set_view(); MPI_File_close(); MPI_File_seek(); MPI_File_write_shared(); Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 31/48

32 Przykład: równoległy zapis do pliku Równoległe we-wy Przykład równoległego zapisu Przykład równoległego odczytu Zdalne operacje na pamięci (RMA) Przykład: RMA Dynamiczna struktura obliczeniowa Przykład: dynamiczny model master-slave #include " mpi. h " #include < s t d i o. h> # def ine BUFSIZE 100 i n t main ( i n t argc, char argv [ ] ) { i n t i, myrank, buf [ BUFSIZE ] ; MPI_File t h e f i l e ; MPI_Init (& argc, &argv ) ; MPI_Comm_rank (MPI_COMM_WORLD, &myrank ) ; for ( i =0; i <BUFSIZE ; i ++) buf [ i ] = myrank BUFSIZE + i ; MPI_File_open (MPI_COMM_WORLD, " t e s t f i l e ", MPI_MODE_CREATE MPI_MODE_WRONLY, MPI_INFO_NULL, & t h e f i l e ) ; MPI_File_set_view ( t h e f i l e, myrank BUFSIZE sizeof ( i n t ), MPI_INT, MPI_INT, " n a t i v e ", MPI_INFO_NULL ) ; MPI_File_write ( t h e f i l e, buf, BUFSIZE, MPI_INT, MPI_STATUS_IGNORE ) ; MPI_File_close (& t h e f i l e ) ; MPI_Finalize ( ) ; return 0 ; } Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 32/48

33 Przykład: równoległy odczyt pliku Równoległe we-wy Przykład równoległego zapisu Przykład równoległego odczytu Zdalne operacje na pamięci (RMA) Przykład: RMA Dynamiczna struktura obliczeniowa Przykład: dynamiczny model master-slave #include mpi. h #include < s t d i o. h> i n t main ( i n t argc, char argv [ ] ) { i n t myrank, numprocs, bufsize, buf, count ; MPI_File t h e f i l e ; MPI_Status s t a t u s } MPI_Offset f i l e s i z e ; MPI_Init (& argc, &argv ) ; MPI_Comm_rank (MPI_COMM_WORLD, &myrank ) ; MPI_Comm_size (MPI_COMM_WORLD, &numprocs ) ; MPI_File_open (MPI_COMM_WORLD, " t e s t f i l e ", MPI_MODE_RDONLY, MPI_INFO_NULL, & t h e f i l e ) ; MPI_File_get_size ( t h e f i l e, & f i l e s i z e ) ; / w bajtach / f i l e s i z e = f i l e s i z e / size ( i n t ) ; / w l i c z b i e i n t s / b u f s i z e = f i l e s i z e / numprocs + 1; / l o k a l n a l i c z b a do odczytu / buf = ( i n t ) malloc ( b u f s i z e + sizeof ( i n t ) ) ; MPI_File_set_view ( t h e f i l e, myrank b u f s i z e sizeof ( i n t ) ), MPI_INT, MPI_INT, " n a t i v e ", MPI_INFO_NULL ) ; MPI_File_read ( t h e f i l e, buf, bufsize, MPI_INT, &s t a t u s ) ; MPI_Get_count (& status, MPI_INT, &count ) ; p r i n t f ( " process %d read %d i n t s \ n ", myrank, count ) ; MPI_File_close (& t h e f i l e ) ; MPI_Finalize ( ) ; return 0; Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 33/48

34 Zdalne operacje na pamięci (RMA) Równoległe we-wy Przykład równoległego zapisu Przykład równoległego odczytu Zdalne operacje na pamięci (RMA) Przykład: RMA Dynamiczna struktura obliczeniowa Przykład: dynamiczny model master-slave Zdalne operacje na pamięci pamięć dzielona: MPI-2: dane sa przesyłane z jednej przestrzeni adresowej do drugiej za pomoca pary operacji sendreceive Pamięć dzielona: procesy maja dostęp do wspólnej puli pamięci i moga wprost wykonywać operacje na pamięci Realizacja: oddzielenia synchronizacji od przesyłania danych w celu zwiększenia efektywności, powstałe rozwi azanie jest oparte na idei okien zdalnego dostępu do pamięci (okno - to porcja przestrzeni adresowej każdego procesu dostępna dla innych). Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 34/48

35 RMA Równoległe we-wy Przykład równoległego zapisu Przykład równoległego odczytu Zdalne operacje na pamięci (RMA) Przykład: RMA Dynamiczna struktura obliczeniowa Przykład: dynamiczny model master-slave Operacje na oknach: pobieranie zawartości okna MPI_Get zapisywanie do okna MPI_Put zmiana zawartości okna MPI_Accumulate A wszystko: synchronizowane przez MPI_Win_Fence Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 35/48

36 Przykład: RMA Równoległe we-wy Przykład równoległego zapisu Przykład równoległego odczytu Zdalne operacje na pamięci (RMA) Przykład: RMA Dynamiczna struktura obliczeniowa Przykład: dynamiczny model master-slave / o b l i c z a n i e p i za pomoca całkowania numerycznego, we r sj a RMA / #include " mpi. h " # include <math. h> i n t main ( i n t argc, char argv [ ] ) { i n t n, myid, numprocs, i ; double PI25DT = ; double mypi, pi, h, sum, x ; MPI_Win nwin, piwin ; MPI_Init (& argc, &argv ) ; MPI_Comm_size (MPI_COMM_WORLD,& numprocs ) ; MPI_Comm_rank (MPI_COMM_WORLD,& myid ) ; i f ( myid == 0) { MPI_Win_create(&n, sizeof ( i n t ), 1, MPI_INFO_NULL, MPI_COMM_WORLD, &nwin ) ; MPI_Win_create(& pi, sizeof ( double ), 1, MPI_INFO_NULL, MPI_COMM_WORLD, &piwin ) ; } else { MPI_Win_create (MPI_BOTTOM, 0, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &nwin ) ; MPI_Win_create (MPI_BOTTOM, 0, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &p i w i n ) ; } Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 36/48

37 Przykład: RMA Równoległe we-wy Przykład równoległego zapisu Przykład równoległego odczytu Zdalne operacje na pamięci (RMA) Przykład: RMA Dynamiczna struktura obliczeniowa Przykład: dynamiczny model master-slave while ( 1 ) { i f ( myid == 0) { p r i n t f ( " Enter the number of i n t e r v a l s : (0 q u i t s ) " ) ; scanf ( "%d ",&n ) ; p i = 0. 0 ; } MPI_Win_fence ( 0, nwin ) ; i f ( myid!= 0) MPI_Get(&n, 1, MPI_INT, 0, 0, 1, MPI_INT, nwin ) ; MPI_Win_fence ( 0, nwin ) ; i f ( n == 0) break ; else { h = 1.0 / ( double ) n ; sum = 0. 0 ; for ( i = myid + 1; i <= n ; i += numprocs ) { x = h ( ( double ) i 0. 5 ) ; sum += ( 4. 0 / ( x x ) ) ; } Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 37/48

38 Przykład: RMA Równoległe we-wy Przykład równoległego zapisu Przykład równoległego odczytu Zdalne operacje na pamięci (RMA) Przykład: RMA Dynamiczna struktura obliczeniowa Przykład: dynamiczny model master-slave mypi = h sum ; MPI_Win_fence ( 0, piwin ) ; MPI_Accumulate(&mypi, 1, MPI_DOUBLE, 0, 0, 1, MPI_DOUBLE, MPI_SUM, piwin ) ; MPI_Win_fence ( 0, piwin ) ; i f ( myid == 0) p r i n t f ( " p i i s approximately %.16 f, E r r o r i s %.16 f \ n ", pi, fabs ( p i PI25DT ) ) ; } } MPI_Win_free(&nwin ) ; MPI_Win_free(& piwin ) ; MPI_Finalize ( ) ; return 0; } Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 38/48

39 Dynamiczna struktura obliczeniowa Równoległe we-wy Przykład równoległego zapisu Przykład równoległego odczytu Zdalne operacje na pamięci (RMA) Przykład: RMA Dynamiczna struktura obliczeniowa Przykład: dynamiczny model master-slave MPI-2 umożliwia dynamiczne tworzenie procesów w trakcie pracy poprzez funkcję MPI_Comm_Spawn. Maksymalna ilość procesów określa parametr MPI_UNIVERSE_SIZE. Procesy wywołujacy i wywołany łaczy interkomunikator - podawany jako argument w MPI_Comm_Spawn oraz otrzymywany w procesie wywołanym przez MPI_Comm_get_parent. Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 39/48

40 Przykład: dynamiczny model master-slave Równoległe we-wy Przykład równoległego zapisu Przykład równoległego odczytu Zdalne operacje na pamięci (RMA) Przykład: RMA Dynamiczna struktura obliczeniowa Przykład: dynamiczny model master-slave / master / #include " mpi. h " i n t main ( i n t argc, char argv [ ] ) { i n t world_size, universe_size, universe_sizep, f l a g ; MPI_Comm everyone ; / i n t e r k o m u n i k a t o r / char worker_program [ ] ; MPI_Init (& argc, &argv ) ; MPI_Comm_size (MPI_COMM_WORLD, &world_size ) ; i f ( world_size!= 1) e r r o r ( " Top heavy with management " ) ; MPI_Attr_get (MPI_COMM_WORLD, MPI_UNIVERSE_SIZE, &universe_sizep, &f l a g ) ; i f (! f l a g ) { p r i n t f ( " This MPI does not support UNIVERSE_SIZE. How many \ n \ processes t o t a l? " ) ; scanf ( "%d ", &universe_size ) ; } else universe_size = universe_sizep ; i f ( universe_size == 1) e r r o r ( "No room to s t a r t workers " ) ; / / uruchamiamy procesy slave mozemy wczesniej sprecyzować l i n i ę poleceń choose_worker_program ( worker_program ) ; MPI_Comm_spawn( worker_program, MPI_ARGV_NULL, universe_size 1, MPI_INFO_NULL, 0, MPI_COMM_SELF, &everyone, MPI_ERRCODES_IGNORE) ; / Tu kod równoległy. Komunikator " everyone " może być używany do komunikacji z uruchomionymi procesami o rank 0,..., MPI_UNIVERSE_SIZE 1 w " everyone " / MPI_Finalize ( ) ; return 0; } Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 40/48

41 Przykład: dynamiczny model master-slave Równoległe we-wy Przykład równoległego zapisu Przykład równoległego odczytu Zdalne operacje na pamięci (RMA) Przykład: RMA Dynamiczna struktura obliczeniowa Przykład: dynamiczny model master-slave / slave / #include " mpi. h " i n t main ( i n t argc, char argv [ ] ) { i n t size ; MPI_Comm parent ; MPI_Init (& argc, &argv ) ; MPI_Comm_get_parent(& parent ) ; i f ( parent == MPI_COMM_NULL ) e r r o r ( "No parent! " ) ; MPI_Comm_remote_size ( parent, &size ) ; i f ( size!= 1) e r r o r ( " Something s wrong with the parent " ) ; / Tu kod równoległy. Master j e s t procesem o rank 0 w MPI_Comm parent Procesy slave moga komunikować s i ę ze soba przez MPI_COMM_WORLD. / MPI_Finalize ( ) ; return 0; } Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 41/48

42 MPI a język C++ Przykład: MPI, a C++ Użytkowanie MPICH w ZA Gdzie szukać informacji? Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 42/48

43 MPI a język C++ MPI a język C++ Przykład: MPI, a C++ Użytkowanie MPICH w ZA Gdzie szukać informacji? W standardzie MPI użyto "konserwatywnego" podejścia do implementacji w C++ - większość funkcji jest metodami klasy MPI. Większość zmiennych charakterystycznych dla MPI (takich jak statusy, żadania, pliki) jest obiektami w C++. Jeżeli funkcja jest naturalnie powiazana z obiektem to stanowi ona jego metodę. Funkcje tworzace obiekty zwracaja je - zamiast kodu błędu. Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 43/48

44 Przykład: MPI, a C++ MPI a język C++ Przykład: MPI, a C++ Użytkowanie MPICH w ZA Gdzie szukać informacji? i n t main ( i n t argc, char argv [ ] ) { i n t bufsize, buf, count ; char filename [ ] ; MPI : : Status s t a t u s ; MPI : : I n i t ( ) ; i n t myrank = MPI : :COMM_WORLD. Get_rank ( ) ; i n t numprocs = MPI : :COMM_WORLD. Get_size ( ) ; MPI : : F i l e t h e f i l e = MPI : : F i l e : : Open( MPI : :COMM_WORLD, " t e s t f i l e ", MPI : : MODE_RDONLY, MPI : : INFO_NULL ) ; MPI : : O f f s e t f i l e s i z e = t h e f i l e. Get_size ( ) ; / / w bajtach f i l e s i z e = f i l e s i z e / sizeof ( i n t ) ; / / w i n t b u f s i z e = f i l e s i z e / numprocs + 1; / / do przeczytania l o k a l n i e buf = ( i n t ) malloc ( b u f s i z e sizeof ( i n t ) ) ; t h e f i l e. Set_view ( myrank b u f s i z e sizeof ( i n t ), MPI_INT, MPI_INT, " n a t i v e ", MPI : : INFO_NULL ) ; t h e f i l e. Read ( buf, bufsize, MPI_INT, &s t a t u s ) ; count = s t a t u s. Get_count ( MPI_INT ) ; cout << " process " << myrank << " read " << count << " i n t s " << endl ; t h e f i l e. Close ( ) ; MPI : : F i n a l i z e ( ) ; return 0; } Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 44/48

45 Użytkowanie MPICH w ZA MPI a język C++ Przykład: MPI, a C++ Użytkowanie MPICH w ZA Gdzie szukać informacji? W laboratorium 102 Zakładu Automatyki dostępnych jest 6 komputerów pracujacych pod kontrola systemu operacyjnego Debian Linux, z zainstalowana biblioteka MPICH i kompilatorem GCC. Komputery posiadaja nazwy domenowe za-51, za-52, itd. Dla uruchamiania programów równoległych przygotowano konta mpilab1, mpilab2,... przypisane do każdego z komputerów (hasło: mpilab). Katalogi domowe s a dzielone przez NFS między wszystkimi maszynami (nie ma zatem potrzeby kopiowania kodów, można stosować metody równoległego we/wy). Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 45/48

46 Użytkowanie MPICH w ZA MPI a język C++ Przykład: MPI, a C++ Użytkowanie MPICH w ZA Gdzie szukać informacji? Kroki uruchamiania programu: kompilacja mpicc.mpich -g -o binary_file_name source_file.c (w przypadku C++ - mpicc) przygotowanie środowiska - stworzyć plik zawierajacy nazwy używanych komputerów i ilość procesów na każdym z nich np. za-51 za-52 za-54 uruchomienie programu - poprzez wywołanie mpirun np. mpirun.mpich -machinefile plik_z_maszynami -n ilosc_procesów binary_file Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 46/48

47 Gdzie szukać informacji? MPI a język C++ Przykład: MPI, a C++ Użytkowanie MPICH w ZA Gdzie szukać informacji? Szczególnie polecane sa strony danej implementacji MPI, specyfikacja samego standardu ( oraz: MPI: The Complete Reference, M. Snir, S. Otto, S. Huss-Lederman, D. Walker, J. Dongarra, ( Rozszerzenia standardu MPI: MPI-2, materiały szkoleniowe PCSS, ( MPI-2/rozszerzenia standardu MPI - MPI-2.pdf ) Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 47/48

48 Dziękuję za uwagę! Dziękuję za uwagę! Szymon Łukasik, 8 listopada 2006 Łagodne wprowadzenie do MPI - p. 48/48

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 Model przesyłania komunikatów Paradygmat send receive wysyłanie komunikatu: send( cel, identyfikator_komunikatu,

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

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 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

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 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

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

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

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

Wprowadzenie do MPI. Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski http://www.icm.edu. 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

Modele 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 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ół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

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 aplikacji równoległych i rozproszonych. Wykład 8

Programowanie aplikacji równoległych i rozproszonych. Wykład 8 Wykład 8 p. 1/?? Programowanie aplikacji równoległych i rozproszonych Wykład 8 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Plan wykładu

Bardziej szczegółowo

Modele 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 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ół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

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

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

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 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ółowo

Operacje grupowego przesyłania komunikatów

Operacje 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ółowo

Kolejne funkcje MPI 1

Kolejne 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ółowo

Message Passing Interface

Message 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ół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

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

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

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

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

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

Weryfikacja oprogramowania, korzystajacego z MPI

Weryfikacja 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ół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

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

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

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

Programowanie 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ółowo

Programowanie 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 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ółowo

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

POZNA SUPERCOMPUTING AND NETWORKING. Rozszerzenia standardu MPI: MPI-2 Rozszerzenia standardu MPI: MPI-2 literatura wykład opracowany na podstawie: W. Gropp, E. Lusk, R. Thakur, Using MPI-2, The MIT Press 1999 R. Thakur, Introduction to parallel I/O and MPI-IO, ANL 2 agenda

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

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

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

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

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

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 współbieżne Wykład 12 MPI c.d. Rafał Skinderowicz

Programowanie 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ółowo

Komunikacja kolektywna w środowisku MPI

Komunikacja kolektywna w środowisku MPI Komunikacja kolektywna w środowisku MPI Zakres ćwiczenia W tym ćwiczeniu dowiesz się, co to jest komunikacja kolektywna i w jaki sposób napisać swój pierwszy program wykorzystujący komunikację kolektywną

Bardziej szczegółowo

PRiR dla maszyn DM i sieci komputerowych. (PRiR, wykład 5)

PRiR dla maszyn DM i sieci komputerowych. (PRiR, wykład 5) PRiR dla maszyn DM i sieci komputerowych (PRiR, wykład 5) 1 Program na dziś (?) Wprowadzenie Mechanizm gniazdek Interfejs MPI Koncepcja i zasady Komunikatory i grupy Tryby komunikacji Własne typy danych

Bardziej szczegółowo

Wstęp do MPI-2. Jacek Dziedzic FTiMS, Politechnika Gdańska Gdańsk, Algorytmy rozproszone 2017/2018. v1.14

Wstęp do MPI-2. Jacek Dziedzic FTiMS, Politechnika Gdańska Gdańsk, Algorytmy rozproszone 2017/2018. v1.14 Wstęp do MPI-2 Jacek Dziedzic FTiMS, Politechnika Gdańska Gdańsk, 2006-2018 Algorytmy rozproszone 2017/2018 v1.14 Pracujemy w systemie równoległym o architekturze MIMD, z pamięcią rozproszoną... N E T

Bardziej szczegółowo

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

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą

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

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

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

Tablice, funkcje - wprowadzenie

Tablice, funkcje - wprowadzenie Tablice, funkcje - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 5 25 marca 2019 (Wykład 5) Tablice, funkcje - wprowadzenie 25 marca 2019 1 / 12 Outline 1 Tablice jednowymiarowe 2 Funkcje (Wykład

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

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

Miary Wydajności. Efektywność programu równoległego (E) jest definiowana jako stosunek przyśpieszenia do liczby procesorów

Miary 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ółowo

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

5. 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ół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

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

Laboratorium 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ółowo

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie Krzysztof Banaś Podstawy programowania 1 są sposobem na przechowywanie w ramach pojedynczej zmiennej zestawu zmiennych różnych typów,

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

Programowanie Proceduralne

Programowanie Proceduralne Programowanie Proceduralne Struktury Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 10 Co dziś będzie: Definiowanie struktury Deklarowanie zmiennych bȩda cych strukturami

Bardziej szczegółowo

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

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Programowanie w C++ Wykład 9 Katarzyna Grzelak 14 maja 2018 K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe plus

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

Kompilator języka C na procesor 8051 RC51 implementacja

Kompilator języka C na procesor 8051 RC51 implementacja Kompilator języka C na procesor 8051 RC51 implementacja Implementowane typy danych bit 1 bit char lub char signed 8 bitów char unsigned 8 bitów int lub signed int 16 bitów unsigned int 16 bitów long lub

Bardziej szczegółowo

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35 Programowanie w C++ Wykład 3 Katarzyna Grzelak 12 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35 Zakres ważności obiektów K.Grzelak (Wykład 1) Programowanie w C++ 2 / 35 Zakres ważności obiektów

Bardziej szczegółowo

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

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Operacje dyskowe - zapis do pliku #include #include

Bardziej szczegółowo

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

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

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

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

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje Funkcje (podprogramy) Mianem funkcji określa się fragment kodu, który może być wykonywany wielokrotnie z różnych miejsc programu. Ogólny zapis: typ nazwa(argumenty) ciało funkcji typ określa typ danych

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

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

Szablony funkcji i szablony klas

Szablony funkcji i szablony klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy złożone Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy podstawowe Typy całkowite: char short int long Typy zmiennopozycyjne float double Modyfikatory : unsigned, signed Typ wskaźnikowy

Bardziej szczegółowo

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

Zdalne wywoływanie procedur RPC 27. października Dariusz Wawrzyniak (IIPP) 1 Zagadnienia projektowe Zagadnienia realizacyjne 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 = kill(pid,

Bardziej szczegółowo

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle! Funkcja wysoce niezależny blok definicji i instrukcji programu (podprogram) Każdy program napisany w języku C/C++ zawiera przynajmniej jedną funkcję o predefiniowanej nazwie: main( ). Najczęściej wykorzystuje

Bardziej szczegółowo

Obliczenia 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 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ółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

Programowanie 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 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ółowo

Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h > PLIKOWE OPERACJE WEJŚCIA - WYJŚCIA Język C/C++ nie ma wbudowanych żadnych instrukcji umożliwiających wykonywanie operacji wejścia-wyjścia! Służą do tego funkcje biblioteczne. Funkcje zawarte w bibliotece

Bardziej szczegółowo

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C Grzegorz Cygan Wstęp do programowania mikrosterowników w języku C Mikrosterownik Inne nazwy: Microcontroler (z języka angielskiego) Ta nazwa jest powszechnie używana w Polsce. Mikrokomputer jednoukładowy

Bardziej szczegółowo

Plan wykładu. Programowanie aplikacji równoległych i rozproszonych. Wykład 8 p. Komunikacja typu punkt-punkt. Koncepcja standardu MPI

Plan wykładu. Programowanie aplikacji równoległych i rozproszonych. Wykład 8 p. Komunikacja typu punkt-punkt. Koncepcja standardu MPI Plan wykładu Programowanie aplikacji równoległych i rozproszonych Wykład 8 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Koncepcja standardu

Bardziej szczegółowo

Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h > PLIKOWE OPERACJE WEJŚCIA - WYJŚCIA Język C/C++ nie ma wbudowanych żadnych instrukcji umożliwiających wykonywanie operacji wejścia-wyjścia! Służą do tego funkcje biblioteczne. Funkcje zawarte w bibliotece

Bardziej szczegółowo

Programowanie współbieżne i rozproszone

Programowanie 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ółowo

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury, , Programowanie, uzupełnienie notatek: dr Jerzy Białkowski , 1 2 3 4 , Wczytywanie liczb , Wczytywanie liczb 1 #include 2 #include < s t d l i b. h> 3 4 int main ( ) { 5 int rozmiar, numer

Bardziej szczegółowo

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

Zdalne wywoływanie procedur RPC 27. października 2010 Zagadnienia projektowe Zagadnienia realizacyjne 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ółowo

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

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje

Bardziej szczegółowo

Wywoływanie procedur zdalnych

Wywoływanie procedur zdalnych Mechanizm wywołania Wywoływanie procedur zdalnych 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 = kill(pid,

Bardziej szczegółowo

MPI dla zaawansowanych

MPI dla zaawansowanych MPI dla zaawansowanych 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 I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory Jarosław Piersa Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika 2013-02-19 Pętla while Pętla while Pętla

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

Wywoływanie procedur zdalnych

Wywoł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ółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Przemysław Gawroński D-10, p. 234 Wykład 1 8 października 2018 (Wykład 1) Wstęp do programowania 8 października 2018 1 / 12 Outline 1 Literatura 2 Programowanie? 3 Hello World (Wykład

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

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

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 proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p. Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411b Plan wykładu Operacje wejścia-wyjścia Dostęp do plików Struktury

Bardziej szczegółowo

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq) Program my_ping: wysłanie komunikatu ICMP z żądaniem echa Struktura icmp (plik netinet/ip_icmp.h) 0 7 8 15 16 31 TYP (icmp_type) KOD (icmp_code) IDENTYFIKATOR (icmp_id) SUMA KONTROLNA (icmp_cksum) NUMER

Bardziej szczegółowo

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

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Przykład: $ ls more Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Tworzenie łącza #include int pipe(int filedes[2]); Przykład: int

Bardziej szczegółowo

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1 Zdalne wywoływanie procedur Zagadnienia projektowe Zagadnienia realizacyjne main(int argc, char* argv[]){ int id, status; id = atoi(argv[1]); status = zabij_proc(id); exit(status)... int zabij_proces (int

Bardziej szczegółowo

Systemy Operacyjne - Operacje na plikach

Systemy Operacyjne - Operacje na plikach Systemy Operacyjne - Operacje na plikach Andrzej Stroiński Institute of Computer Science Poznań University of Technology 1 październik, 2012 Wprowadzenie do ANSI-C Pomoc systemowa man gcc man 2 write man

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

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2) Podstawy programowania (język C) Globalne / Lokalne Wykład 15. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Zmienne globalne / lokalne (1) int A, *Q; // definicja zmiennych globalnych

Bardziej szczegółowo