OpenCL modul 2. óra: Első rész

Hasonló dokumentumok
Adat- és feladat párhuzamos modell Az ISO C99 szabvány részhalmaza

Google Summer of Code OpenCL image support for the r600g driver

GPU Lab. 14. fejezet. OpenCL textúra használat. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

OpenCL - The open standard for parallel programming of heterogeneous systems

Videókártya - CUDA kompatibilitás: CUDA weboldal: Példaterületek:

Lengyel Richárd. FFT algoritmus

Eichhardt Iván GPGPU óra anyagai

(GP)GPU kezdetek. Avagy hogyan lesz az algoritmusból implementáció. Lectures on Modern Scientific Programming Wigner RCP November 2015.

Eichhardt Iván GPGPU óra anyagai

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Számítógépes Hálózatok. 5. gyakorlat

Pénzügyi algoritmusok

Kivételkezelés a C++ nyelvben Bevezetés

OpenGL Compute Shader-ek. Valasek Gábor

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Operációs rendszerek. UNIX fájlrendszer

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Pénzügyi algoritmusok

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Programozás 6. Dr. Iványi Péter

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

Pénzügyi algoritmusok

Programozás 5. Dr. Iványi Péter

7. fejezet: Mutatók és tömbök

Programozás alapjai. 10. előadás

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

Magas szintű optimalizálás

3. Osztályok II. Programozás II

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

OOP #14 (referencia-elv)

JavaScript bűvésztrükkök, avagy PDF olvasó és böngésző hackelés

117. AA Megoldó Alfréd AA 117.

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei

Felhasználó által definiált adattípus

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

3. Gyakorlat Ismerkedés a Java nyelvvel

Programozás alapjai. 5. előadás

Generikus Típusok, Kollekciók

Számítógépek felépítése

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Clang Static Analyzer belülről

Diplomamunka. Miskolci Egyetem. GPGPU technológia kriptográfiai alkalmazása. Készítette: Csikó Richárd VIJFZK mérnök informatikus

Programozás II. 2. Dr. Iványi Péter

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

4. Funkcionális primitívek GPUn

Programozás C és C++ -ban

Folyékony anyagok Füstszerű jelenségek Felhők Festékek

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

GPGPU. GPU-k felépítése. Valasek Gábor

Bevezetés a programozásba Előadás: A const

Programozás. C++ típusok, operátorok. Fodor Attila

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

C vagy C++? Programozási Nyelvek és Fordítóprogramok Tanszék. Pataki Norbert. Programozási Nyelvek I.

C# osztályok. Krizsán Zoltán

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

ANDROID ALKALMAZÁSFEJLESZTÉS

Nagyteljesítményű mikrovezérlők 10b. RTOS gyakorlatok

Programozás II gyakorlat. 7. Példák a polimorfizmus alkalmazásaira

GPGPU programozás lehetőségei. Nagy Máté Ferenc Budapest ALICE ELTE TTK Fizika MSc 2011 e-science Café

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

A C programozási nyelv III. Pointerek és tömbök.

Alternatív processz állapot és statisztika lekérdezési módszer a Linux kernelben

Konkurens TCP Szerver

Fejlesztői szemmel at K

The modular mitmót system. DPY kijelző kártya C API

Mobil Informatikai Rendszerek

C++ programok fordítása

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Programozás II gyakorlat. 6. Polimorfizmus

A C programozási nyelv VI. Parancssori argumentumok File kezelés

A C programozási nyelv III. Pointerek és tömbök.

Programozási Nyelvek: C++

Adatszerkezetek I. 1. előadás

Párhuzamos és Grid rendszerek

Programozás C++ -ban

Adatelemzés SAS Enterprise Guide használatával. Soltész Gábor solteszgabee[at]gmail.com

Dr. Varga Imre. Socket-programozás. C nyelven

Bevezetés, a C++ osztályok. Pere László

Programozási nyelvek Java

Operációs rendszerek. Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok:

C#, OOP. Osztályok tervezése C#-ban

Grafikus csővezeték és az OpenGL függvénykönyvtár

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

GPGPU és számítások heterogén rendszereken

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

Számítógép labor V. Egyszer Web szerver. Dokumentáció. Készítette: Ács Gergely (K4C03M)

ISA szimulátor objektum-orientált modell (C++)

1. Öröklés Rétegelés Nyilvános öröklés - isa reláció Korlátozó öröklődés - has-a reláció

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Készítette: Nagy Tibor István

Bevezetés a párhuzamos programozási koncepciókba

GPU alkalmazása az ALICE eseménygenerátorában

AliROOT szimulációk GPU alapokon

Információs Technológia

Átírás:

OpenCL modul 2. óra: Első rész

OpenCL API fontos eljárások 3 Példaprojekt Üres Lekérdezések OpenGL / OpenCL együttműködés

Hasznos linkek http://www.khronos.org/registry/cl/sdk/1.1/docs/man/ xhtml/ Webes specifikáció http://www.khronos.org/registry/cl/specs/opencl- 1.1.pdf PDF formátumú specifikáció https://code.google.com/p/opencl-book-samples/ Az OpenCL Programming Guide könyv példakódjai

cl_int clgetplatformids( cl_int num_entries, cl_platform_id *platforms, cl_uint *num_platforms); num_entries: platforms: num_platforms: lekérdezendő elemek száma platform-azonosítók platformok száma C++ vector<platform> platforms; Platform::get(&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); platform: param_name: param_value_size: param_value: param_value_size_ret: a kiválasztott platform azonosítója a lekérdezendő információ információ max mérete (byte) az információ tárolója a visszaadott információ mérete

param_name: a lekérdezendő információ cl_platform_info CL_PLATFORM_PROFILE CL_PLATFORM_VERSION CL_PLATFORM_NAME CL_PLATFORM_VENDOR CL_PLATFORM_EXTENSIONS Használat C C++ try { ret = clgetplatforminfo(platform_id, CL_PLATFORM_NAME, sizeof(string), string, NULL); platform.getinfo<cl_platform_name >(); } catch(error error) { }

cl_int clgetdeviceids( cl_platform_id platform, cl_device_type device_type, cl_uint num_entries, cl_device_id *devices, cl_uint *num_devices) device_type: a lekérdezendő eszközök típusa cl_device_type CL_DEVICE_TYPE_CPU CL_DEVICE_TYPE_GPU CL_DEVICE_TYPE_ACCELERATOR CL_DEVICE_TYPE_DEFAULT CL_DEVICE_TYPE_ALL C++ vector<device> devices; platform.getdevices(cl_device_type_default, &devices);

01_Empty Feladat 1: Listázd ki minden platform nevét! Feladat 2: Listázd ki mindegyik platformhoz, hogy hány eszközt tartalmaz!

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) C++ string name = device.getinfo<cl_device_name>();

cl_device_info CL_DEVICE_TYPE CL_DEVICE_COMPILER_AVAILABLE CL_DEVICE_NAME CL_DEVICE_VENDOR CL_DEVICE_VERSION CL_DEVICE_EXTENSIONS C++ string name = device.getinfo<cl_device_name>();

cl_device_info CL_DEVICE_MAX_COMPUTE_UNITS CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS CL_DEVICE_MAX_WORK_ITEM_SIZES CL_DEVICE_MAX_WORK_GROUP_SIZE CL_DEVICE_AVAILABLE

cl_device_info CL_DEVICE_MAX_PARAMETER_SIZE CL_DEVICE_MAX_MEM_ALLOC_SIZE CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE CL_DEVICE_MAX_CONSTANT_ARGS CL_DEVICE_GLOBAL_MEM_SIZE CL_DEVICE_LOCAL_MEM_SIZE CL_DEVICE_IMAGE_SUPPORT

01_Empty Feladat3: Listázd ki mindegyik eszköz nevét és globális memóriájának méretét! 02_Queries

cl_context clcreatecontext( const cl_context_properties *props, cl_uint num_devices, const cl_device_id *devices, void (*pfn_notify)(...), void *user_data, cl_int *errcode_ret); props: tulajdonság érték lista CL_CONTEXT_PLATFORM cl_platform_id num_devices: a kontextushoz tartozó eszközök száma device: a kontextushoz tartozó eszközök listája pfn_notify: callback függvény a hibakezeléshez user_data: felhasználói információ a pfn_notify függvény kapja meg errcode_ret: hiba információ

cl_context clcreatecontext( const cl_context_properties *props, cl_uint num_devices, const cl_device_id *devices, void (*pfn_notify)(...), void *user_data, cl_int *errcode_ret); props: cl_context_properties cps[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)(platforms[0])(), 0 }; tulajdonság érték lista C++ Context context( CL_DEVICE_TYPE_GPU, cps );

cl_context clcreatecontext( const cl_context_properties *props, cl_uint num_devices, const cl_device_id *devices, void (*pfn_notify)(...), void *user_data, cl_int *errcode_ret); pfn_notify: callback függvény a hibakezeléshez aszinkron hibajelzéshez szálbiztos implementáció kell a függvényhez Paraméterek: const char* errinfo: const void* private_info: size_t cb: void *user_data: a hiba szövege implementáció függő hibakereső adat a private_info mérete (byte) felhasználói információ

clretaincontext(cl_context context) Referencia-számláló növelése clreleasecontext(cl_context context) Referencia-számláló csökkentése clgetcontextinfo(cl_context context, ); cl_context_info CL_CONTEXT_REFERENCE_COUNT CL_CONTEXT_DEVICES CL_CONTEXT_PROPERTIES

02_Queries (Kontextus létrehozása)

cl_command_queue clcreatecommandqueue( cl_context context, cl_device_id device, cl_command_queue_properties properties, cl_int *errcode_ret); properties CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE CL_QUEUE_PROFILING_ENABLE

Implicit szinkronizáció Eseményre várakozás cl_int clenqueuewaitforevents( cl_command_queue queue, cl_uint num_events, const cl_event *event_list); Explicit szinkronizáció Barrier cl_int clenqueuebarrier(cl_command_queue queue);

Minden hívás elküldése az eszközre cl_int clflush(cl_command_queue queue); Minden hívás fusson le az eszközön cl_int clfinish(cl_command_queue queue);

clretaincommandqueue(cl_command_queue queue) Referencia-számláló növelése clreleasecommandqueue(cl_command_queue queue) Referencia-számláló csökkentése clgetcommandqueueinfo( cl_command_queue queue, cl_command_queue_info param_name, ) cl_command_queue_info CL_QUEUE_CONTEXT CL_QUEUE_DEVICE CL_QUEUE_PROPERTIES CL_QUEUE_REFERENCE_COUNT

Buffer objektum lineáris memória terület skalár, vektor, struktúra típus pointeren keresztül címezhető Image objektum 2D, 3D memória terület előre definiált textúra formátumok samplereken keresztül címezhető

cl_mem clcreatebuffer( cl_context context, cl_mem_flags flags, size_t size, // a buffer mérete (byte) void *host_ptr, // előre lefoglalt memória terület cl_int *errcode_ret) cl_mem_flags CL_MEM_READ_WRITE CL_MEM_WRITE_ONLY CL_MEME_READ_ONLY CL_MEM_USE_HOST_PTR CL_MEM_ALLOC_HOST_PTR CL_MEME_COPY_HOST_PTR

cl_int clenqueuereadbuffer( cl_command_queue command_queue, cl_mem buffer, // az olvasandó memória objektum cl_bool blocking_read, // bevárja-e az olvasás befejeztét? size_t offset, // az olvasandó memória offszete size_t cb, // az olvasandó méret void *ptr, // az olvasás célja cl_uint numeventsinwaitlist, // bevárandó események száma const cl_event *event_wait_list, // bevárandó események cl_event *event) // az olvasás végét jelző esemény cl_int clenqueuewritebuffer(cl_command_queue command_queue, );

cl_int clenqueuecopybuffer( cl_command_queue command_queue, cl_mem src_buffer, // a másolandó memória cl_mem dst_buffer, // a cél memória size_t src_offset, // a másolandó memória offszete size_t dst_offset, // a cél memória offszete size_t cb, // a másolandó memória mérete cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event)

cl_int clretainmemobject(cl_mem memobj) Referencia-számláló növelése cl_int clreleasememobject(cl_mem memobj) Referencia-számláló csökkentése cl_int clgetmemobjectinfo(cl_mem memobj, cl_mem_info param_name, ) Memória objektum információk cl_mem_info CL_MEM_TYPE, CL_MEM_FLAGS, CL_MEM_SIZE, CL_MEM_MAP_COUNT, CL_MEM_HOST_PTR, CL_MEM_REFERENCE_COUNT, CL_MEM_CONTEXT, CL_MEM_ASSOCIATED_MEMOBJECT, CL_MEM_OFFSET

Program objektum Kontextus információk Program forrása vagy bináris reprezentáció Az utolsó sikeresen lefordított program Fordítási információk fordítási opciók Log Kernel objektumok száma

cl_program clcreateprogramwithsource( cl_context context, cl_uint count, // a források száma const char **strings, // a program forrása const size_t *lengths, // a források hossza cl_int *errcode_ret)

cl_program clcreateprogramwithbinary( cl_context context, cl_uint num_devices, const cl_device_id *device_list, // a program álltal használt eszközök const size_t *lengths, const unsigned char **binaries, // az eszközökhöz tartozó bináris kód cl_int *binary_status, // sikeres volt-e a betöltés cl_int *errcode_ret)

cl_int clbuildprogram( cl_program program, // a fordítandó program objektum cl_uint num_devices, // az eszközök száma a fordításhoz const cl_device_id *device_list, // a céleszközök listája const char* options, // programfordítási opciók void (*pfn_notify)(...), void *user_data)

Matematikai viselkedés -cl-single-precision-constant -cl-denorms-are-zero Fordító viselkedés -w -Werror Optimalizáció -cl-opt-disable -cl-strict-aliasing -cl-mad-enable -cl-no-signed-zeros -cl-unsafe-math-optimizations -cl-finite-math-only -cl-fast-relaxed-math OpenCL 1.1 Reference / 5.6.3 Build Options

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) cl_program_build_info CL_PROGRAM_BUILD_STATUS CL_PROGRAM_BUILD_OPTIONS CL_PROGRAM_BUILD_LOG stb. OpenCL 1.1 Reference / 5.6.3 Build Options

cl_int clretainprogram(cl_program program) cl_int clreleaseprogram(cl_program program) cl_int clgetprograminfo( cl_program program, cl_program_info param_name, ) cl_program_info CL_PROGRAM_DEVICES CL_PROGRAM_SOURCE CL_PROGRAM_BINARIES stb.

cl_kernel clcreatekernel( cl_program program, const char *kernel_name, cl_int *errcode_ret) cl_int clgetkernelinfo( cl_kernel kernel, cl_kernel_info param_name, ) cl_kernel_info CL_KERNEL_FUNCTION_NAME CL_KERNEL_NUM_ARGS CL_KERNEL_PROGRAM

cl_int clsetkernelarg( cl_kernel kernel, cl_uint arg_index, // az állítandó paraméter indexe size_t arg_size, // mérete const void *arg_value) // értéke OpenCL C kernel code kernel void hello(const int count, global float* data) { } C clsetkernelarg(hellokernel_id, 0, sizeof(int), datacount); clsetkernelarg(hellokernel_id, 1, sizeof(dataptr), &dataptr); C++ hellokernel.setarg(0, datacount); hellokernel.setarg(1, sizeof(dataptr), &dataptr);

cl_int clgetkernelworkgroupinfo( cl_kernel kernel, cl_device_id device, cl_kernel_work_group_info pname, ) cl_kernel_work_group_info CL_KERNEL_WORK_GROUP_SIZE CL_KERNEL_COMPILE_WORK_GROUP_SIZE CL_KERNEL_LOCAL_MEM_SIZE

cl_int clenqueuendrangekernel( cl_command_queue queue, cl_kernel kernel, cl_uint work_dim, // az NDRange dimenziója const size_t *global_work_offset, // NULL const size_t *global_work_size, // a teljes problématér mérete const size_t *local_work_size, // egy munka csoport mérete cl_uint num_events_in_wait_list, const cl_event *event_wait_list, cl_event *event) cl_int clenqueuetask (cl_command_queue queue, ) cl_int clenqueuenativekernel (cl_command_queue queue, )

03_GLCL_Interoperation Textúra módosítása VBO módosítása Feladat: Hullámforma textúra kirajzolása Feladat: Mandelbrot halmaz Házi: 3D hullám

Köszönöm a figyelmet!