Programowanie równoległe Wprowadzenie do OpenCL. Rafał Skinderowicz
|
|
- Bożena Jankowska
- 8 lat temu
- Przeglądów:
Transkrypt
1 Programowanie równoległe Wprowadzenie do OpenCL Rafał Skinderowicz
2 OpenCL architektura OpenCL Open Computing Language otwarty standard do programowania heterogenicznych platform złożonych ze zbioru CPU, GPU oraz innych urządzeń obliczeniowych OpenCL = interfejs programistyczny (API) + biblioteki + system uruchomieniowy (np. sterownik karty graf.) Specyfikacja OpenCL definiuje OpenCL za pomocą modeli: platformy wykonania pamięci programowania
3 OpenCL platforma Platforma w OpenCL [[to]] system główny (host) połączony z jednym lub więcej urządzeniami OpenCL (devices) Urządzenie składa się z jednej lub więcej jednostek obliczeniowych (compute units, CU) Jednostki obliczeniowe zawierają jeden lub więcej elementów przetwarzania (processing elements, PEs)
4 OpenCL platforma
5 OpenCL platforma Jednostki obliczeniowe (compute units, CU) zawierają m.in. układy pobierania i dekodowania rozkazów, układy planowania i podziału pracy Elementy przetwarzania (processing elements, PE) realizują kolejne instrukcje kernela w modelu SPMD (single program, multiple data) Znaczenie CU i PE zależy od konkretnego typu urządzenia, np.: Nvidia: CU = multiprocesor strumieniowy, PE = rdzeń CUDA AMD: CU = jednostka SIMD (w terminologii AMD), PE = SIMD lane CPU: CU = PE = rdzeń procesora
6 OpenCL model wykonania Program OpenCL uruchamiany jest na hoście, który definiuje kontekst obliczeniowy oraz zarządza wykonaniem na urządzeniach OpenCL wskazanych funkcji kerneli Kontekst to zbiór danych związanych z wykonaniem programu na urządzeniach obliczeniowych Kontekst istnieje w ramach plaformy i odnosi się najczęściej do akceleratorów (urządzeń) tego samego typu Host Platforma 1 Platforma 2 GPU1 GPU2 Kontekst 1 Kontekst obejmuje: Platforma 1 urządzenia OpenCL kernele OpenCL CPU Kontekst 2 programy źródła i binaria z implementacją kerneli obiekty pamięciowe
7 OpenCL model wykonania Host po utworzeniu kontekstu tworzy (jedną lub więcej) powiązaną z nim kolejkę zadań (command queue) Kernele (zadania) do wykonania na urządzeniach OpenCL wstawiane są do kolejki Kernele mogą być wykonywane w sposób asynchroniczny (out-of-order) i w kolejności niezależnej od kolejności zlecania
8 OpenCL model wykonania Program OpenCL składa się ze zbioru kerneli Kod kerneli pisany jest w zmodyfikowanej wersji języka C (ISO C99) Kod kernela kompilowany jest przez system uruchomieniowy OpenCL (np. ster. karty graf.) w trakcie wykonania programu Możliwe jest również skomilowanie kodu kernela wcześniej i korzystanie z wersji binarnej
9 OpenCL model wykonania indeksowanie Dla każdego kernela definiowana jest dyskretna przestrzeń indeksów (index space) Instancja kernela (wątek, work-item) wykonywana jest dla każdego punktu przestrzeni indeksów każdy wątek ma unikalny identyfikator globalny Każdy wątek wykonuje współbieżnie kod kernela, jednak przebieg wykonania może różnić się od pozostałych (np. na skutek rozgałęzienia)
10 OpenCL model wykonania indeksowanie Każdy wątek należy do jednej z grup (work-group), na które podzielona jest przestrzeń indeksów implementowaną w OpenCL przez typ NDRange W ramach grupy każdy wątek ma swój lokalny identyfikator unikalny wew. grupy Każda grupa wątków również ma swój unikalny identyfikator
11 OpenCL przestrzeń indeksów Przestrzeń indeksów w OpenCL definiowana jest za pomocą typu NDRange, który jest 1-, 2- albo 3-wymiarową tablicą liczb całkowitych określających wartości indeksów w każdym kierunku Indeksy globalne i lokalne wątku są N-wymiarowymi krotkami, gdzie N {1, 2, 3} Wątek może zostać zidentyfikowany na podstawie: identyfikatora globalnego identyfikatora lokalnego oraz identyfikatora grupy
12 OpenCL przestrzeń indeksów Przykładowo dla 2-wymiarowej przestrzeni indeksów istnieje następująca zależność między identyfikatorem globalnym (g x, g y ) a lokalnym (s x, s y ): (g x, g y ) = (w x S x + s x + F x, w y S y + s y + F y ), gdzie: (w x, w y ) to identyfikator grupy (S x, S y ) to rozmiar grupy (F x, F y ) to przesunięcie (offset)
13 OpenCL przestrzeń indeksów
14 OpenCL model pamięci Wątki (work-items) wykonujące kod kernela mają dostęp do czterech typów pamięci: pamięci globalnej dostępna do odczytu i zapisu dla wszystkich wątków we wszystkich grupach pamięci stałej fragment pamięci globalnej tylko do odczytu pamięci lokalnej pamięć dostępna dla wątków należących do tej samej grupy pamięci prywatnej każdy wątek ma swoją pamięć prywatną
15 OpenCL model pamięci Rysunek : Schemat modelu pamięci OpenCL, źródło OpenCL Specification, v1.2
16 OpenCL model pamięci Host Kernel Dostęp do pamięci Globalna Stała Lokalna Prywatna Alokacja dynamiczna Alokacja dynamiczna Alokacja dynamiczna Brak Odczyt / zapis Odczyt / zapis Brak dostępu Brak dostępu Brak Alokacja statyczna Alokacja statyczna Alokacja statyczna Odczyt / zapis Tylko odczyt Odczyt / zapis Odczyt / zapis Pamięci hosta i urządzenia są w większości niezależne konieczny jest transfer danych z jednej do drugiej Transfer może odbywać się: za pomocą operacji kopiowania za pomocą odwzorowania (mapowania) z pamięci hosta do pamięci urządzenia
17 OpenCL model programownia OpenCL wspiera dwa rodzaje równoległości w programach: równoległość danych (ang. data parallelism) sekwencja instrukcji wykonywana jest wielokrotnie, ale dla różnych danych, np. kolejnych punktów obrazu przydział danych dla jednostek przetwarzania równoległość zadaniowa (ang. task parallelism) pojedyncza instancja kernela (zadanie) wykonywana jest dla całej przestrzeni indeksowania
18 OpenCL obiekty pamięci Złożone dane wejściowe dla kernela oraz wyniki jego wykonania zapisywane są w obiektach pamięci (memory objects) OpenCL wyróżnia dwa typy obiektów pamięci: buforach tablica jednowymiarowa obrazach 2- lub 3-wymiarowa tekstura lub obraz Bufor jest sekwencją danych typów podstawowych lub zdefiniowanych przez użytkownika Obraz to tablica punktów dostępnych dla kernela w postaci 4 elementowych wektorów wewnętrzny format obrazu może być inny
19 OpenCL API inicjalizacja Platform Devices Context Queue
20 OpenCL API inicjalizacja 1 #include <CL/cl.h> // użyjemy API z języka C int main() { 4 cl_int status; // CL_SUCCESS jeżeli ok, kod błędu wpp. 5 cl_uint num_platforms = 0; 6 // Sprawdź liczbę platform OpenCL 7 status = clgetplatformids(0, NULL, &num_platforms); 8 if (num_platforms == 0 status!= CL_SUCCESS) { return EXIT_FAILURE; } 9 // Pobierz identyfikatory platform 10 std::vector<cl_platform_id> platforms(num_platforms); 11 // Drugi raz clgetplatformids, inne parametry 12 status = clgetplatformids(num_platforms, &platforms.front(), NULL);
21 OpenCL API inicjalizacja 1 // Szukamy platformy z odpowiednim typem urządzenia 2 const cl_device_type kdevicetype = CL_DEVICE_TYPE_GPU; 3 cl_device_id device; // Wystarczy nam pierwsze z brzegu urządzenie 4 cl_platform_id platform; 5 bool found = false; 6 for (cl_uint i = 0; i < num_platforms &&!found; ++i) { 7 cl_uint count = 0; 8 status = clgetdeviceids(platforms[i], kdevicetype, 1, &device, & count); 9 if (count == 1) { // OK, znaleźliśmy 10 platform = platforms[i]; 11 found = true; 12 } 13 }
22 OpenCL API inicjalizacja 1 // Tworzymy kontekst obliczeniowy 2 const cl_context_properties prop[] = { // Parametry określające kontekst 3 CL_CONTEXT_PLATFORM, (cl_context_properties)platform, 4 0 // 0 -> znacznik końca listy parametrów 5 }; 6 cl_context context = clcreatecontextfromtype(prop, kdevicetype, NULL, 7 NULL, &status); 8 if (status!= CL_SUCCESS) { 9 cout << "Problem z tworzeniem kontekstu obliczeniowego. Kod błędu: " 10 << status << endl; 11 } 12 // Tworzymy kolejkę poleceń OpenCL 13 cl_command_queue cmd_queue = clcreatecommandqueue(context, 14 device, 15 0, &status);
23 OpenCL API program OpenCL 1 // Nasz program w postaci łańcucha 2 const char *src = "" 3 " kernel void example( global const float* A," 4 " int k," 5 " global float* C) {" 6 " int id = get_global_id(0);" 7 " C[id] = A[id] * k;" 8 "}"; 9 // Tworzymy obiekt programu OpenCL 10 cl_program program = clcreateprogramwithsource(context, 1, 11 (const char**)&src, 12 NULL, NULL); 13 status = clbuildprogram(program, 1, devices, NULL, NULL, NULL); 14 if (status!= CL_SUCCESS) { 15 char log[1024] = {}; 16 clgetprogrambuildinfo(program, devices[0], CL_PROGRAM_BUILD_LOG, , log, NULL); 18 cout << "Build log:\n" << log << endl; 19 return EXIT_FAILURE; 20 }
24 OpenCL API kernel 1 cl_kernel kernel = clcreatekernel(program, "example", NULL); 2 // Dane wejściowe dla obliczeń 3 cl_float scores[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; 4 const int n = sizeof(scores) / sizeof(scores[0]); 5 // Alokacja buforów na dane wejściowe i wyniki obliczeń kernela 6 cl_mem in_mem = clcreatebuffer(context, CL_MEM_READ_ONLY CL_MEM_COPY_HOST_PTR, 7 sizeof(cl_float4) * n, scores, NULL); 8 cl_mem out_mem = clcreatebuffer(context, CL_MEM_READ_WRITE, 9 sizeof(cl_float) * n, NULL, NULL); 10 cl_int k = 20; // Parametr typu podstawowego 11 // Przekaż parametry dla kernela 12 clsetkernelarg(kernel, 0, sizeof(cl_mem), (void *) &in_mem); 13 clsetkernelarg(kernel, 1, sizeof(cl_int), (void *) &k); 14 clsetkernelarg(kernel, 2, sizeof(cl_mem), (void *) &out_mem);
25 OpenCL API wykonanie kernela 1 const int dimensions = 1; 2 // Definiujemy przestrzeń indeksowania 3 size_t global_work_size[dimensions] = { n }; 4 cl_event event; 5 status = clenqueuendrangekernel(cmd_queue, kernel, dimensions, NULL, 6 global_work_size, NULL, 0, NULL, &event); 7 clwaitforevents(1, &event); // Czekaj na wykonanie kernela 8 // Kopiujemy wynik z pamięci urządzenia do pamięci hosta 9 cl_float result[n] = {}; 10 status = clenqueuereadbuffer(cmd_queue, out_mem, CL_TRUE, 11 0, n * sizeof(cl_float), result, 0, NULL, NULL ); 12 // Pokaż wynik 13 cout << "Result: "; 14 for (int i = 0; i < n; ++i) { 15 cout << result[i] << " "; 16 } 17 cout << endl;
26 OpenCL API sprzątanie 1 clfinish(cmd_queue); // Czekamy na zakończenie zadań 2 // Zwalniamy pamięć 3 clreleasememobject(in_mem); 4 clreleasememobject(out_mem); 5 clreleasekernel(kernel); 6 clreleaseprogram(program); 7 clreleasecommandqueue(cmd_queue); 8 clreleasecontext(context);
27 OpenCL API podsumowanie sekwencji operacji
28 Funkcje dotyczące przestrzeni indeksowania uint get_work_dim() zwraca liczbę wymiarów przestrzeni indeksowania (1,2 lub 3) size_t get_global_size(uint dim) zwraca globalną liczbę wątków dla wymiaru dim size_t get_global_id(uint dim) zwraca globalny identyfikator wątku dla wymiaru dim size_t get_local_size(uint dim) zwraca liczbę wątków dla wymiaru dim w grupie, do której należy wątek size_t get_local_id(uint dim) zwraca identyfikator wątku dla wymiaru dim wew. grupy, do której należy wątek size_t get_num_groups(uint dim) zwraca liczbę grup dla podanego wymiaru size_t get_group_id(uint dim) zwraca identyfikator grupy dal podanego wymiaru size_t get_global_offset(uint dim) zwraca przesunięcie (offset) dla podanego wymiaru; domyślnie 0
29 Funkcje dotyczące przestrzeni indeksowania 1 // Przestrzeń indeksowania definiujemy przy zlecaniu zadania 2 const size_t dim = 2; 3 size_t offset[] = { 0, 0 }; 4 size_t global_threads[] = { 100, 50 }; // 100x50 wątków 5 size_t local_threads[] = { 16, 16 }; // Grupy 16x status = clenqueuendrangekernel(cmd_queue, kernel, 8 dim, 9 offset, // może być NULL dla {0, 0} 10 global_threads, 11 local_threads,// dla NULL automatycznie 12 0, NULL, &event); 1 // Każdy wątek wykonujący kernel otrzymuje indeks w przestrzeni 2 // indeksowania 3 size_t x = get_global_id(0); 4 size_t y = get_global_id(1); 5 // Albo 6 size_t x = get_group_id(0) * get_local_size(0) + get_local_id(0) + 7 get_global_offset(0); 8 size_t y = get_group_id(1) * get_local_size(1) + get_local_id(1) + 9 get_global_offset(1);
30 OpenCL a CUDA CUDA Krata (grid) Blok (block) Wątek (thread) OpenCL Przestrzeń indeksowania (index space) Grupa zadań (work-group) Zadanie (work-item)
Programowanie akceleratorów specyfikacja OpenCL. Krzysztof Banaś Obliczenia równoległe 1
Programowanie akceleratorów specyfikacja OpenCL Krzysztof Banaś Obliczenia równoległe 1 OpenCL OpenCL Open Computing Language język i środowisko programowania akceleratorów (procesorów wspierających standardowe
Wprowadzenie do GPGPU
(py)opencl na kartach graficznych: Wprowadzenie do GPGPU kolodziejj.info Tylko takie GPU? @ CSIRO Tylko takie GPU? @ nvidia @ nvidia @ benchmark.pl wyszukiwanie obiektów na zdjęciu CPU-bound 36 MPix wyszukiwanie
Programowanie procesorów graficznych do obliczeń ogólnego przeznaczenia GPGPU
Programowanie procesorów graficznych do obliczeń ogólnego przeznaczenia GPGPU 1 GPGPU motywacja 2 GPGPU motywacja 3 Tendencje Mało dużych rdzeni rozbudowane potoki wykonanie poza kolejnością wyrafinowane
Wprowadzenie do GPGPU
(py)opencl na kartach graficznych: Wprowadzenie do GPGPU kolodziejj.info wyszukiwanie obiektów na zdjęciu CPU-bound 32 MPix implementacje: Matlab: 6 godzin Python + OpenCL: 1 minuta Tak, słownie: jedna
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
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żą
Przetwarzanie Równoległe i Rozproszone
POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI I TECHNOLOGII INFORMACYJNYCH Przetwarzanie Równoległe i Rozproszone www.pk.edu.pl/~zk/prir_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl
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
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ń
Wstęp do OpenCL. Czyli jak wykorzystać moc drzemiącą w GPU. Marek Zając 2013r. zajacmarek.com
Wstęp do OpenCL Czyli jak wykorzystać moc drzemiącą w GPU Marek Zając 2013r. zajacmarek.com Przez większość użytkowników komputerów karta graficzna kojarzona jest jedynie jako element, który służy do wyświetlania
DYNAMICZNE PRZYDZIELANIE PAMIECI
DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne
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
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
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.
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
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
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
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
Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1
Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie
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
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 +
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,
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
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
Programowanie w języku C++
Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona
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
Programowanie procesorów graficznych GPU
Programowanie procesorów graficznych GPU Uniwersytet Marii Curie-Skłodowskiej Wydział Matematyki, Fizyki i Informatyki Instytut Informatyki Programowanie procesorów graficznych GPU Marcin Denkowski Paweł
Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1
Tablice i struktury czyli złożone typy danych. Programowanie Proceduralne 1 Tablica przechowuje elementy tego samego typu struktura jednorodna, homogeniczna Elementy identyfikowane liczbami (indeksem).
Programowanie procesorów graficznych GPGPU
Programowanie procesorów graficznych GPGPU 1 OpenCL projektowanie kerneli Przypomnienie: kernel program realizowany przez urządzenie OpenCL wątek (work item) rdzeń (processing element): jeden wątek wykonywany
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ę
ROZPROSZONY SYSTEM DO KRYPTOANALIZY SZYFRÓW OPARTYCH NA KRZYWYCH ELIPTYCZNYCH
ROZPROSZONY SYSTEM DO KRYPTOANALIZY SZYFRÓW OPARTYCH NA KRZYWYCH ELIPTYCZNYCH Krzysztof Skowron, Mariusz Rawski, Paweł Tomaszewicz 1/23 CEL wykorzystanie środowiska Altera OpenCL do celów akceleracji obliczeń
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
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
Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1
Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie
Opis protokołu RPC. Grzegorz Maj nr indeksu:
Opis protokołu RPC Grzegorz Maj nr indeksu: 236095 1 Streszczenie Niniejszy dokument opisuje specyfikację protokołu RQP (Remote Queues Protocol). W jego skład wchodzą: opis celów protokołu; opis założeń
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
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
PARADYGMATY PROGRAMOWANIA Wykład 3
PARADYGMATY PROGRAMOWANIA Wykład 3 Definiowanie operatorów i ich przeciążanie Przykłady zastosowania operatorów: a) operator podstawienia ( = ) obiektów o złożonej strukturze, b) operatory działania na
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
Programowanie współbieżne i rozproszone
Programowanie współbieżne i rozproszone WYKŁAD 1 dr inż. Literatura ogólna Ben-Ari, M.: Podstawy programowania współbieżnego i rozproszonego. Wydawnictwa Naukowo-Techniczne, Warszawa, 2009. Czech, Z.J:
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
Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:
Wskaźniki nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny: typ nw; /* definicja zmiennej nw typu typ */ typ *w_nw; /* definicja
Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119
Tablice Tablica to struktura danych, która może przechowywać wiele wartości tego samego typu. Na przykład tablica może zawierać: 10 wartości typu int opisujących liczbę studentów przyjętych na kierunek
Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz
Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania Zofia Kruczkiewicz Zakres Funkcje przetwarzające teksty (biblioteka ) - tworzenie własnych
Jednostka GPU oraz OpenCL aplikacje
Jednostka GPU oraz OpenCL aplikacje W artykule zaprezentowano przykładową aplikacją symulowanie sił oddziaływujących na cząsteczki oraz animowanie ich ruchu na ekranie zestawu ewaluacyjnego i.mx6 Sabre.
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!
Programowanie kart graficznych
Programowanie kart graficznych Sławomir Wernikowski swernikowski@wi.zut.edu.pl Wykład #1: Łagodne wprowadzenie do programowania w technologii NVIDIA CUDA Terminologia: Co to jest GPGPU? General-Purpose
Języki programowania obiektowego Nieobiektowe elementy języka C++
Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Przetwarzanie tablic znaków Łańcuchy znakowe jako tablice znaków
Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula
Programowanie i struktury danych Wykład 4 Dr Piotr ybula Typ wska ź nikowy int* pointer; //wskaźnik do zmiennych typu int pozwala na dostęp do dowolnego miejsca pamięci (zmienne
Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński
Języki programowania Część siódma Przetwarzanie plików amorficznych Konwencja języka C Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie
Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego
Wątki Wątek - definicja Ciąg instrukcji (podprogram) który może być wykonywane współbieżnie (równolegle) z innymi programami, Wątki działają w ramach tego samego procesu Współdzielą dane (mogą operować
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
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b)
Wskaźniki. Programowanie Proceduralne 1
Wskaźniki Programowanie Proceduralne 1 Adresy zmiennych Sterta 1 #include 2 3 int a = 2 ; 4 5 int main ( ) 6 { 7 int b = 3 ; 8 9 printf ( " adres zmiennej a %p\n", &a ) ; 10 printf ( " adres
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
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
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
Libra.cs.put.poznan.pl/mailman/listinfo/skisrkolo.
Konrad Szałkowski Libra.cs.put.poznan.pl/mailman/listinfo/skisrkolo Skisr-kolo@libra.cs.put.poznan.pl Po co? Krótka prezentacja Skąd? Dlaczego? Gdzie? Gdzie nie? Jak? CPU Pamięć DDR3-19200 19,2 GB/s Wydajność
Programowanie w językach
Programowanie w językach wysokiego poziomu Obsługa plików za pomocą strumieni Elektronika i Telekomunikacja, semestr III rok akademicki 2013/2014 dr inż. Paweł Myszkowski Plan zajęć a) otwieranie i zamykanie
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
Wstęp. Przetwarzanie współbieżne, równoległe i rozproszone
Wstęp. 1 Cel zajęć Zapoznanie z technikami i narzędziami programistycznymi służącymi do tworzenia programów równoległych Przedstawienie sprzętu wykorzystywanego do obliczeń równoległych Nauczenie sposobów
Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this
Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE
ZASADY PROGRAMOWANIA KOMPUTERÓW
POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.
Programowanie i struktury danych
Programowanie i struktury danych 1 / 19 Dynamiczne struktury danych Dynamiczną strukturą danych nazywamy taka strukturę danych, której rozmiar, a więc liczba przechowywanych w niej danych, może się dowolnie
Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.
Przygotować program tworzący tablicę dwuwymiarową zawierającą zestawy 10 2, 10 4, 10 6 liczb losowych zmiennoprzecinkowych. Korzystając z funkcji bibliotecznych uporządkować zawartość każdego (a) wiersza
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
Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Tablice Wskaźniki Adresy pamięci Operator adresu
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
Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński
Języki programowania Część druga Przetwarzanie tablic znaków Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim
Podstawy programowania komputerów
Podstawy programowania komputerów Wykład 10: Sterowanie pamięcią w C Pamięć na stosie!każdy program napisany w języku C ma dostęp do dwóch obszarów pamięci - stosu i sterty, w których może być przechowywana
Nowoczesne technologie przetwarzania informacji
Projekt Nowe metody nauczania w matematyce Nr POKL.09.04.00-14-133/11 Nowoczesne technologie przetwarzania informacji Mgr Maciej Cytowski (ICM UW) Lekcja 2: Podstawowe mechanizmy programowania równoległego
Podstawy programowania
Podstawy programowania Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót treści wykładu,
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ą
Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej. Krzysztof Banaś Obliczenia równoległe 1
Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej Krzysztof Banaś Obliczenia równoległe 1 Model równoległości danych Model SPMD (pierwotnie dla maszyn SIMD) Zrównoleglenie
// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.
Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy
Programowanie w modelu przesyłania komunikatów specyfikacja MPI. Krzysztof Banaś Obliczenia równoległe 1
Programowanie w modelu przesyłania komunikatów specyfikacja MPI Krzysztof Banaś Obliczenia równoległe 1 Model przesyłania komunikatów Paradygmat send receive wysyłanie komunikatu: send( cel, identyfikator_komunikatu,
Lab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
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
część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia
Język ANSI C część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia najbardziej podstawowe operacje na wskaźnikach int x = 1, y = 2, Tab[10]; int *ip; // czy
Programowanie obiektowe W3
Programowanie obiektowe W3 Przegląd typów strukturalnych w C++ : tablice statyczne i dynamiczne Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki Typy złożone: tablice
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
Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011
Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Załóżmy, że uprawiamy jogging i chcemy monitorować swoje postępy. W tym celu napiszemy program, który zlicza, ile czasu
DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE
DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE Stała tekstowa / łańcuchowa jest tablicą znaków zakończoną znakiem o kodzie: 0 np. stała łańcuchowa: Jestem tekstem ASCII... J e s t e m t e k s t e m \0...
Podstawy programowania w języku C++
Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski
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ą
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
Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1
Typy złożone Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy podstawowe Typy całkowite: char short int long Typy zmiennopozycyjne float double Modyfikatory : unsigned, signed Typ wskaźnikowy
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
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Funkcje w języku C Zasięg zmiennych Przekazywanie
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.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja
Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB
Wykład 3 Procesy i wątki Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Pojęcie procesu Program = plik wykonywalny na dysku Proces = uruchomiony i wykonywany program w pamięci
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
Wykład 1: Wskaźniki i zmienne dynamiczne
Programowanie obiektowe Wykład 1: Wskaźniki i zmienne dynamiczne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Podstawy programowania w C++ Wskaźniki 2 dr Artur Bartoszewski - Programowanie
> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki
> C++ dynamiczna alokacja/rezerwacja/przydział pamięci Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 1429536600 > Dzisiejsze zajęcia sponsorują słówka: new oraz delete
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
Architektury komputerów Architektury i wydajność. Tomasz Dziubich
Architektury komputerów Architektury i wydajność Tomasz Dziubich Przetwarzanie potokowe Przetwarzanie sekwencyjne Przetwarzanie potokowe Architektura superpotokowa W przetwarzaniu potokowym podczas niektórych
Linux Kernel III. Character devices
Linux Kernel III Character devices Urządzenia systemu Linux (I) Character device Block device Network device Do urządzenia piszemy jak do pliku, Dozwolone działania: open, close, read, write, Np. /dev/tty1.
Biblioteka standardowa - operacje wejścia/wyjścia
Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline