Programowanie akceleratorów specyfikacja OpenCL. Krzysztof Banaś Obliczenia równoległe 1

Podobne dokumenty
Programowanie procesorów graficznych do obliczeń ogólnego przeznaczenia GPGPU

Programowanie równoległe Wprowadzenie do OpenCL. Rafał Skinderowicz

Wstęp do OpenCL. Czyli jak wykorzystać moc drzemiącą w GPU. Marek Zając 2013r. zajacmarek.com

Programowanie procesorów graficznych GPGPU

i3: internet - infrastruktury - innowacje

Wprowadzenie do GPGPU

Programowanie procesorów graficznych GPU

Wprowadzenie do GPGPU

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

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

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

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

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

Moc płynąca z kart graficznych

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

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

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

Przetwarzanie Równoległe i Rozproszone

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

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Programowanie Równoległe wykład, CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

Programowanie współbieżne i rozproszone

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

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

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

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

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

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

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

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

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

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów

ROZPROSZONY SYSTEM DO KRYPTOANALIZY SZYFRÓW OPARTYCH NA KRZYWYCH ELIPTYCZNYCH

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

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

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

Podstawy programowania. Wykład 1 Wstęp. Krzysztof Banaś Podstawy programowania 1

6. Algorytmy ochrony przed zagłodzeniem dla systemów Linux i Windows NT.

Architektury komputerów Architektury i wydajność. Tomasz Dziubich

Programowanie obiektowe zastosowanie języka Java SE

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

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

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

Linux Kernel III. Character devices

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

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

Programowanie aplikacji równoległych i rozproszonych

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

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

Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej. Krzysztof Banaś Obliczenia równoległe 1

Programowanie Współbieżne

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

Programowanie w języku C++ Grażyna Koba

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

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

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński

Kompilator języka C na procesor 8051 RC51 implementacja

Programowanie Niskopoziomowe

MMX i SSE. Zbigniew Koza. Wydział Fizyki i Astronomii Uniwersytet Wrocławski. Wrocław, 10 marca Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16

Jednostka GPU oraz OpenCL aplikacje

Raport Hurtownie Danych

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

Obliczenia Wysokiej Wydajności

Wysokowydajna implementacja kodów nadmiarowych typu "erasure codes" z wykorzystaniem architektur wielordzeniowych

Programowanie sterowników przemysłowych / Jerzy Kasprzyk. wyd. 2 1 dodr. (PWN). Warszawa, Spis treści

Nowoczesne technologie przetwarzania informacji

Wprowadzenie do biblioteki klas C++

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

1.Wstęp. 2.Generowanie systemu w EDK

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

Tesla. Architektura Fermi

Wstęp do programowania

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

Tworzenie oprogramowania

WIDMOWA I FALKOWA ANALIZA PRĄDU SILNIKA LSPMSM Z WYKORZYSTANIEM OPENCL

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Programowanie kart graficznych

Java EE produkcja oprogramowania

XIII International PhD Workshop OWD 2011, October 2011 REALIZACJA OBLICZEŃ W ARCHITEKTURZE MASOWO RÓWNOLEGŁEJ W HETEROGENICZNYCH SYSTEMACH

Podstawy Programowania Obiektowego

Wprowadzenie do programowania

Programowanie w C++ Wykład 10. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 10) Programowanie w C++ 1 / 21

76.Struktura oprogramowania rozproszonego.

Szablony funkcji i szablony klas

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Java jako język programowania

która metoda jest najlepsza

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

Wydajność obliczeń a architektura procesorów. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

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

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

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

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

PARADYGMATY PROGRAMOWANIA Wykład 4

Transkrypt:

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 CPU Tzw. de facto standard, tworzony i wspierany przez grupę Khronos Na bazie języka C (z uwzględnieniem C++, niezależnie od standardu powstają wersje dla innych języków Z założenia przeznaczony dla rozmaitych akceleratorów (CPU, karty Xeon Phi, GPU, procesory hybrydowe, takie jak IBM Cell różne architektury, różni producenci Krzysztof Banaś Obliczenia równoległe 2

OpenCL Specyfikacja definiuje cztery modele : Model platformy Model wykonania Model pamięci Model programowania Dwa pierwsze modele dotyczą organizacji pracy Współpraca systemu bazowego i akceleratora Tworzenie i uruchamianie programów na akceleratorze Dwa ostatnie ujmują specyfikę programowania akceleratorów Abstrakcyjny model w ramach OpenCL Możliwość uwzględnienia specyficznych cech konkretnych akceleratorów (GPU, Cell, Xeon Phi Krzysztof Banaś Obliczenia równoległe 3

OpenCL model platformy Krzysztof Banaś Obliczenia równoległe 4

OpenCL model platformy Model platformy abstrakcyjny model sprzętu Host system podstawowy (program uruchomiony na systemie hosta zarządza programami na akceleratorach Device akcelerator (urządzenie?, diwajs? Platforma jest jednocześnie pojedynczym wybranym środowiskiem wykonania programu na akceleratorze (na jednym komputerze można zainstalować i uruchamiać wiele platform Krzysztof Banaś Obliczenia równoległe 5

OpenCL podstawowe funkcje cl_int clgetplatformids( cl_uint num_entries, cl_platform_id *platforms, cl_uint *num_platforms cl_int clgetplatforminfo( cl_platform_id platform, cl_platform_info param_name, size_t param_value_size, void *param_value, size_t *param_value_size_ret Parametry clgetplatforminfo: CL_PLATFORM_ PROFILE VERSION NAME VENDOR EXTENSION Krzysztof Banaś Obliczenia równoległe 6

OpenCL model platformy Akcelerator device (urządzenie z interfejsem pamięci Składa się z compute units procesory?, rdzenie? (posiadają jednostki pobierania i dekodowania rozkazów Każdy compute unit składa się z processing elements rdzenie?, potoki? (służą do ostatecznej realizacji rozkazów Znaczenie pojęć compute unit (CU i processing element (PE może być różne dla różnych typów akceleratorów dlatego projektując oprogramowanie używać będziemy tylko określeń abstrakcyjnych CU i PE W fazie optymalizacji dla konkretnej architektury należy uwzględnić rzeczywiste znaczenie CU i PE Krzysztof Banaś Obliczenia równoległe 7

OpenCL model platformy Standardowy procesor CU = PE = rdzeń AMD Radeon CU = SIMD unit, PE = SIMD lane NVIDIA GeForce CU = SM, PE = CUDA core IBM Cell CU = PE = SPE Intel Xeon Phi CU = PE = rdzeń Krzysztof Banaś Obliczenia równoległe 8

OpenCL podstawowe funkcje cl_int clgetdeviceids ( cl_platform_id platform, cl_device_type device_type, cl_uint num_entries, cl_device_id *devices, cl_uint *num_devices Podstawowe typy: CL_DEVICE_TYPE_CPU CL_DEVICE_TYPE_GPU CL_DEVICE_TYPE_ACCELERATOR + CL_DEVICE_TYPE_ALL dla wszystkich typów Krzysztof Banaś Obliczenia równoległe 9

OpenCL podstawowe funkcje cl_int clgetdeviceinfo ( cl_device_id device, cl_device_info param_name, size_t param_value_size, void *param_value, size_t *param_value_size_ret Ponad 70 możliwych parametrów, m. in.: CL_DEVICE_GLOBAL_MEM_SIZE, CL_DEVICE_LOCAL_MEM_SIZE, CL_DEVICE_MAX_COMPUTE_UNITS, CL_DEVICE_MAX_CLOCK_FREQUENCY Oraz wiele innych związanych np. z modelami pamięci i programowania Krzysztof Banaś Obliczenia równoległe 10

OpenCL model wykonania Kontekst zestaw danych wykorzystywanych do zarządzania wykonaniem programu na akceleratorach Pojedynczy kontekst istnieje w ramach konkretnej platformy i odnosi się do grupy akceleratorów (najczęściej tego samego typu OpenCL wyróżnia 3 podstawowe typy akceleratorów: CPU GPU ACCELERATOR Krzysztof Banaś Obliczenia równoległe 11

OpenCL podstawowe funkcje cl_context clcreatecontext( const cl_context_properties *properties, cl_uint num_devices, const cl_device_id *devices, (void CL_CALLBACK *pfn_notify ( const char *errinfo, const void *private_info, size_t cb, void *user_data, void *user_data, cl_int *errcode_ret Krzysztof Banaś Obliczenia równoległe 12

OpenCL podstawowe funkcje cl_context clcreatecontextfromtype( const cl_context_properties *properties, cl_device_type device_type, const cl_device_id *devices, (void CL_CALLBACK *pfn_notify ( const char *errinfo, const void *private_info, size_t cb, void *user_data, void *user_data, cl_int *errcode_ret Krzysztof Banaś Obliczenia równoległe 13

OpenCL podstawowe funkcje cl_int clgetcontextinfo ( cl_context context, cl_context_info param_name, size_t param_value_size, void *param_value, size_t *param_value_size_ret Przykładowe parametry: CL_CONTEXT_NUM_DEVICES, CL_CONTEXT_DEVICES Krzysztof Banaś Obliczenia równoległe 14

OpenCL model wykonania OpenCL dopuszcza możliwość realizacji poleceń przez akceleratory w sposób asynchroniczny i w kolejności niezależnej od kolejności zlecania Polecenia zlecane do wykonania na akceleratorze ustawiane są w kolejce command queue Pojedyncza kolejka przypisana jest do pojedynczego akceleratora w ramach konkretnego kontekstu Krzysztof Banaś Obliczenia równoległe 15

OpenCL podstawowe funkcje cl_command_queue clcreatecommandqueue( cl_context context, cl_device_id device, cl_command_queue_properties properties, cl_int *errcode_ret Własności: CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE CL_QUEUE_PROFILING_ENABLE Krzysztof Banaś Obliczenia równoległe 16

OpenCL model wykonania Pojedyncze polecenie zlecane do wykonania akceleratorowi jest funkcją zwaną kernelem Kod składający się z jednego lub kilku kerneli nazywany jest programem Program jest tworzony z kodu źródłowego napisanego w języku OpenCL będącym ograniczona wersją C99 Podstawowym sposobem tworzenia programu jest kompilacja w trakcie wykonania programu po stronie hosta Możliwe jest także wcześniejsze kompilowanie kodu i tworzenie programu z pliku binarnego Krzysztof Banaś Obliczenia równoległe 17

OpenCL model wykonania Podstawowym założeniem OpenCL jest przenośność kodu Poprawny kod źródłowy OpenCL powinien zostać skompilowany i uruchomiony przez dowolne środowisko wykonania dla dowolnego akceleratora Do programu zawierającego wywołania kerneli OpenCL dołącza się (linkuje tylko bibliotekę konkretnego środowiska wykonania, która powinna poprawnie utworzyć kernele i zarządzać ich wykonaniem Procedury biblioteki OpenCL mogą odwoływać się do kompilatorów i ich bibliotek dedykowanych do konkretnego akceleratora Krzysztof Banaś Obliczenia równoległe 18

OpenCL podstawowe funkcje cl_program clcreateprogramwithsource ( cl_context context, cl_uint count, const char **strings, const size_t *lengths, cl_int *errcode_ret cl_program clcreateprogramwithbinary ( cl_context context, cl_uint num_devices, const cl_device_id *device_list, const size_t *lengths, const unsigned char **binaries, cl_int *binary_status, cl_int *errcode_ret Krzysztof Banaś Obliczenia równoległe 19

OpenCL podstawowe funkcje cl_int clbuildprogram ( cl_program program, cl_uint num_devices, const cl_device_id *device_list, const char *options, void (CL_CALLBACK *pfn_notify( cl_program program, void *user_data, void *user_data Standard OpenCL definiuje kilkanaście opcji kompilacji, można także przesyłać opcje dla konkretnych środowisk programowania Krzysztof Banaś Obliczenia równoległe 20

OpenCL podstawowe funkcje cl_int clcompileprogram ( cl_program program, cl_uint num_devices, const cl_device_id *device_list, const char *options, cl_uint num_input_headers, const cl_program *input_headers, const char **header_include_names, void (CL_CALLBACK *pfn_notify( cl_program program, void *user_data, void *user_data cl_program cllinkprogram ( cl_context context, cl_uint num_devices, const cl_device_id *device_list, const char *options, cl_uint num_input_programs, const cl_program *input_programs, void (CL_CALLBACK *pfn_notify ( cl_program program, void *user_data, void *user_data, cl_int *errcode_ret Krzysztof Banaś Obliczenia równoległe 21

OpenCL podstawowe funkcje cl_int clgetprograminfo ( cl_program program, cl_program_info param_name, size_t param_value_size, void *param_value, size_t *param_value_size_ret cl_int clgetprogrambuildinfo ( cl_program program, cl_device_id device, cl_program_build_info param_name, size_t param_value_size, void *param_value, size_t *param_value_size_ret Parametry clgetprograminfo: REFERENCE_COUNT CONTEXT NUM_DEVICES DEVICES BINARY_SIZES BINARIES NUM_KERNELS KERNEL_NAMES SOURCE clgetprogrambuildinfo: BUILD_STATUS BUILD_OPTIONS BUILD_LOG BINARY_TYPE Krzysztof Banaś Obliczenia równoległe 22

OpenCL podstawowe funkcje cl_kernel clcreatekernel ( cl_program program, const char *kernel_name, cl_int *errcode_ret cl_int clsetkernelarg ( cl_kernel kernel, cl_uint arg_index, size_t arg_size, const void *arg_value Krzysztof Banaś Obliczenia równoległe 23

OpenCL model wykonania OpenCL umożliwia ograniczone zarządzanie obiektami w pamięci akceleratora przez program po stronie hosta Wykorzystuje się w tym celu pojęcie obiektu pamięci memory object Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory buffers, standardowe tablice Obrazy images, obiekty o zoptymalizowanym, charakterystycznym sposobie przechowywania, których specyfikacja umożliwia zastosowanie formatów używanych przez procesory graficzne do przechowywania rzeczywistych obrazów Bufory i obrazy mogę być tworzone, niszczone, ich zawartość kopiowana z pamięci hosta do pamięci akceleratora i z pamięci akceleratora do pamięci hosta Krzysztof Banaś Obliczenia równoległe 24

Tworzenie obiektów w pamięci GPU cl_mem clcreatebuffer ( cl_context context, cl_mem_flags flags, size_t size, void *host_ptr, cl_int *errcode_ret; parametry typu cl_mem_flags: CL_MEM_READ_WRITE CL_MEM_WRITE_ONLY CL_MEM_READ_ONLY CL_MEM_USE_HOST_PTR CL_MEM_ALLOC_HOST_PTR CL_MEM_COPY_HOST_PTR Krzysztof Banaś Obliczenia równoległe 25

OpenCL model wykonania Program uruchomiony po stronie hosta zleca zadania do wykonania przez akcelerator Pojedyncze zlecenie jest nazywane zdarzeniem event Dzięki zdarzeniom system wykonania OpenCL może wprowadzić synchronizację realizowanych operacji Zależności między operacjami Oczekiwanie na zakończenie operacji Zdarzenia umożliwiają także pomiar czasu realizacji operacji i tworzenie profilu wykonania programu Zdarzeniami są np.: kopiowanie danych do i z pamięci akceleratora uruchomienie programu na akceleratorze Krzysztof Banaś Obliczenia równoległe 26

OpenCL podstawowe funkcje cl_int clenqueuewritebuffer ( cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write, size_t offset, size_t cb, const void *ptr, cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event Krzysztof Banaś Obliczenia równoległe 27

OpenCL model wykonania Wykonanie kernela jest zlecane środowisku wykonania OpenCL poprzez wywołanie odpowiedniej funkcji, z kernelem jako jednym z jej argumentów Z tego powodu przekazanie argumentów wywoływanemu kernelowi odbywa się w sposób różny od klasycznego Argumenty przypisuje się danemu kernelowi poprzez wywołanie specjalnej funkcji, która może jednocześnie spowodować przekazanie wartości argumentów do pamięci akceleratora Krzysztof Banaś Obliczenia równoległe 28

OpenCL podstawowe funkcje cl_int clsetkernelarg ( cl_kernel kernel, cl_uint arg_index, size_t arg_size, const void *arg_value rozmiar danych najlepiej uzyskiwać operatorem sizeof np. sizeof(cl_mem dla obiektów typu cl_mem tworzonych przez clcreatebuffer Krzysztof Banaś Obliczenia równoległe 29

OpenCL podstawowe funkcje cl_int clenqueuendrangekernel ( cl_command_queue command_queue, cl_kernel kernel, cl_uint work_dim, const size_t *global_work_offset, const size_t *global_work_size, const size_t *local_work_size, cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event Krzysztof Banaś Obliczenia równoległe 30

OpenCL podstawowe funkcje Po wykonaniu kernela należy zwolnić zasoby za pomocą funkcji: clreleasememobject clreleasekernel clreleaseprogram clreleasecommandqueue clreleasecontext clreleaseevent itp. Krzysztof Banaś Obliczenia równoległe 31

Sekwencja wykonania operacji OpenCL Krzysztof Banaś Obliczenia równoległe 32

OpenCL podsumowanie Krzysztof Banaś Obliczenia równoległe 33

Krzysztof Banaś Obliczenia równoległe 34