CUDA ćwiczenia praktyczne

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

Download "CUDA ćwiczenia praktyczne"

Transkrypt

1 CUDA ćwiczenia praktyczne 7 kwietnia 2011, Poznań Marek Błażewicz, Michał Kierzynka,

2 Agenda Wprowadzenie do narzędzi umożliwiających tworzenie programów w środowisku CUDA. Zadanie 0; stworzenie i skompilowanie pierwszego programu Zapoznanie z prostym środowiskiem stworzonym na potrzeby szkolenia; Zadanie 1: Hello World na karcie graficznej; Zadanie 2: porównanie wydajności kopiowania danych pomiędzy różnymi typami pamięci; Zadanie 3: zapoznanie z tablicami 2D i ich zastosowaniem; debugowanie i szukanie błędów; Zadanie 4: transpozycja macierzy; optymalizacja dostępu do pamięci global, shared i optymalizacja przy pomocy okienkowego profilowania; Zadanie 5: algorytm redukcji; Zadanie 6: ukrywanie opóźnień związanych z uruchamianiem kernela i dodatkowych wątków 2

3 Hello World 0.1 (~/workshop/les0) CUDA Driver /dev/nvidiactl /dev/nvidia<n> /usr/lib[64]/libopencl.so moduł jądra odpowiedzialny za komunikację z kartą GPGPU; CUDA Toolkit domyślna ścieżka: /usr/local/cuda; zbiór narzędzi (/bin) do: kompilacji (nvcc), debugowania (cuda-gdb), optymalizowania (computeprof); biblioteki dołączane dynamicznie (/lib[64]); pliki nagłówkowe (/include); obszerna dokumentacja (/doc); NVIDIA GPU Computing SDK domyślna ścieżka: $(HOME)/NVIDIA_GPU_Computing_SDK ścieżka w trakcie zajęć: /opt/nvidia_gpu_computing_sdk przykładowe programy na GPU (/C/src) zbiór funkcji i makr przydatnych do uruchamiania, zarządzania i sprawdzania poprawności uruchamianych kerneli; /opt/nvidia_gpu_computing_sdk/c/bin/linux/release/devicequery 3

4 Hello World 0.1 (~/workshop/les0) 4 Image by NVIDIA

5 Agenda Wprowadzenie do narzędzi umożliwiających tworzenie programów w środowisku CUDA. Zadanie 0; stworzenie i skompilowanie pierwszego programu Zapoznanie z prostym środowiskiem stworzonym na potrzeby szkolenia; Zadanie 1: Hello World na karcie graficznej; Zadanie 2: porównanie wydajności kopiowania danych pomiędzy różnymi typami pamięci; Zadanie 3: zapoznanie z tablicami 2D i ich zastosowaniem; debugowanie i szukanie błędów; Zadanie 4: transpozycja macierzy; optymalizacja dostępu do pamięci global, shared i optymalizacja przy pomocy okienkowego profilowania; Zadanie 5: algorytm redukcji; Zadanie 6: ukrywanie opóźnień związanych z uruchamianiem kernela i dodatkowych wątków 5

6 Hello World 0.1 (~/workshop/les0) Prosta kompilacja: [/usr/local/cuda/bin/]nvcc main.cu Kompilacja z zewnętrznym linkerem: [/usr/local/cuda/bin/]nvcc -c main.cu -o main.cu.o g++ -L[/usr/local/cuda/]lib[64]/ -lcudart main.cu.o Uruchamianie: export LD_LIBRARY_PATH=[/usr/local/cuda/]lib[64]/./a.out Zadanie 0 - napisać prosty program, który: a) zaalokuje tablicę na CPU i wypełni ją przykładowymi liczbami; b) zaalokuje tablicę na GPU i przegra do niej uprzednio wykreowane liczby; c) uruchomi kernel, którego zadaniem jest przemnożenie każdego elementu przez 2; d) skopiuje wynikową tablicę z karty i wypisze ją na ekran; 6

7 Hello World 0.1 (~/workshop/les0) #include<stdio.h> int src[ ] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int dst[10] = {0}; global <definicja kernela> int main(){ int * src_dev, * dst_dev; <allokacja pamięci na karcie (cudamalloc)> <skopiowanie danych na kartę (cudamemcpy)> <uruchmienie kernela> <skopiowanie danych z karty (cudamemcpy)> } for(int i = 0; i < 10; i++) printf("%d\t", dst[i]); printf("\n"); 7

8 Hello World 0.1 (~/workshop/les0) #include <stdio.h> int src[ ] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int dst[10] = {0}; } global void kernel(int * src, int * dst){ dst[threadidx.x] = src[threadidx.x] * 2; int main(){ int * src_dev, * dst_dev; cudamalloc(&src_dev, sizeof(src)); cudamalloc(&dst_dev, sizeof(dst)); cudamemcpy(src_dev, src, sizeof(src), cudamemcpyhosttodevice); kernel<<<1, 10>>>(src_dev, dst_dev); cudamemcpy(dst, dst_dev, sizeof(src), cudamemcpydevicetohost); } for(int i = 0; i < 10; i++) printf("\n"); printf("%d\t", dst[i]); 8

9 Agenda Wprowadzenie do narzędzi umożliwiających tworzenie programów w środowisku CUDA. Zadanie 0; stworzenie i skompilowanie pierwszego programu Zapoznanie z prostym środowiskiem stworzonym na potrzeby szkolenia; Zadanie 1: Hello World na karcie graficznej; Zadanie 2: porównanie wydajności kopiowania danych pomiędzy różnymi typami pamięci; Zadanie 3: zapoznanie z tablicami 2D i ich zastosowaniem; debugowanie i szukanie błędów; Zadanie 4: transpozycja macierzy; optymalizacja dostępu do pamięci global, shared i optymalizacja przy pomocy okienkowego profilowania; Zadanie 5: algorytm redukcji; Zadanie 6: ukrywanie opóźnień związanych z uruchamianiem kernela i dodatkowych wątków 9

10 Lista plików i katalogów w zadaniach szkoleniowych ~/workshop/les<n>_xxx katalog z zadaniem szkoleniowym, gdzie n jest numerem lekcji, a xxx skrótowym opisem jej treści; ~/workshop/les<n>_c_xxx j.w. z tą różnicą, że jest to katalog wgrany na życzenie i zawiera prawidłowe rozwiązanie zadania; Makefile plik do automatycznej kompilacji przygotowanych zadań; automatycznie wyszukuje najnowszą wersję kompilatora nvcc i podlinkowuje wymagane biblioteki, wystarczy wpisać: make; src/ - katalog z plikami źródłowymi danego zadania, w tym: main.cu główny plik zarządzający przeprowadzanymi obliczeniami; params.h (opcjonalnie) parametry obliczeń (szerokość, wysokość tablicy, typ danych, etc.) cpu_func.c(h)(opcjonalnie) plik zawierający referencyjne funkcje na CPU; obj/ - katalog zawierający pliki obiektowe; les<n>_.* - plik wykonywalny danego zadania; ~/workshop/common/common.h definicje przydatnych funkcji i makr, pomagających sprawdzać poprawność i mierzyć wydajność przeprowadzanych obliczeń; 10

11 Spis makr i funkcji w pliku: common.h #define CUDA_SAFE_CALL(call) makro otaczające funkcje API języka CUDA C (cudamalloc, cudamemcpy, etc.), i sprawdzające poprawność ich wykonania; w razie błędu makro to kończy wykonywanie programu, wypisując nr linii i nazwę pliku, w którym wystąpił błąd; #define cudacheckmsg(msg) makro sprawdzające poprawność ostatnio wykonanych kerneli oraz funkcji asynchronicznych; w razie porażki wypisuje wiadomość msg i kończy wykonywanie programu; template<class T> void printpartofthetable(...) - bardzo przydatna funkcja do wizualnego poszukiwania błędów w obliczeniach; porównuje dwie tablice w zadanych przez użytkownika miejscach i wypisuje pierwszą z zaznaczonymi w kolorze różniącymi się miejscami; template<class T> bool checkresults(...) - porównuje 2 tablice i wypisuje informacje czy są identyczne; void starttime(); long stoptime(...); - funkcje odmierzające czas interwału pomiędzy ich uruchomieniem; 2. zwraca czas w μs; double getgflops(...); - zwraca i opcjonalnie wypisuje ilość operacji arytmetycznych/s. na podstawie czasu i sum. liczby operacji; double getbandwidthgbs(...) - zwraca i opcjonalnie wypisuje przepustość/s. na podstawie czasu i wielkości pamięci; template <class T>T divup(t x, T y) zwraca sufit dzielenia liczb x przez y; przydatne w obliczaniu ilości koniecznych bloków potrzebnych do pokrycia całej domeny obliczeniowej; template <typename T> T getgpuval(t * valptr) przydatna w debugowaniu funkcja pobierająca z karty graficznej wartość typu T wskazanej przez wskaźnik valptr; #define val(ptr, x, y, pitch) makro pozwalające na szybkie znalezienie miejsca w tablicy 2D wskazanej przez wskaźnik ptr, w kolumnie x, wierszu y i długości wiersza w bajtach pitch. 11

12 Spis makr, funkcji i zmiennych wspólnych dla wszystkich zadań Lista funkcji i makr znajdujących się w pliku params.h: #define WIDTH #define HEIGHT makra definiujące szerokość i wysokość tablicy, na której przeprowadzane są obliczenia; #define MEMSIZE makra definiujące wielkość tablicy oraz ilość wykonanych operacji arytmetycznych; makra te najczęściej są zależne #define FLOP od WIDTH oraz HEIGHT, i służą do obliczania przepustowości pamięci i obliczeń; #define P makro definiujące typ danych na których przeprowadzane są obliczenia; Lista funkcji i makr znajdujących się w pliku main.cu: int main() główna funkcja zawierająca wywołania wszystkich pozostałych procedur i kerneli; void init_host_mem() funkcja inicjalizująca pamięć w przestrzeni adresowej procesora; void init_dev_mem() funkcja inicjalizująca pamięć w przestrzeni adresowej karty graficznej; global void kernel<n>() - definicja kernela wykonywanego na karcie graficznej; n oznacza stopień optymalizacji kernela; P *src, *dst, *ref wskaźniki do tablic znajdujących się w przestrzeni adresowej procesora, wskazujących kolejno na tablicę: źródłową, docelową i referencyjną; zmienne o tej samej nazwie, tylko, że z przyrostkiem, oznaczają, w zależności od przyrostka: _dev wskazywany adres znajduje się na karcie graficznej; _dev_pitched wskazywany adres znajduje się na karcie graficznej i jest tablicą 2D; _pl wskazywany adres znajduje się w przestrzeni adresowej procesora i jest zaalokowany w trybie Page-Locked; 12

13 Ogólny schemat obliczeń w zadaniach szkoleniowych int main(){ long t = 0; init_host_mem(); init_dev_mem(); starttime(); // inicjalizacja pamięci na procesorze // inicjalizacja pamięci na karcie graficznej // rozpoczęcie odmierzania czasu kernel_host(src, ref, 150, 20); // obliczenia referencyjne na procesorze t = stoptime(); getbandwidthgbs(t, MEMSIZE * 2); getgflops(t, FLOP); // zakończenie odmierzania czasu // obliczenie i wypisanie wydajności obliczeń dim3 blockdim(16, 16); // zdefiniowanie konfiguracji uruchomienia kernela dim3 griddim(divup<int>(width, blockdim.x), starttime(); divup<int>(height, blockdim.y)); kernel<<<griddim, blockdim>>>(src_dev, dst_dev, 150, 20); cudathreadsynchronize(); t = stoptime(); getbandwidthgbs(t, MEMSIZE * 2); getgflops(t, FLOP); // poprzez stworzenie odpowiednich struktur; // griddim: wymiary siatki bloków; blockdim: wym. bloku // j.w. // uruchomienia obliczeń na GPU // oczekiwanie na zakończenie obliczeń // j.w. // j.w. CUDA_SAFE_CALL(cudaMemcpy(dst, dst_dev, MEMSIZE, cudamemcpydevicetohost));// skopowianie tablic z GPU w celu if(!checkresults(stdout, dst, MEMSIZE, ref, MEMSIZE, // sprawdzenia poprawności obliczeń; MEMSIZE / sizeof(p), 1)){// sprawdzenie poprawności obliczeń; // printpartofthetable(...) // opcjonalne wypisanie tablicy w celu wizualnego zlokalizowania } // miejsca w którym obliczenia są niepoprawne; } 13

14 Agenda Wprowadzenie do narzędzi umożliwiających tworzenie programów w środowisku CUDA. Zadanie 0; stworzenie i skompilowanie pierwszego programu Zapoznanie z prostym środowiskiem stworzonym na potrzeby szkolenia; Zadanie 1: Hello World na karcie graficznej; Zadanie 2: porównanie wydajności kopiowania danych pomiędzy różnymi typami pamięci; Zadanie 3: zapoznanie z tablicami 2D i ich zastosowaniem; debugowanie i szukanie błędów; Zadanie 4: transpozycja macierzy; optymalizacja dostępu do pamięci global, shared i optymalizacja przy pomocy okienkowego profilowania; Zadanie 5: algorytm redukcji; Zadanie 6: ukrywanie opóźnień związanych z uruchamianiem kernela i dodatkowych wątków 14

15 1.0 Hello World (~/workshop/les1_hello) Zadanie 1: TODO: stworzony program ma skopiować tablicę ref=>src_dev, następnie przy pomocy dedykowanego kernela przegrać src_dev=>dst_dev; następnie przesłać tablicę dst_dev=>dst; po wykonanych operacjach tablica dst ma mieć postać Hello World a) skopiować tablicę ref (na hoście) => src_dev (na GPU); b) stworzyć kernel, który w już zdefiniowanej konfiguracji uruchomienia ma przegrać tablice src_dev => dst_dev; każdy wątek ma skopiować dokładnie jeden element tablicy; c) znaleźć błąd w istniejącym szkielecie (podpowiedź: użyj CUDA_SAFE_CALL); d) pytania mile widzianą alternatywą wspólnego oczekiwania na zakończenie zadania ;). 15

16 Agenda Wprowadzenie do narzędzi umożliwiających tworzenie programów w środowisku CUDA. Zadanie 0; stworzenie i skompilowanie pierwszego programu Zapoznanie z prostym środowiskiem stworzonym na potrzeby szkolenia; Zadanie 1: Hello World na karcie graficznej; Zadanie 2: porównanie wydajności kopiowania danych pomiędzy różnymi typami pamięci; Zadanie 3: zapoznanie z tablicami 2D i ich zastosowaniem; debugowanie i szukanie błędów; Zadanie 4: transpozycja macierzy; optymalizacja dostępu do pamięci global, shared i optymalizacja przy pomocy okienkowego profilowania; Zadanie 5: algorytm redukcji; Zadanie 6: ukrywanie opóźnień związanych z uruchamianiem kernela i dodatkowych wątków 16

17 2.0 kopiowanie (~/workshop/les2_kopiowanie) Zadanie 2: TODO, porównanie wydajności różnych rodzai kopiowania: host<=>host; host<=>device; device<=>device; host_pl<=>host_pl; host_pl<=>device; a) dopisać kopiowanie: host_pl<=>host_pl, host=>device, host<=device, host=>device, host_pl<=device, host_pl=>device, device=>device, device=>(kernel)device b) przetestować wydajność różnych konfiguracji uruchomienia kernela; c) porównać wydajność różnych typów kopiowania; 17

18 Agenda Wprowadzenie do narzędzi umożliwiających tworzenie programów w środowisku CUDA. Zadanie 0; stworzenie i skompilowanie pierwszego programu Zapoznanie z prostym środowiskiem stworzonym na potrzeby szkolenia; Zadanie 1: Hello World na karcie graficznej; Zadanie 2: porównanie wydajności kopiowania danych pomiędzy różnymi typami pamięci; Zadanie 3: zapoznanie z tablicami 2D i ich zastosowaniem; debugowanie i szukanie błędów; Zadanie 4: transpozycja macierzy; optymalizacja dostępu do pamięci global, shared i optymalizacja przy pomocy okienkowego profilowania; Zadanie 5: algorytm redukcji; Zadanie 6: ukrywanie opóźnień związanych z uruchamianiem kernela i dodatkowych wątków 18

19 3.0 tablice 2D (~/workshop/les3_pitch) Zadanie 3: TODO, zaznajomienie się z tablicami 2D; porównanie wydajności w porównaniu z tablicami liniowymi i znajdowanie błędów obliczeń; a) zaalokować pamięć 2D (src_dev_pitched, dst_dev_pitched); b) znaleźć błąd w pierwszym kernelu i/lub jego uruchmieniu; c) odkomentować wywołania funkcji printpartofthetable, i spróbować wykorzystać ją do znalezienia błędu; d) dopisać kernel korzystający z tablic 2D (podpowiedź, skorzystaj z makra val); e) porównać wydajność obu kerneli na różnych architekturach; f) cuda-gdb? 19

20 Agenda Wprowadzenie do narzędzi umożliwiających tworzenie programów w środowisku CUDA. Zadanie 0; stworzenie i skompilowanie pierwszego programu Zapoznanie z prostym środowiskiem stworzonym na potrzeby szkolenia; Zadanie 1: Hello World na karcie graficznej; Zadanie 2: porównanie wydajności kopiowania danych pomiędzy różnymi typami pamięci; Zadanie 3: zapoznanie z tablicami 2D i ich zastosowaniem; debugowanie i szukanie błędów; Zadanie 4: transpozycja macierzy; optymalizacja dostępu do pamięci global, shared i optymalizacja przy pomocy okienkowego profilowania; Zadanie 5: algorytm redukcji; Zadanie 6: ukrywanie opóźnień związanych z uruchamianiem kernela i dodatkowych wątków 20

21 4.0 transpozycja (~/workshop/les4_transpose) Zadanie 4: zaimplementuj i zbadaj różne techniki transponowania macierzy; KERNEL1: src_dev dst_dev TODO, kernel2 przeanalizuj sposób przetwarzania; czy da się jakoś wykorzystać posiadanie cache'u na kartach FERMI? 21

22 4.0 transpozycja (~/workshop/les4_transpose) Zadanie 4: zaimplementuj i zbadaj różne techniki transponowania macierzy; KERNEL2: src_dev dst_dev TODO, kernel3 Jak wykorzystać pamięć shared by przyspieszyć transpozycję? 22

23 4.0 transpozycja (~/workshop/les4_transpose) Zadanie 4: zaimplementuj i zbadaj różne techniki transponowania macierzy; KERNEL3: src_dev dst_dev TODO, kernel4 Czy można niskim kosztem zoptymalizować konflikty w dostępie do pamięci? 23

24 4.0 transpozycja (~/workshop/les4_transpose) Zadanie 4: zaimplementuj i zbadaj różne techniki transponowania macierzy; KERNEL4: src_dev dst_dev TODO, kernel5 partition camping? 24

25 4.0 transpozycja (~/workshop/les4_transpose) Zadanie 4: zaimplementuj i zbadaj różne techniki transponowania macierzy; KERNEL5: src_dev dst_dev

26 4.0 transpozycja (~/workshop/les4_transpose) Zadanie 4: zaimplementuj i zbadaj różne techniki transponowania macierzy; TODO: CUDA Visual Profiler. ścieżka: [/usr/local/cuda/]computeprof/bin/computeprof; local store (load) ilość zapisów (pobrań) zmiennych do (z) pamięci local; branch ilość warpów które wykonywały jedną (ta samą) ścieżkę kodu; divergent branch ilość warpów które wykonywały więcej niż jedną ścieżkę kodu; instructions liczba wykonanych instrukcji; warp serialize liczba konfliktów w dostępie do pamięci shared; cta launched ilość wykonanych bloków na multiprocesorze; occupancy procentowe wypełnienie multiprocesorów warpami; gst(gld)<n> liczba zapisów (odczytów) wielkości n bajtów do (z) pamięci globalnej; 26

27 Agenda Wprowadzenie do narzędzi umożliwiających tworzenie programów w środowisku CUDA. Zadanie 0; stworzenie i skompilowanie pierwszego programu Zapoznanie z prostym środowiskiem stworzonym na potrzeby szkolenia; Zadanie 1: Hello World na karcie graficznej; Zadanie 2: porównanie wydajności kopiowania danych pomiędzy różnymi typami pamięci; Zadanie 3: zapoznanie z tablicami 2D i ich zastosowaniem; debugowanie i szukanie błędów; Zadanie 4: transpozycja macierzy; optymalizacja dostępu do pamięci global, shared i optymalizacja przy pomocy okienkowego profilowania; Zadanie 5: algorytm redukcji; Zadanie 6: ukrywanie opóźnień związanych z uruchamianiem kernela i dodatkowych wątków 27

28 5.0 redukcja (~/workshop/les5_reduce) Zadanie 5: zaimplementuj i zoptymalizuj algorytm redukcji (1 blok); KERNEL1: ++ SM + SM global shared TODO, kernel2 przeanalizuj sposób przetwarzania; czy da się jakoś zrównoleglić 2. etap (tylko w pamięci shared) poprzez równoległe sumowanie? W jaki sposób zapewnić spójność danych? 28

29 5.0 redukcja (~/workshop/les5_reduce) Zadanie 5: zaimplementuj i zoptymalizuj algorytm redukcji (1 blok); KERNEL2: ++ SM + SM + SM global shared TODO, kernel3 W jaki sposób wykorzystać fakt, że warp zawsze wykonuje tą samą instrukcję? Czy działa to na wszystkich typach kart (podpowiedź: volatile)? 29

30 5.0 redukcja (~/workshop/les5_reduce) Zadanie 5: zaimplementuj i zoptymalizuj algorytm redukcji (1 blok); KERNEL3: ++ SM + SM if() + + SMlast warp global shared TODO, kernel4 Czy usunięcie pętli dla ostatniego warpa może przyspieszyć wykonywany proces? pragma unroll? 30

31 5.0 redukcja (~/workshop/les5_reduce) Zadanie 5: zaimplementuj i zoptymalizuj algorytm redukcji (1 blok); KERNEL4: + ++ SM SM if() for() + + SMlast warp global shared TODO, kernel5 Czy usunięcie pozostałej pętli może przyspieszyć wykonywany proces? Jak to zrobić (podpowiedź: #if TILE >= 512)? 31

32 5.0 redukcja (~/workshop/les5_reduce) Zadanie 5: zaimplementuj i zoptymalizuj algorytm redukcji (1 blok); KERNEL5: ++ for() SM SM + if() + + for() SMlast warp global shared TODO, porównanie wydajności. 32

33 6.0 (~/workshop/les6_latency_hide) Zadanie 6: zbyt duża liczba wątków powoduje, że czas ich obsługi może spowilnić obliczenia uzupełnij kernel2 (modyfikując kernel) wprowadzając do niego pętlę for redukującą liczbę uruchamianych wątków b1 b2 b3 b4 b5 b6 b7 b8 bn... b1 b2... bm 33

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

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

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

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

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

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

Wprowadzenie do biblioteki klas C++

Wprowadzenie do biblioteki klas C++ Instrukcja laboratoryjna nr 7 Programowanie w języku C 2 (C++ poziom zaawansowany) Wprowadzenie do biblioteki klas C++ WxWidgets mgr inż. Lasota Maciej dr inż. Kaczmarek Tomasz dr inż. Wilk-Jakubowski

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

Java jako język programowania

Java jako język programowania Java jako język programowania Interpretowany programy wykonują się na wirtualnej maszynie (JVM Java Virtual Machine) Składnia oparta o język C++ W pełni zorientowany obiektowo (wszystko jest obiektem)

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

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

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

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

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

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo

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

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

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

Podstawy Programowania.

Podstawy Programowania. Podstawy Programowania http://www.saltbox.com/img/under_the_hood.png O mnie... dr inż. Łukasz Graczykowski Zakład Fizyki Jądrowej Wydział Fizyki Politechniki Warszawskiej lgraczyk@if.pw.edu.pl www.if.pw.edu.pl/~lgraczyk/wiki

Bardziej szczegółowo

Programowanie Proceduralne

Programowanie Proceduralne Programowanie Proceduralne Makefile Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 14 Co to jest Makefile Makefile jest plikiem reguł dla programu make. Wykorzystywany jest

Bardziej szczegółowo

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

1 Podstawy c++ w pigułce.

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

Bardziej szczegółowo

Programowanie mikrokontrolerów AVR

Programowanie mikrokontrolerów AVR Programowanie mikrokontrolerów AVR Czym jest mikrokontroler? Mikrokontroler jest małym komputerem podłączanym do układów elektronicznych. Pamięć RAM/ROM CPU wykonuje program Układy I/O Komunikacje ze światem

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

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Temat 1: Podstawowe pojęcia: program, kompilacja, kod Temat 1: Podstawowe pojęcia: program, kompilacja, kod wynikowy. Przykłady najprostszych programów. Definiowanie zmiennych. Typy proste. Operatory: arytmetyczne, przypisania, inkrementacji, dekrementacji,

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

Tesla. Architektura Fermi

Tesla. Architektura Fermi Tesla Architektura Fermi Tesla Tesla jest to General Purpose GPU (GPGPU), GPU ogólnego przeznaczenia Obliczenia dotychczas wykonywane na CPU przenoszone są na GPU Możliwości jakie daje GPU dla grafiki

Bardziej szczegółowo

Język C, tablice i funkcje (laboratorium, EE1-DI)

Język C, tablice i funkcje (laboratorium, EE1-DI) Język C, tablice i funkcje (laboratorium, EE1-DI) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Wstęp (tablice) Tablica to uporządkowany ciąg elementów tego samego typu, zajmujących ciągły obszar pamięci.

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

Programowanie CUDA informacje praktycznie i przykłady. Wersja

Programowanie CUDA informacje praktycznie i przykłady. Wersja Programowanie CUDA informacje praktycznie i przykłady problemów obliczeniowych Wersja 25.11.2014 cudasetdevice() Podstawowe operacje na urządzeniu GPU Określenie GPU i ustanowienie kontekstu (analog w

Bardziej szczegółowo

Podstawy Programowania

Podstawy Programowania Podstawy Programowania http://www.saltbox.com/img/under_the_hood.png Any sufficiently advanced technology is indistinguishable from magic. Arthur C. Clarke O mnie... dr inż. Małgorzata Janik Zakład Fizyki

Bardziej szczegółowo

Pytania sprawdzające wiedzę z programowania C++

Pytania sprawdzające wiedzę z programowania C++ Pytania sprawdzające wiedzę z programowania C++ Wstęp 1. Zaprezentuj mechanikę tworzenia programu napisanego w języku C++. 2. Co to jest kompilacja? 3. Co to jest konsolidacja? 4. Co to jest kod wykonywalny?

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

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

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

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

Ćwiczenie 1. Przygotowanie środowiska JAVA

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

Bardziej szczegółowo

CUDA. obliczenia na kartach graficznych. Łukasz Ligowski. 11 luty Łukasz Ligowski () CUDA 11 luty / 36

CUDA. obliczenia na kartach graficznych. Łukasz Ligowski. 11 luty Łukasz Ligowski () CUDA 11 luty / 36 CUDA obliczenia na kartach graficznych Łukasz Ligowski 11 luty 2008 Łukasz Ligowski () CUDA 11 luty 2008 1 / 36 Plan 1 Ogólne wrażenia 2 Obliczenia na kartach - wstęp 3 Wprowadzenie 4 CUDA Łukasz Ligowski

Bardziej szczegółowo

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

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

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor

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

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

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

IdyllaOS. Prosty, alternatywny system operacyjny. www.idyllaos.org. Autor: Grzegorz Gliński. Kontakt: milyges@gmail.com

IdyllaOS. Prosty, alternatywny system operacyjny. www.idyllaos.org. Autor: Grzegorz Gliński. Kontakt: milyges@gmail.com IdyllaOS www.idyllaos.org Prosty, alternatywny system operacyjny Autor: Grzegorz Gliński Kontakt: milyges@gmail.com Co to jest IdyllaOS? IdyllaOS jest to mały, prosty, uniksopodobny, wielozadaniowy oraz

Bardziej szczegółowo

Język C, tablice i funkcje (laboratorium)

Język C, tablice i funkcje (laboratorium) Język C, tablice i funkcje (laboratorium) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Wstęp (tablice) Tablica to uporządkowany ciąg elementów tego samego typu, zajmujących ciągły obszar pamięci.

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

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls ) III RPC Zdalne wywoływanie procedur (ang. Remote Procedure Calls ) 1. Koncepcja Aplikacja wywołanie procedury parametry wyniki wykonanie procedury wynik komputer klienta komputer serwera Zaletą takiego

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania

Bardziej szczegółowo

Algorytmika i pseudoprogramowanie

Algorytmika i pseudoprogramowanie Przedmiotowy system oceniania Zawód: Technik Informatyk Nr programu: 312[ 01] /T,SP/MENiS/ 2004.06.14 Przedmiot: Programowanie Strukturalne i Obiektowe Klasa: druga Dział Dopuszczający Dostateczny Dobry

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

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Konwersje liczba napis Ćwiczenia 1. Napisz aplikację, która na wejściu dostaje napis postaci W Roku Pańskim 1345, władca Henryk 12,

Bardziej szczegółowo

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Służą do łatwiejszej kontroli nad stałymi Ustawianie parametrów o ściśle określonym zbiorze wartości

Bardziej szczegółowo

Wstęp Podstawowe informacje o mikroprocesorach AT91SAM9...11

Wstęp Podstawowe informacje o mikroprocesorach AT91SAM9...11 Spis treści 3 Wstęp...9 1. Podstawowe informacje o mikroprocesorach AT91SAM9...11 1.1. Krótka charakterystyka wybranych mikroprocesorów serii AT91SAM9...12 1.1.1. Cechy wspólne... 12 1.1.2. Rodzina SAM9

Bardziej szczegółowo

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak Katedra Elektrotechniki Teoretycznej i Informatyki wykład 12 - sem.iii M. Czyżak Język C - preprocesor Preprocesor C i C++ (cpp) jest programem, który przetwarza tekst programu przed przekazaniem go kompilatorowi.

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

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

1 Powtórzenie wiadomości

1 Powtórzenie wiadomości 1 Powtórzenie wiadomości Zadanie 1 Napisać program, który w trybie dialogu z użytkownikiem przyjmie liczbę całkowitą, a następnie wyświetli informację czy jest to liczba parzysta czy nieparzysta oraz czy

Bardziej szczegółowo

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby Część XI C++ W folderze nazwisko36 program za każdym razem sprawdza oba warunki co niepotrzebnie obciąża procesor. Ten problem można rozwiązać stosując instrukcje if...else Instrukcja if wykonuje polecenie

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

tablica: dane_liczbowe

tablica: dane_liczbowe TABLICE W JĘZYKU C/C++ tablica: dane_liczbowe float dane_liczbowe[5]; dane_liczbowe[0]=12.5; dane_liczbowe[1]=-0.2; dane_liczbowe[2]= 8.0;... 12.5-0.2 8.0...... 0 1 2 3 4 indeksy/numery elementów Tablica

Bardziej szczegółowo

I. Podstawy języka C powtórka

I. Podstawy języka C powtórka I. Podstawy języka C powtórka Zadanie 1. Utwórz zmienne a = 730 (typu int), b = 106 (typu long long), c = 123.45 (typu double) Wypisz następujące komunikaty: Dane sa liczby: a = 730, b = 106 i c = 123.45.

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe Architektury Usług Internetowych Laboratorium 2. Usługi sieciowe Wstęp Celem laboratorium jest zapoznanie się z modelem usług sieciowych na przykładzie prostego serwera Apache Axis2. Apache Axis2 Apache

Bardziej szczegółowo

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki INFORMATYKA Z MERMIDONEM Programowanie Moduł 5 / Notatki Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego. Realizator projektu: Opracowano w ramach projektu

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

Programowanie niskopoziomowe

Programowanie niskopoziomowe W. Complak, J.Kniat, M. Antczak, K. Kwarciak, G. Palik, A. Rybarczyk, Ł. Wielebski Materiały Programowanie niskopoziomowe http://www.cs.put.poznan.pl/arybarczyk/c_w_0.pdf Spis treści 1. Instalacja środowiska

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

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 4 Obsługa plików Kraków 2010 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

Kompilator języka C na procesor 8051 RC51 implementacja

Kompilator języka C na procesor 8051 RC51 implementacja Kompilator języka C na procesor 8051 RC51 implementacja Implementowane typy danych bit 1 bit char lub char signed 8 bitów char unsigned 8 bitów int lub signed int 16 bitów unsigned int 16 bitów long lub

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Podstawy języka skryptowego Lua

Podstawy języka skryptowego Lua Podstawy języka skryptowego Lua Wykorzystanie Lua w C++ Krzysztof Rossa - digiboy rbox_usuń_@o2.pl 2007-07-29 Kontakt z autorem: rbox_usun_@o2.pl Zawartość Wstęp... 3 Po co używamy skryptów?... 3 Przygotowanie

Bardziej szczegółowo

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe zastosowanie języka Java SE Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z

Bardziej szczegółowo

Wstęp do wskaźników w języku ANSI C

Wstęp do wskaźników w języku ANSI C Wstęp do wskaźników w języku ANSI C / Materiał dydaktyczny pomocniczy do przedmiotu Informatyka sem.iii kier. Elektrotechnika/ 1. Wprowadzenie W języku ANSI C dla każdego typu X (wbudowanego, pochodnego,

Bardziej szczegółowo

Wprowadzenie do środowiska Qt Creator

Wprowadzenie do środowiska Qt Creator 1.Instalacja środowiska Qt Creator Qt Creator jest wygodnym środowiskiem programistycznym przeznaczonym do tworzenia projektów, czyli aplikacji zarówno konsolowych, jak i okienkowych z wykorzystaniem biblioteki

Bardziej szczegółowo

Sposoby wykrywania i usuwania błędów. Tomasz Borzyszkowski

Sposoby wykrywania i usuwania błędów. Tomasz Borzyszkowski Sposoby wykrywania i usuwania błędów Tomasz Borzyszkowski Mylić się jest rzeczą ludzką Typy błędów: błędy specyfikacji: źle określone wymagania błędy projektowe: nieodpowiednie struktury danych i algorytmy

Bardziej szczegółowo

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: Podstawy programowania komputerów Computer programming basics Kierunek: Mechatronika Rodzaj przedmiotu: obowiązkowy Rodzaj zajęć: wykład, laboratorium Forma studiów: stacjonarne Poziom

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

Programowanie - instrukcje sterujące

Programowanie - instrukcje sterujące Instytut Informatyki Uniwersytetu Śląskiego Laborki środowisko NetBeans, tworzenie nowego projektu; okno projekty; główne okno programu; package - budowanie paczek z klas; public class JavaApplication

Bardziej szczegółowo

Programowanie niskopoziomowe

Programowanie niskopoziomowe Programowanie niskopoziomowe Programowanie niskopoziomowe w systemie operacyjnym oraz poza nim Tworzenie programu zawierającego procedury asemblerowe 1 Programowanie niskopoziomowe w systemie operacyjnym

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

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

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 04 X 2011 Wszelkie uwagi, poprawki, braki czy sugestie najlepiej wysyłać na maila. 1. wprowadzenie do Linuksa: kompilacja

Bardziej szczegółowo

Język C zajęcia nr 11. Funkcje

Język C zajęcia nr 11. Funkcje Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji

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

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg Programowanie obiektowe Materiały przygotował: mgr inż. Wojciech Frohmberg Konstruktor Konstruktor w językach zorientowanych obiektowo pełni podwójną rolę: przydziela pamięć na obiekt, zdefiniowany klasą

Bardziej szczegółowo

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

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

Bardziej szczegółowo

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ; Ogólna postać definicji tablicy: TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ; np. int tablica [ 10 ]; // 10-cio elementowa tablica liczb całkowitych char tekst

Bardziej szczegółowo

Delphi podstawy programowania. Środowisko Delphi

Delphi podstawy programowania. Środowisko Delphi Delphi podstawy programowania Środowisko Delphi Olsztyn 2004 Delphi Programowanie obiektowe - (object-oriented programming) jest to metodologia tworzeniu programów komputerowych definiująca je jako zbiór

Bardziej szczegółowo

Zadeklarowanie tablicy przypomina analogiczną operację dla zwykłych (skalarnych) zmiennych. Może zatem wyglądać na przykład tak:

Zadeklarowanie tablicy przypomina analogiczną operację dla zwykłych (skalarnych) zmiennych. Może zatem wyglądać na przykład tak: Tablice Tablice jednowymiarowe Jeżeli nasz zestaw danych składa się z wielu drobnych elementów tego samego rodzaju, jego najbardziej naturalnym ekwiwalentem w programowaniu będzie tablica. Tablica (ang.

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Język programowania prosty bezpieczny zorientowany obiektowo wielowątkowy rozproszony przenaszalny interpretowany dynamiczny wydajny Platforma

Bardziej szczegółowo

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki Studia Podyplomowe INFORMATYKA Podstawy Informatyki Wykład V Rzut okiem na języki programowania 1 Kompilacja vs. interpretacja KOMPILACJA Proces, który przetwarza program zapisany w języku programowania,

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