POZNA SUPERCOMPUTING AND NETWORKING. Rozszerzenia standardu MPI: MPI-2
|
|
- Dariusz Białek
- 7 lat temu
- Przeglądów:
Transkrypt
1 Rozszerzenia standardu MPI: MPI-2
2 literatura wykład opracowany na podstawie: W. Gropp, E. Lusk, R. Thakur, Using MPI-2, The MIT Press 1999 R. Thakur, Introduction to parallel I/O and MPI-IO, ANL 2
3 agenda troch historii co nowego w MPI-2 równoległe we/wy zdalne operacje na pamici dynamiczne zarzdzanie procesami co dalej? 3
4 troch historii 1992 pocztek prac nad MPI 1994 MPI pocztek prac nad MPI MPI-2 4
5 co nowego jest w MPI-2? wielka trójka: równoległe we/wy zdalne operacje na pamici dynamiczne zarzdzanie procesami oraz: 5
6 co nowego jest w MPI-2? rozszerzone operacje kolektywne wsparcie dla C++ i Fortran90 współdziałanie midzy jzykami (programowanie w wielu jzykach jednoczenie) zewntrzne interfejsy wtki 6
7 uruchomienie procesu MPI uyteczn cech MPI-2 jest standardowa metoda uruchomienia programu MPI najprostsz jej wersj jest: uruchamiajca program o nazwie na 16 procesorach 7
8 uruchomienie procesu MPI to, jak MPI uruchamia programy jest poza specyfikacj MPI, niemniej MPI Forum rekomenduje, aby była jedn z metod uruchamiania programu MPI wybrano, aby unikn konfliktu z rónymi znaczeniami wybór oznacza przenaszalno uruchomienia procesu 8
9 uruchomienie procesu MPI std w poleceniu to rozmiar oprócz argumentu ma inne argumenty specyfikowane przez MPI:! "! #"! $%! # " oraz & przykłady uruchomienia procesu 9
10 przykłady uruchomienia procesów MPI ' () uruchomienie procesów zamiast (), ze wzgldu na ograniczenia szeregowania ' * " #&"# $% +"++ & uruchomienie 4 procesów na okrelonej maszynie (#&"#) w katalogu roboczym +"++ & 10
11 przykłady uruchomienia procesów MPI ' ),) #" # - # " +"++& próba uruchomienia maks 12 procesów na maszynie # w katalogu +"++& ' & & szuka co ma zrobi w pliku & 11
12 równoległe we/wy równoległe we/wy, czasem nazywane MPI-IO, jest inicjatyw IBM, badajc analogi midzy we/wy a przesyłaniem komunikatów zapis do pliku jest analogi nadawania komunikatu do systemu plików odczyt pliku jest analogi odbioru komunikatu z systemu plików 12
13 równoległe we/wy równoległe we/wy wymaga operacji kolektywnych, definiowania niecigłych bloków danych w pamici i w plikach oraz operacji nieblokujcych czyli tych poj, które pojawiały si ju w MPI 13
14 równoległe we/wy we/wy w MPI-2 to we/wy w Uniksie plus troch wicej MPI zawiera analogie do operacji open, close, seek, read i write celem we/wy w MPI jest uzyskanie lepszej efektywnoci ni Unix API 14
15 równoległe we/wy MPI musi dostarczy nastpujce cechy: niecigły dostp do pamici i pliku kolektywne operacje we/wy jawne przesunicia dla uniknicia oddzielnych operacji. nieblokujce we/wy przenona reprezentacja danych wskazówki implementacyjne 15
16 zdalne operacje na pamici cech charakterystyczn modelu przesyłania komunikatów jest to, e dane s przesyłane z jednej przestrzeni adresowej do drugiej za pomoc pary operacji send/receive odrónia to ten model od modelu współdzielenia pamici, w którym procesy maj dostp do wspólnej puli pamici i mog wprost wykonywa operacje na pamici (ładuj z, zapamitaj do) (load from, store into) 16
17 zdalne operacje na pamici w MPI-2 zdefiniowano API, który wprowadza elementy modelu współdzielcego pami do rodowiska MPI te operacje nazywaj si jednostronnymi (one-sided) albo zdalnymi operacjami na pamici (remote memory) 17
18 zdalne operacje na pamici - motywacja zrównowaenie efektywnoci i przenonoci midzy rónymi architekturami: SMPs (shared memory multiprocessors), NUMA (nonuniform memory access), MPPs (distributed memory massively parallel processors), klastrów SMP, sieci heterogenicznych 18
19 zdalne operacje na pamici - motywacja pozostawienia zasady look and feel z MPI-1 uwzgldnienie koherencji pamici notatnikowej i spójnoci sekwencyjnej oddzielenia synchronizacji od przesyłania danych w celu zwikszenia efektywnoci 19
20 zdalne operacje na pamici powstałe rozwizanie jest oparte na idei okien zdalnego dostpu do pamici okno zdalnego dostpu do pamici to porcja przestrzeni adresowej kadego procesu, na którym mog by przeprowadzane zdalne operacje przez inne procesy wystpujce w komunikatorze MPI 20
21 zdalne operacje na pamici wtedy mog na tym oknie by dokonane operacje jednostronne: put, get i accumulate, do zapamitania do, ładowania z i aktualizacji okna wystawionego dla innych procesów wszystkie zdalne operacje na pamici s operacjami nieblokujcymi, std s konieczne operacje synchronizacji do zapewnienia ich zakoczenia 21
22 zdalne operacje na pamici wiele takich operacji synchronizacji jest zapewnionych, niektóre dla uproszczenia, niektóre dla precyzyjnego sterowania, a niektóre analogiczne do operacji synchronizacji w pamici współdzielonej synchronizacja: rozdział 4 ksiki Using MPI-2 22
23 dynamiczne zarzdzanie procesami trzecim głównym odstpstwem od modelu MPI-1 jest zdolno procesu MPI do: udziału w tworzeniu nowego procesu MPI ustanowienia komunikacji z procesem MPI, który został uruchomiony oddzielnie 23
24 dynamiczne zarzdzanie procesami główne problemy, na jakie trafiamy przy projektowaniu API dla dynamicznego zarzdzania procesami: utrzymanie prostoty i elastycznoci współdziałanie z systemem operacyjnym, zarzdc zasobów, i zarzdc procesów w złoonym rodowisku programowym unikanie warunków wycigu, które naraaj na szwank poprawno 24
25 dynamiczne zarzdzanie procesami kluczem do tej poprawnoci jest to, aby operacje dynamicznego zarzdzania procesami były kolektywne, zarówno midzy procesami tworzcymi nowe procesy, jak pomidzy nowo utworzonymi procesami otrzymane zbiory procesów s reprezentowane w interkomunikatorze 25
26 dynamiczne zarzdzanie procesami interkomunikator komunikator zawierajcy dwie grupy procesów zamiast jednej dwie rodziny operacji oparte na interkomunikatorach: tworzca nowe procesy, nazywa si rozmnaaniem (spawning) ustalajca komunikacj z ju istniejcymi programami MPI nazywa si łczeniem (connecting) 26
27 dynamiczne zarzdzanie procesami ta ostatnia pozwala aplikacjom na posiadanie struktury równoległy klient /równoległy serwer szczegóły dynamicznego zarzdzania procesami - rozdział 7 ksiki Using MPI-2 27
28 dynamiczne zarzdzanie procesami dodatkowe kwestie: rozszerzone operacje kolektywne, dla interkomunikatorów (analogiczne do operacji w MPI-1 dla intrakomunikatorów) obsługa C++ i Fortran90, Fortranu na dwóch poziomach: podstawowym i rozszerzonym mieszane programowanie w wielu jzykach zewntrzne interfejsy do bibliotek itp. wtki 28
29 MPI-2 przejdziemy teraz do szczegółowego omówienia cech MPI-2 29
30 równoległe we/wy równoległe we/wy w MPI rozpoczyna si od funkcji znanych uytkownikom klasycznego jzyka we/wy i bibliotek omawiamy równie dodatkowe cechy MPI konieczne dla zapewnienia efektywnoci i przenonoci w tej czci skupimy si na odpowiednikach MPI otwierajcych i zamykajcych plik oraz na odczycie i zapisie cigłego bloku danych z i do pliku 30
31 równoległe we/wy na tym poziomie, główn cech jak pokaemy jest to, jak MPI moe wygodnie wyrazi równoległo w tych operacjach podamy kilka wariantów prostego przykładu, w którym procesy zapisuj tablic liczb całkowitych do pliku 31
32 sekwencyjne we/wy w programie MPI MPI nie obsługuje jawnie równoległego we/wy aplikacje MPI realizowały we/wy za pomoc mechanizmów wiadczonych przez system operacyjny jeden proces wykonuje całe we/wy, na zlecenie innych procesów 32
33 sekwencyjne we/wy w programie równoległym pami procesy plik 33
34 przykład programu zbiór procesów posiada rozproszon tablic liczb całkowitych, do zapisania do pliku kady proces ma 100 liczb z tej tablicy kółka to procesy, górne prostokty to bloki pamici w kadym procesie, po 100 liczb dolny prostokt to plik do zapisu 34
35 sekwencyjne we/wy w programie równoległym /* przyklad sekwencyjnego zapisu w Uniksie do wspolnego pliku */ #include mpi.h #include <stdio.h> #define BUFSIZE 100 int main(int argc, char *argv[]) { int i, myrank, numprocs, buf[bufsize] MPI_Status status; FILE *myfile 35
36 sekwencyjne we/wy w programie równoległym MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); for (i=0; i<bufsize, i++) buf[i] = myrank + BUFSIZE + 1; if myrank!= 0) MPI_Send(buf, BUFSIZE, MPI_INT, 0, 99, MPI_COMM_WORLD); 36
37 sekwencyjne we/wy w programie równoległym else { myfile = fopen( testfile, w ); fwrite(buf, sizeof(int), BUFSIZE, myfile); for (i=1; i<numprocs; i++) { MPI_Recv(buf, BUFSIZE, MPI_INT, i, 99, MPI_COMM_WORLD, &status); fwrite(buf, sizeof(int), BUFSIZE, myfile); } 37
38 sekwencyjne we/wy w programie równoległym } fclose(myfile); } MPI_Finalize(); return 0; 38
39 sekwencyjne we/wy w programie równoległym jest to czsto pierwszy sposób, w jaki we/wy jest realizowane w programie równoległym, jako przeniesienie z programu sekwencyjnego jeeli w programie z poprzedniego slajdu, /, wtedy nie ma adnej operacji komunikacji MPI 39
40 sekwencyjne we/wy w programie równoległym mona tak zrobi, gdy: maszyna równoległa, na której działa program, moe obsługiwa we/wy tylko z jednego procesu mona uywa zaawansowanych bibliotek we/wy, które nie maj zdolnoci równoległego we/wy powstały jeden plik jest wygodny do obsługi poza programem (0,, ) 40
41 sekwencyjne we/wy w programie równoległym... mona tak zrobi, gdy: mona zwikszy wydajno, kiedy proces wykonujcy we/wy jest zdolny do zbierania duych bloków danych nie naley tak robi, gdy: brak równoległoci ogranicza efektywno i skalowalno, zwłaszcza wtedy, gdy system plików dopuszcza równoległe fizyczne we/wy 41
42 równoległe we/wy nie-mpi w programie MPI aby podkreli brak równoległoci, nastpnym krokiem w przejciu od programu sekwencyjnego do równoległego jest pozwolenie kademu procesowi na zapis do oddzielnego pliku, w ten sposób realizujc równoległy transfer danych 42
43 równoległe we/wy nie-mpi w programie MPI pami procesy pliki 43
44 równoległe we/wy nie-mpi w programie MPI /* przyklad rownoleglego zapisu w Uniksie do oddzielnych plikow */ #include mpi.h #include <stdio.h> #define BUFSIZE 100 int main(int argc, char *argv[]) { int i, myrank, buf[bufsize]; char filename[128] FILE *myfile 44
45 równoległe we/wy nie-mpi w programie MPI MPI_Init(&argc,&argv); } MPI_Comm_rank(MPI_COMM_WORLD, &myrank); for (i=0; i<bufsize; i++) buf[i] = myrank * BUFSIZE + i; sprint(filename, testfile.%d, myrank); myfile = fopen(filename, w ); fwrite(buf, sizeof(int), BUFSIZE, myfile); fclose(myfile); MPI_Finalize(); return 0; 45
46 równoległe we/wy nie-mpi w programie MPI kady proces funkcjonuje niezalenie od innych w odniesieniu do we/wy, std program jest sekwencyjny wzgldem we/wy kady proces otwiera swój plik, zapisuje do niego i go zamyka pliki s oddzielne, co zapewniane jest przez przydział numeru procesu do nazwy pliku 46
47 równoległe we/wy nie-mpi w programie MPI zalet tego podejcia jest to, e operacje we/wy mog odbywa si równolegle i nadal mog stosowa sekwencyjne biblioteki we/wy, gdy to jest wymagane to podejcie ma jednak wiele wad 47
48 równoległe we/wy nie-mpi w programie MPI wady s nastpujce: pliki by moe musz by połczone razem, zanim bd wejciem do innej aplikacji moe si zdarzy, e aplikacja, która czyta te pliki, sama jest programem równoległym, i musi by uruchomiona z tak sam liczb procesów 48
49 równoległe we/wy nie-mpi w programie MPI wady s nastpujce: moe by utrudnione ledzenie zbioru plików jako całej grupy, w celu jego przesuwania, kopiowania albo nadawania moe zmniejszy si efektywno, poniewa poszczególne procesy mog mie swoje dane w małych, cigłych blokach, co powoduje wiele operacji we/wy na niewielkich danych, straty te mog przewysza zyski z równoległoci 49
50 we/wy MPI do oddzielnych plików jako nasz pierwszy program po prostu przekształcimy poprzedni program do wersji, w której wszystkie operacje we/wy s wykonane za pomoc MPI program ma te same zalety i wady, co poprzednia wersja 50
51 we/wy MPI do oddzielnych plików /* przyklad rownoleglego zapisu MPI do oddzielnych plikow */ #include mpi.h #include <stdio.h> #define BUFSIZE 100 int main(int argc, char *argv[]) { int i, myrank, buf[bufsize]; char filename[128] MPI_File *myfile 51
52 we/wy MPI do oddzielnych } plików MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); for (i=0; i<bufsize; i++) buf[i] = myrank * BUFSIZE + i; sprint(filename, testfile.%d, myrank); MPI_File_open(MPI_COMM_SELF, filename, MPI_MODE_WRONLY MPI_MODE_CREATE, MPI_INFO_NULL, &myfile); MPI_File_write(myfile, buf, BUFSIZE, MPI_INT, MPI_STATUS_IGNORE); MPI_File_close(&myfile); MPI_Finalize(); return 0; 52
53 we/wy MPI do oddzielnych plików midzy tymi programami s 4 rónice: deklaracjfile zastpiono przez MPI_File, myfile jest teraz zmienn typu MPI_File, zamiast wskanikiem do obiektu typu FILE funkcj MPI odpowiadajc fopen jest MPI_File_open, pierwszym jej argumentem jest komunikator, który zapewnia, e procesy operujce na pliku nawzajem si znaj i mog si ze sob komunikowa 53
54 we/wy MPI do oddzielnych plików pierwszym argumentem funkcji MPI_File_open jest komunikator MPI_COMM_SELF, poniewa kady proces otwiera własny plik dla swojego wyłcznego uytku drugim argumentem funkcji jest nazwa pliku trzeci argument, to tryb otwarcia pliku, tworzonego albo nadpisywanego, opisywany flagami, np. MPI_MODE_WRONLY i MPI_MODE_CREATE 54
55 we/wy MPI do oddzielnych plików czwarty argument,mpi_info_null, to warto domylna argumentuinfo funkcji MPI_File_open ostatnim argumentem jest adres zmiennej MPI_File, któr wypełnia funkcja MPI_File_open operacja ta zwraca jako warto funkcji kod powrotu, czyli MPI_SUCCESS, czego nie badamy 55
56 we/wy MPI do oddzielnych plików nastpn funkcj wykonujc we/wy w tym programie jest: MPI_File_write(myfile, buf, BUFSIZE, MPI_INT, MPI_STATUS_IGNORE); jest tu analogia midzy we/wy, a przesyłaniem komunikatów, dane do zapisu s opisywane trójk(address, count, datatype), czyli w taki sam sposób, jak komunikat w MPI-1 56
57 we/wy MPI do oddzielnych plików sposób opisu bufora do zapisu albo odczytu ma te same zalety, co w przesyłaniu komunikatów pozwala na dowoln dystrybucj niecigłych danych w pamici zapisanych jednym wywołaniem typ danych pozwala na zastosowanie transformacji przy zapisie albo odczycie w rodowisku heterogenicznym 57
58 we/wy MPI do oddzielnych plików kocowy argument to status, tego samego typu, co zwracany przezmpi_recv MPI-2 podaje, aby zamiast argumentu statusu, przekaza dowolnej funkcji MPI specjaln wartompi_status_ignore, w ten sposób mówic implementacji MPI, aby nie zajmowała si statusem, gdy i tak jest ignorowany to rozwizanie poprawia efektywno 58
59 we/wy MPI do oddzielnych plików na koniec, MPI_File_close(&myfile); zamyka plik, przekazujc adres pliku myfile 59
60 we/wy MPI do jednego pliku zmodyfikujemy teraz nasz przykład, tak aby procesy współdzieliły jeden plik, zamiast zapisywa do oddzielnych plików, pokaemy jak to realizuje MPI eliminuje to niewygod posiadania wielu plików, a pozostawia zalet zwikszonej efektywnoci zapewnianej przez równoległo 60
61 we/wy MPI do jednego pliku /* przyklad rownoleglego zapisu MPI do jednego pliku */ #include mpi.h #include <stdio.h> #define BUFSIZE 100 int main(int argc, char *argv[]) { int i, myrank, buf[bufsize]; MPI_File thefile; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); 61
62 we/wy MPI do jednego pliku for (i=0; i<bufsize; i++) buf[i] = myrank * BUFSIZE + i; } MPI_File_open(MPI_COMM_WORLD, testfile, MPI_MODE_CREATE MPI_MODE_WRONLY, MPI_INFO_NULL, &thefile); MPI_File_set_view(thefile, myrank * BUFSIZE * sizeof(int), MPI_INT, MPI_INT, native, MPI_INFO_NULL); MPI_File_write(thefile, buf, BUFSIZE, MPI_INT, MPI_STATUS_IGNORE); MPI_File_close(&thefile); MPI_Finalize(); return 0; 62
63 we/wy MPI do jednego pliku midzy tym programem, a poprzednim, s nastpujce rónice: argumentem funkcji MPI_File_open jest teraz MPI_COMM_WORLD, zamiast MPI_COMM_SELF, oznacza to, e wszystkie procesy razem otwieraj jeden plik taka operacja komunikatora nazywana jest operacj kolektywn 63
64 we/wy MPI do jednego pliku sposobem na zapis współdzielonego pliku jest danie kademu procesowi dostpu do czci pliku: 64
65 we/wy MPI do jednego pliku cz pliku, która jest widziana przez pojedynczy proces, jest zwana widokiem pliku, i jest ustawiona dla kadego procesu wywołaniem MPI_File_set_view MPI_File_set_view(thefile, myrank * BUFSIZE * sizeof(int), MPI_INT, MPI_INT, native, MPI_INFO_NULL); pierwszy argument to nazwa pliku thefile 65
66 we/wy MPI do jednego pliku drugi argument to przesunicie (w bajtach) w pliku, w którym zaczyna si widok pliku z danego procesu - mnoymy tutaj rozmiar zapisywanych danych przez numer procesu myrank * BUFSIZE * sizeof(int) std widok pliku z kadego procesu rozpoczyna si w odpowiednim miejscu w pliku jest to argument typu MPI_Offset 66
67 we/wy MPI do jednego pliku trzeci argument to etype widoku, okrela on jednostk danych w pliku, tutaj jest nim MPI_INT czwarty argument, filetype, słuy do opisu danych niecigłych w pliku. Poniewa tutaj nie ma adnych danych niecigłych, stosujemy etype MPI_INT pity argument to reprezentacja danych w pliku, native oznacza, e dane w pliku s takie same jak dane w pamici 67
68 we/wy MPI do jednego pliku nie ma wtedy konwersji, jest precyzja, std efektywno inne reprezentacje to:internal i external32, które zapewniaj przenono midzy komputerami o rónych architekturach ostatni argument to obiekt info, który jest ignorowany: MPI_INFO_NULL 68
69 we/wy MPI do jednego pliku teraz kady proces ma swój własny widok pliku, a operacja zapisu jest taka sama jak poprzednio: MPI_File_write(thefile, buf, BUFSIZE, MPI_INT, MPI_STATUS_IGNORE); ale poniewa MPI_File_open okrelił MPI_COMM_WORLD jako komunikator, a MPI_File_set_view dał kademu procesowi odmienny widok pliku, wtedy operacja zapisu przebiega równolegle 69
70 we/wy MPI do jednego pliku - wersja Fortran 90 przedstawimy ostatni program w wersji na jzyk Fortran standard MPI-2 ma dwa poziomy wsparcia Fortranu: podstawowy i rozszerzony poziom podstawowy wymaga, aby plik mpif.h był wany zarówno w formacie dla dowolnego ródła i jak i ustalonego ródła (działa dla kompilatora Fortran 90 i 77) 70
71 we/wy MPI do jednego pliku - wersja Fortran 90 poziom rozszerzony wymaga zastosowania modułu MPI, i zastpuje linimpif.h przezuse mpi MPI_Offset w jzyku C jest zastpiony w Fortranie przez typ INTEGER(kind=MPI_OFFSET_KIND) 71
72 we/wy MPI do jednego pliku - wersja Fortran 90! Rownolegly zapis MPI do jednego pliku w Fortranie PROGRAM main use mpi integer ierr, i, myrank, BUFSIZE, thefile parameter (BUFSIZE=100) integer buf(bufsize) integer(kind=mpi_offset_kind) disp call MPI_INIT(ierr) call MPI_COMM_RANK(MPI_COMM_WORLD, myrank, ierr) do i = 0, BUFSIZE buf(i) = myrank * BUFSIZE + i enddo 72
73 we/wy MPI do jednego pliku - wersja Fortran 90 call MPI_FILE_OPEN(MPI_COMM_WORLD, 'testfile', & MPI_MODE_WRONLY + MPI_MODE_CREATE, & MPI_INFO_NULL, thefile, ierr) call MPI_TYPE_SIZE(MPI_INTEGER, intsize) disp = myrank * BUFSIZE * intsize call MPI_FILE_SET_VIEW(thefile, disp, MPI_INTEGER, & MPI_INTEGER, 'native', & MPI_INFO_NULL, ierr) call MPI_FILE_WRITE(thefile, buf, BUFSIZE, MPI_INTEGER, & MPI_STATUS_IGNORE, ierr) call MPI_FILE_CLOSE(thefile, ierr) call MPI_FINALIZE(ierr) END PROGRAM main 73
74 odczyt pliku przez dowoln liczb procesów jedn z zalet równoległego we/wy do jednego pliku jest moliwo natychmiastowego odczytu pliku równolegle przez dowoln liczb procesów pokaemy teraz program, niezaleny od liczby procesów, które go uruchomi 74
75 odczyt pliku przez dowoln liczb procesów jest znany całkowity rozmiar pliku i s ustawione widoki pliku dla rónych procesów, tak, e kady ma w przyblieniu t sam ilo do odczytu jest tutaj jedna funkcja, której jeszcze nie znamy: MPI_File_get_size 75
76 odczyt pliku przez dowoln liczb procesów MPI_File_get_size (thefile, &thefile) pierwszym argumentem jest plik do otwarcia, drugim adres pola, do którego zapisuje si rozmiar pliku w bajtach MPI definiuje nowy typ MPI_Offset, który jest wystarczajco duy do zmieszczenia rozmiaru pliku 76
77 odczyt pliku przez dowoln liczb procesów jedn rónic midzy zapisem i odczytem jest to, e przy odczycie nie zawsze wiadomo, jak duo danych jest do odczytu chocia moemy to obliczy, kademu procesowi pozwalamy wyda to samo wywołanie MPI_File_read i przekaza adres rzeczywistego MPI_Status zamiast MPI_STATUS_IGNORE 77
78 odczyt pliku przez dowoln liczb procesów wtedy, tak jak w przypadku MPI_Recv, moemy uympi_get_count aby znale jak wiele wystpie danego typu danych przeczytano jeeli było mniej ni liczba danych elementów, wtedy osiga si koniec pliku 78
79 odczyt pliku przez dowoln liczb procesów /* równolegly MPI odczyt pliku przez dowoln liczb procesów */ #include mpi.h #include <stdio.h> int main(int argc, char *argv[]) { int myrank, numprocs, bufsize, *buf, count; MPI_File thefile; MPI_Status status MPI_Offset filesize; 79
80 odczyt pliku przez dowoln MPI_Init(&argc, &argv); liczb procesów MPI_Comm_rank(MPI_COMM_WORLD, &myrank); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_File_open(MPI_COMM_WORLD, testfile, MPI_MODE_RDONLY, MPI_INFO_NULL, &thefile); MPI_File_get_size(thefile, &filesize); /* w bajtach */ filesize = filesize /size(int); /* w liczbie ints */ bufsize = filesize / numprocs + 1;/*lokalna liczba do odczytu */ buf = (int *) malloc (bufsize + sizeof(int)); 80
81 odczyt pliku przez dowoln liczb procesów } MPI_File_set_view(thefile, myrank * bufsize * sizeof(int)), MPI_INT, MPI_INT, native, MPI_INFO_NULL); MPI_File_read(thefile, buf, bufsize, MPI_INT, &status); MPI_Get_count(&status, MPI_INT, &count); printf( process %d read %d ints\n, myrank, count); MPI_File_close(&thefile); MPI_Finalize(); return 0; 81
82 odczyt pliku przez dowoln liczb procesów przyczyn zastosowania bufsize = filesize / numprocs + 1; jest przypadek, gdy filesize < numprocs bez +1 wszystkie procesy odczytaj zero elementów, przy tej definicji bufsize, cały plik bdzie odczytany wad jest nieoptymalna liczba elementów, gdy filesize jest parzycie podzielny przez numprocs 82
83 odczyt pliku przez dowoln liczb procesów wersja C++ zastosowano tu nastpujce cechy wiza C++: wikszo obiektów MPI (grupy, komunikatory, pliki, dania, statusy) to obiekty C++ funkcja MPI zwizana z obiektem staje si metod na tym obiekcie, np. MPI_Send(..., comm) staje si metod na komunikatorze: comm.send(...) 83
84 odczyt pliku przez dowoln liczb procesów wersja C++ zastosowano tu nastpujce cechy wiza C++ (c.d): obiekty nie bdce składnikami innych obiektów istniej w przestrzeni nazw MPI, np. MPI_COMM_WORLD staje si MPI::COMM_WORLD, a stała MPI_INFO_NULL staje si MPI::INFO_NULL funkcje tworzce obiekty zwracaj obiekt jako warto zwrotn zamiast zwracania kodu błdu, np. MPI::File::Open zwraca obiekt typu MPI::File 84
85 odczyt pliku przez dowoln liczb procesów wersja C++ zastosowano tu nastpujce cechy wiza C++ (c.d): funkcje, które w C zwracaj warto w argumencie, tu zwracaj jako warto funkcji stosuje si sposób obsługi błdów, stosowany w C++. Domylna obsługa błdów to MPI::ERRORS_ARE_FATAL, ale mona j zmieni na: MPI::ERRORS_THROW_EXCEPTIONS 85
86 odczyt pliku przez dowoln liczb procesów wersja C++ zwrómy uwag na dwie wersje MPI::Init ta nowa, bez argumentów: MPI_Init() pozwala na przekazanie (NULL, NULL) do funkcji C: MPI_Init zamiast (&argc, &argv) 86
87 odczyt pliku przez dowoln liczb procesów wersja C++ /* równolegly MPI odczyt z jednego pliku, w C++ */ #include <iostream.h> #include mpi.h int main(int argc, char *argv[]) { intbufsize, *buf, count; char filename[128] MPI::Status status; MPI::Init(); int myrank = MPI::COMM_WORLD.Get_rank(); 87
88 odczyt pliku przez dowoln liczb procesów wersja C++ int numprocs = MPI::COMM_WORLD.Get_size(); MPI::File thefile = MPI::File::Open(MPI::COMM_WORLD, testfile, MPI::MODE_RDONLY, MPI::INFO_NULL); MPI::Offset filesize = thefile.get_size(); //w bajtach filesize = filesize / sizeof(int); //w liczbie ints bufsize = filesize / numprocs + 1; //lokalna liczba do //odczytu buf = (int *) malloc (bufsize * sizeof(int)); thefile.set_view(myrank * bufsize * sizeof(int)), MPI_INT, MPI_INT, native, MPI::INFO_NULL); 88
89 odczyt pliku przez dowoln liczb procesów wersja C++ } thefile.read(buf, bufsize, MPI_INT, status); count = status.get_count(mpi_int); cout << proces << myrank << read << << count << ints << endl; thefile.close(); MPI::Finalize(); return 0; 89
90 inne sposoby zapisu do pliku współdzielonego zastosowalimy wczeniej (slajd 65), MPI_File_set_view aby pokaza, jak mona poinstruowa wiele procesów, aby współdzieliły jeden plik w MPI jest wiele sposobów na uzyskanie tego samego celu 90
91 inne sposoby zapisu do pliku współdzielonego MPI_File_seek pozwala wielu procesom, aby ustawiły si na okrelone przesunicie w bajtach (byte offset), czyli przesunły wskanik do pliku, przed rozpoczciem odczytu albo zapisu (analogia do lseek w Uniksie) dla wikszej efektywnoci, operacje seek i read mog by połczone w jedn funkcj: MPI_File_read_at, podobnie jest z funkcj MPI_File_write_at 91
92 inne sposoby zapisu do pliku współdzielonego jeszcze jeden wskanik do pliku, zwany współdzielonym wskanikiem do pliku jest współdzielony midzy procesami nalecymi do komunikatora, przekazanego wczeniej do MPI_File_open takie funkcje, jak MPI_File_write_shared, uzyskuj dostp do danych z biecej lokalizacji współdzielonego wskanika do pliku, a nastpnie zwikszaj ten wskanik o wielko tych danych wykorzystanie: zapis logu przez wiele procesów 92
93 zdalny dostp do pamici MPI-2 uogólnia cisły model przesyłania komunikatów, realizowany przez MPI-1 zapewnia bezporedni dostp z jednego procesu do czci pamici innego procesu operacje to realizujce to:get, put i accumulate, zwane s operacjami zdalnego dostpu do pamici (remote memory access, RMA) pokaemy prosty przykład RMA 93
94 zdalny dostp do pamici charakterystyczn cech modelu przesyłania komunikatów oblicze równoległych jest to, e dane s przesuwane z przestrzeni adresowej jednego procesu do przestrzeni adresowej drugiego procesu, jedynie za pomoc kooperatywnej pary operacji nadawania i odbioru 94
95 zdalny dostp do pamici te same operacje, które przesuwaj (move) dane, wykonuj jednoczenie konieczn synchronizacj kiedy operacja odbioru si koczy, odebrane dane s gotowe do wykorzystania w procesie odbiorczym MPI-2 nie realizuje rzeczywistego modelu z pamici współdzielon, niemniej jednak RMA daje wiele z jego elastycznoci przesuwanie danych moe w całoci inicjowa jeden proces, std taka operacja nazywa si jednostronn (one sided) 95
96 zdalny dostp do pamici na dodatek synchronizacja, wymagana dla zakoczenia operacji przesuwania danych, jest oddzielona od jednostronnej inicjacji tej operacji operacje RMA w MPI-2 obejmuj mały, ale istotny zbiór operacji przesuwania danych, i stosunkowo złoony zbiór operacji synchronizacji tutaj rozpatrzymy jedynie najprostsz posta synchronizacji 96
97 zdalny dostp do pamici naley zauway, e operacje RMA nie dajadnej szczególnej gwarancji efektywnoci w stosunku do operacji nadawania i odbioru s zaprojektowane do pracy w rodowisku z pamici współdzielon jak i bez niej ich główn zalet jest efektywno w projektowaniu algorytmów, powstałe programy s przenone na róne implementacje MPI 97
98 zdalny dostp do pamici główny pomysł: okna pamici w cisłym przesyłaniu komunikatów, bufory nadawczo/odbiorcze okrelone przez typy danych MPI odpowiadaj tym porcjom przestrzeni adresowej procesu, które s eksportowane do innych procesów (przy operacji nadawania) albo s dostpne do zapisu przez inne procesy (przy operacji odbioru) 98
99 zdalny dostp do pamici w MPI-2, to pojcie pamici komunikacyjnej, jest uogólnione na pojcie okna zdalnego zapisu do pamici kady proces moe wyznaczy porcje swojej przestrzeni adresowej dostpne dla innych procesów zarówno przy odczycie jak i zapisie 99
100 zdalny dostp do pamici operacje odczytu i zapisu, wykonywane przez inne procesy s nazywane operacjami zdalnego dostpu do pamiciget iput trzeci rodzaj operacji to accumulate odnosi si ona do aktualizacji lokacji zdalnej pamici, na przykład dodawania do niej jakiej wartoci 100
101 zdalny dostp do pamici okno w MPI-2 odnosi si do porcji pamici jednego procesu, któr on przedkłada do rozproszonego obiektu, zwanego obiektem okna w ten sposób obiekt okna składa si z wielu okien, z których kade składa si z lokalnych obszarów pamici przedłoonych do innych procesów za pomoc kolektywnej funkcji tworzenia okna 101
102 zdalny dostp do pamici zbiór procesów moe mie wiele obiektów okna okno przedłoone obiektowi okna przez zbiór procesów moe si zmienia z procesu na proces pokaemy teraz obiekt okna utworzony przez okna przedłoone przez dwa procesy 102
103 zdalny dostp do pamici proces 0 proces 1 get Put okno RMA obiekt okna okno RMA lokalna przestrze adresowa 103
104 zdalny dostp do pamici operacje put i get, przesuwajce dane do i ze zdalnej pamici innego procesu, s nieblokujce wymagana jest oddzielna operacja synchronizacji do ich zakoczenia rozwamy prosty przykład 104
105 zdalny dostp do pamici przedstawimy program cpi, wyliczajcy warto liczby π za pomoc całkowania numerycznego w wersji oryginalnej, bez RMA, proces 0 pyta uytkownika o liczb przedziałów do wykorzystania w całkowaniu, i stosuje MPI_Bcast do nadania tej liczby do innych procesów kady proces wylicza sum czciow, suma całkowita jest uzyskana przez dodanie sum czciowych operacjmpi_reduce 105
106 zdalny dostp do pamici w wersji jednostronnej tego programu, proces 0 zapamituje warto przeczytan od uytkownika do swojej czci okna obiektu RMA, skd inne procesy mog po prostu j pobra (get) po obliczeniu sumy czciowej, wszystkie procesy dodadz swoje wyliczenia do wartoci w innym obiekcie okna, za pomoc accumulate synchronizacj załatwi nam najprostsza z operacji synchronizacji okna, czyli fence 106
107 zdalny dostp do pamici pocztek programu, zawiera ustawianie obiektu okna (druga cz to ptla główna) tutaj kady obiekt okna zawiera jedynie pojedyncz liczb w pamici procesu 0 obiekty okna s reprezentowane przez zmienne typu MPI_Win w jzyku C potrzebujemy dwa dwa obiekty okna, poniewa s tu dwa typy danych, mamy liczb integerni doublepi, do których wszystkie procesy maj oddzielny dostp 107
108 zdalny dostp do pamici utworzenie pierwszego okna, dokonane na procesie 0, wyglda nastpujco: MPI_Win_create(&n, sizeof(int), 1, MPI_INFO_NULL, MPI_COMM_WORLD, &nwin); to jest odwzorowane na inne procesy za pomoc: MPI_Win_create(MPI_BOTTOM, 0, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &nwin); 108
109 zdalny dostp do pamici wywołanie na procesie 0 musi by odwzorowane na inne procesy, nawet wtedy, gdy nie przedkładaj one adnej pamici obiektowi okna, poniewa MPI_Win_create jest operacj kolektywn na komunikatorze, podanym jako ostatni argument komunikator ten wyznacza, które procesy bd mogły mie dostp do obiektu okna 109
110 zdalny dostp do pamici pierwsze dwa argumenty MPI_Win_create to adres i długo okna lokalnej pamici w bajtach, w ten sposób proces wywołujcy jest podatny na operacje put i get z innych procesów tutaj jest to jedna liczba całkowita n w procesie 0 i nie ma adnej pamici w innych procesach, co jest oznaczone długoci 0 110
111 zdalny dostp do pamici stosujemy MPI_BOTTOM jako adres, poniewa jest to adres poprawny, a my chcemy podkreli, e te procesy nie przedkładajadnych lokalnych okien do tworzonego obiektu okna nastpnym argumentem jest jednostka przesunicia (displacement unit), wykorzystana do okrelenia przesunicia (offset) w pamici w oknach 111
112 zdalny dostp do pamici tutaj kady obiekt okna zawiera tylko jedn zmienn, do której mamy dostp z przesuniciem 0, std jednostka przesunicia nie jest wana, podajemy 1 bajt czwarty argument to MPI_Info, stosowany do optymalizacji operacji RMA, tutaj jest MPI_INFO_NULL 112
113 zdalny dostp do pamici pity argument to komunikator, okrelajcy zbiór procesów majcych dostp do pamici, nalecych do obiektu okna MPI zwraca obiekt MPI_Win jako ostatni argument po pierwszym wywołaniu MPI_Win_create, kady proces ma dostp do danych w nwin (zawierajcych jedn liczb całkowitn), za pomoc operacji put i get do zapamitania i odczytu, aaccumulate do aktualizacji 113
114 zdalny dostp do pamici nie musimy pozyskiwaadnej specjalnej pamici dla okna, stosujemy zmienn programow n w procesie 0 czasem mona pozyskiwa tak pami za pomocmpi_alloc_mem, ale tego tu nie pokazujemy drugie wywołanie MPI_Win_create w kadym procesie jest podobne do pierwszego, i tworzy obiekt okna piwin, dajcy kademu procesowi dostp do zmiennej pi w procesie 0, gdzie całkowita warto π jest sumowana 114
115 zdalny dostp do pamici fragment programu ustawiania obiektu okna /* obliczanie pi za pomoc całkowania numerycznego, wersja RMA */ #include mpi.h #include <math.h> int main(int argc, char *argv[]) { int n, myid, numprocs, i; double PI25DT = ; double mypi, pi, h, sum, x; MPI_Win nwin, piwin; 115
116 zdalny dostp do pamici fragment programu ustawiania obiektu okna MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); if (myid == 0) { MPI_Win_create(&n, sizeof(int), 1, MPI_INFO_NULL, MPI_COMM_WORLD, &nwin); MPI_Win_create(&pi, sizeof(double), 1, MPI_INFO_NULL, MPI_COMM_WORLD, &piwin); } 116
117 zdalny dostp do pamici fragment programu ustawiania obiektu okna else { } MPI_Win_create(MPI_BOTTOM, 0, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &piwin); MPI_Win_create(MPI_BOTTOM, 0, 1, MPI_INFO_NULL, MPI_COMM_WORLD, &piwin); 117
118 zdalny dostp do pamici główna ptla programu obliczania π za pomoc całkowania numerycznego, w wersji RMA, której kada iteracja zawiera: prob procesu 0 do uytkownika o podanie liczby przedziałów równoległe obliczanie wydrukowanie aproksymacji liczby π przez proces 0 ptla si koczy, gdy uytkownik wpisuje 0 118
119 zdalny dostp do pamici proces o niezerowym numerze pobiera (get) wartonbezporednio z obiektu okna, bez adnej jawnej akcji ze strony procesu 0, nadajcej t warto jednak przed wywołaniem MPI_Get, czy innej funkcji komunikacji RMA, naley wywoła specjaln funkcj synchronizacji, MPI_Win_fence, aby rozpocz tzw. epok dostpu RMA (RMA access epoch) 119
120 zdalny dostp do pamici naley wyranie podkreli, e funkcja MPI_Barrier nie moe by stosowana w celu osignicia synchronizacji wymaganej przez RMA MPI zapewnia w tym celu trzy specjalne mechanizmy, oprócz MPI_Win_fence, s to: locks (blokady, zatrzaski) oraz skalowalna, niekolektywna wersja MPI_Win_fence 120
121 zdalny dostp do pamici operacja fence, (płot), jest wywołana przez funkcjmpi_win_fence, i ma dwa argumenty: argument kontroli (assertion), do optymalizacji, tutaj jest nim 0 okno, na którym jest wykonana operacja fence MPI_Win_fence moe by rozumiane jako bariera, oddzielajca lokalne operacje na oknie od zdalnych operacji na oknie 121
122 zdalny dostp do pamici operacja fence moe równie oddziela dwa zbiory operacji zdalnych, czego tu nie pokazujemy tutaj MPI_Win_fence(0, nwin); oddziela przydział wartoci n od operacji zdalnych, takich jak: MPI_Get(&n, 1, MPI_INT, 0, 0, 1, MPI_INT, nwin); 122
123 zdalny dostp do pamici MPI_Get(&n, 1, MPI_INT, 0, 0, 1, MPI_INT, nwin); naley o tej licie argumentów myle jak o parze receive/send, których argumenty s w jednym wywołaniu w jednym procesie get jest jak receive, bufor odbiorczy jest okrelony w stylu MPI przez trójk: &n, 1, MPI_INT, czyli adres, licznik, typ danych 123
124 zdalny dostp do pamici MPI_Get(&n, 1, MPI_INT, 0, 0, 1, MPI_INT, nwin); potem jest numer procesu docelowego, czyli procesu, do którego pamici chcemy si dosta, jest nim 0, poniewa wszystkie procesy z wyjtkiem procesu 0 chc si tam dosta 124
125 zdalny dostp do pamici MPI_Get(&n, 1, MPI_INT, 0, 0, 1, MPI_INT, nwin); nastpne trzy argumenty: 0, 1, MPI_INT, definiuj bufor nadawczy w oknie, w stylu MPI, czyli: adres, licznik, typ danych tutaj adresem jest przesunicie w zdalnej pamici w procesie docelowym, jest nim 0, poniewa jest to jedyna warto w oknie, a przesunicie od pocztku okna to 0 125
126 zdalny dostp do pamici MPI_Get(&n, 1, MPI_INT, 0, 0, 1, MPI_INT, nwin); ostatni argument (nwin) to obiekt okna operacje RMA tylko inicjuj przesunicie danych, nie ma gwarancji, e jak wraca MPI_Get, to dane s pobrane do zmiennej n czyli MPI_Get jest operacj nieblokujc aby zapewni, e operacja si zakoczyła, trzeba ponownie wywołampi_win_fence 126
127 zdalny dostp do pamici nastpny fragment ptli głównej dotyczy sumy czciowejmypi w kadym procesie, włczajc proces 0 uzyskujemy aproksymacj π pozwalajc kademu procesowi na aktualizacj wartoci pi w obiekcie okna, poprzez dodanie do niej swojej wartoci mypi 127
128 zdalny dostp do pamici wpierw wywołujemy kolejne MPI_Win_fence, tym razem na obiekcie okna piwin, aby rozpocz kolejn epok dostpu RMA nastpnie wykonujemy operacjaccumulate MPI_Accumulate(&mypi, 1, MPI_DOUBLE, 0, 0, 1, MPI_DOUBLE, MPI_SUM, piwin); pierwsze trzy argumenty &mypi, 1, MPI_DOUBLE okrelaj lokaln warto stosowan do aktualizacji (jej adres, licznik, typ danych) 128
129 zdalny dostp do pamici MPI_Accumulate(&mypi, 1, MPI_DOUBLE, 0, 0, 1, MPI_DOUBLE, MPI_SUM, piwin); czwartym argumentem jest numer procesu docelowego, tutaj 0 kolejne trzy argumenty: 0, 1, MPI_DOUBLE, okrelaj warto aktualizowan w postaci (przesunicie, licznik, typ danych) nastpnie jest operacja stosowana do aktualizacji, jest nimpi_sum 129
130 zdalny dostp do pamici MPI_Accumulate(&mypi, 1, MPI_DOUBLE, 0, 0, 1, MPI_DOUBLE, MPI_SUM, piwin); ten argument jest podobny do argumentuop wmpi_reduce, rónic jest to, e w MPI_Accumulate mona stosowa jedynie wczeniej zdefiniowane operacje redukcji MPI tutaj kady proces dodaje swoj wartomypi do pi, std stosujemy operacjmpi_sum ostatni argument to obiekt okna, na którym dokonuje si aktualizacji, czyli piwin 130
131 zdalny dostp do pamici poniewa MPI_Accumulate jest funkcj nieblokujc, wywołujemympi_win_fence w celu zakoczenia operacji nastpnie drukujemy wynik z procesu 0 jeeli proces 0 nie stosujempi_accumulate, lecz pi += mypi, program da złe wyniki program koczy si uwolnieniem obiektów okna, za pomocmpi_win_free, kolektywnej operacji na tym samym komunikatorze, który wystpował w MPI_Win_create 131
132 zdalny dostp do pamici główna ptla programu obliczania π za pomoc całkowania numerycznego, wersja RMA while (1) { if (myid == 0) { printf( Wprowadz liczbe przedzialow: (0 konczy petle) ); fflush(stdout); scanf( %d,&n); pi = 0.0; } MPI_Win_fence(0, nwin); 132
133 zdalny dostp do pamici główna ptla programu obliczania π za pomoc całkowania numerycznego, wersja RMA if (myid!= 0) MPI_Get(&n, 1, MPI_INT, 0, 0, 1, MPI_INT, nwin); MPI_Win_fence(0, nwin); if (n == 0) break; else { h = 1.0 / (double) n; sum = 0.0; 133
134 zdalny dostp do pamici główna ptla programu obliczania π za pomoc całkowania numerycznego, wersja RMA h = 1.0 / (double) n; sum = 0.0; for (i = myid + 1; i <= n; i += numprocs) { x = h * ((double)i 0.5); sum += (4.0 / (1.0 + x*x)); } mypi = h * sum; MPI_Win_fence( 0, piwin); MPI_Accumulate(&mypi, 1, MPI_DOUBLE, 0, 0, 1, MPI_DOUBLE, MPI_SUM, piwin); MPI_Win_fence(0, piwin); 134
135 zdalny dostp do pamici główna ptla programu obliczania π za pomoc całkowania numerycznego, wersja RMA } if (myid == 0) printf( pi jest w przyblizeniu %.16f, blad wynosi %.16f\n, pi, fabs(pi PI25DT)); } } MPI_Win_free(&nwin); MPI_Win_free(&piwin); MPI_Finalize(); return 0; 135
136 dynamiczne zarzdzanie procesami MPI-1 nie pozwala na dynamiczne zarzdzanie procesami MPI-2 realizuje to za pomoc funkcji MPI_Comm_spawn, która jest kolektywn operacj na rozmnaajcych si procesach (zwanych parents, rodzicami) i równie kolektywna przy wywołaniach MPI_Init w procesach rozmnaanych (zwanych children, dziemi) 136
137 podsumowanie omówilimy tutaj podstawowe kwestie dotyczce nastpujcych rozszerze standardu MPI: równoległe we/wy zdalne operacje na pamici oczywicie temat ten nie został w pełni wyczerpany oddzielnego potraktowania wymaga dynamiczne zarzdzanie procesami 137
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ółowoRozszerzenia MPI-2 1
Rozszerzenia MPI-2 1 2 Dynamiczne tworzenie procesów Aplikacja MPI 1 jest statyczna z natury Liczba procesów określana jest przy starcie aplikacji i się nie zmienia. Gwarantuje to szybką komunikację procesów.
Bardziej szczegółowoProgramowanie Równoległe Wykład 4. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej
Programowanie Równoległe Wykład 4 MPI - Message Passing Interface Maciej Matyka Instytut Fizyki Teoretycznej Jak używać w MPI? Donald Knuth: We should forget about small efficiencies, say about 97% of
Bardziej szczegółowoProgramowanie 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Ł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ółowo61 Topologie wirtualne
61 Topologie wirtualne pozwalają opisać dystrybucję procesów w przestrzeni z uwzględnieniem struktury komunikowania się procesów aplikacji między sobą, umożliwiają łatwą odpowiedź na pytanie: kto jest
Bardziej szczegółowoSposoby przekazywania parametrów w metodach.
Temat: Definiowanie i wywoływanie metod. Zmienne lokalne w metodach. Sposoby przekazywania parametrów w metodach. Pojcia klasy i obiektu wprowadzenie. 1. Definiowanie i wywoływanie metod W dotychczas omawianych
Bardziej szczegółowoProgramowanie w modelu przesyłania komunikatów specyfikacja MPI. Krzysztof Banaś Obliczenia równoległe 1
Programowanie w modelu przesyłania komunikatów specyfikacja MPI Krzysztof Banaś Obliczenia równoległe 1 Model przesyłania komunikatów Paradygmat send receive wysyłanie komunikatu: send( cel, identyfikator_komunikatu,
Bardziej szczegółowoBiblioteki graficzne MPI - MPE
Biblioteki graficzne MPI - MPE Michał Sajkowski Mirosław Kupczyk literatura [Chan1998] A. Chan, W. Gropp, E. Lusk, User s Guide formpe: Extensions to MPI Programs, ANL 1998. Web pages for MPI and MPE:
Bardziej szczegółowoPOZNA SUPERCOMPUTING AND NETWORKING. Wtki w MPI. Michał Sajkowski
Wtki w MPI Michał Sajkowski literatura wykład opracowany na podstawie: W. Gropp, E. Lusk, R. Thakur, Using MPI-2, The MIT Press 1999 W. Gropp, E. Lusk, A. Skjellum, Using MPI, 2nd. Ed., The MIT Press 1999
Bardziej szczegółowoProgramowanie Równoległe Wykład 5. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej
Programowanie Równoległe Wykład 5 MPI - Message Passing Interface Maciej Matyka Instytut Fizyki Teoretycznej Dorobiliśmy się strony WWW www.ift.uni.wroc.pl/~koma/pr/index.html MPI, wykład 2. Plan: - komunikacja
Bardziej szczegółowoOperacje grupowego przesyłania komunikatów. Krzysztof Banaś Obliczenia równoległe 1
Operacje grupowego przesyłania komunikatów Krzysztof Banaś Obliczenia równoległe 1 Operacje grupowego przesyłania komunikatów Operacje, w ramach których ten sam komunikat lub zbiór komunikatów przesyłany
Bardziej szczegółowoWstęp do MPI-2. Jacek Dziedzic FTiMS, Politechnika Gdańska Gdańsk, Algorytmy rozproszone 2017/2018. v1.14
Wstęp do MPI-2 Jacek Dziedzic FTiMS, Politechnika Gdańska Gdańsk, 2006-2018 Algorytmy rozproszone 2017/2018 v1.14 Pracujemy w systemie równoległym o architekturze MIMD, z pamięcią rozproszoną... N E T
Bardziej szczegółowo... Ireneusz Mrozek. Wydział Informatyki
Ireneusz Mrozek Wydział Informatyki Proces wykonujcy si program Proces jednostka pracy systemu zarzdzan przez system operacyjny. W skład procesu wchodz: - program; - dane - zawarto rejestrów, stosu; -
Bardziej szczegółowoProgramowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1
Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1 Środowisko przesyłania komunikatów MPI Rodzaje procedur: blokujące nieblokujące Tryby przesyłania
Bardziej szczegółowoTemat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation).
Temat: Programowanie zdarzeniowe. Zdarzenia: delegacje, wykorzystywanie zdarze. Elementy Windows Application (WPF Windows Presentation Foundation). 1. Programowanie zdarzeniowe Programowanie zdarzeniowe
Bardziej szczegółowoCzęść 4 życie programu
1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część
Bardziej szczegółowoProgramowanie w modelu przesyłania komunikatów specyfikacja MPI. Krzysztof Banaś Obliczenia równoległe 1
Programowanie w modelu przesyłania komunikatów specyfikacja MPI Krzysztof Banaś Obliczenia równoległe 1 Środowisko przesyłania komunikatów MPI Rodzaje procedur: blokujące nieblokujące Tryby przesyłania
Bardziej szczegółowoProblem decyzyjny naley do klasy NP. (Polynomial), jeeli moe by rozwizany w czasie conajwyej wielomianowym przez algorytm A dla DTM.
WYKŁAD : Teoria NP-zupełnoci. Problem decyzyjny naley do klasy P (Polynomial), jeeli moe by rozwizany w czasie conajwyej wielomianowym przez algorytm A dla DTM. (przynaleno ta jest zachowana równie dla
Bardziej szczegółowoAlgorytmy i Struktury Danych
POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Algorytmy i Struktury Danych www.pk.edu.pl/~zk/aisd_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład 12: Wstęp
Bardziej szczegółowoWYKŁAD 10. Wzorce projektowe czynnociowe Command Strategy
WYKŁAD 10 Wzorce projektowe czynnociowe Command Strategy Behavioral Design Pattern: Command [obj] Kapsułkuje dania w postaci obiektu, co umoliwia parametryzowanie klientów rónymi daniami, kolejkowanie
Bardziej szczegółowoWykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik
Wykład VI Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Operacje na plikach Operacje na plikach Aby móc korzystać z pliku należy go otworzyć w odpowiednim
Bardziej szczegółowoBazy danych Podstawy teoretyczne
Pojcia podstawowe Baza Danych jest to zbiór danych o okrelonej strukturze zapisany w nieulotnej pamici, mogcy zaspokoi potrzeby wielu u!ytkowników korzystajcych z niego w sposóbs selektywny w dogodnym
Bardziej szczegółowoWstęp do Programowania, laboratorium 02
Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite
Bardziej szczegółowoProgramowanie i struktury danych
Programowanie i struktury danych Wykªad 3 1 / 37 tekstowe binarne Wyró»niamy dwa rodzaje plików: pliki binarne pliki tekstowe 2 / 37 binarne tekstowe binarne Plik binarny to ci g bajtów zapami tanych w
Bardziej szczegółowoKlonowanie MAC adresu oraz TTL
1. Co to jest MAC adres? Klonowanie MAC adresu oraz TTL Adres MAC (Media Access Control) to unikalny adres (numer seryjny) kadego urzdzenia sieciowego (jak np. karta sieciowa). Kady MAC adres ma długo
Bardziej szczegółowoProgramowanie Obiektowe
Programowanie Obiektowe dr in. Piotr Zabawa IBM/Rational Certified Consultant pzabawa@pk.edu.pl WYKŁAD 1 Wstp, jzyki, obiektowo Cele wykładu Zaznajomienie słuchaczy z głównymi cechami obiektowoci Przedstawienie
Bardziej szczegółowoLaboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach
Laboratorium Systemów Operacyjnych Ćwiczenie 4. Operacje na plikach Wykonanie operacji wymaga wskazania pliku, na którym operacja ma zostać wykonana. Plik w systemie LINUX identyfikowany jest przez nazwę,
Bardziej szczegółowoProgramowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
Bardziej szczegółowoProces tworzenia programu:
Temat 1 Pojcia: algorytm, program, kompilacja i wykonanie programu. Proste typy danych i deklaracja zmiennych typu prostego. Instrukcja przypisania. Operacje wejcia/wyjcia. Przykłady prostych programów
Bardziej szczegółowo1. Klasa typu sealed. Przykład 1. sealed class Standard{ class NowyStandard:Standard{ // błd!!!
Temat: Klasy typu sealed. Klasy abstrakcyjne. Deklaracja i implementacja interfejsu. Typ Object i operatory is oraz as. Czas ycia obiektu. Destruktory. 1. Klasa typu sealed Przykład 1 Klasa typu sealed
Bardziej szczegółowoProgramowanie aplikacji równoległych i rozproszonych. Wykład 8
Wykład 8 p. 1/?? Programowanie aplikacji równoległych i rozproszonych Wykład 8 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Plan wykładu
Bardziej szczegółowoANALIZA NUMERYCZNA. Grzegorz Szkibiel. Wiosna 2014/15
ANALIZA NUMERYCZNA Grzegorz Szkibiel Wiosna 2014/15 Spis tre±ci 1 Metoda Eulera 3 1.1 zagadnienia brzegowe....................... 3 1.2 Zastosowanie ró»niczki...................... 4 1.3 Output do pliku
Bardziej szczegółowoznajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
Bardziej szczegółowoTemat: 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ółowoPodstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Bardziej szczegółowoProf. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com
Programowanie wykład dla I roku bioinformatyki semestr letni 2013 Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel. 58 523 2466 e-mail: danuta.makowiec at gmail.com Cel bloku
Bardziej szczegółowogeometry a w przypadku istnienia notki na marginesie: 1 z 5
1 z 5 geometry Pakiet słuy do okrelenia parametrów strony, podobnie jak vmargin.sty, ale w sposób bardziej intuicyjny. Parametry moemy okrela na dwa sposoby: okrelc je w polu opcji przy wywołaniu pakiety:
Bardziej szczegółowowykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis
i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje
Bardziej szczegółowoPodstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Bardziej szczegółowo1. Wprowadzenie do C/C++
Podstawy Programowania - Roman Grundkiewicz - 013Z Zaj cia 1 1 rodowisko Dev-C++ 1. Wprowadzenie do C/C++ Uruchomienie ±rodowiska: Start Programs Developments Dev-C++. Nowy projekt: File New Project lub
Bardziej szczegółowoLaboratorium 5: Tablice. Wyszukiwanie binarne
Wojciech Myszka Laboratorium 5: Tablice. Wyszukiwanie binarne 2016-05-07 09:02:17 +0200 1. Tablice Do tej pory nie było potrzeby odwoływać się do zmiennych złożonych. Programy były bardzo proste i korzystały
Bardziej szczegółowoW2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :
Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;
Bardziej szczegółowoProgramowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41
Programowanie w C++ Wykład 2 Katarzyna Grzelak 5 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Reprezentacje liczb w komputerze K.Grzelak (Wykład 1) Programowanie w C++ 2 / 41 Reprezentacje
Bardziej szczegółowoTworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1
Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1 Metodologia programowania równoległego Przykłady podziałów zadania na podzadania: Podział ze względu na funkcje (functional
Bardziej szczegółowoInstrukcja obsługi programu Pilot PS 5rc
Instrukcja obsługi programu Pilot PS 5rc Spis treci 1.Wprowadzenie....3 2. Wymagania....3 3. Instalacja oprogramowania...3 4. Uruchomienie Programu...5 4.1. Menu główne...5 4.2. Zakładki...6 5. Praca z
Bardziej szczegółowoOperacje grupowego przesyłania komunikatów
Operacje grupowego przesyłania komunikatów 1 Operacje grupowego przesyłania komunikatów Operacje, w ramach których ten sam komunikat lub zbiór komunikatów przesyłany jest pomiędzy więcej niż dwoma procesami
Bardziej szczegółowoTryby komunikacji między procesami w standardzie Message Passing Interface. Piotr Stasiak Krzysztof Materla
Tryby komunikacji między procesami w standardzie Message Passing Interface Piotr Stasiak 171011 Krzysztof Materla 171065 Wstęp MPI to standard przesyłania wiadomości (komunikatów) pomiędzy procesami programów
Bardziej szczegółowoInformacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char
Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od
Bardziej szczegółowoKomunikacja kolektywna w środowisku MPI
Komunikacja kolektywna w środowisku MPI Zakres ćwiczenia W tym ćwiczeniu dowiesz się, co to jest komunikacja kolektywna i w jaki sposób napisać swój pierwszy program wykorzystujący komunikację kolektywną
Bardziej szczegółowoWskaźniki w C. Anna Gogolińska
Wskaźniki w C Anna Gogolińska Zmienne Zmienną w C można traktować jako obszar w pamięci etykietowany nazwą zmiennej i zawierający jej wartość. Przykład: kod graficznie int a; a a = 3; a 3 Wskaźniki Wskaźnik
Bardziej szczegółowoProgramowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40
Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne
Bardziej szczegółowoProgramowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44
Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia
Bardziej szczegółowoI - Microsoft Visual Studio C++
I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i
Bardziej szczegółowoDYNAMICZNE PRZYDZIELANIE PAMIECI
DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne
Bardziej szczegółowoInstrukcja obsługi dodatku InsERT GT Smart Documents
Instrukcja obsługi dodatku InsERT GT Smart Documents InsERT, grudzie 2003 http://www.insert.com.pl/office2003 InsERT GT Smart Documents to przygotowany przez firm InsERT specjalny dodatek, umoliwiajcy
Bardziej szczegółowoArchitektura, oprogramowanie i uytkowanie klastra PCSS. Marek Zawadzki <mzawadzk@man.poznan.pl>
Architektura, oprogramowanie i uytkowanie klastra PCSS Marek Zawadzki Plan prezentacji: klastry krótkie wprowadzenie klaster PCSS budowa jak otrzyma konto na klastrze sposób dostpu
Bardziej szczegółowoobsług dowolnego typu formularzy (np. formularzy ankietowych), pobieranie wzorców formularzy z serwera centralnego,
Wstp GeForms to program przeznaczony na telefony komórkowe (tzw. midlet) z obsług Javy (J2ME) umoliwiajcy wprowadzanie danych według rónorodnych wzorców. Wzory formularzy s pobierane z serwera centralnego
Bardziej szczegółowo5 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 5 1/6 Język C Instrukcja laboratoryjna Temat: Funkcje, parametry linii poleceń, typ wyliczeniowy. 5 Przygotował: mgr inż. Maciej Lasota 1) Parametry linii poleceń. Język C oprócz wprowadzania
Bardziej szczegółowoOptymalizacja komunikacji w systemach rozproszonych i równoległych
Optymalizacja komunikacji w systemach rozproszonych i równoległych Szkolenie PCSS, 16.12.2001 literatura W. Gropp, E. Lusk, An Introduction to MPI, ANL P.S. Pacheco, A User s Guide to MPI, 1998 Ian Foster,
Bardziej szczegółowoMikrokontroler ATmega32. Tryby adresowania Rejestry funkcyjne
Mikrokontroler ATmega32 Tryby adresowania Rejestry funkcyjne 1 Rozrónia si dwa główne tryby: adresowanie bezporednie i porednie (jeli jeden z argumentów jest stał, ma miejsce take adresowanie natychmiastowe)
Bardziej szczegółowoWstp. Warto przepływu to
177 Maksymalny przepływ Załoenia: sie przepływow (np. przepływ cieczy, prdu, danych w sieci itp.) bdziemy modelowa za pomoc grafów skierowanych łuki grafu odpowiadaj kanałom wierzchołki to miejsca połcze
Bardziej szczegółowo1. Wprowadzenie do C/C++
Podstawy Programowania :: Roman Grundkiewicz :: 014 Zaj cia 1 1 rodowisko Dev-C++ 1. Wprowadzenie do C/C++ Uruchomienie ±rodowiska: Start Programs Developments Dev-C++. Nowy projekt: File New Project lub
Bardziej szczegółowoProgramowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz
Programowanie równoległe i rozproszone Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz 23 października 2009 Spis treści Przedmowa...................................................
Bardziej szczegółowoProgramowanie współbieżne... (2)
Programowanie współbieżne... (2) Andrzej Baran 2010/11 LINK: http://kft.umcs.lublin.pl/baran/prir/index.html Prawo Amdahla - powtórka Wydajność E = S/n (na procesor). Stąd S = En E 1 f + 1 f n 1 fn+1 f
Bardziej szczegółowoSUPLEMENT SM-BOSS WERSJA 6.15
SUPLEMENT SM-BOSS WERSJA 6.15 Spis treci Wstp...2 Pierwsza czynno...3 Szybka zmiana stawek VAT, nazwy i PKWiU dla produktów...3 Zamiana PKWiU w tabeli PKWiU oraz w Kartotece Produktów...4 VAT na fakturach
Bardziej szczegółowoSpis treci. Dzie 1. I Wprowadzenie (wersja 0911) II Dostp do danych biecych specyfikacja OPC Data Access (wersja 0911)
I Wprowadzenie (wersja 0911) Kurs OPC Integracja i Diagnostyka Spis treci Dzie 1 I-3 O czym bdziemy mówi? I-4 Typowe sytuacje I-5 Klasyczne podejcie do komunikacji z urzdzeniami automatyki I-6 Cechy podejcia
Bardziej szczegółowoProgramowanie współbieżne WYKŁADY - CZ. 5EX. PRZYKŁAD. LICZBY PIERWSZE. Andrzej Baran
Programowanie współbieżne WYKŁADY - CZ. 5EX. PRZYKŁAD. LICZBY PIERWSZE. Andrzej Baran baran@kft.umcs.lublin.pl Liczby pierwsze I Program: pierwsze.f90 - znajdowanie liczb pierwszych w przedziale 2..n Metoda:
Bardziej szczegółowoZajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 2 Programowanie strukturalne dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Pętla while #include using namespace std; int main ()
Bardziej szczegółowoPlanowanie adresacji IP dla przedsibiorstwa.
Planowanie adresacji IP dla przedsibiorstwa. Wstp Przy podejciu do planowania adresacji IP moemy spotka si z 2 głównymi przypadkami: planowanie za pomoc adresów sieci prywatnej przypadek, w którym jeeli
Bardziej szczegółowoJęzyk C zajęcia nr 11. Funkcje
Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji
Bardziej szczegółowoSystem Connector Opis wdrożenia systemu
System Connector Opis wdrożenia systemu Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego Spistre ci Wymagania z perspektywy Powiatowego Urzdu Pracy... 3
Bardziej szczegółowoTemat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.
Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika. 1. Pojcie struktury danych Nieformalnie Struktura danych (ang. data
Bardziej szczegółowoProgramowanie współbieżne... (5)
Programowanie współbieżne... (5) Andrzej Baran 2010/11 LINK: http://kft.umcs.lublin.pl/baran/prir/index.html 6 FUNKCJI Proste programy MPI można pisać używając tylko 6 funkcji Programowanie współbieżne...
Bardziej szczegółowoWskaźniki. Informatyka
Materiały Wskaźniki Informatyka Wskaźnik z punktu widzenia programisty jest grupą komórek pamięci (rozmiar wskaźnika zależy od architektury procesora, najczęściej są to dwa lub cztery bajty ), które mogą
Bardziej szczegółowoBazy danych. Zaliczenie. Literatura. Strony WWW. Wykład 1: Wprowadzenie do baz danych. Semestr 1
Zaliczenie Bazy Wykład 1: Wprowadzenie do baz Semestr 1 Wykład: Podstawowe informacje z zakresu baz - relacyjne bazy, DDL, SQL, indeksy, architektura baz Pracownia specjalistyczna: projekt bazy, SQL, Access
Bardziej szczegółowoTworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1
Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie
Bardziej szczegółowoPodstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD
Podstawy programowania Wykład: 9 Łańcuchy znaków 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Rodzaje plików Dane przechowywane w pliku mogą mieć reprezentację binarną (taką samą, jak
Bardziej szczegółowoArgumenty wywołania programu, operacje na plikach
Temat zajęć: Argumenty wywołania programu, operacje na plikach Autor: mgr inż. Sławomir Samolej Zagadnienie 1. (Zmienne statyczne) W języku C można decydować o sposobie przechowywania zmiennych. Decydują
Bardziej szczegółowoLab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
Bardziej szczegółowoWskaźniki. Programowanie Proceduralne 1
Wskaźniki Programowanie Proceduralne 1 Adresy zmiennych Sterta 1 #include 2 3 int a = 2 ; 4 5 int main ( ) 6 { 7 int b = 3 ; 8 9 printf ( " adres zmiennej a %p\n", &a ) ; 10 printf ( " adres
Bardziej szczegółowoRozwiązanie. #include <cstdlib> #include <iostream> using namespace std;
Programowanie C++ Zadanie 1 Napisz program do obliczenia sumy i iloczynu ciągu liczb zakooczonego liczbą zero. Zakładamy, że ciąg zawiera co najmniej jedną liczbę (założenie to jest konieczne przy obliczeniu
Bardziej szczegółowoAltiumLive Dashboard - sownik. AltiumLive Dashboard - Glossary. Language. Contents
AltiumLive Dashboard - sownik Language AltiumLive Dashboard - Glossary Contents Konto (Account) Aktywacja (Activation) Kod aktywacji (Activation Code) Kontakt (Contact) Grupa (Group) Administrator grupy
Bardziej szczegółowo// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.
Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy
Bardziej szczegółowoWprowadzenie do kompilatorów
Wprowadzenie do kompilatorów Czy ja kiedykolwiek napisz jaki kompilator? Jakie zadania ma do wykonania kompilator? Czy jzyk formalny to rodzaj jzyka programowania? Co to jest UML?, Czy ja kiedykolwiek
Bardziej szczegółowoTablice (jedno i wielowymiarowe), łańcuchy znaków
Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie
Bardziej szczegółowoFunkcje zawarte w bibliotece < io.h >
PLIKOWE OPERACJE WEJŚCIA - WYJŚCIA Język C/C++ nie ma wbudowanych żadnych instrukcji umożliwiających wykonywanie operacji wejścia-wyjścia! Służą do tego funkcje biblioteczne. Funkcje zawarte w bibliotece
Bardziej szczegółowoWzorce (szablony) template<class T> {definicja wzorca} lub template<class TypElementu> lub template<class TypElementu1, class TypElementu2>
Wzorce (szablony) Wzorce pozwalaj na okrelenie, za pomoc pojedynczego fragmentu kodu, całej gamy powizanych (przecionych) funkcji nazywanych funkcjami wzorcowymi lub powizanych kas nazywanych klasami wzorcowymi.
Bardziej szczegółowomain( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!
Funkcja wysoce niezależny blok definicji i instrukcji programu (podprogram) Każdy program napisany w języku C/C++ zawiera przynajmniej jedną funkcję o predefiniowanej nazwie: main( ). Najczęściej wykorzystuje
Bardziej szczegółowoProgramowanie współbieżne... (12) Andrzej Baran 2010/11
Programowanie współbieżne... (12) Andrzej Baran 2010/11 LINK: http://kft.umcs.lublin.pl/baran/prir/index.html Dekompozycja danych. Wejście. rank 0 rank 1 rank 2 A B C A B C A B C indata indata indata wejście
Bardziej szczegółowoTytuły Wykonawcze. Opis systemu tworzenia dokumentacji TW-1
Tytuły Wykonawcze Opis systemu tworzenia dokumentacji TW-1 Program pozwala na tworzenie tytułów wykonawczych według Rozporządzenia Ministra Finansów z dnia 16 maja 2014 r. 1.Główne cechy systemu -ewidencja
Bardziej szczegółowoProgramowanie w językach
Programowanie w językach wysokiego poziomu Obsługa plików za pomocą strumieni Elektronika i Telekomunikacja, semestr III rok akademicki 2013/2014 dr inż. Paweł Myszkowski Plan zajęć a) otwieranie i zamykanie
Bardziej szczegółowozdefiniowanie kilku grup dyskusyjnych, z których chcemy odbiera informacje, dodawanie, usuwanie lub edycj wczeniej zdefiniowanych grup dyskusyjnych,
Wstp W nowoczesnym wiecie coraz istotniejsz rol odgrywa informacja i łatwy dostp do niej. Nie dziwi wic fakt, i nowoczesne telefony komórkowe to nie tylko urzdzenia do prowadzenia rozmów telefonicznych,
Bardziej szczegółowotablica: dane_liczbowe
TABLICE W JĘZYKU C/C++ tablica: dane_liczbowe float dane_liczbowe[5]; dane_liczbowe[0]=12.5; dane_liczbowe[1]=-0.2; dane_liczbowe[2]= 8.0;... 12.5-0.2 8.0...... 0 1 2 3 4 indeksy/numery elementów Tablica
Bardziej szczegółowoProjektowanie algorytmów rekurencyjnych
C9 Projektowanie algorytmów rekurencyjnych wiczenie 1. Przeanalizowa działanie poniszego algorytmu dla parametru wejciowego n = 4 (rysunek 9.1): n i i
Bardziej szczegółowoProgramowanie wspóªbie»ne
1 Programowanie wspóªbie»ne wiczenia 5 monitory cz. 1 Zadanie 1: Stolik dwuosobowy raz jeszcze W systemie dziaªa N par procesów. Procesy z pary s nierozró»nialne. Ka»dy proces cyklicznie wykonuje wªasnesprawy,
Bardziej szczegółowoOperacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia
Materiały Operacje na plikach Informatyka Operacje wejścia-wyjścia w C/C++: Podejście proceduralne Podejście obiektowe Standardowe strumienie wejścia i wyjścia stdin - strumień wejściowy (klawiatura) cin
Bardziej szczegółowo.! $ Stos jest list z trzema operacjami: dodawanie elementów na wierzch stosu, zdejmowanie elementu z wierzchu stosu, sprawdzanie czy stos jest pusty.
!"! " #$%& '()#$$ &%$! #$ %$ &%$& &$&! %&'" )$$! *$$&%$! +,- +-.! $ Celem wiczenia jest zapoznanie studenta ze strukturami: lista, stos, drzewo oraz ich implementacja w jzyku ANSI C. Zrozumienie działania
Bardziej szczegółowoTworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1
Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie
Bardziej szczegółowoPoradnik korzystania z serwisu UNET: Dostp do poczty elektronicznej ze strony WWW
Poradnik korzystania z serwisu UNET: Dostp do poczty elektronicznej ze strony WWW W przypadku braku stosownego oprogramowania słucego do komunikacji z systemem pocztowym UNET uytkownik ma moliwo skorzystania
Bardziej szczegółowo