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, marqs@man.poznan.pl Michał Kierzynka, michal.kierzynka@man.poznan.pl

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

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

Bardziej szczegółowo

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

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

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

Bardziej szczegółowo

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 Współbieżne

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

Bardziej szczegółowo

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

Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA

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

Bardziej szczegółowo

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

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

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

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą

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

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

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

Bardziej szczegółowo

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

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

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

Bardziej szczegółowo

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

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Przemysław Gawroński D-10, p. 234 Wykład 1 8 października 2018 (Wykład 1) Wstęp do programowania 8 października 2018 1 / 12 Outline 1 Literatura 2 Programowanie? 3 Hello World (Wykład

Bardziej szczegółowo

MATERIAŁY DO ZAJĘĆ I. Podstawowe pojęcia. Algorytm. Spis treści Przepis

MATERIAŁY DO ZAJĘĆ I. Podstawowe pojęcia. Algorytm. Spis treści Przepis MATERIAŁY DO ZAJĘĆ I Podstawowe pojęcia Spis treści I. Algorytm II. Schemat blokowy III. Struktury danych IV. Program komputerowy V. Opis środowiska programistycznego VI. Obsługa wejścia wyjścia VII. Przykład

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

Zadanie 2: Arytmetyka symboli

Zadanie 2: Arytmetyka symboli 1 Cel ćwiczenia Zadanie 2: Arytmetyka symboli Wykształcenie umiejętności abstrahowania operacji arytmetycznych. Zapoznanie się i przećwiczenie mechanizmu tworzenia przeciążeń funkcji operatorowych. Utrwalenie

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

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

Bardziej szczegółowo

Szablony funkcji i klas (templates)

Szablony funkcji i klas (templates) Instrukcja laboratoryjna nr 3 Programowanie w języku C 2 (C++ poziom zaawansowany) Szablony funkcji i klas (templates) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp

Bardziej szczegółowo

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 8 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Biblioteka GSL Na podstawie: https://www.gnu.org/software/gsl/doc/html/index.html

Bardziej szczegółowo

1 Zapoznanie się ze środowiskiem Xenomai.

1 Zapoznanie się ze środowiskiem Xenomai. 1 Zapoznanie się ze środowiskiem Xenomai. Wszystkie ćwiczenia oraz programy opracowane zostały w Xenomai w wersji 2.5.6. Dlatego też odwołania do dokumentacji dotyczą dokumentu pod adresem: http://www.xenomai.org/documentation/xenomai-2.5/html/api/

Bardziej szczegółowo

CUDA. cudniejsze przyk ady

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

Bardziej szczegółowo

Argumenty wywołania programu, operacje na plikach

Argumenty wywołania programu, operacje na plikach Temat zajęć: Argumenty wywołania programu, operacje na plikach Autor: mgr inż. Sławomir Samolej Zagadnienie 1. (Zmienne statyczne) W języku C można decydować o sposobie przechowywania zmiennych. Decydują

Bardziej szczegółowo

Podstawy programowania. Wykład 9 Preprocesor i modularna struktura programów. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 9 Preprocesor i modularna struktura programów. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 9 Preprocesor i modularna struktura programów Krzysztof Banaś Podstawy programowania 1 Programy Większość programów w C stanowią rozbudowane kody, definiujące wiele funkcji

Bardziej szczegółowo

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji

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

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

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR Zadanie polega na napisaniu pierwszego programu w języku C, jego poprawnej kompilacji i wgraniu na mikrokontroler. W tym celu należy zapoznać

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

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę. Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji

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

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

Wykład 3 Składnia języka C# (cz. 2)

Wykład 3 Składnia języka C# (cz. 2) Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest

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

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

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

Stałe, tablice dynamiczne i wielowymiarowe

Stałe, tablice dynamiczne i wielowymiarowe Stałe, tablice dynamiczne i wielowymiarowe tylko do odczytu STAŁE - CONST tablice: const int dni_miesiaca[12]=31,28,31,30,31,30,31,31,30,31,30,31; const słowo kluczowe const sprawia, że wartość zmiennej

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

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

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

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p. Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy Laboratorium 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Dyrektywy preprocesora #include #define Interakcja

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

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

Przekazywanie argumentów wskaźniki

Przekazywanie argumentów wskaźniki Przekazywanie argumentów wskaźniki klasyczne wywołanie wyliczenie i zwrotne przekazanie tylko jednej wielkości moŝliwość uŝycia zmiennych globalnych niebezpieczeństwa z tym związane wyjście wywołanie funkcji

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

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

Programowanie i techniki algorytmiczne

Programowanie i techniki algorytmiczne Temat 2. Programowanie i techniki algorytmiczne Realizacja podstawy programowej 1) wyjaśnia pojęcie algorytmu, podaje odpowiednie przykłady algorytmów rozwiązywania różnych 2) formułuje ścisły opis prostej

Bardziej szczegółowo

Programowanie kart graficznych. Sprzęt i obliczenia

Programowanie kart graficznych. Sprzęt i obliczenia Programowanie kart graficznych Sprzęt i obliczenia CUDA Szczegóły implementacji sprzętowej Architektura SIMT: podstawą konstrukcji urządzeń CUDA jest skalowalna macierz wielowątkowych multiprocesorów strumieniowych

Bardziej szczegółowo

i3: internet - infrastruktury - innowacje

i3: internet - infrastruktury - innowacje i3: internet - infrastruktury - innowacje Wykorzystanie procesorów graficznych do akceleracji obliczeń w modelu geofizycznym EULAG Roman Wyrzykowski Krzysztof Rojek Łukasz Szustak [roman, krojek, lszustak]@icis.pcz.pl

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

Ć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

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

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

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok

Bardziej szczegółowo

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Zajęcia nr 1 Podstawy programowania dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Ramowy program warsztatów 1. Pierwsze: Podstawy programowania 2. Drugie:

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

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

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. Struktura programu Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. W ostatnich latach najbardziej używanym stylem oprogramowania

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

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

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

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1

Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1 Procesy i wątki Krzysztof Banaś Obliczenia równoległe 1 Procesy i wątki Proces: ciąg rozkazów (wątek główny) i ewentualnie inne wątki stos (wątku głównego) przestrzeń adresowa dodatkowe elementy tworzące

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

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

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

Bardziej szczegółowo

7. Pętle for. Przykłady

7. Pętle for. Przykłady . Pętle for Przykłady.1. Bez użycia pętli while ani rekurencji, napisz program, który wypisze na ekran kolejne liczby naturalne od 0 do pewnego danego n. 5 int n; 6 cin >> n; 8 for (int i = 0; i

Bardziej szczegółowo

Make jest programem komputerowym automatyzującym proces kompilacji programów, na które składa się wiele zależnych od siebie plików.

Make jest programem komputerowym automatyzującym proces kompilacji programów, na które składa się wiele zależnych od siebie plików. Spis treści 1 Krótkie wprowadzenie do makefile'a 1.1 Typowa reguła programu make 1.2 Zmienne w pliku Makefile 1.3 Zmienne standardowe 1.4 Zmienne automatyczne 1.5 Więcej o regułach 1.5.1 Reguły z wzorcem

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

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

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

Bardziej szczegółowo

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, Materiał

Bardziej szczegółowo

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

Programowanie kart graficznych. Architektura i API część 2 Programowanie kart graficznych Architektura i API część 2 CUDA hierarchia pamięci c.d. Globalna pamięć urządzenia: funkcje CUDA API takie jak cudamalloc() i cudafree() z założenia służą do manipulowania

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

WPROWADZENIE DO INFORMATYKI

WPROWADZENIE DO INFORMATYKI J.NAWROCKI, M. ANTCZAK, H. ĆWIEK, W. FROHMBERG, A. HOFFA, M. KIERZYNKA, S. WĄSIK WPROWADZENIE DO INFORMATYKI PROGRAMOWANIE IMPERATYWNE ŚRODOWISKO URUCHOMIENIOWE I. INSTALACJA I KONFIGURACJA ECLIPSE CDT

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

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

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

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny Klasa 2 INFORMATYKA dla szkół ponadgimnazjalnych zakres rozszerzony Założone osiągnięcia ucznia wymagania edukacyjne na poszczególne oceny Algorytmy 2 3 4 5 6 Wie, co to jest algorytm. Wymienia przykłady

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni Wykład 7 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Praca z repozytorium kodu Na podstawie: https://www.gnu.org/software/gsl/doc/html/index.html

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

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