CUDA PROGRAMOWANIE PIERWSZE PROSTE PRZYKŁADY RÓWNOLEGŁE. Michał Bieńkowski Katarzyna Lewenda

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

Download "CUDA PROGRAMOWANIE PIERWSZE PROSTE PRZYKŁADY RÓWNOLEGŁE. Michał Bieńkowski Katarzyna Lewenda"

Transkrypt

1 PROGRAMOWANIE RÓWNOLEGŁE PIERWSZE PROSTE PRZYKŁADY Michał Bieńkowski Katarzyna Lewenda

2 Programowanie równoległe Dodawanie wektorów SPIS TREŚCI Fraktale Podsumowanie Ćwiczenia praktyczne

3 Czym jest? PROGRAMOWANIE RÓWNOLEGŁE Prawo Amdahla Prawo Gustafsona Porównanie Przykładowe zadania

4 Programowanie równoległe Czym jest? Obliczenia równoległe to takie, w których wiele operacji obliczeniowych wykonuje się jednocześnie w ramach dostępnych jednostek obliczeniowych (procesorów, rdzeni, węzłów obliczeniowych). Bardzo często duże problemy obliczeniowe mogą byd podzielone na mniejsze podproblemy, które mogą wykonywad się jednocześnie. Proces modyfikacji istniejącego kodu tak, aby można go było uruchomid równolegle nazywamy zrównoleglaniem kodu.

5 Czym jest? PROGRAMOWANIE RÓWNOLEGŁE Prawo Amdahla Prawo Gustafsona Porównanie Przykładowe zadania

6 Programowanie równoległe Prawo Amdahla Zakłada, że duży problem składa się z takich części, które udaje się zrównoleglid i z takich, dla których nie jest to możliwe. Fragmenty, które nie mogą byd zrównoleglone ograniczają możliwe do osiągnięcia przyspieszenie całego procesu. Często wykorzystywane w przypadku prowadzenia obliczeo równoległych do przewidzenia teoretycznego maksymalnego wzrostu szybkości obliczeo przy użyciu wielu procesorów.

7 Programowanie równoległe Prawo Amdahla Przyspieszenie algorytmu jest równe: S n = T 1 T n = 1 F + 1 F n Gdzie: T czas wykonania algorytmu, F udział części nierównoległej, n liczba procesorów.

8 Programowanie równoległe Prawo Amdahla Przykład: 1 h 1 h 2 h 1 h 1 h 1 h 1 h

9 Programowanie równoległe Prawo Amdahla Dane: F = 50% = 0,5 n = 2 Rozwiązanie: S 2 = = = = = 4 3 1,3 Odpowiedź: Teoretyczne przyspieszenie algorytmu wynosi 1,3.

10 Czym jest? PROGRAMOWANIE RÓWNOLEGŁE Prawo Amdahla Prawo Gustafsona Porównanie Przykładowe zadania

11 Programowanie równoległe Prawo Gustafsona Zakłada, że każdy wystarczająco duży problem może byd efektywnie zrównoleglony. Odnosi się do wad prawa Amdahla, które nie jest skalowalne do tego stopnia, aby brad pod uwagę dostępnośd mocy obliczeniowej przy rozrastaniu się maszyny. Usuwa problem ustalonego rozmiaru problemu lub ustalonego ładowania obliczeo na równoległych procesorach. Zamiast tego proponuje koncepcje ustalonego czasu, która prowadzi do skalowanego przyspieszenia.

12 Programowanie równoległe Prawo Gustafsona Przyspieszenie algorytmu jest równe: S P = P α P 1 Gdzie: P ilośd procesorów, S przyspieszenie, α częśd programu, której nie da się zrównoleglid.

13 Programowanie równoległe Prawo Gustafsona Przykład: 1 h 1 h 4 h 2 h 2 h 1 h 1 h

14 Programowanie równoległe Prawo Gustafsona Dane: P = 2 α 0,3 Rozwiązanie: S 2 = 2 0,3 2 1 = 2 0,3 = 1,7 Odpowiedź: Teoretyczne przyspieszenie algorytmu wynosi 1,7.

15 Czym jest? PROGRAMOWANIE RÓWNOLEGŁE Prawo Amdahla Prawo Gustafsona Porównanie Przykładowe zadania

16 Programowanie równoległe Porównanie Prawo Amdahla jedna ciężarówka jest w stanie przewieźd z punktu A do B jedną tonę towaru w ciągu 9 godzin. Pomoc dodatkowych ośmiu ciężarówek nie spowoduje skrócenia tego czasu do jednej godziny. Prawo Gustafsona 9 ciężarówek jest w stanie przewieźd z punktu A do punktu B 9 ton towaru w ciągu 9 godzin.

17 Czym jest? PROGRAMOWANIE RÓWNOLEGŁE Prawo Amdahla Prawo Gustafsona Porównanie Przykładowe zadania

18 Programowanie równoległe Przykładowe zadania Porównywanie danych, Obliczanie liczby π metodą Monte Carlo, Operacje macierzowe, Algorytm sortowania QuickSort, Rozwiązywanie układów równao liniowych, Obliczanie sieci neuronowych.

19 Programowanie równoległe Dodawanie wektorów SPIS TREŚCI Fraktale Podsumowanie Ćwiczenia praktyczne

20 Teoria DODAWANIE WEKTORÓW C/C++ C Porównanie Podsumowanie

21 Dodawanie wektorów Teoria Dodawanie wektorów polega na zwykłym dodawaniu elementów znajdujących się na odpowiadających sobie pozycjach. Wyniki zapisywane są w trzeciej tablicy =

22 Teoria DODAWANIE WEKTORÓW C/C++ C Porównanie Podsumowanie

23 Dodawanie wektorów C/C++ int main() int *a, *b, *c; int size = N * sizeof(int); a = (int *)malloc(size); b = (int *)malloc(size); c = (int *)malloc(size); for (int i=0; i<n; i++) a[i] = rand() % 100; b[i] = rand() % 100; void add(int *a, int *b, int *c, int n) int index = 0; while(index < N) c[index] = a[index] + b[index]; index++; add(a, b, c); for (int i=0; i<n; i++) printf("%d + %d = %d\n", a[i], b[i], c[i]); free(a); free(b); free(c); return 0;

24 Dodawanie wektorów C/C++ Zrównoleglanie obecnej funkcji add() wydaje się bardzo proste. Wystarczy: Zmienid wartośd inkrementacji, Zainicjowad wartośd index odpowiednio dla każdego procesora. Rdzeo 1 void add(int *a, int *b, int *c) int index = 0; Rdzeo 2 void add(int *a, int *b, int *c) int index = 1; while(index < N) c[index] = a[index] + b[index]; index += 2; while(index < N) c[index] = a[index] + b[index]; index += 2;

25 Dodawanie wektorów C/C++ Ostatecznie możemy wprowadzid dodatkowe argumenty do funkcji add(): void add(int *a, int *b, int *c, int id, int cores) int index = id; while(index < N) c[index] = a[index] + b[index]; index += cores; Niestety o ile zmiana kodu funkcji add() jest prosta to samo uruchomienie tego kodu, aby działał zgodnie z założeniami wymagania napisania sporej ilości dodatkowego kodu.

26 Teoria DODAWANIE WEKTORÓW C/C++ C Porównanie Podsumowanie

27 Dodawanie wektorów C Hello world Jest to pierwszy program C więc napiszmy go od podstaw: int main() printf("hello world\n"); return 0; Standardowy kod języka C wykonuje się na procesorze gospodarza (host). Kompilator NVIDIA może byd użyty do kompilowania programów bez kodu urządzenia (device).

28 Dodawanie wektorów C Hello world z kodem urządzenia Dopiszmy kod urządzenia oraz jego najprostsze wywołanie: int main() kernel<<< 1, 1 >>>(); printf("hello world\n"); global void kernel() // Brak instrukcji return 0; Słowo kluczowe global wskazuje funkcję, która: Uruchamia się na urządzeniu (device), Wywoływana jest z kodu gospodarza (host). W potrójnych nawiasach występują dodatkowe opcje wywołania funkcji. * Argumenty znajdujące się w <<<( )>>> zostaną opisane w dalszej części prezentacji.

29 Dodawanie wektorów C Hello world z kodem urządzenia dodający dwie liczby int main() int a, b, c; int *d_a, *d_b, *d_c; int size = sizeof(int); global void add(int *a, int *b, int *c) *c = *a + *b; cudamalloc((void **)&d_a, size); cudamalloc((void **)&d_b, size); cudamalloc((void **)&d_c, size); a = 5; b = 3; cudamemcpy(d_a, &a, size, cudamemcpyhosttodevice); cudamemcpy(d_b, &b, size, cudamemcpyhosttodevice); add<<< 1, 1 >>>(d_a, d_b, d_c); cudamemcpy(&c, d_c, size, cudamemcpydevicetohost); printf("%d + %d = %d\n", a, b, c); cudafree(d_a); cudafree(d_b); cudafree(d_c); return 0;

30 Dodawanie wektorów C Równoległe dodawanie wektorów z wykorzystaniem bloków Chcąc uruchomid kod równoległe zmieniamy argumenty wywołania funkcji: add<<< 1, 1 >>>(d_a, d_b, d_c); add<<< N, 1 >>>(d_a, d_b, d_c); Zmiana pierwszego argumentu z wartości 1 na N spowoduje wywołanie funkcji add() N razy. Korzystając z funkcji add() wywoływanej równolegle możemy dodad do siebie dwa wektory. Każde równoległe wywołanie funkcji add() jest określane jako blok. Zbiór wszystkich bloków określamy jako siatkę. Każda wywołana funkcja add() może odczytad numer swojego bloku używając zmiennej blockidx.x.

31 Dodawanie wektorów C Równoległe dodawanie wektorów z wykorzystaniem bloków Funkcja add() wykorzystująca numer bloku jako indeks w tablicy: global void add(int *a, int *b, int *c) c[blockidx.x] = a[blockidx.x] + b[blockidx.x]; Reprezentacja graficzna: Blok 0 c[0] = a[0] + b[0]; Blok 1 c[1] = a[1] + b[1]; Blok 2 Blok 3 c[2] = a[2] + b[2]; c[3] = a[3] + b[3];

32 Dodawanie wektorów C Równoległe dodawanie wektorów z wykorzystaniem bloków #define N (2048*2048) add<<< N, 1 >>>(d_a, d_b, d_c); int main() int *a, *b, *c; int *d_a, *d_b, *d_c; int size = N * sizeof(int); a = (int *)malloc(size); b = (int *)malloc(size); c = (int *)malloc(size); cudamalloc((void **)&d_a, size); cudamalloc((void **)&d_b, size); cudamalloc((void **)&d_c, size); for(int i=0; i<n; i++) a[i] = rand() % 100; b[i] = rand() % 100; cudamemcpy(c, d_c, size, cudamemcpydevicetohost); for(int i=0; i<n; i++) printf("%d + %d = %d\n", a[i], b[i], c[i]); free(a); free(b); free(c); cudafree(d_a); cudafree(d_b); cudafree(d_c); return 0; cudamemcpy(d_a, a, size, cudamemcpyhosttodevice); cudamemcpy(d_b, b, size, cudamemcpyhosttodevice);

33 Dodawanie wektorów C Równoległe dodawanie wektorów z wykorzystaniem wątków Każde wywołanie funkcji może zostad podzielone na wątki. Porównajmy równoległe wywołania względem bloków oraz wątków. Bloki global void add(int *a, int *b, int *c) c[blockidx.x] = a[blockidx.x] + b[blockidx.x]; add<<< N, 1 >>>(d_a, d_b, d_c); Wątki global void add(int *a, int *b, int *c) c[threadidx.x] = a[threadidx.x] + b[threadidx.x]; add<<< 1, N >>>(d_a, d_b, d_c);

34 Dodawanie wektorów C Równoległe dodawanie wektorów z wykorzystaniem bloków oraz wątków Jak do tej pory widzieliśmy w jaki sposób dodajemy wektory z użyciem: Bloków, Wątków. Połączmy oba sposoby:

35 Dodawanie wektorów C Równoległe dodawanie wektorów z wykorzystaniem bloków oraz wątków Chcąc odwoład się do konkretnego elementu wektora nie wystarczy już tylko użyd blockidx.x lub threadidx.x. Przykładowa reprezentacja graficzna wywołania z 4 blokami oraz 8 wątkami dla wektora o długości 32 elementów: r r r blockid.x = 0 blockid.x = 1 blockid.x = 2 blockid.x = 3 Odnalezienie indeksu wektora sprowadza się do obliczenia wartości M = ilość wątków na blok, dla której: int index = threadidx.x + blockidx.x * M;

36 Dodawanie wektorów C Równoległe dodawanie wektorów z wykorzystaniem bloków oraz wątków W celu ułatwienia zamiast wyznaczad za każdym razem wartośd zmiennej M możemy skorzystad z danych wbudowanych: M = blockdim.x // Wyraża ilość wątków dla pojedynczego bloku Funkcja add() po zmianach wygląda zatem następująco: global void add(int *a, int *b, int *c) int index = threadidx.x + blockidx.x * blockdim.x; c[index] = a[index] + b[index]; Funkcja main() również wymaga drobnych zmian. Należy bowiem odpowiednio wywoład add().

37 Dodawanie wektorów C Równoległe dodawanie wektorów z wykorzystaniem bloków oraz wątków #define N (2048*2048) #define THREADS_PER_BLOCK 512 int main() int *a, *b, *c; int *d_a, *d_b, *d_c; int size = N * sizeof(int); a = (int *)malloc(size); b = (int *)malloc(size); c = (int *)malloc(size); cudamalloc((void **)&d_a, size); cudamalloc((void **)&d_b, size); cudamalloc((void **)&d_c, size); for(int i=0; i<n; i++) a[i] = rand() % 100; b[i] = rand() % 100; add<<< N/THREADS_PER_BLOCK, THREADS_PER_BLOCK >>>( d_a, d_b, d_c ); cudamemcpy(c, d_c, size, cudamemcpydevicetohost); for(int i=0; i<n; i++) printf("%d + %d = %d\n", a[i], b[i], c[i]); free(a); free(b); free(c); cudafree(d_a); cudafree(d_b); cudafree(d_c); return 0; cudamemcpy(d_a, a, size, cudamemcpyhosttodevice); cudamemcpy(d_b, b, size, cudamemcpyhosttodevice);

38 Dodawanie wektorów C Równoległe dodawanie wektorów z wykorzystaniem bloków oraz wątków Niestety w takim kodzie mogą wystąpid błędy: Niecałkowite dzielenie N/THREADS_PER_BLOCK. Rozwiązanie: int M = THREADS_PER_BLOCK; add<<< (N + M-1) / M, M >>>(d_a, d_b, d_c); Wyjście poza zakres wektora. Rozwiązanie: global void add(int *a, int *b, int *c, int n) int index = threadidx.x + blockidx.x * blockdim.x; if (index < n) c[index] = a[index] + b[index]; add<<< (N + M-1) / M, M >>>(d_a, d_b, d_c, N);

39 Dodawanie wektorów C Równoległe dodawanie wektorów z wykorzystaniem bloków oraz wątków Wydaje się, że wątki są niepotrzebne, wprowadzają jedynie dodatkowy kod i zamieszanie. Jednak posiadają dodatkowe atuty, których bloki nie mają, są to: Pamięd współdzielona, Możliwośd komunikacji między sobą, Korzystając z bloków oraz wątków jesteśmy w stanie wykonad więcej obliczeo względem jednego wywołania.

40 Teoria DODAWANIE WEKTORÓW C/C++ C Porównanie Podsumowanie

41 Dodawanie wektorów Porównanie #define N (2048*2048) void add(int *a, int *b, int *c) int index = 0; while(index < N) c[index] = a[index] + b[index]; index++; int main() int *a, *b, *c; int size = N * sizeof(int); a = (int *)malloc(size); b = (int *)malloc(size); c = (int *)malloc(size); #define N (2048*2048) #define THREADS_PER_BLOCK 512 global void add(int *a, int *b, int *c, int n) int index = threadidx.x + blockidx.x * blockdim.x; if (index < n) c[index] = a[index] + b[index]; int main() int *a, *b, *c; int *d_a, *d_b, *d_c; int size = N * sizeof(int); a = (int *)malloc(size); b = (int *)malloc(size); c = (int *)malloc(size); cudamalloc((void **)&d_a, size); cudamalloc((void **)&d_b, size); cudamalloc((void **)&d_c, size);

42 Dodawanie wektorów Porównanie for (int i=0; i<n; i++) a[i] = rand() % 100; b[i] = rand() % 100; for(int i=0; i<n; i++) a[i] = rand() % 100; b[i] = rand() % 100; cudamemcpy(d_a, a, size, cudamemcpyhosttodevice); cudamemcpy(d_b, b, size, cudamemcpyhosttodevice); add(a, b, c); add<<< (N + THREADS_PER_BLOCK-1) / THREADS_PER_BLOCK, THREADS_PER_BLOCK >>>(d_a, d_b, d_c, N); cudamemcpy(c, d_c, size, cudamemcpydevicetohost); for (int i=0; i<n; i++) printf("%d + %d = %d\n", a[i], b[i], c[i]); free(a); free(b); free(c); for(int i=0; i<n; i++) printf("%d + %d = %d\n", a[i], b[i], c[i]); free(a); free(b); free(c); cudafree(d_a); cudafree(d_b); cudafree(d_c); return 0; return 0;

43 Teoria DODAWANIE WEKTORÓW C/C++ C Porównanie Podsumowanie

44 Dodawanie wektorów Podsumowanie Zrównolaglenie kodu na potrzeby C nie wymaga dużych zmian. Należy starannie dobierad ilośd bloków oraz wątków. Przed ustaleniem ilości bloków oraz wątków należy sprawdzid jak dużo z wymienionych wartości jest w stanie obsłużyd karta graficzna. Przy dodawaniu krótkich wektorów należy unikad obliczeo na układach GPU ze względu na długi czas kopiowania danych z hosta do urządzenia i odwrotnie.

45 Programowanie równoległe Dodawanie wektorów SPIS TREŚCI Fraktale Podsumowanie Ćwiczenia praktyczne

46 Teoria Pseudokod FRAKTALE C Porównanie wydajności CPU oraz GPU Podsumowanie

47 Fraktale Teoria Fraktal figura geometryczna o złożonej strukturze, którą cechuje samopodobieostwo, tzn. podobieostwo fraktala do jego części. Zbiór Julii fraktal będący także podzbiorem płaszczyzny zespolonej. Wzór ogólny: z 0 = p z n+1 = z 2 n + c Gdzie: z n - liczba zespolona p punkt na płaszczyźnie, c stała.

48 Fraktale Teoria Przykładowy fraktal Julii

49 Fraktale Teoria Działania na liczbach zespolonych Liczba zespolona składa się z części rzeczywistej z r oraz części urojonej z i. z = z r + iz i Potęgowanie: z 2 = z r 2 z i 2 + i(2 z r z i ) Dodawanie: Moduł: a + b = a r + b r + i a i + b i z = z r 2 + z i 2

50 Teoria Pseudokod FRAKTALE C Porównanie wydajności CPU oraz GPU Podsumowanie

51 Fraktale Pseudokod getcolorlevel(complex c, Complex p) begin i := 0; z := p; until ( z < 4) and (i < maxiter) do z = z^2 + c; i := i + 1; end; return i; end; Gdzie: C - liczba zespolona służąca generowaniu zbioru Julii P - liczba zespolona obliczona dla odpowiedniego punktu płaszczyzny

52 Teoria Pseudokod FRAKTALE C Porównanie wydajności CPU oraz GPU Podsumowanie

53 Fraktale C Zmienne const int MAX_LEVEL = 255; const int THREADS_PER_BLOCK = 512; int main() unsigned char **colorsarray; unsigned char *fractallevelscpu; unsigned char *fractallevelsgpu; float minx = -1.7; float maxx = 1.7; float miny = -1.3; float maxy = 1.3; float input_re = -0.79; float input_im = ; int width = 500; int height = 380; float stepx = (maxx - minx) / (float) width; float stepy = (maxy - miny) / (float) height; int BLOCKS = (width + THREADS_PER_BLOCK-1) / THREADS_PER_BLOCK;

54 Fraktale C Alokacja pamięci oraz wartości domyślne colorsarray = (unsigned char**) malloc((max_level+1) * sizeof(unsigned char*)); for(int i=0; i<=max_level; i++) colorsarray[i] = (unsigned char *) malloc(3 * sizeof(unsigned char)); colorsarray[i][0] = (int) (255.0 * i / MAX_LEVEL); colorsarray[i][1] = (int) (255.0 * log((float) i) / log((float) MAX_LEVEL)); colorsarray[i][2] = (int) (255.0 * i / MAX_LEVEL); fractallevelscpu = (unsigned char*) malloc(width * sizeof(unsigned char)); cudamalloc((unsigned char **) &fractallevelsgpu, width * sizeof(unsigned char)); createbitmapfile((...)); for(int h = 0; h < height; h++) fractalgpu<<< BLOCKS, THREADS_PER_BLOCK >>>(fractallevelsgpu, h, (...)); cudamemcpy(fractallevelscpu, fractallevelsgpu, width * sizeof(unsigned char), cudamemcpydevicetohost); appendbitmapfile((...));

55 Fraktale C Obliczanie fraktala, zapis do pliku oraz czyszczenie pamięci createbitmapfile((...)); for(int h = 0; h < height; h++) fractalgpu<<< BLOCKS, THREADS_PER_BLOCK >>>(fractallevelsgpu, h, (...)); cudamemcpy(fractallevelscpu, fractallevelsgpu, width * sizeof(unsigned char), cudamemcpydevicetohost); appendbitmapfile((...)); closebitmapfile(); for(int i=0; i<=max_level; i++) free(colorsarray[i]); free(colorsarray); free(fractallevelscpu); cudafree(fractallevelsgpu); return 0;

56 Fraktale C Funkcja wykonywana na procesorze GPU global void fractalgpu(unsigned char *a, int y, (...)) int x = blockidx.x * blockdim.x + threadidx.x; if(x < width) float p_re = x * stepx + minx; float p_im = y * stepy + miny; float z_re = p_re; float z_im = p_im; int iteration = 0; while ((z_re * z_re + z_im * z_im) < 4 && iteration < maxlevel) float tmp_re = z_re * z_re - z_im * z_im + c_re; float tmp_im = 2 * z_re * z_im + c_im; z_re = tmp_re; z_im = tmp_im; iteration++; a[x] = iteration;

57 Teoria Pseudokod FRAKTALE C Porównanie wydajności CPU oraz GPU Podsumowanie

58 Fraktale Porównanie wydajności CPU oraz GPU Wykres czasu obliczania przykładowego fraktala względem długości boku: Czas GPU Czas CPU * Do testów czasowych wyłączono zapis na dysk w celu uniknięcia zakłóceo pomiaru.

59 Teoria Pseudokod FRAKTALE C Porównanie wydajności CPU oraz GPU Podsumowanie

60 Fraktale Podsumowanie Testy wydajnościowe wykazały, że do pewnego momentu obliczenia na procesorze graficznym były równie wydajne jak na zwykłym CPU. Wraz ze wzrostem rozdzielczości generowanego obrazu widad, że na procesorze graficznym był osiągany krótszy czas. Obliczenia dwuwymiarowych tablic możemy uprościd obliczając je wiersz po wierszu lub spłaszczyd je do tablic jednowymiarowych i operowad jak na zwykłym wektorze.

61 Programowanie równoległe Dodawanie wektorów SPIS TREŚCI Fraktale Podsumowanie Ćwiczenia praktyczne

62 Wnioski PODSUMOWANIE Materiały do pobrania Bibliografia

63 Podsumowanie Wnioski Im dłużej wykonywane są obliczenia na układzie graficznym tym większą otrzymamy różnicę czasu dla wykonywanego zadania (na korzyśd GPU). Czas wykonania zadania zależy od dobrania odpowiednich wartości w wywołaniu funkcji urządzenia. Układ graficzny ma ograniczenia co do ilości wykonywanych bloków oraz wątków.

64 Wnioski PODSUMOWANIE Materiały do pobrania Bibliografia

65 Podsumowanie Materiały do pobrania Cała prezentacja wraz z kodami oraz działającymi programami jest do pobrania pod następującym adresem: Animacje w postaci filmów dostępne są pod następującym adresem:

66 Wnioski PODSUMOWANIE Materiały do pobrania Bibliografia

67 Podsumowanie Bibliografia by Example, Jason Sanders, Edward Kandrot

68 Programowanie równoległe Dodawanie wektorów SPIS TREŚCI Fraktale Podsumowanie Ćwiczenia praktyczne

69 Zakooczenie Ćwiczenia praktyczne Pobrad dostępne materiały z wcześniej udostępnionego linku. Uruchomid programy i zapoznad się z kodem. Napisad dowolny program z wykorzystaniem technologii C.

70 Dziękujemy za uwagę :) PYTANIA?

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1 Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1 Wprowadzenie Procesory graficzne GPU (Graphics Processing Units) stosowane są w kartach graficznych do przetwarzania grafiki komputerowej

Bardziej szczegółowo

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

Bardziej szczegółowo

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

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

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

Bardziej szczegółowo

Programowanie procesorów graficznych GPGPU

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

Bardziej szczegółowo

Wstęp do Programowania, laboratorium 02

Wstęp do Programowania, laboratorium 02 Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Nowoczesne technologie przetwarzania informacji

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

Bardziej szczegółowo

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII Spis treści Od autora..................................................... Obliczenia inżynierskie i naukowe.................................. X XII Ostrzeżenia...................................................XVII

Bardziej szczegółowo

Podstawy programowania C. dr. Krystyna Łapin http://www.mif.vu.lt/~moroz/c/

Podstawy programowania C. dr. Krystyna Łapin http://www.mif.vu.lt/~moroz/c/ Podstawy programowania C dr. Krystyna Łapin http://www.mif.vu.lt/~moroz/c/ Tematy Struktura programu w C Typy danych Operacje Instrukcja grupująca Instrukcja przypisania Instrukcja warunkowa Struktura

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski

JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski Agenda GPU Dlaczego warto używać GPU Budowa GPU CUDA JCuda Przykładowa implementacja Co to jest? GPU GPU Graphical GPU Graphical Processing GPU

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Podstawowe konstrukcje programistyczne Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) WP w. II Jesień 2013 1 / 34 Przypomnienie Programowanie imperatywne Program

Bardziej szczegółowo

Metody numeryczne Laboratorium 2

Metody numeryczne Laboratorium 2 Metody numeryczne Laboratorium 2 1. Tworzenie i uruchamianie skryptów Środowisko MATLAB/GNU Octave daje nam możliwość tworzenia skryptów czyli zapisywania grup poleceń czy funkcji w osobnym pliku i uruchamiania

Bardziej szczegółowo

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

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

Bardziej szczegółowo

I - Microsoft Visual Studio C++

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

Bardziej szczegółowo

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24

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.

Bardziej szczegółowo

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

Bardziej szczegółowo

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz

Bardziej szczegółowo

KURS C/C++ WYKŁAD 6. Wskaźniki

KURS C/C++ WYKŁAD 6. Wskaźniki Wskaźniki KURS C/C++ WYKŁAD 6 Każda zmienna ma unikalny adres wskazujący początkowy obszar pamięci zajmowany przez tą zmienną. Ilość pamięci zajmowanej przez zmienną zależy od typu zmiennej. Adres można

Bardziej szczegółowo

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster Wykład nr 3 Temat: Wskaźniki i referencje. Cytaty: Mylić się jest rzeczą ludzką, ale żeby coś naprawdę spaprać potrzeba komputera. Edward Morgan Forster Gdyby murarze budowali domy tak, jak programiści

Bardziej szczegółowo

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

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

Bardziej szczegółowo

CUDA ćwiczenia praktyczne

CUDA ćwiczenia praktyczne CUDA ćwiczenia praktyczne 7 kwietnia 2011, Poznań Marek Błażewicz, marqs@man.poznan.pl Michał Kierzynka, michal.kierzynka@man.poznan.pl Agenda Wprowadzenie do narzędzi umożliwiających tworzenie programów

Bardziej szczegółowo

2 Przygotował: mgr inż. Maciej Lasota

2 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania

Bardziej szczegółowo

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C Opublikowano w: WEREWKA J..: Podstawy programowana dla automatyków. Skrypt AGH Nr 1515, Kraków 1998 20. i łączenie podprogramów a z programem napisanym w Ze względu na duże rozpowszechnienie języka, szczególnie

Bardziej szczegółowo

Programowanie współbieżne Wstęp do OpenMP. Rafał Skinderowicz

Programowanie współbieżne Wstęp do OpenMP. Rafał Skinderowicz Programowanie współbieżne Wstęp do OpenMP Rafał Skinderowicz Czym jest OpenMP? OpenMP = Open Multi-Processing interfejs programowania aplikacji (API) dla pisania aplikacji równoległych na komputery wieloprocesorowe

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Bardziej szczegółowo

Lista 2. int porownaj_liczby_normalnie(const int a, const int b) { if(a==b) return 0; if(a>b)return1; return-1; }

Lista 2. int porownaj_liczby_normalnie(const int a, const int b) { if(a==b) return 0; if(a>b)return1; return-1; } Lista 2 Poniższe zadania mają na celu jedynie pomoc w szlifowaniu umiejętności logicznego myślenia, analizowania i rozwiązywania pewnych zagadnienień algorytmicznych. Zadanie 1. W algorytmach opartych

Bardziej szczegółowo

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Piotr Dwieczkowski. Code coverage. Mierzenie pokrycia kodu, teoria oraz praktyka w C/C++

Piotr Dwieczkowski. Code coverage. Mierzenie pokrycia kodu, teoria oraz praktyka w C/C++ Piotr Dwieczkowski Code coverage Mierzenie pokrycia kodu, teoria oraz praktyka w C/C++ Plan Co to jest pokrycie kodu? Możliwe sposoby wykorzystania Rodzaje statystyk Wady i zalety mierzenia porycia kodu

Bardziej szczegółowo

Wprowadzenie do programowania w języku C

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

Bardziej szczegółowo

Ćwiczenie nr 6. Programowanie mieszane

Ćwiczenie nr 6. Programowanie mieszane Ćwiczenie nr 6 Programowanie mieszane 6.1 Wstęp Współczesne języki programowania posiadają bardzo rozbudowane elementy językowe, co pozwala w większości przypadków na zdefiniowanie całego kodu programu

Bardziej szczegółowo

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory Programowanie I C / C++ laboratorium 03 arytmetyka, operatory Jarosław Piersa Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika 2013-02-19 Typ znakowy Typ znakowy Typ wyliczeniowy # include

Bardziej szczegółowo

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++ Programowanie Wstęp p do programowania Klasa 3 Lekcja 9 PASCAL & C++ Język programowania Do przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algorytm zapisany w postaci programu

Bardziej szczegółowo

ROZPROSZONY SYSTEM DO KRYPTOANALIZY SZYFRÓW OPARTYCH NA KRZYWYCH ELIPTYCZNYCH

ROZPROSZONY SYSTEM DO KRYPTOANALIZY SZYFRÓW OPARTYCH NA KRZYWYCH ELIPTYCZNYCH ROZPROSZONY SYSTEM DO KRYPTOANALIZY SZYFRÓW OPARTYCH NA KRZYWYCH ELIPTYCZNYCH Krzysztof Skowron, Mariusz Rawski, Paweł Tomaszewicz 1/23 CEL wykorzystanie środowiska Altera OpenCL do celów akceleracji obliczeń

Bardziej szczegółowo

Pracownia specjalistyczna. Materiały przygotowali: mgr inż. Wojciech Frohmberg, mgr inż. Michał Kierzynka

Pracownia specjalistyczna. Materiały przygotowali: mgr inż. Wojciech Frohmberg, mgr inż. Michał Kierzynka Pracownia specjalistyczna Materiały przygotowali: mgr inż. Wojciech Frohmberg, mgr inż. Michał Kierzynka Język C++ 1. Podstawowa struktura pliku źródłowego: #include #include "main.h" using

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

Kompendium na temat pętli i instrukcji warunkowych w C++

Kompendium na temat pętli i instrukcji warunkowych w C++ Instrukcje warunkowe Kompendium na temat pętli i instrukcji warunkowych w C++ wersja artykułu: 1.0 Instrukcje warunkowe Chciałem tutaj przedstawid podstawy dotyczące funkcji, oraz instrukcji warunkowych

Bardziej szczegółowo

Podstawy programowania komputerów

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

Bardziej szczegółowo

Język programowania PASCAL

Język programowania PASCAL Język programowania PASCAL (wersja podstawowa - standard) Literatura: dowolny podręcznik do języka PASCAL (na laboratoriach Borland) Iglewski, Madey, Matwin PASCAL STANDARD, PASCAL 360 Marciniak TURBO

Bardziej szczegółowo

Programowanie RAD Delphi

Programowanie RAD Delphi Programowanie RAD Delphi Dr Sławomir Orłowski Zespół Fizyki Medycznej, Instytut Fizyki, Uniwersytet Mikołaja Kopernika w Toruniu Pokój: 202, tel. 611-32-46, e-mial: bigman@fizyka.umk.pl Delphi zasoby Aplikacje

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

Bardziej szczegółowo

Instrukcja do zdjęć. Instrukcja krok po kroku umieszczania zdjęd na aukcji bez ograniczeo. MD-future. md-future@o2.pl

Instrukcja do zdjęć. Instrukcja krok po kroku umieszczania zdjęd na aukcji bez ograniczeo. MD-future. md-future@o2.pl Instrukcja do zdjęć 2011 Instrukcja krok po kroku umieszczania zdjęd na aukcji bez ograniczeo. md-future@o2.pl Spis treści Krok 1. Dopasowanie rozmiaru zdjęcia do standardów.... 3 Krok 2. Wstawianie zdjęcia

Bardziej szczegółowo

Czym jest wykrywanie kolizji. Elementarne metody detekcji kolizji. Trochę praktyki: Jak przygotować Visual Studio 2010 do pracy z XNA pod Windows

Czym jest wykrywanie kolizji. Elementarne metody detekcji kolizji. Trochę praktyki: Jak przygotować Visual Studio 2010 do pracy z XNA pod Windows Czym jest wykrywanie kolizji. Elementarne metody detekcji kolizji. Trochę praktyki: Jak przygotować Visual Studio 2010 do pracy z XNA pod Windows Phone 7. Skąd i jakie paczki pobrać. Coś napiszemy :-)

Bardziej szczegółowo

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program. PYTHON Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program. Aby program napisany w danym języku mógł być wykonany, niezbędne

Bardziej szczegółowo

15. Funkcje i procedury składowane PL/SQL

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

Bardziej szczegółowo

Programowanie Proceduralne

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

Bardziej szczegółowo

Ćwiczenia laboratoryjne. Oprogramowanie i badanie prostych metod sortowania w tablicach

Ć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ść

Bardziej szczegółowo

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI Inż. Kamil Kujawski Inż. Krzysztof Krefta Wykład w ramach zajęć Akademia ETI Metody programowania Assembler Język C BASCOM Assembler kod maszynowy Zalety: Najbardziej efektywny Intencje programisty są

Bardziej szczegółowo

Funkcje są prawdopodobnie najważniejszą częścią każdego poważnego programu (w każdym języku programowania).

Funkcje są prawdopodobnie najważniejszą częścią każdego poważnego programu (w każdym języku programowania). Funkcje w Pythonie Funkcje to części programu wielokrotnego użytku. Pozwalają nam nadad nazwę blokowi wyrażeo, a następnie uruchamiad ten blok używając tej nazwy gdziekolwiek w programie, dowolną ilośd

Bardziej szczegółowo

EXCEL. Diagramy i wykresy w arkuszu lekcja numer 6. Instrukcja. dla Gimnazjum 36 - Ryszard Rogacz Strona 20

EXCEL. Diagramy i wykresy w arkuszu lekcja numer 6. Instrukcja. dla Gimnazjum 36 - Ryszard Rogacz Strona 20 Diagramy i wykresy w arkuszu lekcja numer 6 Tworzenie diagramów w arkuszu Excel nie jest sprawą skomplikowaną. Najbardziej czasochłonne jest przygotowanie danych. Utworzymy następujący diagram (wszystko

Bardziej szczegółowo

Język C część 2. Podejmowanie decyzji w programie. if else. switch

Język C część 2. Podejmowanie decyzji w programie. if else. switch Język C część 2 Podejmowanie decyzji w programie if else Instrukcja warunkowa umożliwia wykonanie pewnej instrukcji w zależności od wartości wyrażenia. Wszystkie wartości różne od 0, są w języku C traktowane

Bardziej szczegółowo

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Systemy wirtualnej rzeczywistości. Komponenty i serwisy Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Systemy wirtualnej rzeczywistości Laboratorium Komponenty i serwisy Wstęp: W trzeciej części przedstawione zostaną podstawowe techniki

Bardziej szczegółowo

LINQ TO SQL w dużym skrócie jest to zintegrowany język zapytao pozwalający na mapowanie relacyjnych baz danych na model obiektowy.

LINQ TO SQL w dużym skrócie jest to zintegrowany język zapytao pozwalający na mapowanie relacyjnych baz danych na model obiektowy. LINQ TO SQL w dużym skrócie jest to zintegrowany język zapytao pozwalający na mapowanie relacyjnych baz danych na model obiektowy. Zanim ktokolwiek postanowi użyd tego w swoim projekcie, należy zaznaczyd

Bardziej szczegółowo

Praktyka Programowania

Praktyka Programowania Praktyka Programowania Dariusz Dereniowski Materiały udostępnione przez Adriana Kosowskiego Katedra Algorytmów i Modelowania Systemów Politechnika Gdańska deren@eti.pg.gda.pl Gdańsk, 2010 strona przedmiotu:

Bardziej szczegółowo

Metody Metody, parametry, zwracanie wartości

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

Bardziej szczegółowo

Klasy generyczne. ZbiórLiczb. ZbiórCzegokolwiek. Zbiór

Klasy generyczne. ZbiórLiczb. ZbiórCzegokolwiek. Zbiór Klasy generyczne Klasy generyczne Klasy generyczne są to klasy o parametryzowanych typach danych. Klasy generyczne posiadają kompletną implementację, jednak nie definiują typów danych wykorzystanych w

Bardziej szczegółowo

Wykł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. 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ółowo

Przeliczanie cen walutowych na dokumentach

Przeliczanie cen walutowych na dokumentach Przeliczanie cen walutowych na dokumentach (wersja 1.0) Soneta Sp z o.o. ul. Wadowicka 8a, wejście B 31-415 Kraków tel./fax +48 (12) 261 36 41 http://www.enova.pl e-mail: handel@enova.pl 1 Spis treści

Bardziej szczegółowo

Python wstęp do programowania dla użytkowników WCSS

Python wstęp do programowania dla użytkowników WCSS Python wstęp do programowania dla użytkowników WCSS Dr inż. Krzysztof Berezowski Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej Wprowadzenie CHARAKTERYSTYKA JĘZYKA Filozofia języka

Bardziej szczegółowo

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty. Przyszedł czas na rysowanie własnych figur, czyli prymitywy, obracanie bitmap, oraz alpha blending-czyli półprzezroczystość. Będę opisywał tylko rzeczy nowe-nie ma potrzeby abym się powtarzał. Zaczynajmny

Bardziej szczegółowo

Java Podstawy. Michał Bereta www.michalbereta.pl mbereta@pk.edu.pl

Java Podstawy. Michał Bereta www.michalbereta.pl mbereta@pk.edu.pl Prezentacja współfinansowana przez Unię Europejską ze środków Europejskiego Funduszu Społecznego w ramach projektu Wzmocnienie znaczenia Politechniki Krakowskiej w kształceniu przedmiotów ścisłych i propagowaniu

Bardziej szczegółowo

Programowanie Niskopoziomowe

Programowanie Niskopoziomowe Programowanie Niskopoziomowe Wykład 11: Procedury zaawansowane Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie Plan Wstęp Ramki stosu Rekurencja INVOKE, ADDR, PROC,

Bardziej szczegółowo

Jerzy Nawrocki, Wprowadzenie do informatyki

Jerzy Nawrocki, Wprowadzenie do informatyki Jerzy Nawrocki, Jerzy Nawrocki Wydział Informatyki Politechnika Poznańska jerzy.nawrocki@put.poznan.pl Cel wykładu Programowanie imperatywne i język C Zaprezentować paradygmat programowania imperatywnego

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

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

Bardziej szczegółowo

Projektowanie klas c.d. Projektowanie klas przykład

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

Bardziej szczegółowo

TEMAT: SPOSOBY ADRESOWANIA W

TEMAT: SPOSOBY ADRESOWANIA W CENTRUM EDUKACJI AKADEMIA SUKCESU Praca Semestralna TEMAT: SPOSOBY ADRESOWANIA W ARKUSZU KALKULACYJNYM EXCEL. Kierunek: Technik Informatyk Semestr: II Wykładowca: Jan Nosal Słuchacz: Łukasz Stocki CO TO

Bardziej szczegółowo

ARKUSZ KALKULACYJNY MICROSOFT EXCEL cz.2 Formuły i funkcje macierzowe, obliczenia na liczbach zespolonych, wykonywanie i formatowanie wykresów.

ARKUSZ KALKULACYJNY MICROSOFT EXCEL cz.2 Formuły i funkcje macierzowe, obliczenia na liczbach zespolonych, wykonywanie i formatowanie wykresów. Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni z przedmiotu Podstawy Informatyki Kod przedmiotu: ENS1C 100 003 oraz ENZ1C 100 003 Ćwiczenie pt. ARKUSZ KALKULACYJNY

Bardziej szczegółowo

enova Systemowe Narzędzia Projektowe

enova Systemowe Narzędzia Projektowe enova Systemowe Narzędzia Projektowe Sebastian Wabnik Spis treści Opis rozwiązania...3 Dostęp do narzędzia...3 Wywoływanie narzędzia...4 Zakładka Logi czasu...4 SQL Stat...5 Zakładka Liczniki...7 Zakładka

Bardziej szczegółowo

Off-line równa się On-line Jak to się robi? Aleksander Danielski

Off-line równa się On-line Jak to się robi? Aleksander Danielski Off-line równa się On-line Jak to się robi? Aleksander Danielski Architektura systemu Wykonawstwo Geodezyjne w Internecie Internetowy Klient danych I n t e r n e t i.net Delta Dla wykonawstwa geodezyjnego

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziesiąta Rekordy w C/C++ struktury Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót

Bardziej szczegółowo

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

Bardziej szczegółowo

Wprowadzenie do programowania

Wprowadzenie do programowania do programowania ITA-104 Wersja 1 Warszawa, Wrzesień 2009 ITA-104 do programowania Informacje o kursie Zakres tematyczny kursu Opis kursu Kurs przeznaczony jest do prowadzenia przedmiotu do programowania

Bardziej szczegółowo

Dynamiczne przetwarzanie stron. dr Beata Kuźmińska-Sołśnia

Dynamiczne przetwarzanie stron. dr Beata Kuźmińska-Sołśnia Dynamiczne przetwarzanie stron dr Beata Kuźmińska-Sołśnia KLIENT Witaj INTERNET SERWER Plik HTML Witaj wyświetlanie przez przeglądarkę Witaj! Serwer WWW komputer

Bardziej szczegółowo

ECLIPSE wnioski z dwóch pierwszych laboratoriów

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

Bardziej szczegółowo

Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Konstrukcje i Technologie w Aparaturze Elektronicznej.

Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Konstrukcje i Technologie w Aparaturze Elektronicznej. Politechnika Białostocka Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej Konstrukcje i Technologie w Aparaturze Elektronicznej Ćwiczenie nr 5 Temat: Przetwarzanie A/C. Implementacja

Bardziej szczegółowo

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer Realizacja algorytmu przez komputer Wstęp do informatyki Wykład UniwersytetWrocławski 0 Tydzień temu: opis algorytmu w języku zrozumiałym dla człowieka: schemat blokowy, pseudokod. Dziś: schemat logiczny

Bardziej szczegółowo

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

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

Bardziej szczegółowo

E S - uniwersum struktury stosu

E S - uniwersum struktury stosu Temat: Struktura stosu i kolejki Struktura danych to system relacyjny r I r i i I U,, gdzie U to uniwersum systemu, a i i - zbiór relacji (operacji na strukturze danych). Uniwersum systemu to zbiór typów

Bardziej szczegółowo

Ćwiczenie 1. Przygotowanie środowiska JAVA

Ćwiczenie 1. Przygotowanie środowiska JAVA Ćwiczenie 1 Przygotowanie środowiska JAVA 1. Wprowadzenie teoretyczne Instalacja JDK (Java Development Kit) NaleŜy pobrać z java.sun.com środowisko i zainstalować je. Następnie naleŝy skonfigurować środowisko.

Bardziej szczegółowo

ARKUSZ KALKULACYJNY MICROSOFT EXCEL

ARKUSZ KALKULACYJNY MICROSOFT EXCEL Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni z przedmiotu Podstawy Informatyki Kod przedmiotu: TS1C 100 003 Ćwiczenie pt. ARKUSZ KALKULACYJNY MICROSOFT EXCEL

Bardziej szczegółowo

Program 14. #include #include using namespace std;

Program 14. #include <iostream> #include <ctime> using namespace std; Program 14 Napisać: * funkcję słuŝącą do losowego wypełniania tablicy liczbami całkowitymi z podanego zakresu (*). Parametrami funkcji mają być tablica, jej długość oraz dwie liczby stanowiące krańce przedziału

Bardziej szczegółowo

Kompilator języka C na procesor 8051 RC51 implementacja

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

Bardziej szczegółowo

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

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.

Bardziej szczegółowo

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński ppelczynski@swspiz.pl

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński ppelczynski@swspiz.pl Programowanie niskopoziomowe dr inż. Paweł Pełczyński ppelczynski@swspiz.pl 1 Literatura Randall Hyde: Asembler. Sztuka programowania, Helion, 2004. Eugeniusz Wróbel: Praktyczny kurs asemblera, Helion,

Bardziej szczegółowo

Jerzy Nawrocki, Wprowadzenie do informatyki

Jerzy Nawrocki, Wprowadzenie do informatyki Jerzy Nawrocki, Jerzy Nawrocki Wydział Informatyki Politechnika Poznańka jerzy.nawrocki@put.poznan.pl Obliczenia i metody numeryczne = a 2 + b 2 a + (b/a) 2 =b + (a/b) 2 Metody numeryczne begin a:= 3e-25;

Bardziej szczegółowo

Narzędzia internacjonalizacji programów

Narzędzia internacjonalizacji programów Spis treści -1 Pojęcia Mechanizm locale Mechanizm locale a Xlib Kto jeszcze nie śpi? Tłumaczenie komunikatów catgets Pakiet gettext (Nawiasem mówiąc) Nowe funkcje glibc 2.2 Problemy Marcin Woliński Narzędzia

Bardziej szczegółowo

Wstęp do programowania 1

Wstęp do programowania 1 Wstęp do programowania 1 Struktury Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 12 Struktura dla dat - przykład #include struct Date { int y; short m; short

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH Akademia Rolnicza im. Augusta Cieszkowskiego w Poznaniu - Instytut Inżynierii Rolniczej - ALGORYTMY I STRUKTURY DANYCH Prowadzący: dr inż. Radosław J. Kozłowski email: rjk@au.poznan.pl www: http://www.au.poznan.pl/~rjk

Bardziej szczegółowo

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1 Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1 Organizacja przedmiotu Dr inż. Robert Banasiak Dr inż. Paweł Kapusta 1 2 Nasze kompetencje R n D Tomografia 3D To nie tylko statyczny obraz!

Bardziej szczegółowo

Paradygmaty programowania

Paradygmaty programowania Paradygmaty programowania Jacek Michałowski, Piotr Latanowicz 15 kwietnia 2014 Jacek Michałowski, Piotr Latanowicz () Paradygmaty programowania 15 kwietnia 2014 1 / 12 Zadanie 1 Zadanie 1 Rachunek predykatów

Bardziej szczegółowo

Klasy i obiekty. Programowanie zorientowane obiektowo. Case study: Filmoteka Case study: Klasa Akademik

Klasy i obiekty. Programowanie zorientowane obiektowo. Case study: Filmoteka Case study: Klasa Akademik Klasy i obiekty. Programowanie zorientowane obiektowo. Case study: Filmoteka Case study: Klasa Akademik Dlaczego obiekty Załóżmy, że mamy napisać program o następującej specyfikacji: 1. Program wyświetla

Bardziej szczegółowo

1. Liczby zespolone. Jacek Jędrzejewski 2011/2012

1. Liczby zespolone. Jacek Jędrzejewski 2011/2012 1. Liczby zespolone Jacek Jędrzejewski 2011/2012 Spis treści 1 Liczby zespolone 2 1.1 Definicja liczby zespolonej.................... 2 1.2 Postać kanoniczna liczby zespolonej............... 1. Postać

Bardziej szczegółowo

Microsoft IT Academy kurs programowania

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

Bardziej szczegółowo