Programowanie Równoległe i Rozproszone
|
|
- Agnieszka Kwiecień
- 9 lat temu
- Przeglądów:
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 Model przesyłania komunikatów Paradygmat send receive wysyłanie komunikatu: send( cel, identyfikator_komunikatu,
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
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
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
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,
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
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
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ć
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.
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ść
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
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...
Ś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
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
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
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
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
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
Ł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,
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.
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
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
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
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
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
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
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
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
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
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:
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
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
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ę
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
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
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
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
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
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
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ę
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
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,
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
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,
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
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
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
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
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
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
Programowanie niskopoziomowe
Programowanie niskopoziomowe Programowanie niskopoziomowe w systemie operacyjnym oraz poza nim Tworzenie programu zawierającego procedury asemblerowe 1 Programowanie niskopoziomowe w systemie operacyjnym
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
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
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,
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)
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
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,
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
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 -
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;
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ę
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ęć
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
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
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
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
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
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............................................
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
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.
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
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
Ć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
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
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
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
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,
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
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
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.
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
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ąć
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
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
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
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++)
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
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
Ł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
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
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
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.
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
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...................................................
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.
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
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
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
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