Programowanie współbieżne Wstęp do OpenMP. Rafał Skinderowicz
|
|
- Gabriel Szewczyk
- 2 lat temu
- Przeglądów:
Transkrypt
1 Programowanie współbieżne Wstęp do OpenMP Rafał Skinderowicz
2 Czym jest OpenMP? OpenMP = Open Multi-Processing interfejs programowania aplikacji (API) dla pisania aplikacji równoległych na komputery wieloprocesorowe ze współdzieloną pamięcią Składa się z: dyrektyw kompilatora (np. #pragma w języku C) biblioteki zmiennych środowiskowych Przenośny: Dla języków Fortran oraz C/C++ Wspierany na wielu platformach włączając Windows, Unix/Linux Kompilatory: GCC, Intel Fortran i C/C++, IBM XL C/C++, MS C++ Od wersji 4.0 również Nvidia, AMD Ustandaryzowany specyfikacją zarządza OpenMP Architecture Review Board (http://www.openmp.org) W skład komitetu standaryzacyjnego wchodzą m.in. AMD, Convey, Cray, Fujitsu, HP, IBM, Intel, NEC, NVIDIA, Oracle, RedHat (GNU), ST
3 OpenMP historia 1998 OpenMP C/C OpenMP OpenMP Fortran 1.0 Fortran OpenMP C/C OpenMP Fortran 2.0 Pojedyncza specyfikacja dla Fortran oraz C/C OpenMP OpenMP 3.0 zadania (tasks) 2013 OpenMP 4.0 wsparcie dla akceleratorów; SIMD;
4 OpenMP architektura User layer End User Application Prog. Layer Directives, Compiler OpenMP library Environment variables System layer OpenMP Runtime library OS/system support for shared memory and threading Proc1 Proc 2 Proc 3 ProcN HW Shared Address Space Rysunek : Źródło: Mattson T., Meadows L., A Hands-on Introduction to OpenMP
5 OpenMP podstawy Większość składowych OpenMP to dyrektywy kompilatora 1 #pragma nazwa_dyrektywy [klauzula1 [klauzula2] ] Przykład: 1 #pragma omp parallel num_threads(4) Definicje funkcji oraz typów danych w nagłówku: 1 #include <omp.h> Większość dyrektyw OpenMP stosowana jest do bloków: blok = jedno lub więcej wyrażeń pojedynczy punkt wejścia na początku bloku pojedynczy punkt wyjścia na końcu bloku
6 Kompilacja GNU GCC wymaga przełącznika -fopenmp 1 gcc -fopenmp program.c -o program Kompilatory Intela 1 icc -openmp program.c -o program W VisualStudio należy włączyć obsługę OpenMP: Configuration Properties C/C++ Language i ustawić opcję OpenMP Support na Yes dla kompilacji w linii poleceń trzeba dodać przełącznik /openmp
7 OpenMP przykład 1 void main() 2 { 3 int id = 0; 4 printf("hello(%d)", id); 5 printf("world(%d)\n", id ); 6 } 1 #include <omp.h> 2 void main() 3 { 4 #pragma omp parallel 5 { 6 int id = omp_get_thread_num(); 7 printf("hello(%d)", id); 8 printf("world(%d)\n", id); 9 } 10 } Przykładowy wynik dla 4 procesorów: hello(1) hello(0) world(1) world(0) hello (3) hello(2) world(3) world(2) Blok parallel wykonywany jest równolegle na dostępnych procesorach
8 OpenMP przykład 2 1 int main(int argc, char *argv[]) 2 { 3 #pragma omp parallel 4 { 5 #pragma omp task 6 { printf("hello "); } 7 #pragma omp task 8 { printf("world"); } 9 } 10 printf("\nthe end"); 11 return 0; 12 } 13 // Wynik: Hello Hello WorldHello WorldWorldHello World W bloku parallel tworzone są dwa wątki (zadania) dla 4 proc. będzie utworzonych 8 wątków
9 OpenMP zarządzanie wątkami OpenMP wymaga jawnego definiowania, które fragmenty kodu mają wykonać się równolegle pełna kontrola nad zrównolegleniem OpenMP stosuje model Fork-Join do równoległego wykonywania programu po napotkaniu bloku równoległego w programie wątek główny odpowiedzialny jest za tworzenie grupy wątków roboczych (Fork) każdy wątek wykonuje instrukcje w bloku po zakończeniu wykonania bloku wątki robocze są synchronizowane i usuwane, pozostaje jedynie wątek główny (Join) Wątki tworzone są niejawnie przez OpenMP domyślnie tyle ile dostępnych jest fizycznych procesorów/rdzeni
10 OpenMP zarządzanie wątkami Wątek główny Blok równoległy Wątki robocze Synchronizacja Blok równoległy Wątki robocze Synchronizacja
11 OpenMP zarządzanie wątkami Wątek główny ma zawsze ID = 0 Wątki komunikują się przez współdzieloną pamięć, tj. współdzielone zmienne Brak ostrożności w dostępie do współdzielonych zmiennych może prowadzić do wyścigów zmienna jest jednocześnie modyfikowana przez kilka wątków Dostępne są dyrektywy umożliwiające synchronizację dostępu wątków do sekcji krytycznej Synchronizacja jest kosztowna, dlatego należy ją minimalizować Za pomocą instrukcji warunkowych można przekazać różnym wątkom różne fragmenty programu do wykonania
12 OpenMP dyrektywy #pragma omp nazwa-dyrektywy [klauzula,... ] newline Obowiązkowa dla Nazwa dyrektywy obowiązkowa, Opcjonalna lista Dyrektywa koń- wszystkich dyrektyw tylko jedna klauzul, mogą czy się wraz z na jedną dyrektywę. występować końcem wiersza w dowolnej w przypadku kolejności wielowierszowych dykrektyw należy używać znaku \ Wielkość liter ma znaczenie Każda dyrektywa stosuje się tylko do jednego wyrażenia, które po niej następuje (w kolejnym wierszu) W przypadku większej liczby wyrażeń należy je ująć w blok, tj. {... }, wtedy dyrektywa będzie miała zastosowanie dla całego bloku Wszystkie dyrektywy OpenMP mają zastosowanie, jedynie gdy zdefniowane jest makro OPENMP
13 OpenMP dyrektywa parallel Dyrektywa parallel określa, że następujący po niej blok kodu wykonywany jest równolegle 1 #pragma omp parallel [klauzula1 klauzula2...] 2 { 3 te instrukcje wykonywane są równolegle 4 } // niejawny punkt synchronizacji wątków (bariera synch.) Dyrektywa parallel obsługuje następujące opcjonalne klauzule: if (wyrażenie całkowitoliczbowe) private (lista zmiennych) shared (lista zmiennych) default (shared albo none) firstprivate (lista zmiennych) reduction (operator: lista zmiennych) copyin (lista zmiennych) num threads (wyrażenie całkowitoliczbowe)
14 OpenMP dyrektywa parallel klauzule Klauzula if (wyrażenie całkowitoliczbowe) służy do określenia, czy blok kodu powinien być wykonywany równolegle, tj. czy powinny być tworzone wątki robocze Klauzula num_threads (wyrażenie całkowitoliczbowe) określa liczbę wątków roboczych do utworzenia Klauzule private, shared, firstprivate, lastprivate, default są stosowane do określenia sposobu dostępu wątków do zmiennych współdzielonych szczegóły w dalszej części
15 Dyrektywy podziału obliczeń między wątkami 1 #pragma omp for 2 { } 1 #pragma omp sections 2 { } 1 #pragma omp single 2 { } Obliczenia są dzielone między wszystkimi wątkami (głównym + roboczymi) Wymienione dyrektywy muszą znaleźć się wewnątrz bloku równoległego (dyrektywa parallel) Brak bariery synchronizacyjnej na wejściu Niejawna bariera synchronizacyjna na wyjściu (można usunąć za pomocą klauzuli nowait) Wymienione dyrektywy nie uruchamiają nowych wątków wykorzystują już utworzone przy definicji bloku równoległego
16 Przykład Zadanie: zrównoleglić poniższy fragment programu: 1 for (i = 0; i < N; i++) { 2 a[i] = a[i] + b[i]; 3 } Wersja bez dodatkowej dyrektywy podziału pracy każdy wątek wykonuje obliczenia dla odrębnego fragmentu tablicy: 1 #pragma omp parallel 2 { 3 int id = omp_get_thread_num(); 4 int l_watkow = omp_get_num_threads(); 5 int istart = id * N / l_watkow; 6 int iend = (id+1) * N / l_watkow; 7 if (id == l_watkow-1) iend = N; 8 for(int i = istart; i < iend; i++) \{ 9 a[i] = a[i] + b[i]; 10 } 11 }
17 Dyrektywa for przykład 1. Obliczenia automatycznie dzielone równo między wątkami 1 #pragma omp parallel 2 #pragma omp for 3 for (i = 0; i < N; i++) { 4 a[i] = a[i] + b[i]; 5 } Wersja skrócona 1 #pragma omp parallel for 2 for (i = 0; i < N; i++) { 3 a[i] = a[i] + b[i]; 4 }
18 Dyrektywa for przykład 2. 1 #pragma omp parallel default (none) \ 2 shared (n,a,b,c,d) private(i) 3 { 4 #pragma omp for nowait 5 for (i=0; i<n-1; i++) 6 b[i] = (a[i] + a[i+1]) / 2; 7 #pragma omp for nowait 8 for (i=0; i<n; i++) 9 d[i] = 1.0/c[i]; 10 } // koniec bloku równoległego Pierwsza pętla Druga pętla Klauzula nowait usuwa niejawną barierę synchronizacyjną na końcu pętli for
19 Zrównoleglanie pętli W wielu programach większość obliczeń wykonywana jest w niewielkim fragmencie kodu reguła 90-10, czyli za 90% procent obliczeń odpowiada 10% kodu Często te 10% ma strukturę pętli, a więc na nich warto skupić się przy zrównoleglaniu programu W celu efektywnego zrównoleglenia potrzeba, aby kolejne iteracje pętli były od siebie niezależne
20 Zrównoleglanie pętli Wersja z zależnością między iteracjami 1 int i, j, A[N]; 2 j = 5; 3 for(i = 0; i < N; i++) { 4 j += 2; // wart. j zależy 5 // od poprz. iteracji 6 A[i] = compute(j); 7 } Wersja z usuniętą zależnością pomiędzy iteracjami 1 int i, j, A[N]; 2 #pragma omp parallel for 3 for (i = 0; i < N; i++) { 4 int j = 5 + 2*i; 5 A[i] = compute(j); 6 }
21 Redukcja Jak poradzić sobie z następującym przypadkiem? 1 double sr = 0, A[N]; 2 for(int i = 0; i < N; i++) 3 { 4 sr += A[i]; 5 } 6 if (N > 0) { 7 sr = sr / N; 8 } Nie da się łatwo usunąć zależności między iteracjami dla zmiennej sr Przedstawiona operacja sumowania należy do operacji redukcji Operacje redukcji występują bardzo często, dlatego opracowano dla nich odrębną klauzulę
22 Redukcja Klauzula dla operacji redukcji: reduction (operator : lista_zmiennych) Wewnątrz bloku równoległego, w którym wykonywana jest operacja redukcji: tworzona jest lokalna kopia każdej zmiennej podanej w lista_zmiennych i inicjowana wartością początkową (0 dla +, 1 dla * ) Kompilator zastępuje zmienną globalną w wyrażeniach redukcji jej odpowiednikami lokalnymi Przy wyjściu z bloku równoległego lokalne kopie zmiennej są łączone w jedną wartość zapisywaną w zmiennej globalnej
23 Redukcja 1 double sr = 0, A[N]; 2 #pragma omp parallel for reduction (+:sr) 3 for(int i = 0; i < N; i++) 4 { 5 sr += A[i]; 6 } 7 if (N > 0) { 8 sr = sr / N; 9 }
24 Redukcja operatory Operator Wartość początkowa & 0 0 ˆ 0 && 1 0 Wyrażenie redukcyjne wewnątrz pętli powinno mieć jedną z postaci: 1 x = x op expr (expr - to wyr. całkowitoliczbowe bez x) 2 x = expr op x (z wyjątkiem -) 3 x binop = expr 4 x x 6 x x
25 Podział pracy za pomocą sekcji Nieiteracyjny sposób podziału obliczeń na bloki, dla których obliczenia wykonywane są w sposób równoległy Każda sekcja wykonywana jest przez dokładnie jeden wątek Sekcje oznaczone są dyrektywami section i muszą być zagnieżdżone wewnątrz bloku oznaczonego dyrektywną sections Może zdarzyć się, że pojedynczy wątek wykona więcej, niż jedną sekcję po zakończeniu poprzedniej Przydział sekcji do poszczególnych wątków zależy od danej implementacji OpenMP Jeżeli jest więcej wątków, niż sekcji równoległych, to część z nich pozostanie bezczynna
26 Podział pracy za pomocą sekcji przykład 1 #pragma omp parallel default (none) 2 shared (n,a,b,c,d) private(i) 3 { 4 #pragma omp sections nowait 5 { 6 #pragma omp section 7 for (i=0; i<n-1; i++) 8 b[i] = (a[i] + a[i+1]) / 2; 9 #pragma omp section 10 for (i=0; i<n; i++) 11 d[i] = 1.0/c[i]; 12 } // <- synchronizacja wyłączona Wątek główny 13 } // <- niejawna synchronizacja Pierwsza sekcja Wątek roboczy Druga sekcja
27 Podział pracy za pomocą zadań przykład Od wersji 3.0 OpenMP udostępnia możliwość podziału pracy za pomocą zadań task Konstrukcja ta przypomina sekcje ( section ), jednak wykonanie sekcji ograniczone jest do bloku sections Wykonanie zadania może być odłożone w czasie, nie są również na stałe przypisane do jednego wątku 1 #include <cstdlib> 2 #include <cstdio> 3 using namespace std; 4 int main(int argc, char *argv[]) 5 { 6 #pragma omp parallel 7 { 8 #pragma omp task 9 { printf("hello "); } 10 #pragma omp task 11 { printf("world"); } 12 } 13 printf("\nthe end"); 14 return 0; 15 }
28 Sekcje a zadania 1...[ sections ] 2 Thread 0: < section 1 >---->* Thread 1: < section 2 >* Thread 2: >* * 6 Thread N-1: >* >[ task queue ] Thread 0: --< single >- v Thread 1: > < foo() > Thread 2: > < bar() > >[ task queue ] Thread 0: --< single >- v Thread 1: > < foo() >< bar() > Thread 2: > ---
29 Sekcje a zadania przykład Dwa funkcjonalnie równoważne programy 1 // sections #pragma omp sections 4 { 5 #pragma omp section 6 foo(); 7 #pragma omp section 8 bar(); 9 } // tasks #pragma omp single nowait 4 { 5 #pragma omp task 6 foo(); 7 #pragma omp task 8 bar(); 9 } 10 #pragma omp taskwait 11...
30 Synchronizacja Synchronizacja jest stosowana do: wymuszenia określonej kolejności wykonania obliczeń wewnątrz bloku równoległego przez poszczególne wątki zabezpieczenia dostępu do sekcji krytycznych, w których wykonywane są operacje na współdzielonych zmiennych Dostępne w OpenMP mechanizmy synchronizacyjne można podzielić na: Bariery niejawne wstawiane automatycznie np. na zakończenie bloku równoległego dla pętli for Bariery jawne wysokopoziomowe definiowane za pomocą klauzul: critical atomic barrier ordered Bariery jawne niskopoziomowe: flush zamki (ang. locks)
31 Bariery niejawne Zakres wykonywania bariery bezczynność 1 #pragma omp for 2 for (i=0; i<n; i++) { 3 a[i] = c[i] + b[i]; 4 } // niejawna bariera 5 #pragma omp for 6 for (i=0; i<n; i++) { 7 d[i] = a[i] + b[i]; 8 } // niejawna bariera Barierę niejawną można wyłączyć klauzulą nowait pod warunkiem, że istnieje gwarancja identycznego podziału pracy między wątkami w obu pętlach
32 Synchronizacja klauzula critical Zapewnia wzajemne wykluczanie wykonania sekcji krytycznej 1 float res; 2 #pragma omp parallel 3 { 4 float b; 5 int id = omp_get_thread_num(); 6 int nthreads = omp_get_num_threads(); 7 for(int i = id; i < N; i+=nthreads) { 8 b = compute(i); 9 #pragma omp critical 10 consume (b, res); // tylko jeden wątek wykonuje compute, 11 // pozostałe czekają na swoją kolej 12 } 13 }
33 Synchronizacja klauzula atomic Zapewnia wzajemne wykluczanie, ale tylko dla operacji odczytu / zapisu pamięci double X = 0; // zmienna współdzielona 1 #pragma omp parallel 2 { 3 double tmp, a; 4 a = compute(); 5 tmp = compute_sth_else(a); 6 7 #pragma omp atomic 8 X += tmp; 9 } Zapobiega wyścigom w dostępie do współdzielonych danych (ang. data races).
34 Synchronizacja klauzula barrier Zapewnia jawny, wymuszony i wspólny dla wszystkich wątków punkt synchronizacji 1 #pragma omp parallel shared (A, B, C) private(id) 2 { 3 id=omp_get_thread_num(); 4 A[id] = big_calc1(id); 5 #pragma omp barrier 6 #pragma omp for 7 for(i=0;i<n;i++) { 8 C[i]=big_calc3(i,A); 9 } // <- niejawna bariera dla klauzuli for 10 #pragma omp for nowait 11 for(i=0;i<n;i++){ 12 B[i]=big_calc2(C, i); 13 } // <- bariera usunięta przez nowait 14 A[id] = big_calc4(id); 15 } // <- niejawna bariera dla bloku równoległego
35 Klauzula master Stosowana do wymuszenia wykonania danego bloku tylko przez wątek główny Pozostałe wątki pomijają blok oznaczony tą klauzulą bez konieczności synchronizacji Nie wymaga pobierania, ani sprawdzania identyfikatora wątku 1 #pragma omp parallel 2 { 3 do_many_things(); 4 #pragma omp master 5 { 6 get_new_data(); 7 } 8 #pragma omp barrier 9 do_many_other_things(); 10 }
36 Klauzula single Stosowana do wymuszenia wykonania wskazanego bloku tylko przez jeden wątek (niekoniecznie główny) Przydatna w przypadku konieczności wykonania operacji I/O Pozostałe wątki pomijają instrukcje w bloku i oczekują na jego końcu niejawna bariera synchronizacyjna, którą można usunąć przez dodanie klauzuli nowait 1 #pragma omp parallel 2 { 3 do_many_things(); 4 #pragma omp single 5 { 6 get_new_data(); 7 } 8 #pragma omp barrier 9 do_many_other_things(); 10 }
37 Klauzula ordered Wymusza wykonanie oznaczonej instrukcji/bloku wewnątrz pętli dokładnie w takiej kolejności w jakiej byłyby wykonane w programie sekwencyjnym W danym momencie tylko jeden wątek może wykonywać oznaczoną instrukcję, pozostałe czekają Pętla zawierająca blok z klauzulą ordered musi również mieć tę klauzulę 1 #pragma omp parallel private (tmp) 2 #pragma omp for ordered reduction(+:res) 3 for (i=0;i<n;i++){ 4 tmp = compute(i); 5 #pragma ordered 6 res += consume(tmp); 7 }
38 Współdzielenie danych OpenMP to interfejs do tworzenia programów równoległych dla modelu ze współdzieloną pamięcią większość danych jest współdzielona przez wszystkie wątki domyślnie OpenMP stosuje złagodzony model spójności pamięci (ang. relaxed consistency) Zmienne globalne są współdzielone przez wątki zmienne związane z obsługą plików dynamicznie przydzielona pamięć new, malloc inne, np. stan generatora liczb losowych dla funkcji rand() (!) Nie są współdzielone: zmienne automatyczne tworzone na stosie wewnątrz bloków równoległych zmienne tworzone na stosie przez wywoływane w blokach równoległych funkcjach
39 Współdzielenie danych przykład 1 double A[10]; 2 int main() { 3 int index[10]; 4 #pragma omp parallel 5 work(index); 6 printf("%d ", index[0]); 7 } 1 extern double A[10]; 2 void work(int *index) { 3 double temp[10]; 4 static int count; } A, Zmienne index index and count oraz count are są współdzielone przez shared by all threads. wątki Każdy wątek ma własną temp kopię is tablicy local temp to each thread A, index, count temp temp A, index, count temp
40 Współdzielenie danych klauzule Można jawnie określić sposób dostępu przez wątki do zmiennych za pomocą klauzul: shared(zmienna1, zmienna2,...) wyszczególnione zmienne są współdzielone między wątkami private(zmienna1, zmienna2,...) podane zmienne są prywatne Domyślnie wszystkie zmienne są współdzielone (ang. shared) Można nadpisać to za pomocą klauzuli default default(shared) wszystkie zmienne są domyślnie współdzielone default(none) żadna zmienna nie jest domyślnie współdzielona dobra praktyka programistyczna, ponieważ musimy jawnie określić listę zmiennych współdzielonych oraz prywatnych wiemy, które zmienne są prywatne, a które mogą być modyfikowane przez wszystkie wątki łatwiej zauważyć potencjalne źródła wyścigów
41 Współdzielenie danych klauzula private private(x) każdy wątek ma własną prywatną kopię zmiennej x wartość początkowa zmiennej prywatnej jest domyślnie nieokreślona 1 void wrong() { 2 int tmp = 0; 3 #pragma omp parallel for private(tmp) 4 for (int j = 0; j < 1000; ++j) { 5 tmp += j; // <- zmienna tmp nie została zainicjowana 6 } // <- koniec bloku równoległego 7 8 printf("%d", tmp); // <- wart. tmp jest w 9 // tym miejscu nieokreślona 10 }
42 Współdzielenie danych klauzula firstprivate Dzięki klauzuli firstprivate(x) możemy określić, że każda prywatna zmienna x będzie miała wartość początkową jak zmienna (jej pierwowzór) w wątku głównym 1 void wrong() { 2 int tmp = 3; 3 #pragma omp parallel for firstprivate(tmp) 4 for (int j = 0; j < 1000; ++j) { 5 tmp += j; // <- zmienna tmp ma początkową wart. 3 6 } // <- koniec bloku równoległego 7 printf("%d", tmp); // <- wart. tmp jest w 8 // tym miejscu nieokreślona 9 }
43 Współdzielenie danych klauzula lastprivate Dzięki klauzuli lastprivate(x) możemy określić, że zmienna x po zakończeniu pętli będzie miała wartość taką jak wartość zmiennej prywatnej w ostatniej iteracji pętli Działa, oczywiście, tylko dla dyrektywy omp for 1 int x = 0; 2 const int N = omp_get_max_threads(); 3 #pragma omp parallel for firstprivate(x) lastprivate(x) 4 for (int i = 0; i < N; ++i) { 5 int id = omp_get_thread_num(); 6 x += id; 7 } 8 printf("final x: %d", x); // <- x ma wartość N-1
44 Współdzielenie danych klauzula threadprivate Umożliwia definiowanie zmiennych globalnych, dla których każdy wątek będzie miał własną kopię Różni się od klauzul private, firstprivate, lastprivate: klauzula private powoduje maskowanie zmiennej globalnej zmienną prywatną klauzula threadprivate powoduje, że nie ma jednej globalnej zmiennej, ale każdy wątek ma własną, tylko jedną i dostępną w każdym bloku równoległym 1 int counter = 0; 2 #pragma omp threadprivate(counter) // każdy wątek ma własny 3 // licznik (counter) 4 int increment_counter() 5 { 6 counter++; 7 return (counter); 8 }
45 Dyrektywna copyprivate Dyrektywa copyprivate służy do rozgłaszania (ang. broadcast) wartości zmiennych lokalnych wątku, który wykonuje sekcję single do pozostałych wątków 1 #include <omp.h> 2 void wczytaj_parametry (int, int); 3 void oblicz(int, int); 4 void main() 5 { 6 int rozmiar, dokladnosc; 7 #pragma omp parallel private (rozmiar, dokladnosc) 8 { 9 #pragma omp single copyprivate (rozmiar, dokladnosc) 10 wczytaj_parametry(rozmiar, dokladnosc); // teraz zmienne rozmiar i dokladnosc pozostałych 13 // wątków mają takie same (pobrane) wartości 14 oblicz(rozmiar, dokladnosc); 15 } 16 }
46 Współdzielenie danych podsumowanie 1 int A = 1, B = 1, C = 1, D = 2; 2 #pragma omp parallel default(none) private(b) firstprivate(c) 3 { blok równoległy } Wewnątrz bloku równoległego: Zmienna A jest dzielona przez wszystkie wątki, wartość 1 Zmienne B i C są prywatne każdy wątek ma własną kopię B i C Wartość początkowa B jest nieokreślona Wartość początkowa C wynosi 1 Zmienna D jest niedostępna wewnątrz bloku równoległego Po zakończeniu wykonania bloku równoległego: Wartości B i C są nieokreślone
47 Komunikacja między wątkami W celu przekazania aktualnej wartości zmiennej współdzielonej między wątkami można wykorzystać dyrektywę flush Dyrektywa flush określa punkt, w którym istnieje gwarancja, że wszystkie wątki będą miały aktualny i spójny widok pamięci współdzielonej Scenariusz: Wątek 1. zapisuje wartość zmiennej Wątek 1. wykonuje dyrektywę flush dla tej zmiennej Wątek 2. wykonuje dyrektywę flush dla tej zmiennej Wątek 2. odczytuje aktualną wartość zmiennej
48 Dyrektywa flush przykład 1 int data, flag = 0; 2 #pragma omp parallel sections num_threads(2) 3 { 4 #pragma omp section 5 { 6 read(&data); 7 #pragma omp flush(data) 8 flag = 1; 9 #pragma omp flush(flag) 10 // } 12 #pragma omp section 13 { 14 while (!flag) { 15 #pragma omp flush(flag) 16 } 17 #pragma omp flush(data) 18 process(&data); 19 } 20 }
49 Pomiar czasu wykonania programu OpenMP udostępnia funkcję double omp get wtime(), która zwraca liczbę sekund od pewnego ustalonego momentu w przeszłości Rozdzielczość pomiaru można pobrać za pomocą funkcji double omp get wtick(), jest to najkrótszy mierzalny okres czasu 1 int main() { 2 double start = omp_get_wtime( ); 3 oblicz_cos(); 4 double end = omp_get_wtime( ); 5 printf("start = %.16g end = %.16g diff = %.16g", 6 start, end, end - start); 7 }
Przetwarzanie Równoległe i Rozproszone
POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI I TECHNOLOGII INFORMACYJNYCH Przetwarzanie Równoległe i Rozproszone www.pk.edu.pl/~zk/prir_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl
Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI
Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI Patryk Mach Uniwersytet Jagielloński, Instytut Fizyki im. Mariana Smoluchowskiego OpenMP (Open Multi Processing) zbiór dyrektyw kompilatora, funkcji
Programowanie systemów z pamięcią wspólną specyfikacja OpenMP. Krzysztof Banaś Obliczenia równoległe 1
Programowanie systemów z pamięcią wspólną specyfikacja OpenMP Krzysztof Banaś Obliczenia równoległe 1 OpenMP Przenośność oprogramowania Model SPMD Szczegółowe wersje (bindings) dla różnych języków programowania
Wsparcie dla OpenMP w kompilatorze GNU GCC Krzysztof Lamorski Katedra Informatyki, PWSZ Chełm
Wsparcie dla OpenMP w kompilatorze GNU GCC Krzysztof Lamorski Katedra Informatyki, PWSZ Chełm Streszczenie Tematem pracy jest standard OpenMP pozwalający na programowanie współbieŝne w systemach komputerowych
Programowanie współbieżne OpenMP wybrane wydajność. Rafał Skinderowicz
Programowanie współbieżne OpenMP wybrane wydajność Rafał Skinderowicz OpenMP niskopoziomowa synchronizacja OpenMP udostępnia mechanizm zamków (lock) znany z typowych bibliotek programowania współbieżnego
Jak ujarzmić hydrę czyli programowanie równoległe w Javie. dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski
Jak ujarzmić hydrę czyli programowanie równoległe w Javie dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski Prawo Moore a Ekonomicznie optymalna liczba tranzystorów w układzie scalonym zwiększa się
Wyklad 11 Języki programowania równoległego
Wyklad 11 Języki programowania równoległego Części wykładu: 1. Środowisko programu równoległego - procesy i wątki 2. Podstawowe problemy języków programowania równoległego 3. Języki programowania w środowisku
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ę
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,
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
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,
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
Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI
Komputerowe Obliczenia Równoległe: Wstęp do OpenMP i MPI Patryk Mach Uniwersytet Jagielloński, Instytut Fizyki im. Mariana Smoluchowskiego Zadania w OpenMP technika zrównoleglania bardziej złożonch problemów,
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
Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego
Wątki Wątek - definicja Ciąg instrukcji (podprogram) który może być wykonywane współbieżnie (równolegle) z innymi programami, Wątki działają w ramach tego samego procesu Współdzielą dane (mogą operować
I - 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
Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego
Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego Mariusz Uchroński 3 grudnia 2010 Plan prezentacji 1. Wprowadzenie 2.
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
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,
Microsoft IT Academy kurs programowania
Microsoft IT Academy kurs programowania Podstawy języka C# Maciej Hawryluk Język C# Język zarządzany (managed language) Kompilacja do języka pośredniego (Intermediate Language) Kompilacja do kodu maszynowego
DYNAMICZNE PRZYDZIELANIE PAMIECI
DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne
Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Wstęp do programowania 2
Wstęp do programowania 2 wykład 10 Zadania Agata Półrola Wydział Matematyki UŁ 2005/2006 http://www.math.uni.lodz.pl/~polrola Współbieżność dotychczasowe programy wykonywały akcje sekwencyjnie Ada umożliwia
HPC na biurku. Wojciech De bski
na biurku Wojciech De bski 22.01.2015 - co to jest? High Performance Computing most generally refers to the practice of aggregating computing power in a way that delivers much higher performance than one
Programowanie procesorów graficznych GPGPU
Programowanie procesorów graficznych GPGPU 1 GPGPU Historia: lata 80 te popularyzacja systemów i programów z graficznym interfejsem specjalistyczne układy do przetwarzania grafiki 2D lata 90 te standaryzacja
OpenMP środowisko programowania komputerów równoległych ze wspólną pamięcią
Pro Dialog 15 (2003), 107 121 Wydawnictwo NAKOM Poznań OpenMP środowisko programowania komputerów równoległych ze wspólną pamięcią Monika DEMICHOWICZ, Paweł MAZUR Politechnika Wrocławska, Wydział Informatyki
Języki i metodyka programowania. Wprowadzenie do języka C
Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia
Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!
Programowanie I O czym będziemy mówili Podstawy programowania w językach proceduralnym ANSI C obiektowym Java Uwaga! podobieństwa w podstawowej strukturze składniowej (zmienne, operatory, instrukcje sterujące...)
Podstawy Programowania Podstawowa składnia języka C++
Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include
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
Podstawy programowania komputerów
Podstawy programowania komputerów Wykład 10: Sterowanie pamięcią w C Pamięć na stosie!każdy program napisany w języku C ma dostęp do dwóch obszarów pamięci - stosu i sterty, w których może być przechowywana
Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej
Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok
// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include #include
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
Język ludzki kod maszynowy
Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza
Pytania sprawdzające wiedzę z programowania C++
Pytania sprawdzające wiedzę z programowania C++ Wstęp 1. Zaprezentuj mechanikę tworzenia programu napisanego w języku C++. 2. Co to jest kompilacja? 3. Co to jest konsolidacja? 4. Co to jest kod wykonywalny?
Model pamięci. Rafał Skinderowicz
Model pamięci Rafał Skinderowicz Czym jest model pamięci Model pamięci dotyczy programów współbieżnych W programie współbieżnym może się zdarzyć, że dany wątek nie będzie widział od razu wartości zmiennej
Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1
Programowanie procesorów graficznych GPGPU Krzysztof Banaś Obliczenia równoległe 1 OpenCL projektowanie kerneli Przypomnienie: kernel program realizowany przez urządzenie OpenCL wątek (work item) rdzeń
Programowanie Proceduralne
Programowanie Proceduralne Makefile Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 14 Co to jest Makefile Makefile jest plikiem reguł dla programu make. Wykorzystywany jest
4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24
Wymagania proceduralnych języków wysokiego poziomu ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH modele programowe procesorów ASK MP.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad.
znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.
Wykład 3 ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors. Waldi Ravens J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 75 / 146 deklaracje zmiennych instrukcja podstawienia
Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik
Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor
PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6
PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6 TEMAT: Programowanie w języku C/C++: instrukcje iteracyjne for, while, do while Ogólna postać instrukcji for for (wyr1; wyr2; wyr3) Instrukcja for twory pętlę działającą
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
Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.
Przygotować program tworzący tablicę dwuwymiarową zawierającą zestawy 10 2, 10 4, 10 6 liczb losowych zmiennoprzecinkowych. Korzystając z funkcji bibliotecznych uporządkować zawartość każdego (a) wiersza
Nowoczesne technologie przetwarzania informacji
Projekt Nowe metody nauczania w matematyce Nr POKL.09.04.00-14-133/11 Nowoczesne technologie przetwarzania informacji Mgr Maciej Cytowski (ICM UW) Lekcja 2: Podstawowe mechanizmy programowania równoległego
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:
1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4
Spis treści 1 Wątki 1 2 Tworzenie wątków 1 3 Synchronizacja 3 4 Dodatki 3 5 Algorytmy sortowania 4 6 Klasa Runnable 4 Temat: Wątki Czym są wątki. Grafika. Proste animacje. Małe podsumowanie materiału.
Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak
Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego
Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.
Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice
Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB
Wykład 3 Procesy i wątki Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Pojęcie procesu Program = plik wykonywalny na dysku Proces = uruchomiony i wykonywany program w pamięci
3 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 3 1/8 Język C Instrukcja laboratoryjna Temat: Instrukcje warunkowe, pętle. 3 Przygotował: mgr inż. Maciej Lasota 1) Instrukcje warunkowe. Instrukcje warunkowe pozwalają zdefiniować warianty
Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).
Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154
MMX i SSE. Zbigniew Koza. Wydział Fizyki i Astronomii Uniwersytet Wrocławski. Wrocław, 10 marca 2011. Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16
MMX i SSE Zbigniew Koza Wydział Fizyki i Astronomii Uniwersytet Wrocławski Wrocław, 10 marca 2011 Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16 Spis treści Spis treści 1 Wstęp Zbigniew Koza (WFiA UWr) MMX
Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna
Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,
Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)
Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie
Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++
Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka
Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej. Krzysztof Banaś Obliczenia równoległe 1
Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej Krzysztof Banaś Obliczenia równoległe 1 Model równoległości danych Model SPMD (pierwotnie dla maszyn SIMD) Zrównoleglenie
Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz
Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania
Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika
Wyklad 6 Typy i zmienne: wskaznikowe, referencyjne Funkcje deklaracja, definicja. Zasieg deklaracji i widocznosc zmiennych Przekazywanie parametrów przez wartosc, referencje i wskaznik Przekazywanie wyniku
Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003
Obliczenia równoległe i rozproszone w JAVIE Michał Kozłowski 30 listopada 2003 Wątki w JAVIE Reprezentacja wątków jako obiektów Uruchamianie i zatrzymywanie wątków Realizacja wątków Ograniczenia Mechanizmy
DECLARE typ [( )] [ NOT NULL ] [ { := DEFAULT } ];
Braki w SQL obsługi zdarzeń i sytuacji wyjątkowych funkcji i procedur użytkownika definiowania złożonych ograniczeń integralnościowych Proceduralny SQL Transact- SQL używany przez Microsoft SQL Server
Wprowadzenie do programowania w języku C
Wprowadzenie do programowania w języku C Część trzecia Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów
Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).
Wprowadzenie w dziedziczenie Klasa D dziedziczy klasę B: B klasa bazowa D klasa pochodna Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class). Najpierw jest tworzona klasa bazowa,
Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1
Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie
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 w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej. Krzysztof Banaś Obliczenia równoległe 1
Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej Krzysztof Banaś Obliczenia równoległe 1 Model równoległości danych Model SPMD (pierwotnie dla maszyn SIMD) Zrównoleglenie
Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16
M. Trzebiński C++ 1/16 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IFJ PAN 6lipca2015 Uruchomienie maszyny w CC1 M. Trzebiński C++ 2/16
Programowanie Równoległe wykład, 21.01.2013. CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej
Programowanie Równoległe wykład, 21.01.2013 CUDA, przykłady praktyczne 1 Maciej Matyka Instytut Fizyki Teoretycznej Motywacja l CPU vs GPU (anims) Plan CUDA w praktyce Wykład 1: CUDA w praktyce l aplikacja
15. Funkcje i procedury składowane PL/SQL
15. Funkcje i procedury składowane PLSQL 15.1. SQL i PLSQL (Structured Query Language - SQL) Język zapytań strukturalnych SQL jest zbiorem poleceń, za pomocą których programy i uŝytkownicy uzyskują dostęp
1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami
1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.
Adam Kotynia, Łukasz Kowalczyk
Adam Kotynia, Łukasz Kowalczyk Dynamiczna alokacja pamięci Alokacja pamięci oraz dezalokacja pamięci jest to odpowiednio przydział i zwolnienie ciągłego obszaru pamięci. Po uruchomieniu, proces (program)
msgbox("akcja: Początek, argument: " + argument.tostring()); Thread.Sleep(1000); //opóźnienie msgbox("akcja: Koniec"); return DateTime.Now.
Programowanie asynchroniczne. Operator await i modyfikator async Język C# 5.0 wyposażony został w nowy operator await, ułatwiający synchronizację dodatkowych zadań uruchomionych przez użytkownika. Poniżej
Programowanie 2. Język C++. Wykład 1.
1.1 Wstęp... 1 1.2 Obiekty stałe... 3 1.3 Obiekty statyczne... 4 1.4 Wskaźniki... 5 1.5 Referencje... 8 1.6 Wskaźniki do wskaźników... 11 1.7 Definiowanie własnych typów danych, polecenie typedef... 17
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++)
Projektowanie klas c.d. Projektowanie klas przykład
Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej
Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz
Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz Zagadnienia 1. Delegaty wiązane, właściwości indeksowane 2. Delegaty niewiązane 3. Nowa wersja kalkulatora, delegaty
Temat zajęć: Tworzenie i obsługa wątków.
Temat zajęć: Tworzenie i obsługa wątków. Czas realizacji zajęć: 180 min. Zakres materiału, jaki zostanie zrealizowany podczas zajęć: Tworzenie wątków, przekazywanie parametrów do funkcji wątków i pobieranie
Tesla. Architektura Fermi
Tesla Architektura Fermi Tesla Tesla jest to General Purpose GPU (GPGPU), GPU ogólnego przeznaczenia Obliczenia dotychczas wykonywane na CPU przenoszone są na GPU Możliwości jakie daje GPU dla grafiki
Rozdział 4 KLASY, OBIEKTY, METODY
Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej
Wykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C
Grzegorz Cygan Wstęp do programowania mikrosterowników w języku C Mikrosterownik Inne nazwy: Microcontroler (z języka angielskiego) Ta nazwa jest powszechnie używana w Polsce. Mikrokomputer jednoukładowy
Metody Metody, parametry, zwracanie wartości
Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca
ECLIPSE wnioski z dwóch pierwszych laboratoriów
PODSTAWY PROGRAMOWANIA 3-4 WYKŁAD 22-10-2015 ECLIPSE wnioski z dwóch pierwszych laboratoriów Dodanie pliku i konfiguracji startowej (każdy uruchamiany program powinien mieć własna konfigurację startową)
Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Operacje dyskowe - zapis do pliku #include #include
Kompilator języka C na procesor 8051 RC51 implementacja
Kompilator języka C na procesor 8051 RC51 implementacja Implementowane typy danych bit 1 bit char lub char signed 8 bitów char unsigned 8 bitów int lub signed int 16 bitów unsigned int 16 bitów long lub
Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową
Plan 1 Uwagi na temat wydajności CPython a 2 Podstawowe techniki poprawiające wydajność obliczeniową 3 Podstawowe techniki poprawiające zużycie pamięci krótkie opisy modułów 1 array - jak oszczędzić na
Ćwiczenia laboratoryjne. Oprogramowanie i badanie prostych metod sortowania w tablicach
Ćwiczenia laboratoryjne Oprogramowanie i badanie prostych metod sortowania w tablicach Sprawozdanie Na każdym zajęciu laboratoryjnym sporządza się za pomocą edytora Word sprawozdanie. Bazowa zawartość
Jak napisać program obliczający pola powierzchni różnych figur płaskich?
Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy
Programowanie w Javie
Programowanie w Javie Andrzej Czajkowski Lista nr 0 Debugger w Javie Celem ćwiczenia jest poznanie podstawowych funkcji narzędzia debugera (odpluskwiacz) w środowisku Eclipse. Po ukończeniu ćwiczenia student
Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1
Programowanie równoległe i rozproszone Monitory i zmienne warunku Krzysztof Banaś Programowanie równoległe i rozproszone 1 Problemy współbieżności Problem producentów i konsumentów: jedna grupa procesów
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
Jacek Naruniec. lato 2014, Politechnika Warszawska, Wydział Elektroniki i Technik Informacyjnych
lato 2014,, Wydział Elektroniki i Technik Informacyjnych erówka Projekt Egzamin OpenMP (czyli Open Multiprocessing) umożliwia tworzenie aplikacji wielowątkowych bez konieczności jawnego tworzenia wątków
Programowanie strukturalne i obiektowe
Programowanie strukturalne i obiektowe Język C część I Opracował: Grzegorz Flesik Literatura: A. Majczak, Programowanie strukturalne i obiektowe, Helion, Gliwice 2010 P. Domka, M. Łokińska, Programowanie
JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak
JAVA Wstęp do programowania w języku obiektowym Bibliografia: JAVA Szkoła programowania, D. Trajkowska Ćwiczenia praktyczne JAVA. Wydanie III,M. Lis Platforma JSE: Opracował: Andrzej Nowak JSE (Java Standard
Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java
Aplikacje Internetowe Podstawy języka Java Najprostsza aplikacja class Hello { public static void main(string[] args) { System.out.println("Hello World!"); Komponenty Javy JRE Java Runtime Environment
Katedra Elektrotechniki Teoretycznej i Informatyki. sem. II - wykład 6. Dr hab. inż. M. Czyżak
Katedra Elektrotechniki Teoretycznej i Informatyki sem. II - wykład 6 Dr hab. inż. M. Czyżak Ogólna budowa programu w języku C W języku C program składa się z jednego lub większej liczby segmentów kodu
Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu
Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1C300 016 (studia stacjonarne)
Języki skryptowe w programie Plans
Języki skryptowe w programie Plans Warsztaty uŝytkowników programu PLANS Kościelisko 2010 Zalety skryptów Automatyzacja powtarzających się czynności Rozszerzenie moŝliwości programu Budowa własnych algorytmów