Programowanie Równoległe i Rozproszone

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

Download "Programowanie Równoległe i Rozproszone"

Transkrypt

1 Programowanie Równoległe i Rozproszone Lucjan Stapp Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska (l.stapp@mini.pw.edu.pl) 1/54 PRiR - wstęp Parallel Virtual Machine() zestaw narzędzi do tworzenia oprogramowania dla sieci równolegle połączonych sekwencyjnych i/lub równoległych komputerów. Został zaprojektowany i stworzony by umożliwić łączenie komputerów o różnych konfiguracjach sprzętowych w jeden równolegle działający komputer. Stworzony w latach 90- tych; Do dziś jest to aktywny projekt: Aktualna wersja to z 2001 r. 2/54 PRiR Parallel Virtual Machine() nie jest wg. dzisiejszych definicji maszyna wirtualną. To zarządca zrównoleglonych procesów. 3/54 PRiR 1

2 umożliwia stworzenie" z pewnej ilości komputerów (mogą być sekwencyjne i/lub równoległe) jednego równoległego systemu. Podstawowe zasady: Użytkownik definiuje zbiór maszyn, na których wykonywany jest program. Zbiór ten jest dynamiczny (można dodawać i/lub usuwać węzły w trakcie działania); Przezroczystość sprzętowa; Przekazywanie danych w oparciu o model przekazywanie komunikatów (message passing); Heterogeniczność systemu; Wspomaganie wieloprocesowości. 4/54 PRiR Schemat działania 5/54 PRiR umożliwia stworzenie" z pewnej ilości komputerów (mogą być sekwencyjne i/lub równoległe) w jeden równoległy. Odbywa się to na zasadzie dołączania kolejnych węzłów (komputerów), na których został zainstalowany i odpowiednio skonfigurowany. Podłączanie węzła składa się z grubsza z 3 etapów: 1. połączenia przez remote shell rsh, 2. uruchomieniu demona pvmd3 (dalej oznaczanego jako pvmd) 3. dostarczenia demonowi informacji o parametrach istniejącej sieci. 6/54 PRiR 2

3 Schemat architektury 7/54 PRiR można używać pisząc programy w różnych językach, tu omówione zostanie ich zastosowanie w językach C i C++. Standardowo, mamy do dyspozycji zestaw funkcji z parametrami. Umożliwia to przekazywanie argumentów jako wartości zmiennych i/lub wskaźników oraz zwracanie przez funkcje odpowiednich wartości Dodatkowo, mamy do dyspozycji zestaw makr i stałych systemowych (np. errno i pvm_errno do obsługi błędów) ułatwia to rozróżnianie różnych wyjść. 8/54 PRiR Każdemu procesowi (zwanemu zadaniem task) w momencie rejestracji nadawany jest jego unikalny numer typu integer (task identifier - TID). Ten identyfikator jest niezależny zarówno od sprzętu, na którym pracuje proces jak i od architektury systemu. Identyfikator jest unikalny i może być uważany za adres procesu. Identyfikator można wykorzystywać przy różnych procedurach - można przesłać informacje pod dany adres, można zdalnie "zabić" proces o danym identyfikatorze itp. 9/54 PRiR 3

4 Czasami pracujemy w grupach zadań. Każdej takiej grupie można nadać nazwę (numer). Zadanie otrzymuje też swój unikalny identyfikator w grupie. Identyfikatory w grupie zawsze zaczynają się od zera i stopniowo rosną. Mamy wydzielony zestaw procedur odnoszący się do grup. Nie zostaną one omówione w ramach tego wykładu. 10/54 PRiR startowy program #include "pvm3.h main() int cc, tid, msgtag; char buf[100]; printf( to ja t%x\n", pvm_mytid()); /* pobranie identyfikatora funkcją pvm_mytid */ cc = pvm_spawn( Czesc wszystkim", (char**)0, 0, "", 1,&tid); /*rozesłanie info funkcją pvm_spawn */ if (cc == 1) /*jeżeli spawn się udał */ msgtag = 1; pvm_recv(tid, msgtag); /*odebranie od innych */ pvm_upkstr(buf); printf( od t%x: %s\n", tid, buf); else printf( nie można wykonac czesc wszystkim \n"); pvm_exit(); /*wyjście z pvm*/ 11/54 PRiR #include "pvm3.h main() int ptid, msgtag; char buf[100]; ptid = pvm_parent(); /* pobranie adresu rodzica */ strcpy(buf, czesc wszytkim odebrane od"); gethostname(buf + strlen(buf), 64); msgtag = 1; pvm_initsend(pvmdatadefault); pvm_pkstr(buf); pvm_send(ptid, msgtag); /* te 3 instrukcje to przesłanie odpowiedzi: inicjalizacja bufora do przesłania umieszczenie danych wysłanie */ pvm_exit(); /*wyjście z pvm*/ odbiorca 12/54 PRiR 4

5 W rozróżniamy trzy możliwe organizacje zadań, co umożliwia nam różne strategie wykonywania obliczeń: Najbardziej popularny model to crowd computing : wiele procesów, na ogół wykonujących ten sam kod, z wymianą informacji poprzez przesyłanie pomiędzy procesami odpowiednich wiadomości Model master slave ; Model jeden nadzorca jedno ręcznie wystartowane zadanie odpowiada za podział zadań, reszta liczy; tree computation najczęściej stosowany dla algorytmów typu divide-and-conquer ; model hybrydowy ; 13/54 PRiR Schemat architektury Master slave nie ma komunikacji między niewolnikami 14/54 PRiR schemat mastera /*rozmieszczenie początkowe */ for (i=0; i < NumWorkers; i++ ) pvm_spawn(<worker name>); // Uruchomienie niewolnika i pvm_send(<worker tid i>,999); /* przesłanie zadania do niewolnika */ /* Odbieranie - przesyłanie */ while (WorkToDo) pvm_recv(888) // Odbieranie wyników pvm_send(<available worker tid>,999) /* przesłanie kolejnego zadania do available worker /* zebranie wyników */ for (i=0; i < NumWorkers; i++ ) pvm_recv(888) // Odebranie wynikow pvm_kill(<worker tid i>)//zakończenie pracy niewolnika i 15/54 PRiR 5

6 schemat niewolnika while (1) pvm_recv(999); //pobranie zadania result = Calculations(task;)//obliczenia pvm_send(<master tid>,888); // Przeslanie wyników do mastera Uwaga: W podanym schemacie nie ma komunikacji między niewolnikami. 16/54 PRiR schemat drzewa W tym podejściu zadania (procesy) są tworzone dynamicznie w czasie wraz z postępem obliczeń. Równocześnie tworzona jest relacja ojciec dziecko (jak w drzewie). Podejście to różni się od poprzedniego właśnie tą budową relacji (w master slave jest to raczej gwiazda). Jest głównie stosowane, gdy nie znamy z góry liczby potrzebnych procesów (np. WBS, devide and conquer). 17/54 PRiR int tid = pvm_mytid( void ) sterowanie Procedura pvm_mytid() zwraca identyfikator TID. Może być wywoływana wielokrotnie. Przyjęło się ją wywoływać jako pierwszą, by równocześnie zapewnić wpisanie tego procesu do. int info = pvm_exit( void ) Procedura pvm_exit() informuje lokalnego demona że proces opuszcza. Nie zabija procesu. Na ogół używana przed zakończeniem programu. 18/54 PRiR 6

7 sterowanie int numt = pvm_spawn(char *task, char **argv, int flag, char *where, int ntask, int *tids ) Procedura pvm_spawn() uruchamia ntask kopii pliku wykonalnego na maszynie wirtualnej. Jej podstawowe parametry to: argv wskaźnik do tablicy z parametrami (może być NULL), flag specyfikuje opcje. pvm_spawn zwraca, ile kopii udało się uruchomić. int info = pvm_kill( int tid ) Zabija proces on identyfikatorze tid. int info = pvm_catchout( FILE *ff ) Zbiera i wysyła na wyjście wyniki od poprzednio uruchomionych dzieci procesu. 19/54 PRiR informacje int tid = pvm_parent( void ) Zwraca tid rodzica. int info = pvm_config( int *nhost, int *narch, struct pvmhostinfo **hostp Zwraca informacje o maszynie wirtualnej, takie jak ilość węzłów nhost, hostp jest wskaźnikiem do utworzonej przez użytkownika tablicy pvmhostinfo o zadanej strukturze, która musi być wielkości >= nhost. Otrzymujemy w niej m.in. informacje o demonach, nazwach węzłów, a także o relatywnej prędkości CPU maszyny, na której uruchamiana jest ta instrukcja. 20/54 PRiR operacje dodawania i usuwania int info = pvm_addhosts( char **hosts, int nhost, int *infos) int info = pvm_delhosts( char **hosts, int nhost, int *infos) Dodanie i usunięcie węzła. 21/54 PRiR 7

8 przekazywanie danych int bufid = pvm_initsend( int encoding ) Wywoływana przed przesłaniem informacji. Czyści bufor (lub tworzy nowy) do przesłania informacji. Zwraca identyfikator bufora. Dopuszczalne wartości encoding to: PvmDataDefault - kodowanie XDR (external Data Representation) /interlink/r2_0/rpc_pr/rpxdesc.html; PvmDataRaw brak kodowania; PvmDataInPlace w buforze są tylko informacje o wielkości danych i wskaźnik na miejsce, gdzie te dane są umieszczone. Przy przesyłaniu (pvm_send()) następuje kopiowanie bezpośrednio do pamięci odbiorcy. 22/54 PRiR pakowanie danych int info = pvm_pkbyte( char *cp, int nitem, int stride ) int info = pvm_pkcplx( float *xp, int nitem, int stride ) int info = pvm_pkdcplx( double *zp, int nitem, int stride ) int info = pvm_pkdouble( double *dp, int nitem, int stride ) int info = pvm_pkfloat( float *fp, int nitem, int stride ) int info = pvm_pkint( int *np, int nitem, int stride ) int info = pvm_pklong( long *np, int nitem, int stride ) int info = pvm_pkshort( short *np, int nitem, int stride ) int info = pvm_pkstr( char *cp ) Powyższe procedury pakują macierz danych danego typu do aktywnego bufora. Można włożyć wiele różnych typów danych, wywołując te procedury wielokrotnie. Dane są wyjmowane po przesłaniu w tej samej kolejności co zostały włożone; nitem oznacza ilość danych. 23/54 PRiR przekazywanie danych int info = pvm_send( int tid, int msgtag ) Natychmiastowe przesłanie danych do procesu TID int info = pvm_mcast( int *tids, int ntask, int msgtag ) Rozesłanie informacji metoda broadcastdo wszystkich procesów o TID w tablicy ntasks. 24/54 PRiR 8

9 przekazywanie danych int bufid = pvm_recv( int tid, int msgtag ) Blokowany odbiór; odbiorca czeka, aż coś będzie od nadawcy tid. int bufid = pvm_nrecv( int tid, int msgtag ) Nieblokowany odbiór; jeżeli nie ma co odebrać, zwraca 0. int bufid = pvm_probe( int tid, int msgtag ) Warto używać przy nieblokowanym odbiorze; sprawdza zawartość bufora. int info = pvm_bufinfo( int bufid, int *bytes, int *msgtag, int *tid ) Sprawdzenie, co jest w buforze bufid. 25/54 PRiR /* Fork Join Example Demonstrates how to spawn processes and exchange messages */ /* defines and prototypes for the library */ #include <pvm3.h> /* Maximum number of children this program will spawn */ #define MAXNCHILD 20 /* Tag to use for the joing message */ #define JOINTAG 11 int main(int argc, char* argv[]) /* number of tasks to spawn, use 3 as the default */ int ntask = 3; /* return code from pvm calls */ int info; /* my task id */ int mytid; /* my parents task id */ int myparent; /* children task id array */ int child[maxnchild]; int i, mydata, buf, len, tag, tid; /* find out my task id number */ mytid = pvm_mytid(); /* check for error */ if (mytid < 0) /* print out the error */ pvm_perror(argv[0]); /* exit the program */ return -1; przykład 26/54 PRiR przykład /* find my parent's task id number */ myparent = pvm_parent(); /* exit if there is some error other than PvmNoParent */ if ((myparent < 0) && (myparent!= PvmNoParent)) pvm_perror(argv[0]); pvm_exit(); return -1; /* if I don't have a parent then I am the parent */ if (myparent == PvmNoParent) /* find out how many tasks to spawn */ if (argc == 2) ntask = atoi(argv[1]); /* make sure ntask is legal */ if ((ntask < 1) (ntask > MAXNCHILD)) pvm_exit(); return 0; /* spawn the child tasks */ info = pvm_spawn(argv[0], (char**)0, PvmTaskDefault, (char*)0, ntask, child); 27/54 PRiR 9

10 /* print out the task ids */ for (i = 0; i < ntask; i++) if (child[i] < 0) /* print the error code in decimal*/ printf(" %d", child[i]); else /* print the task id in hex */ printf("t%x\t", child[i]); putchar('\n'); /* make sure spawn succeeded */ if (info == 0) pvm_exit(); return -1; /* only expect responses from those spawned correctly */ ntask = info; for (i = 0; i < ntask; i++) /* recv a message from any child process */ buf = pvm_recv(-1, JOINTAG); if (buf < 0) pvm_perror("calling recv"); info = pvm_bufinfo(buf, &len, &tag, &tid); if (info < 0) pvm_perror("calling pvm_bufinfo"); info = pvm_upkint(&mydata, 1, 1); if (info < 0) pvm_perror("calling pvm_upkint"); if (mydata!= tid) printf("this should not happen!\n"); printf("length %d, Tag %d, Tid t%x\n", len, tag, tid); przykład 28/54 PRiR przykład pvm_exit(); return 0; /* i'm a child */ info = pvm_initsend(pvmdatadefault); if (info < 0) pvm_perror("calling pvm_initsend"); pvm_exit(); return -1; info = pvm_pkint(&mytid, 1, 1); if (info < 0) pvm_perror("calling pvm_pkint"); pvm_exit(); return -1; info = pvm_send(myparent, JOINTAG); if (info < 0) pvm_perror("calling pvm_send"); pvm_exit(); return -1; pvm_exit(); return 0; 29/54 PRiR Więcej przykładów: przykłady 30/54 PRiR 10

11 MPI - wstęp Message PassingInterface (MPI) protokół komunikacyjny będący standardemprzesyłania komunikatów pomiędzy procesami programów równoległych działających na jednym lub więcej komputerach. Interfejs ten wraz z protokołem oraz semantyką specyfikuje, jak jego elementy winny się zachowywać w dowolnej implementacji. Celami MPI są wysoka jakość, skalowalnośćoraz przenośność. MPI jest dominującym modelem wykorzystywanym obecnie w klastrach komputerów oraz superkomputerach. 31/54 PRiR MPI - wstęp Obecnie występują 2 najpopularniejsze wersje: wersja 1.2 (tj. MPI-1, gotowy w maju 1994), która kładzie nacisk na przekazywanie wiadomości oraz jest zaopatrzona w statyczne środowisko uruchomieniowe oraz MPI-2.1 (MPI-2, ukończona w 1998), która zawiera kilka dodatków jak równoległe I/O, dynamiczne zarządzanie procesami oraz zarządzanie operacjami pamięci. Specyfikacja MPI-2 zawiera ponad 500 funkcji dla ANSI C, ANSI Fortran (Fortran90) oraz ANSI C++. Warto zauważyć, iż MPI-2 jest głównie nadzbiorem MPI-1, mimo iż część funkcji została wymieniona. Programy napisane w standardzie 1.2 są kompatybilne z MPI /54 PRiR MPI - wstęp Po wprowadzeniu, nowszy standard nie cieszył się dużą popularnością, ponieważ rok wcześniej opracowano MPICH, w którym zaimplementowano część poprawek wprowadzanych w MPI-2. MPICH to najczęściej stosowana implementacja MPI. MPICH to ogólnodostępna, darmowa i przenośna implementacja standardu MPI. Pozwala na przekazywanie komunikatów pomiędzy aplikacjami działającymi równolegle. Nadaje się do stosowania na małych klastrach. 33/54 PRiR 11

12 /* "Hello World" MPI Test Program */ #include <mpi.h> #include <stdio.h> #include <string.h> #define BUFSIZE 128 #define TAG 0 int main(int argc, char *argv[]) char idstr[32]; char buff[bufsize]; int numprocs; int myid; int i; MPI_Status stat; /* MPI programs start with MPI_Init; all 'N' processes exist thereafter */ MPI_Init(&argc,&argv); /* find out how big the MPI world is */ MPI_Comm_size(MPI_COMM_WORLD,&numprocs); /* and this processes' rank is */ MPI_Comm_rank(MPI_COMM_WORLD,&myid); MPI przykład 34/54 PRiR MPI przykład /* At this point, all programs are running equivalently, the rank distinguishes the roles of the programs in the model, with rank 0 often used specially... */ if(myid == 0) printf("%d: We have %d processors\n", myid, numprocs); for(i=1;i<numprocs;i++) printf(buff, "Hello %d! ", i); MPI_Send(buff, BUFSIZE, MPI_CHAR, i, TAG, MPI_COMM_WORLD); for(i=1;i<numprocs;i++) MPI_Recv(buff, BUFSIZE, MPI_CHAR, i, TAG, MPI_COMM_WORLD, &stat); printf("%d: %s\n", myid, buff); else /* receive from rank 0: */ MPI_Recv(buff, BUFSIZE, MPI_CHAR, 0, TAG, MPI_COMM_WORLD, &stat); printf(idstr, "Processor %d ", myid); strncat(buff, idstr, BUFSIZE-1); strncat(buff, "reporting for duty\n", BUFSIZE-1); /* send to rank 0: */ MPI_Send(buff, BUFSIZE, MPI_CHAR, 0, TAG, MPI_COMM_WORLD); /* MPI programs end with MPI Finalize; this is a weak synchronization point */ MPI_Finalize(); return 0; 35/54 PRiR MPI - wstęp MPI jest z wyglądu bardzo podobna do. Podstawowa różnica tkwi w modelu obliczeń. W większości implementacji MPI, stały zbiór procesów jest tworzony na początku obliczeń, przy czym obowiązuje zasada; jeden proces jeden procesor. MPI jest raczej podejściem typu MIMD, jakkolwiek można go też używać zlecając wszystkim elementom wykonywanie tego samego oprogramowania, uzależnionego od parametrów symetria kodu. Główny nacisk w MPI jest położony na mechanizmy komunikacyjne pomiędzy procesami. Dopuszczamy dwa rodzaje komunikacji: point-to-point pomiędzy dwoma konkretnymi procesami; komunikacja zbiorowa (collective) np. broadcast. 36/54 PRiR 12

13 MPI - wstęp MPI umożliwia sprawdzanie wiadomości ułatwia to komunikacje asynchroniczną. W MPI mamy możliwość wykorzystywania komunikacji modularnej przy pomocy mechanizmu zwanego komunikatorem (communicator). Mechanizm ten umożliwia programistom tworzenie modułów, które zawierają wewnętrzne struktury komunikacyjne. 37/54 PRiR MPI - wstęp W MPI łatwo oprogramowywuje się algorytmy, w których wyraźne jest powiązanie pomiędzy procesem a procesorem. Można tu wykorzystać komunikację typu point-to-point (lub komunikację zbiorową), by zapewnić odpowiednie przesyłanie komunikatów. Algorytmy, które tworzą zadania dynamicznie (lub wymuszają kilka procesów na procesorze) powinny być odpowiednio modyfikowane (poprawiane??), by można je było uruchomić używając MPI. Jeżeli jest to trudne (lub nie potrafimy tego zrobić), MPI nie jest dobrym narzędziem. 38/54 PRiR MPI - wstęp Na starcie wszystkie uruchomione procesy są elementami standardowego komunikatora globalnego MPI_COMM_WORLD. 39/54 PRiR 13

14 MPI - jądro Podstawą MPI jest 6 funkcji: MPI_INIT: Rozpoczyna obliczenia w MPI. MPI_FINALIZE: Kończy obliczenia. MPI_COMM_SIZE: Określa liczbę procesów. MPI_COMM_RANK: Zwraca identyfikator my_process (globalny lub lokalny) MPI_SEND: Nadanie wiadomości. MPI_RECV: Odebranie wiadomości. Przy pomocy tych 6 funkcji można napisać większość programów wykorzystujących MPI. 40/54 PRiR Podstawą MPI jest 6 funkcji: MPI - przykład void main() MPI_INIT(); // Rozpoczęcie obliczeń MPI_COMM_SIZE(MPI_COMM_WORLD, count); // ile jest procesów MPI_COMM_RANK(MPI_COMM_WORLD, myid) // określenie mego ID print("i am", myid, "of", count) MPI_FINALIZE() //Koniec Typowy start. 41/54 PRiR Podstawą MPI jest 6 funkcji: void main() MPI przykład 2 MPI_INIT(); // Rozpoczęcie obliczeń MPI_COMM_SIZE(MPI_COMM_WORLD, count) // ile jest procesów if (count!=2) return (-1); // muszą być dwa procesy MPI_COMM_RANK(MPI_COMM_WORLD, myid); // określenie mego ID if (myid=0) my_send(100); else my_receive(100); MPI_FINALIZE(); //Koniec void my_send( int ile) for(int i=0, i<ile, i++) MPI_SEND (i,1,mpi_int,1,0,mpi_comm_world); /*przesłanie ile razy po jednym int do procesu o id=0 w MPI_COMM_WORLD*/ i= - 1; MPI_SEND (i,1,mpi_int,1,0,mpi_comm_world); /*koniec danych */ 42/54 PRiR 14

15 Podstawą MPI jest 6 funkcji: MPI przykład 2 void my_receive( int ile) MPI_RECEIVE (msg,1,mpi_int,0,0,mpi_comm_world, status); while (msg!=-1) zrob_cos(msg) MPI_RECEIVE (msg,1,mpi_int,0,0,mpi_comm_world, status); /*koniec danych */ Dwuprocesorowe przekazanie wiadomości. 43/54 PRiR MPI operacje globalne Operacje globalne: Barrier: Synchronizacja wszystkich procesów Broadcast: Wysłanie danych z jednego procesu do wszystkich pozostałych. Gather: Pobranie danych z wszystkich procesów do jednego. Scatter: Rozpraszanie danych z jednego procesu do pozostałych. Reduction operations: Suma, mnożenie itp. rozproszonych danych. Ułatwiają tworzenie bardziej skomplikowanych algorytmów. 44/54 PRiR MPI operacje globalne MPI_BCAST MPI_GATHER MPI_SCATTER 45/54 PRiR 15

16 MPI operacje redukcji Dane początkowe MPI_REDUCE; operator MPI_MIN; root= 0 MPI_ALLREDUCE; operator MPI_MIN MPI_REDUCE; operator MPI_SUM; root= 1 46/54 PRiR MPI operacje redukcji Operatory dopuszczalne w operacjach redukcji: Maksimum i minimum MPI_MAX, MPI_MIN Suma i iloczyn MPI_SUM, MPI_PROD Logiczne and, or, xor MPI_LAND, MPI_LOR, MPI_LXOR Bitowe and, or, xor MPI_BAND, MPI_BOR,MPI_BXOR 47/54 PRiR MPI komunikatory Globalny komunikator: MPI_COMM_WORLD Tworzenie i obsługę nowego komunikatora umożliwiają 4 funkcje: MPI_COMM_DUP duplikacja (tworzenie kopii) istniejącego komunikatora MPI_COMM_SPLIT tworzenie nowego komunikatora, procesy wchodzące w skład komunikatora mogą się komunikować między sobą bez interferencji z procesami spoza komunikatora MPI_INTERCOMM_CREATE tworzenie interkomunikatora (intercommunicator) przez podział komunikatora na dwie grupy MPI_COMM_FREE- zwolnienie (zamkniecie) komunikatora 48/54 PRiR 16

17 MPI komunikatory Największe zastosowanie ma MPI_COMM_SPLIT: MPI_COMM_SPLIT(comm, color, key, newcomm) comm stary komunikator; poprzez jego podział stworzymy nowy color nazwa (kolor) nowego komunikatora key id procesu newcomm nowy komunikator Uwaga: jeżeli newcomm o odpowiednim kolorze nie istnieje, komunikator jest tworzony i proces jest dodawany; jeżeli istnieje, tylko dodajemy proces 49/54 PRiR MPI komunikatory MPI_Comm comm, newcomm; int myid, color; MPI_Comm_rank(comm, &myid); color = myid%3; MPI_Comm_split(comm, color, myid, &newcomm); Stworzenie 3 nowych komunikatorów jak na rysunku 50/54 PRiR MPI komunikatory Komunikacja między komunikatorami. Komunikator stworzony przez MPI_COMM_SPLIT (także MPI_COMM_WORLD) może być używany do wymiany danych pomiędzy stworzona grupą jest to parametr w operacjach przesyłania danych. Można też tworzyć interkomunikatory pomiędzy grupami i wtedy można przekazywać dane pomiędzy wszystkimi elementami pierwszej i drugiej grupy. MPI_INTERCOMM_CREATE(comm, local_leader, peercomm, remote_leader, tag, intercomm) 51/54 PRiR 17

18 MPI komunikatory Przykład: Podzielimy 8 procesów na dwie grupy (parzyste, nieparzyste), następnie stworzymy lokalny interkomunikatori przy jego pomocy przekażemy dane. 52/54 PRiR MPI komunikatory Przykład (cd): int comm, intercomm, myid, newid; MPI_COMM_SIZE (MPI_COMM_WORLD,&count); /* zakładamy parzysta ilosc procesow i BRAK bledow komunikacyjnych*/ MPI_COMM_RANK (MPI_COMM_WORLD, &myid); MPI_COMM_SPLIT (MPI_COMM_WORLD, myid%2,myid,&comm); MPI_COMM_RANK (comm, %newid); if(newid%2==0) // nadawca MPI_INTERCOMM_CREATE (comm, 0,MPI_COMM_WORLD, 1,99, &intercom); /* stworzenie nowego interkomunikatora */ MPI_SEND(msg,1,type,newid,0,99, intercom;) /* wysylamy 1 informacje z bufora msg typu type do odbiorcy w nowym interkomunikatorze */ Else //odbiorca MPI_INTERCOMM_CREATE (comm, 0,MPI_COMM_WORLD, 1,99, &intercom); MPI_RECEIVE(msg,1,type,newid,0,99, intercom); MPI_COMM_FREE(intercom) MPI_COMM_FREE(com) 53/54 PRiR MPI + CUDA CUDA (NVIDIA scomputeunifieddevice Architecture) umożliwia wykorzystanie procesorów graficznych do obliczeń równoległych większość dzisiejszych superkomputerów wykorzystuje procesory graficzne. MPI jest wygodnym narzędziem do budowy grup procesorów i wymiany danych pomiędzy nimi także w tym zakresie. Więcej np. w pracy: An MPI-CUDA Implementation for Massively Parallel Incompressible Flow Computations on Multi-GPU Clusters Dana A. Jacobsen, Julien C. Thibault, and Inanc Senocaky 54/54 PRiR 18

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

WWW. http://www.netlib.org/pvm3/book/pvm-book.html. http://www.netlib.org/pvm3/index.html. http://www.netlib.org/pvm3/pvm3.4.5.tgz

WWW. http://www.netlib.org/pvm3/book/pvm-book.html. http://www.netlib.org/pvm3/index.html. http://www.netlib.org/pvm3/pvm3.4.5.tgz WWW http://www.netlib.org/pvm3/book/pvm-book.html http://www.netlib.org/pvm3/index.html http://www.netlib.org/pvm3/pvm3.4.5.tgz PVM p. 1 instalowanie 1. Sprowadzić: http://www.netlib.org/pvm3/pvm3.4.5.tgz

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

Podstawy komunikacji między procesami PVM

Podstawy komunikacji między procesami PVM Podstawy komunikacji między procesami PVM Zakres ćwiczenia Komunikacja między zadaniami PVM odbywa się przy pomocy wymiany wiadomości. Celem ćwiczenia jest więc poznanie podstawowych operacji tworzenia,

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

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

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

Programowanie współbieżne i rozproszone

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

Bardziej szczegółowo

Programowanie 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

Środowiska przetwarzania rozproszonego

Środowiska przetwarzania rozproszonego Środowiska przetwarzania rozproszonego 1 Parallel Virtual Machine PVM (ang. Parallel Virtual Machine) powstał w 1989 roku w Oak Ridge National Laboratory, w celu ułatwienia programowania równoległego 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 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

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

Zegary logiczne. Zakres ćwiczenia. Problem rozbieżności czasów. Koncepcja programu. Przygotowanie programu

Zegary logiczne. Zakres ćwiczenia. Problem rozbieżności czasów. Koncepcja programu. Przygotowanie programu Zegary logiczne Zakres ćwiczenia W obecnym ćwiczeniu nie zostaną wprowadzone żadne nowe funkcje biblioteki PVM. Zobaczysz za to program demonstrujący zagrożenia niesione przez używanie zegarów fizycznych

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

Łamanie haseł. Zakres ćwiczenia. Przedstawienie problemu. Zadanie do samodzielnego wykonania

Łamanie haseł. Zakres ćwiczenia. Przedstawienie problemu. Zadanie do samodzielnego wykonania Łamanie haseł Zakres ćwiczenia Celem ćwiczenia jest podniesienie umiejętności w zakresie stosowania dotąd nabytej wiedzy. Poznasz kilka nowych funkcji biblioteki PVM oraz napiszesz samodzielnie program,

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

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

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

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

Pierwsze kroki w środowisku PVM

Pierwsze kroki w środowisku PVM Pierwsze kroki w środowisku PVM Zakres ćwiczenia W tym ćwiczeniu dowiesz się, w jaki sposób utworzyć maszynę wirtualną, jak napisać swój pierwszy program wykorzystujący środowisko PVM i jak taki program

Bardziej szczegółowo

Detekcja zakończenia i obraz stanu globalnego

Detekcja zakończenia i obraz stanu globalnego Detekcja zakończenia i obraz stanu globalnego Zakres ćwiczenia Celem ćwiczenia jest utrwalenie umiejętności zdobytych w czasie poprzednich zajęć oraz zwiększenie znajomości funkcji biblioteki PVM. Przedstawienie

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie 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

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

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

Bardziej szczegółowo

Parallel Virtual Machine

Parallel Virtual Machine Parallel Virtual Machine Co to jest? Konfigurowanie maszyny wirtualnej Tworzenie procesów Buforowanie danych Przesyłanie danych Operacje na grupach procesów Komunikacja kolektywna Przykład 1 Pakiet PVM

Bardziej szczegółowo

Pobieranie argumentów wiersza polecenia

Pobieranie argumentów wiersza polecenia Pobieranie argumentów wiersza polecenia 2. Argumenty wiersza polecenia Lista argumentów Lista argumentów zawiera cały wiersz poleceń, łącznie z nazwą programu i wszystkimi dostarczonymi argumentami. Przykłady:

Bardziej szczegółowo

PVM Parallel Virtual Machine

PVM Parallel Virtual Machine PVM Parallel Virtual Machine Sławomir civic Białek 22 września 2002 roku Czym jest PVM? PVM Parallel Virtual Machine jest rozwiązaniem pozwalającym wykorzystać heterogeniczny kluster

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

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO LABORATORIUM Temat: QNX Neutrino Interrupts Mariusz Rudnicki 2016 Wstęp W QNX Neutrino wszystkie przerwania sprzętowe przechwytywane są przez jądro systemu. Obsługę

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

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

Moc płynąca z kart graficznych

Moc płynąca z kart graficznych Moc płynąca z kart graficznych Cuda za darmo! Czyli programowanie generalnego przeznaczenia na kartach graficznych (GPGPU) 22 października 2013 Paweł Napieracz /20 Poruszane aspekty Przetwarzanie równoległe

Bardziej szczegółowo

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1 Zdalne wywołanie procedur Krzysztof Banaś Systemy rozproszone 1 RPC Komunikacja za pomocą gniazd jest wydajna, gdyż korzystamy z funkcji systemowych niewygodna, gdyż musimy wyrażać ją za pomocą jawnego

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

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

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

Wprowadzenie. System rozproszony jest kolekcją niezależnych, autonomicznych komputerów, które dla użytkownika prezentują się jak jeden komputer.

Wprowadzenie. System rozproszony jest kolekcją niezależnych, autonomicznych komputerów, które dla użytkownika prezentują się jak jeden komputer. Wprowadzenie System rozproszony jest kolekcją niezależnych, autonomicznych komputerów, które dla użytkownika prezentują się jak jeden komputer. ożna wyróżnić dwa aspekty tej definicji: sprzętowy komputery

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

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

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

Sieciowa komunikacja procesów - XDR i RPC

Sieciowa komunikacja procesów - XDR i RPC *** abc.x Przyklad pliku RPCGEN Obliczanie sumy, roznicy i iloczynu dwoch liczb calkowitych *** ************************************ Wywolanie procedury odleglej dopuszcza tylko jeden argument wywolania

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

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

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

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

Programowanie niskopoziomowe

Programowanie niskopoziomowe Programowanie niskopoziomowe Programowanie niskopoziomowe w systemie operacyjnym oraz poza nim Tworzenie programu zawierającego procedury asemblerowe 1 Programowanie niskopoziomowe w systemie operacyjnym

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

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

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

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

Przykład MPI: zbiór Mandelbrota

Przykład MPI: zbiór Mandelbrota Przykład MPI: zbiór Mandelbrota 1 Zbiór Mandelbrota Zbiór punktów na płaszczyźnie zespolonej, które są quasi-stabilne, kiedy są iterowane funkcją: z k 1 = z k 2 c gdzie z k+1 wartość zespolona w k+1 iteracji,

Bardziej szczegółowo

Laboratorium Podstawy Przetwarzania Rozproszonego SPRAWOZDANIE z zadania SERWIS KOMPUTEROWY

Laboratorium Podstawy Przetwarzania Rozproszonego SPRAWOZDANIE z zadania SERWIS KOMPUTEROWY Laboratorium Podstawy Przetwarzania Rozproszonego SPRAWOZDANIE z zadania SERWIS KOMPUTEROWY Nazwisko Imię album termin zajęć Marek Lewandowski 59817 Maciej Mietliński 59832 poniedziałek 18:30 tydzień nieparzysty

Bardziej szczegółowo

Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne

Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne Zdalne wywołania procedur Jarosław Kuchta Programowanie Współbieżne Podstawy RPC Remote Procedure Call Wywołanie procedur jednego procesu z innego procesu. Proces wywoływany serwer Proces wywołujący -

Bardziej szczegółowo

Uzupełnienie dot. przekazywania argumentów

Uzupełnienie dot. przekazywania argumentów Uzupełnienie dot. przekazywania argumentów #include #include struct nowa { int f; char line[20000]; int k; } reprezentant; int main() { void funkcja7( struct nowa x); reprezentant.k=17;

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

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

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

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

Bardziej szczegółowo

Mechanizmy komunikacji grupowej w bibliotece PVM

Mechanizmy komunikacji grupowej w bibliotece PVM Mechanizmy komunikacji grupowej w bibliotece PVM Zakres ćwiczenia Celem ćwiczenia jest demonstracja funkcji komunikacji grupowej dostępnych w bibliotece PVM, a także zrozumienie konieczności mechanizmów

Bardziej szczegółowo

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

1. Tworzenie nowego projektu.

1. Tworzenie nowego projektu. Załącznik do Instrukcji 1. Tworzenie nowego projektu. Wybieramy opcję z menu głównego New->QNX C Project. Wprowadzamy nazwę przechodzimy do następnego kroku NEXT. Wybieramy platformę docelową oraz warianty

Bardziej szczegółowo

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1 Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem

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

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

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak Katedra Elektrotechniki Teoretycznej i Informatyki wykład 12 - sem.iii M. Czyżak Język C - preprocesor Preprocesor C i C++ (cpp) jest programem, który przetwarza tekst programu przed przekazaniem go kompilatorowi.

Bardziej szczegółowo

Dzisiejszy wykład. Programowanie w Perlu. Usuwanie elementów z początku tablicy. Dodawanie elementów do początku tablic

Dzisiejszy wykład. Programowanie w Perlu. Usuwanie elementów z początku tablicy. Dodawanie elementów do początku tablic Dzisiejszy wykład Programowanie w Perlu Manipulowanie tablicami, zmienne lokalne, funkcje Marcin Junczys-Dowmunt junczys@amu.edu.pl Wydział Matematyki i Informatyki http://web.wmi.amu.edu.pl Wrócimy do

Bardziej szczegółowo

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

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia Zmienna: [] [ '[' ']' ] ['=' ]; Zmienna to fragment pamięci o określonym

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

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

Gniazda BSD. komunikacja bezpołączeniowa

Gniazda BSD. komunikacja bezpołączeniowa Gniazda BSD komunikacja bezpołączeniowa Użycie gniazd w transmisji bezpołączeniowej socket() socket() bind() bind() STOP! recv() żądanie send() send() odpowiedź recv() STOP! recvfrom() #include

Bardziej szczegółowo

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5 WYKŁAD 10 Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5 Tomasz Zieliński ZMIENNE O ZŁOŻONEJ BUDOWIE (1) Zmienne

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

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

Bardziej szczegółowo

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

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

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

Bardziej szczegółowo

r 2r Rysunek 1 Koło wpisane w kwadrat

r 2r Rysunek 1 Koło wpisane w kwadrat Obliczanie liczby π metodą Monte-Carlo Zakres ćwiczenia Ćwiczenie obecne podzielone jest na dwie części. Celem pierwszej części ćwiczenia podniesienie umiejętności w zakresie stosowania dotąd nabytej wiedzy.

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

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

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

Struktury. Przykład W8_1

Struktury. Przykład W8_1 Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla

Bardziej szczegółowo

2018 Marcin Kukliński. Niesforne bity i bajty

2018 Marcin Kukliński. Niesforne bity i bajty Niesforne bity i bajty 2 Kilka słów O mnie @ senghe@gmail.com https://www.linkedin.com/in/marcin-kukliński 3 2017 InspiraSign - Template All rights reserved Ekipa cpp-polska 5 Marcin Kukliński Wojciech

Bardziej szczegółowo

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe Wykład 15 Wprowadzenie do języka na bazie a Literatura Podobieństwa i różnice Literatura B.W.Kernighan, D.M.Ritchie Język ANSI Kompilatory Elementarne różnice Turbo Delphi FP Kylix GNU (gcc) GNU ++ (g++)

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

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

Ł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

Shared memory and messages. Functions. process 0. process 1. program 0. program 0. data 0. data 1. program 1. data 0. data 1.

Shared memory and messages. Functions. process 0. process 1. program 0. program 0. data 0. data 1. program 1. data 0. data 1. Shared memory and messages Shared memory vs message passing Shared memory - C functions Shared memory - example program Message queues - C functions Message queues - example program process 0 process 1

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 8 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Podprogramy Czasami wygodnie jest wyodrębnić jakiś fragment programu jako pewną odrębną całość umożliwiają to podprogramy.

Bardziej szczegółowo

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO LABORATORIUM Temat: THREADS Mariusz Rudnicki 2016 1. Przygotowanie platformy i środowiska IDE. Przed uruchomieniem własnego kodu zwiększ priorytet procesu qconn

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

ZASADY PROGRAMOWANIA KOMPUTERÓW POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje. Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using

Bardziej szczegółowo