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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Obliczenia na GPU w technologii CUDA

Obliczenia na GPU w technologii CUDA Obliczenia na GPU w technologii CUDA 1 Różnica szybkości obliczeń (GFLOP/s) pomiędzy CPU a GPU źródło NVIDIA 2 Różnica w przepustowości pamięci pomiędzy CPU a GPU źródło NVIDIA 3 Różnice architektoniczne

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

Programowanie kart graficznych. Architektura i API część 1

Programowanie kart graficznych. Architektura i API część 1 Programowanie kart graficznych Architektura i API część 1 Literatura NVIDIA CUDA Programming Guide version 4.2 http//developer.download.nvidia.com/compute/devzone/ docs/html/c/doc/cuda_c_programming_guide.pdf

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

Matlab Składnia + podstawy programowania

Matlab Składnia + podstawy programowania Matlab Składnia + podstawy programowania Matlab Matrix Laboratory środowisko stworzone z myślą o osobach rozwiązujących problemy matematyczne, w których operuje się na danych stanowiących wielowymiarowe

Bardziej szczegółowo

DYNAMICZNE PRZYDZIELANIE PAMIECI

DYNAMICZNE PRZYDZIELANIE PAMIECI DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne

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

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

Języki i metodyka programowania. Wprowadzenie do języka C

Języki i metodyka programowania. Wprowadzenie do języka C Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia

Bardziej szczegółowo

CUDA obliczenia ogólnego przeznaczenia na mocno zrównoleglonym sprzęcie. W prezentacji wykorzystano materiały firmy NVIDIA (http://www.nvidia.

CUDA obliczenia ogólnego przeznaczenia na mocno zrównoleglonym sprzęcie. W prezentacji wykorzystano materiały firmy NVIDIA (http://www.nvidia. CUDA obliczenia ogólnego przeznaczenia na mocno zrównoleglonym sprzęcie W prezentacji wykorzystano materiały firmy NVIDIA (http://www.nvidia.com) 1 Architektura karty graficznej W porównaniu z tradycyjnym

Bardziej szczegółowo

Moc płynąca z kart graficznych

Moc płynąca z kart graficznych Moc płynąca z kart graficznych Cuda za darmo! Czyli programowanie generalnego przeznaczenia na kartach graficznych (GPGPU) 22 października 2013 Paweł Napieracz /20 Poruszane aspekty Przetwarzanie równoległe

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

Funkcja (podprogram) void

Funkcja (podprogram) void Funkcje Co to jest funkcja? Budowa funkcji Deklaracja, definicja i wywołanie funkcji Przykłady funkcji definiowanych przez programistę Przekazywanie argumentów do funkcji Tablica jako argument funkcji

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

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

//zmienne globalne int *pa, *pb; //wskaźniki globalne void main(void) { clrscr(); printf("\n podaj wartosc liczby a\n"); scanf("%d",&a); pa=&a;

//zmienne globalne int *pa, *pb; //wskaźniki globalne void main(void) { clrscr(); printf(\n podaj wartosc liczby a\n); scanf(%d,&a); pa=&a; Ćwiczenie 4 4.1. Wskaźnik na zmienną Wskaźniki, tablice Deklaracja int *pa; oznacza, że pa jest wskaźnikiem na obiekt typu int. Zmienna pa zawiera adres pamięci, zarezerwowanej na zmienną typu int. Chcąc

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

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

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

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

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

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

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

ZASADY PROGRAMOWANIA KOMPUTERÓW POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.

Bardziej szczegółowo

Wprowadzenie do złożoności obliczeniowej

Wprowadzenie do złożoności obliczeniowej problemów Katedra Informatyki Politechniki Świętokrzyskiej Kielce, 16 stycznia 2007 problemów Plan wykładu 1 2 algorytmów 3 4 5 6 problemów problemów Plan wykładu 1 2 algorytmów 3 4 5 6 problemów problemów

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

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 7 kwietnia 2014 1. Wprowadzenie Pierwsza część instrukcji zawiera informacje

Bardziej szczegółowo

Algorytmy dla maszyny PRAM

Algorytmy dla maszyny PRAM Instytut Informatyki 21 listopada 2015 PRAM Podstawowym modelem służącym do badań algorytmów równoległych jest maszyna typu PRAM. Jej głównymi składnikami są globalna pamięć oraz zbiór procesorów. Do rozważań

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

Wstęp do obliczeń równoległych na GPU

Wstęp do obliczeń równoległych na GPU Spis treści 1 Wstęp do obliczeń równoległych na GPU 1.1 Zadanie 1.2 Profilowanie 1.2.1 Zadanie Wstęp do obliczeń równoległych na GPU W tej części ćwiczeń stworzymy pierwszy program wykorzystujący bibliotekę

Bardziej szczegółowo

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego Wątki Wątek - definicja Ciąg instrukcji (podprogram) który może być wykonywane współbieżnie (równolegle) z innymi programami, Wątki działają w ramach tego samego procesu Współdzielą dane (mogą operować

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

Programowanie aplikacji równoległych i rozproszonych

Programowanie aplikacji równoległych i rozproszonych Programowanie aplikacji równoległych i rozproszonych Dr inż. Krzysztof Rojek krojek@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Strumienie operacji na GPU Domyślne

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

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji Wartości domyślne, przeciażenia funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.

Bardziej szczegółowo

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C Grzegorz Cygan Wstęp do programowania mikrosterowników w języku C Mikrosterownik Inne nazwy: Microcontroler (z języka angielskiego) Ta nazwa jest powszechnie używana w Polsce. Mikrokomputer jednoukładowy

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

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy) Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013

Bardziej szczegółowo

Adresowanie. W trybie natychmiastowym pole adresowe zawiera bezpośrednio operand czyli daną dla rozkazu.

Adresowanie. W trybie natychmiastowym pole adresowe zawiera bezpośrednio operand czyli daną dla rozkazu. W trybie natychmiastowym pole adresowe zawiera bezpośrednio operand czyli daną dla rozkazu. Wada: rozmiar argumentu ograniczony do rozmiaru pola adresowego Adresowanie bezpośrednie jest najbardziej podstawowym

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

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

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++ Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

Optymalizacja programów Open Source. Profilery wysokiego poziomu część 2. Krzysztof Lichota

Optymalizacja programów Open Source. Profilery wysokiego poziomu część 2. Krzysztof Lichota Optymalizacja programów Open Source Profilery wysokiego poziomu część 2 Krzysztof Lichota lichota@mimuw.edu.pl gprof gprof Pomiar działa na zasadzie instrumentacji kompilowanego kodu (wejścia i wyjścia

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

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty. Funkcje. Deklaracja funkcji: KURS C/C++ WYKŁAD 8 #include //deklaracje funkcji: printf(...), scanf(...) #include //double sqrt (double ) #include //void clrscr (void) void main

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

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.

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

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

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

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

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

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

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

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Dr inż. Grażyna KRUPIŃSKA Grazyna.Krupinska@fis.agh.edu.pl D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Wyrażenia 2 Wyrażenia w języku C są bardziej elastyczne niż wyrażenia w jakimkolwiek innym języku

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

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6 PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6 TEMAT: Programowanie w języku C/C++: instrukcje iteracyjne for, while, do while Ogólna postać instrukcji for for (wyr1; wyr2; wyr3) Instrukcja for twory pętlę działającą

Bardziej szczegółowo

Zapisywanie algorytmów w języku programowania

Zapisywanie algorytmów w języku programowania Temat C5 Zapisywanie algorytmów w języku programowania Cele edukacyjne Zrozumienie, na czym polega programowanie. Poznanie sposobu zapisu algorytmu w postaci programu komputerowego. Zrozumienie, na czym

Bardziej szczegółowo

która metoda jest najlepsza

która metoda jest najlepsza która metoda jest najlepsza dr inż. Marek Żabka Instytut Matematyki Wydział Matematyki Stosowanej Politechnika Śląska 20 września 2012r Nowa metoda tworzenia grafiki na stronie internetowej: element,,canvas

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

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii Klasa, metody, rozwijanie w linii Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu

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

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. 1. Instrukcję case t of... w przedstawionym fragmencie programu moŝna zastąpić: var t : integer; write( Podaj

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