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

Programowanie kart graficznych CUDA Compute Unified Device Architecture Programowanie kart graficznych mgr inż. Kamil Szostek AGH, WGGIOŚ, KGIS Wykorzystano materiały z kursu Programowanie kart graficznych prostsze niż myślisz M. Makowski

Bardziej szczegółowo

Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA

Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA Wprowadzenie do programowania w środowisku CUDA Środowisko CUDA 1 Budowa procesora CPU i GPU Architektura GPU wymaga większej ilości tranzystorów na przetwarzanie danych Control ALU ALU ALU ALU Cache DRAM

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

Programowanie Równoległe Wykład, CUDA praktycznie 1. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie Równoległe Wykład, CUDA praktycznie 1. Maciej Matyka Instytut Fizyki Teoretycznej Programowanie Równoległe Wykład, 07.01.2014 CUDA praktycznie 1 Maciej Matyka Instytut Fizyki Teoretycznej Motywacja l CPU vs GPU (anims) Plan CUDA w praktyce Wykład 1: CUDA w praktyce Wykład 2: Cuda +

Bardziej szczegółowo

Programowanie Współbieżne

Programowanie Współbieżne Programowanie Współbieżne Agnieszka Łupińska 5 października 2016 Hello World! helloworld.cu: #include global void helloworld(){ int thid = (blockidx.x * blockdim.x) + threadidx.x; printf("hello

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1 Programowanie procesorów graficznych GPGPU Krzysztof Banaś Obliczenia równoległe 1 Projektowanie kerneli Zasady optymalizacji: należy maksymalizować liczbę wątków (w rozsądnych granicach, granice zależą

Bardziej szczegółowo

Programowanie procesorów graficznych w CUDA.

Programowanie procesorów graficznych w CUDA. Programowanie procesorów graficznych w CUDA. Kompilujemy program Alokacja zasobów gpgpu oraz załadowanie modułu CUDA odbywa się za pomocą komend: qsub -q gpgpu -I -l walltime=2:00:00,nodes=1:ppn=1:gpus=1

Bardziej szczegółowo

Programowanie współbieżne Wykład 2. Iwona Kochańska

Programowanie współbieżne Wykład 2. Iwona Kochańska Programowanie współbieżne Wykład 2 Iwona Kochańska Miary skalowalności algorytmu równoległego Przyspieszenie Stały rozmiar danych N T(1) - czas obliczeń dla najlepszego algorytmu sekwencyjnego T(p) - czas

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

Julia 4D - raytracing

Julia 4D - raytracing i przykładowa implementacja w asemblerze Politechnika Śląska Instytut Informatyki 27 sierpnia 2009 A teraz... 1 Fraktale Julia Przykłady Wstęp teoretyczny Rendering za pomocą śledzenia promieni 2 Implementacja

Bardziej szczegółowo

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Tablice wielowymiarowe C umożliwia definiowanie tablic wielowymiarowych najczęściej stosowane

Bardziej szczegółowo

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1

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ń

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

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

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

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17 Wskaźniki Przemysław Gawroński D-10, p. 234 Wykład 2 8 marca 2019 (Wykład 2) Wskaźniki 8 marca 2019 1 / 17 Outline 1 Wskaźniki 2 Tablice a wskaźniki 3 Dynamiczna alokacja pamięci (Wykład 2) Wskaźniki 8

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Funkcje w języku C Zasięg zmiennych Przekazywanie

Bardziej szczegółowo

Język ludzki kod maszynowy

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

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

CUDA. cudniejsze przyk ady

CUDA. cudniejsze przyk ady CUDA cudniejsze przyk ady Agenda: CPU vs. GPU Mnożenie macierzy CPU Mnożenie macierzy - GPU Sploty Macierze CPU vs. GPU CPU: GPU: Mnożenie wykonywane w kolejnych iteracjach pętli. Przechodzimy przez pierwszy

Bardziej szczegółowo

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

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

Bardziej szczegółowo

Szablony funkcji i szablony klas

Szablony funkcji i szablony klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Programowanie w Turbo Pascal

Programowanie w Turbo Pascal Skróty: ALT + F9 Kompilacja CTRL + F9 Uruchomienie Struktura programu: Programowanie w Turbo Pascal Program nazwa; - nagłówek programu - blok deklaracji (tu znajduje się VAR lub CONST) - blok instrukcji

Bardziej szczegółowo

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami Przykład 1. Napisz program, który dla podanej liczby n wypisze jej rozkład na czynniki pierwsze. Oblicz asymptotyczną złożoność

Bardziej szczegółowo

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1 Tablice i struktury czyli złożone typy danych. Programowanie Proceduralne 1 Tablica przechowuje elementy tego samego typu struktura jednorodna, homogeniczna Elementy identyfikowane liczbami (indeksem).

Bardziej szczegółowo

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

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1 Metodologia programowania równoległego Przykłady podziałów zadania na podzadania: Podział ze względu na funkcje (functional

Bardziej szczegółowo

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu inż. Daniel Solarz Wydział Fizyki i Informatyki Stosowanej AGH 1. Cel projektu. Celem projektu było napisanie wtyczki

Bardziej szczegółowo

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy złożone Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy podstawowe Typy całkowite: char short int long Typy zmiennopozycyjne float double Modyfikatory : unsigned, signed Typ wskaźnikowy

Bardziej szczegółowo

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania, Przetwarzanie równoległe PROJEKT OMP i CUDA Temat projektu dotyczy analizy efektywności przetwarzania równoległego realizowanego przy użyciu komputera równoległego z procesorem wielordzeniowym z pamięcią

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

Programowanie Równoległe wykład 12. OpenGL + algorytm n ciał. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie Równoległe wykład 12. OpenGL + algorytm n ciał. Maciej Matyka Instytut Fizyki Teoretycznej Programowanie Równoległe wykład 12 OpenGL + algorytm n ciał Maciej Matyka Instytut Fizyki Teoretycznej CUDA z OpenGL 1. Dane dla kerneli znajdują się na karcie GFX. 2. Chcemy liczyć i rysować używając

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Przykładowe sprawozdanie. Jan Pustelnik

Przykładowe sprawozdanie. Jan Pustelnik Przykładowe sprawozdanie Jan Pustelnik 30 marca 2007 Rozdział 1 Sformułowanie problemu Tematem pracy jest porównanie wydajności trzech tradycyjnych metod sortowania: InsertionSort, SelectionSort i BubbleSort.

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

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegół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

Wskaźniki. Programowanie Proceduralne 1

Wskaźniki. Programowanie Proceduralne 1 Wskaźniki Programowanie Proceduralne 1 Adresy zmiennych Sterta 1 #include 2 3 int a = 2 ; 4 5 int main ( ) 6 { 7 int b = 3 ; 8 9 printf ( " adres zmiennej a %p\n", &a ) ; 10 printf ( " adres

Bardziej szczegółowo

Języki i techniki programowania Ćwiczenia 2

Języki i techniki programowania Ćwiczenia 2 Języki i techniki programowania Ćwiczenia 2 Autor: Marcin Orchel Spis treści: Język C++... 5 Przekazywanie parametrów do funkcji... 5 Przekazywanie parametrów w Javie.... 5 Przekazywanie parametrów w c++...

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

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,

Bardziej szczegółowo

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

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

Bardziej szczegółowo

Raport Hurtownie Danych

Raport Hurtownie Danych Raport Hurtownie Danych Algorytm Apriori na indeksie bitmapowym oraz OpenCL Mikołaj Dobski, Mateusz Jarus, Piotr Jessa, Jarosław Szymczak Cel projektu: Implementacja algorytmu Apriori oraz jego optymalizacja.

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d. Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 7 Przegląd typów strukturalnych - klasy i obiekty - c.d. Klasa - powtórzenie

Bardziej szczegółowo

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std; Programowanie C++ Zadanie 1 Napisz program do obliczenia sumy i iloczynu ciągu liczb zakooczonego liczbą zero. Zakładamy, że ciąg zawiera co najmniej jedną liczbę (założenie to jest konieczne przy obliczeniu

Bardziej szczegółowo

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to

Bardziej szczegółowo

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania Rok akademicki 2013/2014, Pracownia nr 10 2/20 Informatyka 1 Tablica elementów ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu Politechnika Białostocka - Wydział Elektryczny Elektrotechnika,

Bardziej szczegółowo

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p. Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy Laboratorium 1 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Na podstawie: G. Perry, D. Miller, Język C Programowanie dla

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

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

Zad. 3: Układ równań liniowych

Zad. 3: Układ równań liniowych 1 Cel ćwiczenia Zad. 3: Układ równań liniowych Wykształcenie umiejętności modelowania kluczowych dla danego problemu pojęć. Definiowanie właściwego interfejsu klasy. Zwrócenie uwagi na dobór odpowiednich

Bardziej szczegółowo

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

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

Bardziej szczegółowo

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe I. Struktury sterujące.bezpośrednie następstwo (A,B-czynności) Wykład _2 Algorytmy sortowania tablic Sortowanie bąbelkowe Elementy języka stosowanego do opisu algorytmu Elementy Poziom koncepcji Poziom

Bardziej szczegółowo

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

1 Wprowadzenie do algorytmiki

1 Wprowadzenie do algorytmiki Teoretyczne podstawy informatyki - ćwiczenia: Prowadzący: dr inż. Dariusz W Brzeziński 1 Wprowadzenie do algorytmiki 1.1 Algorytm 1. Skończony, uporządkowany ciąg precyzyjnie i zrozumiale opisanych czynności

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

Bardziej szczegółowo

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz Programowanie równoległe i rozproszone Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz 23 października 2009 Spis treści Przedmowa...................................................

Bardziej szczegółowo

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 1 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan wykładów (1) Algorytmy i programy Proste typy danych Rozgałęzienia

Bardziej szczegółowo

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Skalowalność obliczeń równoległych Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Skalowalność Przy rozważaniu wydajności przetwarzania (obliczeń, komunikacji itp.) często pojawia się pojęcie skalowalności

Bardziej szczegółowo

Programowanie CUDA informacje praktycznie i. Wersja

Programowanie CUDA informacje praktycznie i. Wersja Programowanie CUDA informacje praktycznie i przykłady Wersja 16.12.2013 Podstawowe operacje na GPU cudasetdevice() Określenie GPU i ustanowienie kontekstu (analog w GPU tego czym jest proces dla CPU) dla

Bardziej szczegółowo

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017 > C++ wskaźniki Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017 >??? Co to jest WSKAŹNIK? ++ wskaźniki 2 / 20 >??? Co to jest WSKAŹNIK? To po prostu ADRES

Bardziej szczegółowo

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady Pętle i tablice. Spotkanie 3 Dr inż. Dariusz JĘDRZEJCZYK Pętle: for, while, do while Tablice Przykłady 11/26/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Pętla w największym uproszczeniu służy

Bardziej szczegółowo

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na

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

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

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład. Część XVII C++ Funkcje Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład. 2 3 Tworzymy deklarację i definicję funkcji o nazwie pobierzln() Funkcja

Bardziej szczegółowo

Wprowadzenie do języka Java

Wprowadzenie do języka Java WSNHiD, Programowanie 2 Lab. 1 [ część 1 ] Wprowadzenie do języka Java Wprowadzenie Język programowania Java jest obiektowym językiem programowania. Powstał w 1995 i od tej pory był intensywnie rozwijany.

Bardziej szczegółowo

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI Wprowadzenie do środowiska Matlab 1. Podstawowe informacje Przedstawione poniżej informacje maja wprowadzić i zapoznać ze środowiskiem

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1 Pętle Pętla jest konstrukcją sterującą stosowaną w celu wielokrotnego wykonania tego samego zestawu instrukcji jednokrotne

Bardziej szczegółowo

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python Język PYTHON Podstawowe informacje Python to język skryptowy, interpretowany - co oznacza, że piszemy skrypt, a następnie wykonujemy go za

Bardziej szczegółowo

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński WYKŁAD 8 Funkcje i algorytmy rekurencyjne Proste przykłady Programy: c3_1.c..., c3_6.c Tomasz Zieliński METODY REKURENCYJNE (1) - program c3_1 ======================================================================================================

Bardziej szczegółowo

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD Języki C i C++ Wykład: 2 Wstęp Instrukcje sterujące 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD programowania w C++ Instrukcje sterujące 2 Pętla for for ( instrukcja_ini ; wyrazenie_warunkowe

Bardziej szczegółowo

CUDA część 1. platforma GPGPU w obliczeniach naukowych. Maciej Matyka

CUDA część 1. platforma GPGPU w obliczeniach naukowych. Maciej Matyka CUDA część 1 platforma GPGPU w obliczeniach naukowych Maciej Matyka Bariery sprzętowe (procesory) ok na. 1 10 00 la raz t y Gdzie jesteśmy? a ok. 2 razy n 10 lat (ZK) Rozwój 1985-2004 i dalej? O roku ów

Bardziej szczegółowo

Programowanie - wykład 4

Programowanie - wykład 4 Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include

Bardziej szczegółowo

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie

Bardziej szczegółowo

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Programowanie w C++ Wykład 2 Katarzyna Grzelak 5 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Reprezentacje liczb w komputerze K.Grzelak (Wykład 1) Programowanie w C++ 2 / 41 Reprezentacje

Bardziej szczegółowo

Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA

Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA Wprowadzenie do programowania w środowisku CUDA Środowisko CUDA 1 Budowa procesora CPU i GPU Architektura GPU wymaga większej ilości tranzystorów na przetwarzanie danych Control ALU ALU ALU ALU Cache DRAM

Bardziej szczegółowo

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek Implementacja sieci neuronowych na karcie graficznej Waldemar Pawlaszek Motywacja Czyli po co to wszystko? Motywacja Procesor graficzny GPU (Graphics Processing Unit) Wydajność Elastyczność i precyzja

Bardziej szczegółowo

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 19 Dynamiczne struktury danych Dynamiczną strukturą danych nazywamy taka strukturę danych, której rozmiar, a więc liczba przechowywanych w niej danych, może się dowolnie

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Tablice Wskaźniki Adresy pamięci Operator adresu

Bardziej szczegółowo

Tablice, funkcje, wskaźniki - wprowadzenie

Tablice, funkcje, wskaźniki - wprowadzenie Tablice, funkcje, wskaźniki - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 4 19 listopada 2018 (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada 2018 1 / 37 Outline 1 Tablice

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne

Bardziej szczegółowo

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r. M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza

Bardziej szczegółowo

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły

Bardziej szczegółowo

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.

Bardziej szczegółowo

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do

Bardziej szczegółowo

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ w C Zak lad Chemii Teoretycznej UJ 30 listopada 2006 1 2 3 Inicjalizacja zmiennych Zmienne jednowymiarowe można inicjować przy ich definicji. #include i n t x = 1 ; l o n g day = 1000L * 60L

Bardziej szczegółowo

Programowanie strukturalne i obiektowe. Funkcje

Programowanie strukturalne i obiektowe. Funkcje Funkcje Często w programach spotykamy się z sytuacją, kiedy chcemy wykonać określoną czynność kilka razy np. dodać dwie liczby w trzech miejscach w programie. Oczywiście moglibyśmy to zrobić pisząc trzy

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

Podstawy programowania komputerów

Podstawy programowania komputerów Podstawy programowania komputerów Wykład 14: Programowanie współbieżne w C Definicja programowania współbieżnego Programowanie współbieżne jest tworzeniem programów, których wykonanie powoduje uruchomienie

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

Bardziej szczegółowo