Eichhardt Iván GPGPU óra anyagai

Hasonló dokumentumok
Eichhardt Iván GPGPU óra anyagai

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

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

OpenCL - The open standard for parallel programming of heterogeneous systems

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

Készítette: Trosztel Mátyás Konzulens: Hajós Gergely

Párhuzamos és Grid rendszerek

Magas szintű optimalizálás

GPGPU-k és programozásuk Dezső, Sima Sándor, Szénási

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

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

Grafikus csővezeték 1 / 44

GPGPU alapok. GPGPU alapok Grafikus kártyák evolúciója GPU programozás sajátosságai

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

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

Google Summer of Code OpenCL image support for the r600g driver

A CUDA előnyei: - Elszórt memória olvasás (az adatok a memória bármely területéről olvashatóak) PC-Vilag.hu CUDA, a jövő technológiája?!

SAT probléma kielégíthetőségének vizsgálata. masszív parallel. mesterséges neurális hálózat alkalmazásával

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

OpenGL Compute Shader-ek. Valasek Gábor

Hallgatói segédlet: Nvidia CUDA C programok debugolása Nvidia Optimus technológiás laptopokon. Készítette: Kovács Andor. 2011/2012 első félév

OpenCL Kovács, György

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

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

CUDA alapok CUDA projektek. CUDA bemutató. Adatbányászat és Webes Keresés Kutatócsoport SZTAKI

Flynn féle osztályozás Single Isntruction Multiple Instruction Single Data SISD SIMD Multiple Data MISD MIMD

AliROOT szimulációk GPU alapokon

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

GPGPU: Általános célú grafikus processzorok cgpu: computational GPU GPGPU = cgpu Adatpárhuzamos gyorsító: dedikált eszköz, ami eleve csak erre

Nemlineáris optimalizálási problémák párhuzamos megoldása grafikus processzorok felhasználásával

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

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

Java II. I A Java programozási nyelv alapelemei

Ismerkedjünk tovább a számítógéppel. Alaplap és a processzeor

Java II. I A Java programozási nyelv alapelemei

Operációs rendszerek III.

Oktatási Segédlet. OpenCL

Programozási nyelvek JAVA EA+GY 1. gyakolat

KÉPFELDOLGOZÓ ALGORITMUSOK FEJLESZTÉSE GRAFIKUS HARDVER KÖRNYEZETBEN

Operációs rendszerek gyak.

GPU-k a gravitációs hullám kutatásban

9. MPI

4. Funkcionális primitívek GPUn

GPGPU-k és programozásuk

GPU-Accelerated Collocation Pattern Discovery

CUDA haladó ismeretek

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Occam 1. Készítette: Szabó Éva

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

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

Adatfolyam alapú RACER tömbprocesszor és algoritmus implementációs módszerek valamint azok alkalmazásai parallel, heterogén számítási architektúrákra

GPGPU. Architektúra esettanulmány

Muppet: Gyors adatok MapReduce stílusú feldolgozása. Muppet: MapReduce-Style Processing of Fast Data

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

UNIX: folyamatok kommunikációja

Négyprocesszoros közvetlen csatolású szerverek architektúrája:

A számítógép egységei

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

Nagy adattömbökkel végzett FORRÓ TI BOR tudományos számítások lehetőségei. kisszámítógépes rendszerekben. Kutató Intézet

Weblog elemzés Hadoopon 1/39

Internet programozása. 1. előadás

Architektúra, megszakítási rendszerek

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

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

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

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

VLIW processzorok (Működési elvük, jellemzőik, előnyeik, hátrányaik, kereskedelmi rendszerek)

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

KUTATÁSOK INFORMATIKAI TÁMOGATÁSA. Dr. Szénási Sándor

Riak. Pronounced REE-ahk. Elosztott adattároló eszköz. Molnár Péter

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

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Bepillantás a gépházba

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

Grafikus processzorok általános célú programozása (GPGPU)

Grafikus csővezeték 2 / 77

Dr. Schuster György február / 32

Programozási nyelvek (ADA)

HLSL programozás. Grafikus játékok fejlesztése Szécsi László t06-hlsl

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

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

Informatika el adás: Hardver

Fejlett programozási nyelvek C++ Iterátorok

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

Pénzügyi algoritmusok

Bevezetés az informatikába

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

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

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

1. Bevezetés A C++ nem objektumorientált újdonságai 3

Haladó Grafika EA. Inkrementális képszintézis GPU-n

Grafikus kártyák, mint olcsó szuperszámítógépek - I.

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

Utolsó módosítás:

Szkriptnyelvek. 1. UNIX shell

Operációs rendszerek. Az NT memóriakezelése

Tartalomjegyzék. Előszó... 10

Átírás:

OpenCL modul 1. óra

Eichhardt Iván iffan@caesar.elte.hu GPGPU óra anyagai http://cg.inf.elte.hu/~gpgpu/

OpenCL API és alkalmazása Gyakorlati példák (C/C++) Pl.: Képfeldolgozás Párhuzamos tervezési minták implementációja

Érdekességek (Mire használják a GPGPU-t?) GPGPU fogalmak Heterogenitás és a GPGPU Gyors elképesztés! OpenCL története OpenCL alapok OpenCL API HelloWorld!?

Fehérjék feltekeredésének(folding) szimulációja Folding@home H1N1 szimuláció Az elveszett Apollo 11 videó Források: Felülírt videó, néhány átvett, és egy felvétel egy monitorról, amin a videót játsszák le éppen. 100x-os gyorsítás

FPGA, GPGPU, CPU Field-programmable gate array DES dekódolás esete CPU: 16 millió kulcs / másodperc GPU: 250millió kulcs / másodperc (GTX-295) FPGA: ~1.8 milliárd kulcs / másodperc

H1N1 szimuláció L. Barney - Studying the H1N1 virus using NVIDIA GPUs, Nov 2009. http://blogs.nvidia.com/ntersect/2009/11/studying-the-h1n1-virus-usingnvidia-gpus-.html Apollo 11 R. Wilson - DSP brings you a high-definition moon walk, Sep 2009. http://www.edn.com/article/ca6685974.html DES dekódolás Dr. Dobbs - Parallel algorithm leads to crypto breakthrough, Jan 2010. http://www.ddj.com/222600319 A GPGPU problémái A. Ghuloum - The problem(s) with GPGPU, Oct 2007. http://blogs.intel.com/research/2007/10/the_problem_with_gpgpu.php

Csak GPU-k GPGPU Stream programozás Compute Shader CUDA stb. (hardverközelibb) HETEROGENEOUS COMPUTING Több mint 1 fajta processzor (CPU, GPU,...) OpenCL szabvány Nyílt

Nincs szinkronizáció és kommunikáció Csővezeték alkalmazása Párhuzamosítás Alapműveletek: Map, Amplify, Reduce, Sum

Forrás: http://cg.iit.bme.hu/portal/node/311

SIMD GPU multiprocesszor (pl. Vertex tulajdonság streamek) CPU kiterjesztések (SSE*, 3DNow!, MMX, ) Adatközpontúság, erőteljesen párhuzamosítható Az adatot vektorként kezeljük Például (vec_res, v1, v2 4 32 bites float vektorok): vec_res.x = v1.x + v2.x; vec_res.y = v1.y + v2.y; vec_res.z = v1.z + v2.z; vec_res.w = v1.w + v2.w; Egy művelettel írható le

32-bit hosszú bináris sztringek Manhattan távolsága Ciklussal int bitcount_naive(int x) { int count = 0; while (x!= 0) { if ((x & 1) == 1) { count++; } x >>= 1; } return count; }

32-bit hosszú bináris sztringek Manhattan távolsága Párhuzamos megoldás unsigned int bitcount(unsigned int x) { x = (x & (0x55555555)) + ((x >> 1) & (0x55555555)); x = (x & (0x33333333)) + ((x >> 2) & (0x33333333)); x = (x & (0x0f0f0f0f)) + ((x >> 4) & (0x0f0f0f0f)); x = (x & (0x00ff00ff)) + ((x >> 8) & (0x00ff00ff)); x = (x & (0x0000ffff)) + ((x >> 16) & (0x0000ffff)); return x; }

128-bit hosszú bináris sztringek Manhattan távolsága unsigned int bitcount_128(unsigned int4 x) { const unsigned int4 a1(0x55555555, 0x55555555, 0x55555555, 0x55555555); const unsigned int4 a2(0x33333333, 0x33333333, 0x33333333, 0x33333333); const unsigned int4 a4(0x0f0f0f0f, 0x0f0f0f0f, 0x0f0f0f0f, 0x0f0f0f0f); const unsigned int4 a4(0x00ff00ff, 0x00ff00ff, 0x00ff00ff, 0x00ff00ff); const unsigned int4 a4(0x0000ffff, 0x0000ffff, 0x0000ffff, 0x0000ffff); } x = (x & (a1)) + ((x >> 1) & (a1)); x = (x & (a2)) + ((x >> 2) & (a2)); x = (x & (a3)) + ((x >> 4) & (a3)); x = (x & (a4)) + ((x >> 8) & (a4)); x = (x & (a5)) + ((x >> 16) & (a5)); return x.x + x.y + x.z + x.w;

Sok 128 hosszú bit-sztringre: K-NearestNeighbours 1 maggal, naív megoldással: Lassú 1 maggal + SIMD: Párhuzamos: sokszoros gyorsulás 8 maggal CPU-n: még gyorsabb.. GPU-val (soksok mag): > 100 gyorsabb!

Adat- és feladat párhuzamos modell Az OpenCL nyílt szabvány A Khronos Group felügyeli Az OpenCL-C nyelv ISO C99 szabvány részhalmaza Numerikus műveletek az IEEE754 alapján Heterogén platform támogatás A modell alkalmazható a modern GPU-kra, CPU-kra, Cell processzorra, DSP-kre, Intel Xenon Phi, Altera FPGA stb...

Az OpenCL elemei Platform modell A Host és az eszköz kapcsolata Program modell Data-parallel és Task-parallel lehetőségek Végrehajtási séma Memória modell

Hoszt eszköz (Host) OpenCL eszköz (Compute Device, Device ) Számolási egység (Compute Unit, CU ) Pl.: NVidia kártyák multiprocesszora Feldolgozó egység (Processing Element, PE ) Pl.: Videokártya Stream processzora Pl.: CPU magja

Data-parallel és Task-parallel lehetőségek Data-parallel (Adat párhuzamos) modell Adat-feladat egység összerendelés Művelethalmaz végrehajtása 1 adatra Task-parallel (Feladat párhuzamos) modell Több független feladat párhuzamos végrehajtása

Host feladata Kontextus kezelés Végrehajtás vezérlés Kernel program Számító Egységek vezérlése Egy munkacsoporton belül azonos feladat elvégzésére

Kernel program Index tér (NDRange) Munkacsoportok (Work-Groups) Feladat egységek (Work-Items) Globális azonosító (global ID) Minden munkacsoportban azonos program Egységenként eltérhet a vezérlés

Kernel program Index tér (NDRange) Munkacsoportok (Work-Groups) Munkacsoport azonosító (work-group ID) A feladat egységeknek lokális azonosító (local ID) Feladat egységek (Work-Items)

Kernel program Index tér (NDRange) N dimenziós problématér N = 1, 2, 3 Adott méretek N dimenzióban: Globális címtér Munkacsoport méret Azonosítók / indexelés N dimenzióban : Global ID [pl.: get_global_id(1)] Local ID [pl.: get_local_id(0)] Munkacsoportok (Work-Groups) Feladat egységek (Work-Items)

Kontextus (Context) Eszközök Kernelek (OpenCL függvények) Program objektumok Forrás Végrehajtható bináris Memória objektumok A Host és az Eszközök által használt memória A Kernelek ezt látják

Parancs sorok (command-queue) Host által ellenőrzött Kernelek végrehajtását vezérli Parancsok Kernel végrehajtás Memória műveletek Szinkronizáció In-order / Out-of-order végrehajtási módok

Négy memória régió az Eszközön Globális Konstans Lokális Privát

Globális memória Írható / olvasható bármelyik Work-Itemből Bármely eleme elérhető bármely PE-ből A Host foglalja le (allokálja) a területet, végzi a másolást, és a memória felszabadítást.

Konstans memória A Globális memória csak olvasható megfelelője Kernelben statikusan is definiálható

Lokális memória A Host nem fér hozzá Egy WG osztott memóriája Minden WI olvashatja/írhatja Privát memória A Host nem fér hozzá Csak az adott WI látja

A konzisztenciáról Work-Item szinten WI-ek között nem konzisztens, De egy WI-en belül konzisztens. Work-Group szinten Konzisztens Lokális és Globális memória egy WG-on belül Nem konzisztens a Globlális memória a WG-ok között

WorkGroup szinkronizáció WI-ek szinkronizációja Barrier Blokkoló hívás WG-ok között nincs szinkronizáció CommandQueue szinkronizáció Parancssori Barrier garantált a barrier előtti parancsok lefutása CQ-k között nincs szinkronizáció Várakozás Eseményre minden parancs generál egy eseményt, erre várakoztathatunk egy másikat

C99 Skalár típusok Vektor típusok (n {2,4,8,16}) (u)charn (u)shortn (u)intn (u)longn floatn Vektor komponensek elérése (float4 f;) Swizzle (f.xyzw, f.x, f.xy, f.xxyy, stb.) Numerikus indexek Felezés (f.odd, f.even, f.lo, f.hi)

Implicit konverzió Korlátozott mértékben használható; skalártípusok között Explicit konverzió (Példák) float4 f = (float4)1.0; uchar4 u; int4 c = convert_int4(u); float f = 1.0f; uint u = as_uint(f); // 0x3f800000 lesz az értéke

Memóriaterület-jelölők global, local, constant, private Például: global float4 color; Függvény-jelölők kernel Egy OpenCL C függvényt Kernelnek jelöl ki. attribute Fordító segítő attribútumok.

Beépített függvények a végrehajtási modellre vonatkozóan get_work_dim() size_t get_{global/local}_{id/size}(uint dimidx); Pl.: size_t id = get_global_id(1); size_t get_num_groups(uint dimidx); size_t get_group_id(uint dimidx);

Szinkronizációs függvények barrier(flag); CLK_LOCAL_MEM_FENCE : lokális memóriát konzisztensé teszi CLK_GLOBAL_MEM_FENCE : globális memóriát konzisztensé teszi mem_fence(flag); write_mem_fence(flag); read_mem_fence(flag);

További beépített függvények Általános, szokásos függvények Geometriai függvények Összehasonlító függvények floatn típusokon (isequal, isinfinite, stb) Memóriára vonatkozóan: Aszinkron memória olvasás Prefetch (cache-be töltés globális memóriából)

Telepítés: http://cg.inf.elte.hu/~gpgpu/opencl/oclpack.zip T meghajtó subst parancs

Első példa letöltése: http://cg.inf.elte.hu/~gpgpu/opencl/01/01_hellow orlds.zip C host-al BOILERPLATE C++ host-al Kevesebb BOILERPLATE kód

VexCL C++ template könyvtár vektor-kifejezések írására és futtatására OpenCL/CUDA-n https://github.com/ddemidov/vexcl SharpCL (saját) C# bytecoderól OpenCL-re fordít és futtat ( Hátha érdekel valakit :D ) HadoopCL http://pubs.cs.rice.edu/node/336 MapReduce Heterogén rendszereken, Hadoop és OpenCL integrációval Apple OS X Snow Leopard http://en.wikipedia.org/wiki/mac_os_x_snow_leopard#opencl

OpenCL API hívások alapos áttekintése OpenCL fordítási beállítások Példaprogi: Platform/Eszköz-lekérdezések (Pl.: FLOPS) Példaprogi: OpenGL / OpenCL interakció Példaprogi: Képfeldolgozás Példaprogi: Szinkronizáció atomic_add barrier Esettanulmányok: Programozási minták (Elmélettel) Map Reduce Scan Histogram Esettanulmány: Heterogén OpenCL programozás

Köszönöm a figyelmet!