programowanie procesorów graficznych do obliczeń ogólnego ...banas/srr/srr_w04_opencl_1.pdf ·...
TRANSCRIPT
![Page 1: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/1.jpg)
Krzysztof Banaś Obliczenia równoległe 1
Programowanie procesorów graficznych do obliczeń ogólnego
przeznaczenia GPGPU
![Page 2: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/2.jpg)
Krzysztof Banaś Obliczenia równoległe 2
GPGPU motywacja
![Page 3: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/3.jpg)
Krzysztof Banaś Obliczenia równoległe 3
GPGPU – motywacja
![Page 4: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/4.jpg)
Krzysztof Banaś Obliczenia równoległe 4
Tendencje
➔ Mało dużych rdzeni rozbudowane potoki wykonanie poza
kolejnością wyrafinowane
przewidywanie rozgałęzień wiele jednostek
funkcjonalnych
➔ Dużo małych rdzeni prostsza budowa, krótsze
potoki wykonanie w kolejności proste przewidywanie
rozgałęzień mniej jednostek
funkcjonalnych
![Page 5: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/5.jpg)
Krzysztof Banaś Obliczenia równoległe 5
Architektura rdzeni – CPU versus GPU
![Page 6: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/6.jpg)
Krzysztof Banaś Obliczenia równoległe 6
GPGPU
➔ Historia: lata 80te – popularyzacja systemów i programów z graficznym
interfejsem• specjalistyczne układy do przetwarzania grafiki 2D
lata 90te – standaryzacja potoku przetwarzania grafiki 3D (OpenGL, DirectX)• vertex shaders• pixel shaders• procesory graficzne 3D
XXIwiek – programowalne układy graficzne (programmable shaders)• język Cg• początek GPGPU
![Page 7: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/7.jpg)
Krzysztof Banaś Obliczenia równoległe 7
GPGPU historia
![Page 8: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/8.jpg)
Krzysztof Banaś Obliczenia równoległe 8
GPGPU historia
![Page 9: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/9.jpg)
Krzysztof Banaś Obliczenia równoległe 9
GPGPU historia
![Page 10: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/10.jpg)
Krzysztof Banaś Obliczenia równoległe 10
GPGPU
➔ Listopad 2006: architektura Tesla
• ujednolicona architektura, zamiast „pixel shaders” i „vertex shaders” standardowe skalarne procesory (nazywane obecnie rdzeniami CUDA „CUDA cores”)
procesor G80 karta graficzna NVIDIA GeForce 8800 model programowania CUDA (Compute Unified Device
Architecture)• środowisko programowania „C for CUDA”
![Page 11: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/11.jpg)
Krzysztof Banaś Obliczenia równoległe 11
TESLA architecture – CUDA – G80 2006
![Page 12: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/12.jpg)
Krzysztof Banaś Obliczenia równoległe 12
CUDA
![Page 13: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/13.jpg)
Krzysztof Banaś Obliczenia równoległe 13
Programowanie akceleratorów – specyfikacja OpenCL
![Page 14: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/14.jpg)
Krzysztof Banaś Obliczenia równoległe 14
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
![Page 15: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/15.jpg)
Krzysztof Banaś Obliczenia równoległe 15
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)
![Page 16: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/16.jpg)
Krzysztof Banaś Obliczenia równoległe 16
OpenCL – model platformy
![Page 17: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/17.jpg)
Krzysztof Banaś Obliczenia równoległe 17
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)
![Page 18: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/18.jpg)
Krzysztof Banaś Obliczenia równoległe 18
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
![Page 19: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/19.jpg)
Krzysztof Banaś Obliczenia równoległe 19
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
![Page 20: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/20.jpg)
Krzysztof Banaś Obliczenia równoległe 20
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ń
![Page 21: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/21.jpg)
Krzysztof Banaś Obliczenia równoległe 21
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_CPUCL_DEVICE_TYPE_GPUCL_DEVICE_TYPE_ACCELERATOR+ CL_DEVICE_TYPE_ALL dla wszystkich typów
![Page 22: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/22.jpg)
Krzysztof Banaś Obliczenia równoległe 22
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_FREQUENCYOraz wiele innych związanych np. z modelami pamięci i programowania
![Page 23: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/23.jpg)
Krzysztof Banaś Obliczenia równoległe 23
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
![Page 24: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/24.jpg)
Krzysztof Banaś Obliczenia równoległe 24
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)
![Page 25: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/25.jpg)
Krzysztof Banaś Obliczenia równoległe 25
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)
![Page 26: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/26.jpg)
Krzysztof Banaś Obliczenia równoległe 26
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
![Page 27: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/27.jpg)
Krzysztof Banaś Obliczenia równoległe 27
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
![Page 28: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/28.jpg)
Krzysztof Banaś Obliczenia równoległe 28
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_ENABLECL_QUEUE_PROFILING_ENABLE
![Page 29: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/29.jpg)
Krzysztof Banaś Obliczenia równoległe 29
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
![Page 30: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/30.jpg)
Krzysztof Banaś Obliczenia równoległe 30
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
![Page 31: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/31.jpg)
Krzysztof Banaś Obliczenia równoległe 31
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)
![Page 32: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/32.jpg)
Krzysztof Banaś Obliczenia równoległe 32
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
![Page 33: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/33.jpg)
Krzysztof Banaś Obliczenia równoległe 33
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)
![Page 34: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/34.jpg)
Krzysztof Banaś Obliczenia równoległe 34
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
![Page 35: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/35.jpg)
Krzysztof Banaś Obliczenia równoległe 35
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)
![Page 36: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/36.jpg)
Krzysztof Banaś Obliczenia równoległe 36
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
![Page 37: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/37.jpg)
Krzysztof Banaś Obliczenia równoległe 37
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
![Page 38: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/38.jpg)
Krzysztof Banaś Obliczenia równoległe 38
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
![Page 39: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/39.jpg)
Krzysztof Banaś Obliczenia równoległe 39
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)
![Page 40: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/40.jpg)
Krzysztof Banaś Obliczenia równoległe 40
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
![Page 41: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/41.jpg)
Krzysztof Banaś Obliczenia równoległe 41
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
![Page 42: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/42.jpg)
Krzysztof Banaś Obliczenia równoległe 42
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)
![Page 43: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/43.jpg)
Krzysztof Banaś Obliczenia równoległe 43
OpenCL – podstawowe funkcje
➔ Po wykonaniu kernela należy zwolnić zasoby za pomocą funkcji:
clReleaseMemObject clReleaseKernel clReleaseProgram clReleaseCommandQueue clReleaseContext clReleaseEvent itp.
![Page 44: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/44.jpg)
Krzysztof Banaś Obliczenia równoległe 44
Sekwencja wykonania operacji OpenCL
![Page 45: Programowanie procesorów graficznych do obliczeń ogólnego ...banas/SRR/SRR_W04_OpenCL_1.pdf · Istnieją dwa podstawowe rodzaje obiektów pamięci: Bufory – buffers, standardowe](https://reader031.vdocuments.site/reader031/viewer/2022021914/5c772f5509d3f2322f8bcfd2/html5/thumbnails/45.jpg)
Krzysztof Banaś Obliczenia równoległe 45
OpenCL podsumowanie