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

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

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

Transkrypt

1 16 kwietnia 2008

2 Wprowadzenie Co to jest MPI? Plan prezentacji: co to jest MPI? komunikatory i grupy procesów; przesyłanie komunikatów; komunikacja kolektywna; wirtualne topologie;.

3 Co to jest MPI? Wstęp MPI (Message Passing Interface) jest standardem interfejsu do przesyłania komunikatów w rzeczywistych i wirtualnych maszynach równoległych z pamięcią lokalną. Został opracowany przez MPI Forum grupę badaczy z USA i Europy. Z punktu widzenia programisty jest to biblioteka dla C, C++ i Fortrana służąca do wysyłania i odbierania komunikatów oraz do synchronizacji zadań, które najczęściej wykonują ten sam program. Istnieje wiele implementacji MPI na różne platformy, np. Open MPI, MPICH.

4 Wstęp Co to jest MPI? Wstęp Standard MPI nie podaje, jak mają być uruchamiane procesy równoległe. W standardzie MPI 1.1, który tutaj opisujemy, brakuje mechanizmów tworzenia nowych procesów. Sposób określenia jakie zasoby będą używane oraz podanie liczby procesów zależy od konkretnej implementacji. Najczęściej program uruchamia się w taki sposób: mpirun [-v] -c <liczba_kopii_procesów> <nazwa_pliku_programu> -v jest opcją związaną z podawaniem raportów na temat wykonywanych operacji

5 Wstęp Inicjacja biblioteki MPI: int MPI_Init(int *argc, char **argv[]) Argumentami są parametry funkcji main. Funkcja ta może zmienić te argumenty, interpretując argumenty przekazane do biblioteki MPI i pozostawiając argumenty przeznaczone dla procesu. Koniec pracy z MPI int MPI_Finalize(void) Większość funkcji z MPI zwraca MPI SUCCESS w przypadku pomyślnego wywołania funkcji.

6 Operacje na grupach Operacje na komunikatorach Komunikatory zewnętrzne Podstawowym pojęciem MPI jest komunikator. Najprostsza definicja to grupa procesów plus pewien kontekst. Komunikat wysłany z danym kontekstem może być tylko odebrany przy użyciu tego samego kontekstu (czyli przez dany komunikator). Kontekst przechowuje też pewne argumenty nadane przez aplikację, które mogą być w dowolnej chwili odczytywane.

7 Operacje na grupach Operacje na komunikatorach Komunikatory zewnętrzne Komunikatory są identyfikowane przez uchwyty o typie MPI Comm. Po uruchomieniu MPI powstaje komunikator MPI COMM WORLD, który obejmuje wszystkie procesy. Można też pobrać kontekst procesu z uchwytu MPI COMM SELF. Jeśli jakaś funkcja zwracająca komunikator zakończy się niepowodzeniem (np. jakiś komunikator nie istnieje), to zwraca niedozwolony uchwyt MPI COMM NULL.

8 Operacje na grupach Operacje na komunikatorach Komunikatory zewnętrzne Grupa procesów jest zbiorem procesów. Każdy proces posiada swój indeks. Indeksy są ciągłe i należą do zakresu od 0 do liczby procesów pomniejszonej o 1. Grupy są identyfikowane przez uchwyty o typie MPI Group. Istnieje jedna predefiniowana grupa o uchwycie MPI GROUP EMPTY, która nie zawiera żadnego procesu. Jeżeli jakaś funkcja MPI nie może utworzyć grupy, zwraca wtedy uchwyt MPI GROUP NULL.

9 Operacje na grupach Co to jest MPI? Operacje na grupach Operacje na komunikatorach Komunikatory zewnętrzne Utworzenie kopii grupy: int MPI_Comm_group(MPI_Comm comm, MPI_Group *group) Ilość procesów w istniejącej grupie: int MPI_Group_size(MPI_Group, int *size) Indeks procesu (jeżeli wywołane z procesu grupy group, w przeciwnym wypadku MPI UNDEFINED): int MPI_Group_rank(MPI_Group group, int *rank) Zwolnienie grupy, dodatkowo pod group zostaje wpisane MPI GROUP NULL: int MPI_Group_free(MPI_Group *group)

10 Operacje na grupach Operacje na komunikatorach Komunikatory zewnętrzne Suma mnogościowa, przecięcie i różnica to odpowiednio: int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) int MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) int MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) Kolejność w nowej grupie jest taka jak w group1, a następnie z group2. Można też stworzyć grupę z wybranych procesów: int MPI_Group_incl(MPI_Group group, int n, int *ranks, MPI_Group *newgroup)

11 Operacje na komunikatorach Operacje na grupach Operacje na komunikatorach Komunikatory zewnętrzne Pobranie liczby procesów w komunikatorze comm: int MPI_Comm_size(MPI_Comm comm, int *size) Funkcja pobierająca identyfikator wywołującego ją procesu to: int MPI_Comm_rank(MPI_Comm comm, int *rank) Te funkcje są równoznaczne z użyciem MPI Comm group, uzyskaniu danych za pomocą MPI Group size lub MPI Group rank i na koniec użycie MPI Group free.

12 Operacje na grupach Operacje na komunikatorach Komunikatory zewnętrzne Wszystkie operacje na grupach były lokalne, tak samo wymienione dotychczas operacje na komunikatorach do ich działania nie jest potrzebna żadna komunikacja między procesami. Mogą być wykonywane niezależnie w różnych procesach, niektóre procesy mogą ich też nie używać wcale. Teraz zostaną podane funkcje kolektywne, które muszą być wykonane we wszystkich procesach komunikatora comm, będącego pierwszym argumentem funkcji. int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) Tworzy kopię komunikatora, która zawiera te same procesy w tej samej kolejności, ale ma nowy kontekst. int MPI_Comm_free(MPI_Comm *comm) Zwalnia komunikator (zewnętrzny lub wewnętrzny, o tym za chwilę).

13 Operacje na grupach Operacje na komunikatorach Komunikatory zewnętrzne Tworzenie nowego komunikatora: int MPI_Comm_create(MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm) Grupa group powinna być identyczna (mieć te same procesy w tej samej kolejności) we wszystkich wywołujących ją kolektywnie procesach i powinna być podgupą grupy komunikatora comm. Funkcja powinna być wywołana na wszystkich procesach komunikatora comm, nawet na tych, które nie należą do group. Nowo utworzony komunikator nie dziedziczy atrybutów po comm. int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm) Dzieli komunikator na tyle komunikatorów ile jest różnych wartości color. Kolejność zdefiniowana jest za pomocą key. Wartość color może być równa MPI UNDEFINED, co powoduje, że proces nie jest włączany do żadnego z komunikatorów.

14 Komunikatory zewnętrzne Co to jest MPI? Operacje na grupach Operacje na komunikatorach Komunikatory zewnętrzne Komunikatory zewnętrzne są używane do przesyłania komunikatów między procesami należącymi do różnych grup. Cechą takiego komunikatora jest to, że zawiera dwie rozłączne grupy procesów. Pierwsza zawierająca proces wywołujący daną funkcją jest nazywana grupą lokalną, druga grupą zdalną. Nie wszystkie funkcje mogą używać komunikatorów zewnętrznych, przeważnie nie mogą być one używane przez funkcje kolektywne. O tym, czy komunikator jest wewnętrzny czy zewnętrzny, informuje funkcja lokalna: int MPI_Comm_test_inter(MPI_Comm comm, int *result) Pod adresem result zostaje wpisane true jeśli komunikator comm jest zewnętrzny, false w przeciwnym wypadku.

15 Operacje na grupach Operacje na komunikatorach Komunikatory zewnętrzne Funkcje lokalne MPI Comm size, MPI Comm rank i MPI Comm group zwracają parametry lub kopię lokalnej grupy. Do uzyskania parametrów lub kopii grupy zdalnej służą funkcje lokalne MPI Comm remote size i MPI Comm remote group. Nie istnieje odpowiednik MPI Comm rank, co jest oczywiste ze względu na to, że grupa lokalna i zdalna są rozłączne. Komunikator zewnętrzny można zamienić na wewnętrzny za pomocą funkcji int MPI_Intercomm_merge(MPI_Comm intercomm, int high, MPI_Comm *newintracomm) Wartość high w jednej z grup powinny być równe true, a w drugiej false. Spowoduje to, że procesy grupy, w której podano false, będą miały niższe indeksy.

16 Operacje na grupach Operacje na komunikatorach Komunikatory zewnętrzne Do tworzenia komunikatorów zewnętrznych służy funkcja kolektywna int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader, MPI_Comm peer_comm, int remote_leader, int tag, MPI_Comm *newintercomm) Funkcja ta jest wywoływana przez członków grupy zdalnej i lokalnej. Jako argument local comm procesy podają uchwyt komunikatora, którego grupa jest grupą lokalną dla wołającego procesu. Uchwyt do utworzonego komunikatora jest umieszczany pod adresem newintercomm. Pozostałe argumenty są używane tylko w procesie tworzenia komunikatora i nie mają wpływu na jego późniejsze własności.

17 Operacje na grupach Operacje na komunikatorach Komunikatory zewnętrzne Obie grupy muszą mieć wyróżnionego członka, zwanego liderem. Lider lokalnej grupy wołającego procesu jest podawany jako argument local leader, a lider drugiej grupy jako remote leader. Dodatkowo musi istnieć komunikator wewnętrzny zawierający procesy obu grup (może zawierać też inne procesy), podawany jako argument peer comm. Najczęściej podaje się tu uchwyt MPI COMM WORLD lub jego kopię. Argument tag określa etykietę nadawaną komunikatom podczas tworzenia komunikatora. Nie może ona kolidować z żadną z etykiet komunikatorów, które nie zostały jeszcze odebrane w komunikatorze peer comm. Dlatego warto jako argumentu peer comm użyć kopii komunikatora MPI COMM WORLD. Argumenty peer comm i remote leader są ważne tylko dla dwóch procesów będących liderami obu grup. W pozostałych przypadkach są ignorowane.

18 Co to jest MPI? Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Komunikacja między dwoma procesami może być realizowana kilkoma sposobami. Zasadniczo MPI rozróżnia rodzaje komunikacji ze względu na: synchronizację wzajemną: komunikacja synchroniczna nadawca czeka na gotowość odbiorcy i kończy wysyłanie jak odbiorca potwierdzi odbiór; komunikacja asynchroniczna nadawca wysyła komunikat i nie oczekuje na potwierdzenie odbioru. warunek powrotu z funkcji wysyłanie/odbieranie: komunikacja blokująca powrót z funkcji wysyłanie/odbieranie następuje po zakończeniu operacji; komunikacja nieblokująca - powrót z funkcji wysyłanie/odbieranie nastepuje natychmiast. W MPI możliwe są różne kombinacje trybów wysyłania i odbierania.

19 Wysyłanie Co to jest MPI? Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Do blokującego wysyłania komunikatów służą funkcje: int MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) int MPI_BSend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) int MPI_SSend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) Wysyłają one count danych typu datatype umieszczonych pod adresem buf do procesu o identyfikatorze dest w komunikatorze comm. Jeśli komunikator jest wewnętrzny to nadawca i odbiorca muszą należeć do jego grupy, a jeśli jest zewnętrzny, to nadawca musi należeć do jednej z grup, a odbiorca do drugiej. Argument tag określa etykietę nadawaną komunikatowi. Wartość ta powinna być z zakresu od 0 do MPI TAG UB.

20 Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Możliwe wartości argumentu datatype i odpowiadające im typy języka C: Wartość argumentu datatype Typ języka C MPI CHAR signed char MPI SHORT signed short int MPI INT signed int MPI LONG signed long int MPI UNSIGNED CHAR unsigned char MPI UNSIGNED SHORT unsigned short int MPI UNSIGNED unsigned int MPI UNSIGNED LONG unsigned long int MPI FLOAT float MPI DOUBLE double MPI LONG DOUBLE long double MPI BYTE MPI PACKED

21 Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych O tym czy komunikat został wysłany w sposób synchroniczny czy asynchroniczny, decydują przedrostki w nazwach funkcji. Domyślnie używane jest wysyłanie asynchroniczne (MPI Send). Dodatkowo, można realizować wysyłanie asynchroniczne w trybie buforowanym (MPI Bsend), w którym nadawcy przydzielany jest odpowiednio duży bufor na wysyłane dane i jej wywołanie poprzedzają funkcje przydziału bufora. Wysyłanie można też realizować synchronicznie (MPI Ssend). Przy implementacji sieciowej MPI, dane są przed wysłaniem przekształcane do wspólnej reprezentacji. Po odebraniu dane są przekształcane do reprezentacji lokalnego komputera. Typ MPI BYTE oznacza, że dane nie będą przekształcane. Typ MPI PACKED oznacza, że dane są przekształcane przy pakowaniu/rozpakowywaniu danych z/do bufora.

22 Odbiór Co to jest MPI? Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Do blokującego odczytu danych służy funkcja: int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) niezależnie od trybu przesyłania komunikatu (synchronicznie czy asynchronicznie). Funkcja czeka na wysłanie przez proces o identyfikatorze source z komunikatora comm komunikatu z etykietą tag. Wartości datatype muszą być identyczne w funkcjach wysyłania i odbierania. Argument count może być większy niż w funkcji wysyłającej komunikat.

23 Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych W przypadku komunikatora zewnętrznego argument source musi być identyfikatorem procesu w zdalnej grupie. Argument source może też mieć wartość MPI ANY SOURCE, oznaczającą chęć odbierania komunikatu od dowolnego nadawcy. Podobnie argument tag może mieć wartość MPI ANY TAG oznaczający odczyt komunikatów o dowolnej etykiecie. Argument status wskazuje na strukturę, która zostanie przez funkcje wypełniona. Ma ona trzy pola MPI SOURCE, MPI TAG i MPI ERROR (odpowiednio identyfikator nadawcy, etykieta i komunikat błędu). MPI ERROR będzie wpisane tylko wtedy, gdy funkcja zwróci MPI ERR IN STATUS. Możemy też poznać ilość odebranych danych: int MPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int* count)

24 Przydzielanie buforów Co to jest MPI? Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Do przesyłania komunikatów w trybie buforowanym w procesach wysyłających komunikat musi zostać utworzony bufor. Służy do tego funkcja: int MPI_Buffer_attach(void *buf, int size) Argument buf powinien wskazywać na obszar pamięci o rozmiarze przynajmniej size bajtów. Biblioteka będzie używać go przy przesyłaniu komunikatów w trybie buforowanym. Aby odzyskać pamięć przydzieloną na bufory, powinniśmy użyć funkcji: int MPI_Buffer_detach(void **buff, int *size) która dodatkowo pod adres buff wpisuje adres poprzedniego bufora, a pod adres size jego rozmiar.

25 Funkcje nieblokujące Co to jest MPI? Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Funkcje wysyłające i odbierające dane w sposób nieblokujący różnią się od wersji blokujących dodatkowym przedrostkiem I (np. MPI Isend, MPI Irecv) i posiadają jeden dodatkowy parametr MPI Request *request. Można czekać na zakończenie operacji wywołując funkcję int MPI_Wait(MPI_Request *request, MPI_Status *status) Dodatkowo pod adresem status wpisuje status zakończonej operacji. Przy wyjściu funkcja wpisuje pod adresem request wartość MPI REQUEST NULL.

26 Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Jeżeli chcemy tylko sprawdzić czy operacja się zakończyła możemy użyć: int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status) Pod adresem flag zostanie zapisana wartość true jeżeli operacja się już skończyła lub false w przeciwnym przypadku. Jeżeli funkcje MPI Wait i MPI Test sygnalizują zakończenie operacji, zasoby zajmowane przez operację są zwalniane. Jeżeli operacja się nie skończyła, do zwolnienia zasobów można użyć funkcji. int MPI_Request_free(MPI_Request *request)

27 Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych W niektórych przypadkach bardzo użyteczna jest funkcja: int MPI_Waitany(int count, MPI_Request requests[], int *index, MPI_Status *status) czekająca na zakończenie jakiejkolwiek z count operacji o uchwytach przekazanych w tablicy requests. Indeks zakończonej operacji i jej status są zapisywane odpowiednio pod adresami index i status. Pod indeksem zakończonej operacji w requests zostanie wpisane MPI REQUEST NULL.

28 Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Operację nieblokującą można anulować, służy do tego funkcja int MPI_Cancel(MPI_Request *request) Anulowanie operacji nie jest równoznaczne ze zwolnieniem przez nią wszystkich zasobów. Zwykle należy wywołać jeszcze funkcje MPI Request free.

29 Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych W niektórych przypadkach (np. przy przesyłaniu tekstu) przed odebraniem komunikatu nie jest znana jego długość. Nie wiadomo wówczas, jaka powinna być wartość argumentu count, przekazywanego do funkcji odbierającej komunikat i jak duży powinien być bufor na dane. Informacje o długości można uzyskać wywołując funkcję: int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status *status) Działa ona podobnie jak funkcja MPI Recv, z tym, że nie pobiera komunikatu, a jedynie jego parametry. Komunikat zostaje i po alokacji buforów może być pobrany bez czekania za pomocą funkcji MPI Recv. Istnieje też nieblokująca wersja funkcji MPI Probe MPI Iprobe, która działa jak MPI Irecv, z tym, że nie pobiera komunikatu, a jedynie informacje o nim.

30 Typy pochodne i pakowanie danych Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Opisane dotychczas operacje umożliwiały przesyłanie komunikatu zawierającego wektor danych jednakowego typu, umieszczony w ciągłym obszarze pamięci. W pozostałych przypadkach należy uzyć typów pochodnych lub pakowania danych. Użycie typów pochodnych polega na zdefiniowaniu za pomocą specjalnych funkcji nowego typu, a następnie użycie go jako argumentu datatype w odpowiednich funkcjach. Raz zdefiniowany typ można używać wielokrotnie do przesyłania różnych danych lub do definiowania kolejnych typów pochodnych. Typ będący tablicą innych typów definiuje się za pomocą funkcji: int MPI_Type_contiguous(int cout, MPI_Datatype oldtype, MPI_Datatype *newtype)

31 Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Ogólniejszą wersją tej funkcji jest funkcja: int MPI_Type_vector(int count, int blocklength, int stride, MPI_Datatype oldtype, MPI_Datatype *newtype) Definiuje ona typ składający się z count bloków zawierających blocklength elementów typu oldtype każdy. Między początkami bloków występują odstępy o długości stride elementów oldtype. Do funkcji MPI Type vector podobna jest funkcja MPI Type hvector. Jedyną różnicą jest to, iż argument stride określa przesunięcia w bajtach, a nie w długościach elementu oldtype.

32 Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Najogólniejszą z funkcji definiujących typ jest funkcja: int MPI_Type_struct(int count, int *array_of_blocklengths, MPI_Aint *array_of_displacements, MPI_Datatype *array_of_types, MPI_Datatype *newtype) Definiuje ona typ składający się z count bloków, każdy o innym typie i długości (wyrażone liczbą elementów składowych). Elementy tablicy array of displacements określają przesunięcia poszczególnych bloków względem wspólnego początku.

33 Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Po zdefiniowaniu nowego typu należy go skompilować za pomocą funkcji: int MPI_Type_commit(MPI_Datatype *type) Kompilacja jest wymagana przed użyciem go przy wysyłaniu lub odbieraniu komunikatu, nie jest jednak wymagana podczas definiowania kolejnych typów pochodnych. Po zakończeniu używania typu należy zwolnić wykorzystywane przez niego zasoby, wywołując funkcje: int MPI_Type_free(MPI_Datatype *type) Funkcja ta nie wpływa na jeszcze aktywne operacje, jak również nie niszczy typów pochodnych.

34 Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Typy pochodne są konstrukcją statyczną i nie mogą się zmieniać w zależności od przesyłanych danych. Przykładem struktur danych, których nie można w ten sposób zdefiniować są unie o wariancie określonym przez przesyłane dane albo listy. Do przesyłania bardziej złożonych konstrukcji wykorzystuje się pakowanie. Pakowanie polega na umieszczeniu danych w pomocniczym buforze, a następnie wywołaniu funkcji wysyłającej komunikat.

35 Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Do pakowania służy funkcja: int MPI_Pack(void *inbuf, int incount, MPI_Datatype datatype, void *outbuf, int outsize, int *outposition, MPI_Comm comm) Kopiuje ona incount danych typu datatype (może to być typ prosty lub pochodny) umieszczonych pod adresem inbuf do bufora o początku outbuff i rozmiarze outsize. Ponieważ w buforze mogą się już znajdować dane, zmienna wskazywana przez outposition powinna określać ile bajtów tego bufora jest już używanych. Po przekopiowaniu danych do bufora funkcja modyfikuje tę zmienną.

36 Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Przed wykonaniem pakowania wymagany rozmiar bufora nie jest z góry znany. Można go poznać wywołując funkcję: int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int *size) Pod adresem size umieści ona rozmiar bufora wymagany do spakowania incount danych typu datatype. Po spakowaniu danych można je wysłać, a następnie odebrać jako typ MPI PACKED. Należy podać liczbę danych równą rozmiarowi bufora.

37 Wysyłanie Odbiór Przydzielanie buforów Funkcje nieblokujące Typy pochodne i pakowanie danych Przy odbiorze spakowanego komunikatu zazwyczaj nie znamy jego długości informacje o tym podaje funkcja MPI Probe. Odebrany komunikat trzeba rozpakować. Używa się do tego funkcji: int MPI_Unpack(void *inbuff, int insize, int *position, void *outbuf, int outcount, MPI_Datatype datatype, MPI_Comm comm) Pobiera ona outcount danych typu datatype i umieszcza je pod adresem outbuf. Dane są pobierane z bufora o początku inbuf i rozmiarze insize. Część danych z bufora inbuf została już wcześniej pobrana. Liczbę tę określa zmienna wskazywana przez position. Po wykonaniu funkcji zostanie ona zmodyfikowana, by uwzględnić właśnie odczytane dane. Pakowanie umożliwia przesyłanie bardziej złożonych struktur bez definiowania nowych typów. Wadą tego rozwiązania jest to, że dane muszą zostać przekopiowane do bufora podczas wysyłania i kopiowane z bufora podczas odbioru.

38 Co to jest MPI? Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Opisane wcześniej funkcje przesyłały komunikat od jednego procesu do drugiego procesu. Zarówno nadawcą jak i odbiorcą komunikatu był dokładnie jeden proces. Za pomocą MPI można przesyłać komunikaty między więcej niż dwoma procesami. Dostępne są następujące mechanizmy: synchronizacja za pomocą bariery; wysyłanie komunikatów do grupy procesów; zbieranie danych od grupy procesów; rozsyłanie danych między członków grupy procesów; operacje redukcji.

39 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie We wszystkich tych przypadkach komunikacja zachodzi między wyróżnionym procesem grupy (zwanym dalej liderem), a pozostałymi członkami grupy. Grupę określa się podając jej komunikator (musi być to komunikator wewnętrzny). W celu uniknięcia kolizji z komunikatami, które nie zostały jeszcze odebrane, opisane za chwilę funkcje tworzą kopię podanego komunikatora i jej używają. Wszystkie omawiane mechanizmy wymagają kolektywnej współpracy wszystkich procesów w grupie.

40 Synchronizacja za pomocą bariery Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie int MPI_Barrier(MPI_Comm comm) Funkcja realizuje operację bariery. Każdy z wywołujących ją procesów oczekuje, aż wywołają ją wszystkie procesy w grupie komunikatora comm i wtedy funkcja ta wszędzie skończy działanie.

41 Wysyłanie komunikatu do grupy procesów Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie int MPI_Bcast(void *buffer, int count, MPI_Datatype, int root, MPI_Comm comm) Funkcja realizuje rozsyłanie komunikatu od procesu root do pozostałych członków grupy komunikatora comm. Funkcja wysyła dane w procesie root, a w pozostałych procesach odbiera je. Rozsyłanych jest count danych typu datatype umieszczonych pod adresem buffer w procesie root. W pozostałych procesach grupy argument buffer pokazuje miejsce, gdzie odebrane dane zostaną umieszczone.

42 Zbieranie danych od grupy procesów Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Operację zbierania danych od grupy procesów realizuje funkcja : iny MPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) Każdy proces komunikatora (łącznie z liderem) wysyła identyczną liczbę danych sendcount umieszczonych w buforze sendbuf. Proces lidera o identyfikatorze root odbiera od każdego z nich recvcount danych typu recvtype, łączy je w kolejności identyfikatorów nadawców i umieszcza pod adresem recvbuf. Argumenty recvcount, recvbuf i recvtype są ważne tylko dla procesu o identyfikatorze root.

43 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Ogólniejszym wariantem funkcji MPI Gather jest funkcja: int MPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcounts, int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm) Umożliwia ona każdemu procesowi z grupy przesłanie innej liczby danych. Typy muszą być takie same. Proces root w wektorze recvcounts podaje liczbę danych wysłanych przez poszczególne procesy, a w displs miejsca gdzie należy umieścić dane od poszczególnych procesów (przesunięcia względem adresu recvbuf wyrażone rozmiarami typu recvtype). Istnieją też funkcje MPI Allgather i MPI Allgatherv różniące się od MPI Gather i MPI Gatherv tym, iż wszystkie procesy, a nie tylko lider, otrzymują wynikowy wektor. Funkcje te nie mają argumentu root.

44 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Rozsyłanie danych między członków grupy procesów Operację odwrotną do MPI Gather realizuje funkcja: int MPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) Po wywołaniu jej przez wszystkie procesy komunikatora comm, proces root dzieli wektor o adresie sendbuf na podwektory o rozmiarze sendcount i wysyła je do poszczególnych procesów w grupie (także do siebie). Każdy z procesów odbiera swój kawałek o rozmiarze recvcount elementów typu recvtype i umieszcza go pod adresem recvbuf. Rozmiary wszystkich kawałków muszą być identyczne.

45 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Również funkcja MPI Scatter ma odpowiednik, umożliwiający rozsyłanie podwektorów o różnych długościach. Realizuje to funkcja: int MPI_Scaterv(void *senbuf, int *sendcounts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm) Zakłada się w niej, że liczba elementów sendtype, rozsyłanych do poszczególnych procesów, jest umieszczona w tablicy sendcounts oraz, że tablica displs zawiera położenia poszczególnych kawałków względem adresu sendbuf wyrażone w długościach typu sendtype.

46 Operacje redukcji Co to jest MPI? Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Operację redukcji wykonuje funkcja: int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) Każdy z procesów przekazuje funkcji count danych typu datatype w buforze sendbuf. Na tych danych jest wykonywana operacja określona przez argument op. Wyniki są umieszczane w buforze recvbuf procesu root o długości count elementów typu datatype. Operacje wykonywane są niezależnie dla każdej danej w buforze.

47 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Przykładowo, jeśli typem operacji jest maksimum, to i-tą daną bufora recvbuf będzie maksimum po wszystkich procesach z i-tej danej buforów sendbuf. Typ danych datatype musi pasować do operacji op. Dozwolone wartości argumentu op i ich znaczenie podano w tabeli na kolejnych slajdach. Operacje MPI MAXLOC i MPI MINLOC oczekują elementów będących parami, zawierającymi porównywalną daną i indeks. Wynikiem operacji na sekwencji takich par jest para zawierająca wartość maksymalną (lub minimalną) i indeks odpowiadający pierwszej takiej wartości w sekwencji.

48 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Wartość argumentu Dozwolony typ Znaczenie op MPI INT, MPI SHORT, MPI LONG, MPI UNSIGNED, MPI MAX MPI UNSIGNED SHORT, MPI UNSIGNED LONG, Maksimum MPI FLOAT, MPI DOUBLE, MPI LONG DOUBLE MPI INT, MPI SHORT, MPI LONG, MPI UNSIGNED, MPI MIN MPI UNSIGNED SHORT, MPI UNSIGNED LONG, Minimum MPI FLOAT, MPI DOUBLE, MPI LONG DOUBLE MPI INT, MPI SHORT, MPI LONG, MPI UNSIGNED, MPI SUM MPI UNSIGNED SHORT, MPI UNSIGNED LONG, Suma MPI FLOAT, MPI DOUBLE, MPI LONG DOUBLE MPI INT, MPI SHORT, MPI LONG, MPI UNSIGNED, MPI PROD MPI UNSIGNED SHORT, MPI UNSIGNED LONG, Iloczyn MPI FLOAT, MPI DOUBLE, MPI LONG DOUBLE

49 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Wartość argumentu Dozwolony typ Znaczenie op MPI LAND MPI INT, MPI SHORT, MPI LONG, MPI UNSIGNED, Logiczne AND MPI UNSIGNED SHORT, MPI UNSIGNED LONG, MPI INT, MPI SHORT, MPI LONG, MPI UNSIGNED, Binarne AND MPI BAND MPI UNSIGNED SHORT, MPI UNSIGNED LONG, (po bitach) MPI BYTE MPI LOR MPI INT, MPI SHORT, MPI LONG, MPI UNSIGNED, Logiczne OR MPI UNSIGNED SHORT, MPI UNSIGNED LONG, MPI INT, MPI SHORT, MPI LONG, MPI UNSIGNED, Binarne OR MPI BOR MPI UNSIGNED SHORT, MPI UNSIGNED LONG, (po bitach) MPI BYTE MPI LXOR MPI INT, MPI SHORT, MPI LONG, MPI UNSIGNED, Logiczne XOR MPI UNSIGNED SHORT, MPI UNSIGNED LONG, MPI INT, MPI SHORT, MPI LONG, MPI UNSIGNED, Binarne XOR MPI BXOR MPI UNSIGNED SHORT, MPI UNSIGNED LONG, (po bitach) MPI BYTE

50 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Wartość argumentu Dozwolony typ Znaczenie op MPI INT, MPI DOUBLE INT Maksimum MPI MAXLOC MPI LONG DOUBLE INT, INT, razem z pozycją MPI SHORT INT, MPI LONG INT MPI INT, MPI DOUBLE INT Minimum MPI MINLOC MPI LONG DOUBLE INT, INT, razem z pozycją MPI SHORT INT, MPI LONG INT

51 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Operacje mogą być także zdefiniowane przez użytkownika, służy do tego funkcja: int MPI_Op_create(MPI_User_function *function, int commute, MPI_Op *op) Argument commute określa czy funkcja jest przemienna (true lub false). Jeśli nie, to operacja będzie wykonywana w kolejności określonej identyfikatorami procesów. Uchwyt do zdefiniowanej operacji jest umieszczany pod adresem op. Po wykorzystaniu zdefiniowanej operacji należy zwolnić zasoby zajmowane przez definicję za pomocą funkcji: int MPI_Op_free(MPI_Op *op) Funkcja ta dodatkowo pod adresem op wpisze wartość MPI OP NULL.

52 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Argument function powinien wskazywać na funkcję o prototypie: void function (void* invect, void* inoutvect, int *len, MPI_Datatype *datatype) wykonującą operację na parze wektorów przekazywanych przez invect i inoutvect, liczbie elementów wskazywanej przez len, o typie umieszczonym pod adresem datatype. Wynik operacji jest umieszczony pod adresem inoutvect.

53 Wirtualne topologie Co to jest MPI? Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Grupy procesów nadają swoim członkom indeksy od zera do liczby procesów pomniejszonej o jeden. W niektórych przypadkach nie odpowiada to topologii używanej przez algorytm. Identyfikowanie procesów za pomocą kolejnych numerów nie jest zbyt wygodnie przy obliczeniach numerycznych związanych zwykle z siatkami liczb w R n. Wiele algorytmów tak traktuje procesy, jakby były one umieszczone w węzłach siatki wielowymiarowej. Bardziej ogólnie, topologia algorytmu może być wyrażona przez graf. Węzły grafu odpowiadają procesom, a łuki drogom komunikacji. W MPI można korzystać z programów i adresowania w przestrzeni wirtualnej, którą sami określimy.

54 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Topologia jest przyporządkowywana komunikatorom. Funkcje tworzące nowe topologie wśród argumentów oczekują komunikatora. Tworzą one nowy komunikator o takiej samej grupie procesów i związują z nim daną topologię. Utworzony komunikator zwracają. Funkcje tworzące topologie są kolektywne dla wszystkich procesów w grupie.

55 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Najprostszą topologią algorytmu jest topologia kartezjańska. Tworzy ją funkcja: int MPI_Cart_create(MPI_Comm oldcomm, int ndims, int *dims, int *periods, int reorder, MPI_Comm *comm_chart) Argument oldcomm określa kopiowany komunikator. Liczbę wymiarów podaje argument ndims, a tablica dims określa rozmiary poszczególnych wymiarów. Jeśli reorder jest równe false, to indeksy poszczególnych procesów w utworzonym komunikatorze są takie same, jak w komunikatorze oldcomm, w przeciwnym razie, mogą być inne w celu dopasowania topologii wirtualnej do fizycznej topologii maszyny. Tablica periods określa czy poszczególne wymiary są cykliczne. Uchwyt do utworzonego komunikatora jest zapisywany pod adresem comm cart. Jeśli liczba procesów w komunikatorze oldcom jest większa niż wynikająca z rozmiarów dims, to utworzony komunikator ma mniej procesów, a w nadmiarowych procesach jest wpisywane MPI COMM NULL pod adresem comm cart.

56 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Ogólną topologię, określoną przez graf, tworzy funkcja: int MPI_Graph_create(MPI_Comm comm, int nnodes, int *index, int *edges, int reorder, MPI_Comm *comm_graph) Graf jest określony liczbą węzłów i indeksów sąsiadów każdego z węzłów. Indeksy węzłów są kolejnymi liczbami całkowitymi poczynając od zera. Liczbę węzłów określa argument nnodes. Indeksy sąsiadów kolejnych węzłów są umieszczone w tablicy edges. Tablica index zawiera sumy liczb sąsiadów danego węzła i węzłów o indeksach niższych. Pozostałe argumenty mają to samo znaczenie jak w funkcji MPI Cart create.

57 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie Podstawową procedurą używaną podczas obliczeń w topologii kartezjańskiej jest wymiana informacji z sąsiadami wzdłuż poszczególnych współrzędnych. int MPI_Cart_shift(MPI_Comm comm, int direction, int disp, int *rank_source, int *rank_dest) Funkcja oblicza indeks procesu przesuniętego względem procesu wywołującego funkcję o disp węzłów w kierunku direction. Wyznaczony indeks jest umieszczany pod adresem rank dest. Pod adresem rank source jest wpisywany indeks procesu przesuniętego w przeciwnym kierunku. Gdy dojdzie się do brzegu, wpisywana jest wartość MPI PROC NULL.

58 Synchronizacja za pomocą bariery Wysyłanie komunikatu do grupy procesów Zbieranie danych od grupy procesów Rozsyłanie danych między członków grupy procesów Operacje redukcji Wirtualne topologie W przypadku topologii określonej przez graf nie istnieją współrzędne topologii, a jedynie indeksy procesów. Stąd operacją, którą często się wykorzystuje, jest pobieranie indeksów sąsiadów. Realizują to funkcje: int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors) int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int *neighbors) Pierwsza z nich pod adresem nneighbors wpisuje liczbę sąsiadów procesu o indeksie rank, a druga do wektora neighbors indeksy sąsiadów procesu o indeksie rank.

59 Co to jest MPI? Specyfikacja MPI 1.1 została zakończona w maju 1994r. Od tego czasu ujawniło się kilka braków w istniejącej specyfikacji. Wersja 1.2 miała za zadanie dokładniej wyjaśnić zagadnienia, pominięte w poprzedniej wersji i nie wprowadzała żadnych nowych rozszerzeń. W lipcu 1997r. powstała specyfikacja, rozszerzająca MPI m.in. o dynamiczne tworzenie procesów, komunikację jednostronną i operacje na plikach. definiuje 120 nowych funkcji (MPI 1.1 ma 124 funkcje).

60 Co to jest MPI? Wiele funkcji powiela się, realizując te same operacje dla różnych argumentów (np. MPI Scatter i MPI Scatterv). Tym sposobem starano się dostarczyć możliwości wykonywania pewnej operacji z bardzo złożonymi parametrami, jak i udostępniania funkcji prostszej, umożliwiającej wykonanie operacji z parametrami stosowanymi najczęściej. Wiele z funkcji zostało też wprowadzone po to, by umożliwić efektywne stosowanie pewnych mechanizmów sprzętowych. Wśród zalet możemy wymienić efektywność szczególnie na maszynach równoległych z pamięcią lokalną. Wadą jest brak heterogeniczności. Nie można łączyć różnych implementacji, a producenci nie są zainteresowani takim łączeniem. Ponadto nie można łączyć ze sobą aplikacji pisanych w różnych językach programowania.

61 Dziękujemy za uwagę! Referat powstał na podstawie: A. Korbowski, E Niewiadomska-Szynkieicz, Obliczenia równoległe i rozproszone, Oficyna Wydawnicza Politechniki Warszawskiej 2001;

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

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

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

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

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

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

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

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

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

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

Jak wygląda praca na klastrze

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

Bardziej szczegółowo

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

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

Klient-Serwer Komunikacja przy pomocy gniazd

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

Bardziej szczegółowo

Aplikacja Sieciowa wątki po stronie klienta

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

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

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

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

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

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

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

Programowanie w standardzie MPI

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

Bardziej szczegółowo

Operacje 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

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

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

Bardziej szczegółowo

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

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

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

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

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

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory Poniżej pozwoliłem sobie za cytować za wikipedią definicję zmiennej w informatyce.

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

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej.

Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej. Procesy Proces (zwany też zadaniem) jest jednostką aktywną, kontrolowaną przez system operacyjny i związaną z wykonywanym programem. Proces ma przydzielone zasoby typu pamięć (segment kodu, segment danych,

Bardziej szczegółowo

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

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

Bardziej szczegółowo

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny: Wskaźniki nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny: typ nw; /* definicja zmiennej nw typu typ */ typ *w_nw; /* definicja

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Działanie systemu operacyjnego

Działanie systemu operacyjnego Budowa systemu komputerowego Działanie systemu operacyjnego Jednostka centralna dysku Szyna systemowa (magistrala danych) drukarki pamięci operacyjnej I NIC sieci Pamięć operacyjna Przerwania Przerwania

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

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

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

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

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

Bardziej szczegółowo

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Tablice wielowymiarowe C umożliwia definiowanie tablic wielowymiarowych najczęściej stosowane

Bardziej szczegółowo

Opis protokołu RPC. Grzegorz Maj nr indeksu:

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

Bardziej szczegółowo

Działanie systemu operacyjnego

Działanie systemu operacyjnego Działanie systemu operacyjnego Budowa systemu komputerowego Jednostka centralna Sterownik dysku Sterownik drukarki Sterownik sieci Szyna systemowa (magistrala danych) Sterownik pamięci operacyjnej Pamięć

Bardziej szczegółowo

external Data Representation

external Data Representation Remote Procedure Call external Data Representation Opis standardu RFC 1014 Kanoniczna reprezentacja danych oparta na formacie IEEE Deklaratywny język opisu struktur danych (zbliżony do języka C) Koncepcja

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

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

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

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty

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

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

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

76.Struktura oprogramowania rozproszonego.

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

System Rozproszone Komunikator Dokumentacja. Maciej Muszkowski Jakub Narloch

System Rozproszone Komunikator Dokumentacja. Maciej Muszkowski Jakub Narloch System Rozproszone Komunikator Dokumentacja Maciej Muszkowski Jakub Narloch Wymagania Zgodnie ze wstępnymi założeniami komunikator musi, realizowad następujące funkcje: 1. Jest oparty o model Peer2Peer,

Bardziej szczegółowo

Podstawy programowania. Podstawy C# Tablice

Podstawy programowania. Podstawy C# Tablice Podstawy programowania Podstawy C# Tablice Tablica to indeksowany zbiór elementów Tablica jest typem referencyjnym (deklaracja tworzy tylko referencję, sama tablica musi być utworzona oddzielnie, najprościej

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p. Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:

Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików: Pliki W celu wykonania jakiejkolwiek operacji na istniejącym pliku, plik ten musi zostać otwarty, natomiast jeśli plik jeszcze nie istnieje, to musi zostać utworzony. Plik może zostać otwarty w trybie:

Bardziej szczegółowo

Przesyłania danych przez protokół TCP/IP

Przesyłania danych przez protokół TCP/IP Przesyłania danych przez protokół TCP/IP PAKIETY Protokół TCP/IP transmituje dane przez sieć, dzieląc je na mniejsze porcje, zwane pakietami. Pakiety są często określane różnymi terminami, w zależności

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

Wykład 3 Składnia języka C# (cz. 2)

Wykład 3 Składnia języka C# (cz. 2) Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest

Bardziej szczegółowo

Języki i techniki programowania Ćwiczenia 2

Języki i techniki programowania Ćwiczenia 2 Języki i techniki programowania Ćwiczenia 2 Autor: Marcin Orchel Spis treści: Język C++... 5 Przekazywanie parametrów do funkcji... 5 Przekazywanie parametrów w Javie.... 5 Przekazywanie parametrów w c++...

Bardziej szczegółowo

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

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne

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

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

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

Bardziej szczegółowo

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

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych

Bardziej szczegółowo

4. Funkcje. Przykłady

4. Funkcje. Przykłady 4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

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

Działanie systemu operacyjnego

Działanie systemu operacyjnego Budowa systemu komputerowego Działanie systemu operacyjnego Jednostka centralna dysku Szyna systemowa (magistrala danych) drukarki pamięci operacyjnej sieci Pamięć operacyjna Przerwania Przerwania Przerwanie

Bardziej szczegółowo

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych 2. Tablice Tablica to struktura danych przechowująca elementy jednego typu (jednorodna). Dostęp do poszczególnych elementów składowych jest możliwy za pomocą indeksów. Rozróżniamy następujące typy tablic:

Bardziej szczegółowo

FAQ: 00000041/PL Data: 09/06/2012. Zastosowanie zmiennych Raw Data Type WinCC v7.0

FAQ: 00000041/PL Data: 09/06/2012. Zastosowanie zmiennych Raw Data Type WinCC v7.0 Zmienne typu Raw Data są typem danych surowych nieprzetworzonych. Ten typ danych daje użytkownikowi możliwość przesyłania do oraz z WinCC dużych ilości danych odpowiednio 208 bajtów dla sterowników serii

Bardziej szczegółowo

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu

Bardziej szczegółowo

Zdalne wywoływanie procedur RPC

Zdalne wywoływanie procedur RPC 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

Bardziej szczegółowo

Zdalne wywoływanie procedur RPC

Zdalne wywoływanie procedur RPC 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

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład. Część XVII C++ Funkcje Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład. 2 3 Tworzymy deklarację i definicję funkcji o nazwie pobierzln() Funkcja

Bardziej szczegółowo

Mechanizmy pracy równoległej. Jarosław Kuchta

Mechanizmy pracy równoległej. Jarosław Kuchta Mechanizmy pracy równoległej Jarosław Kuchta Zagadnienia Algorytmy wzajemnego wykluczania algorytm Dekkera Mechanizmy niskopoziomowe przerwania mechanizmy ochrony pamięci instrukcje specjalne Mechanizmy

Bardziej szczegółowo

Sun RPC/XDR. Dariusz Wawrzyniak 1

Sun RPC/XDR. Dariusz Wawrzyniak 1 Remote Procedure Call external Data Representation trójwymiarowa identyfikacja procedur (nr programu, nr wersji, nr procedury) protokół RPC oparty na protokołach warstwy transportowej stosu TCP/IP (TCP

Bardziej szczegółowo

DYNAMICZNE PRZYDZIELANIE PAMIECI

DYNAMICZNE PRZYDZIELANIE PAMIECI DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne

Bardziej szczegółowo

Łagodne wprowadzenie do Message Passing Interface (MPI)

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

Bardziej szczegółowo

Tablice. Jones Stygar na tropie zmiennych

Tablice. Jones Stygar na tropie zmiennych Tablice Jones Stygar na tropie zmiennych Czym jest tablica? Obecnie praktycznie wszystkie języki programowania obsługują tablice. W matematyce odpowiednikiem tablicy jednowymiarowej jest ciąg (lub wektor),

Bardziej szczegółowo

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom). Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154

Bardziej szczegółowo

Zaawansowane operacje grupowe

Zaawansowane operacje grupowe Zaawansowane operacje grupowe Zakres ćwiczenia Celem ćwiczenia jest zapoznanie się z zaawansowanymi funkcjami biblioteki PVM wspierającymi tworzenie aplikacji rozproszonych. Przedstawienie problemu W tworzeniu

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

Zmienne, stałe i operatory

Zmienne, stałe i operatory Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Bardziej szczegółowo