GPGPU – CUDA 2..

Slides:



Advertisements
Hasonló előadás
ÉRDEKES PONTOK KINYERÉSE DIGITÁLIS KÉPEKEN. BEVEZETÉS  ALAPPROBLÉMA  Jellemzőpontok detektálása mindkét képen  Kinyert pontok megfeleltetése  Megfeleltetések.
Advertisements

GRIN: Gráf alapú RDF index
L ÁTHATÓSÁG MEGHATÁROZÁSA tavaszi félév.
CUDA.
Grafika. 2 Mértékek és koordináta rendszer Használjuk a RGB és QBColor függvényeket a színekhez Grafika létrehozása Load/change picture futási időben.
2D grafikus rendszerek Szirmay-Kalos László. 2D grafikus editor: GUI, use-case, dinamikus modell L L L R LD LU MouseLDown első pont MouseLDown második...
Sugárkövetés: ray-casting, ray-tracing Szirmay-Kalos László.
Bevezetés.  A számítógépes grafika inkrementális képszintézis algoritmusának hardver realizációja  Teljesítménykövetelmények:  Animáció: néhány nsec.
 CUDA mint architektúra  Párhuzamos feldolgozásra optimalizált architektúra  CUDA mint GPGPU keretrendszer  Runtime és Driver API  CUDA C/C++  NVCC.
 Bővítmény rendszer  Az OpenGL bővítményeihez hasonló  A specifikiáció természetes fejlődése ▪ Gyártó specifikus bővítmény ▪ Általános bővítmények.
GPGPU labor I. OpenGL, Cg.
Számítógépes Grafika 6. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév.
6. előadás (2005. április 5.) Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1.
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
Intelligens ébresztő óra Számítógépes látás projekt 2011.
Transzformációk kucg.korea.ac.kr.
Szűrés és konvolúció Vámossy Zoltán 2004
További vektor, mátrix algoritmusok
Kivételkezelés a C++ nyelvben Bevezetés
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Implementált képfeldolgozó algoritmusok
Számítógépes grafika 3. gyakorlat.
2008/2009 tavasz Klár Gergely  Gyakorlatok időpontjai: ◦ Szerda 10:05–11:35 ◦ Csütörtök 10:00+ε –11:30+ε  Gyakvez: ◦ Klár Gergely ◦
Nikházy László Ureczky Bálint Konzulens: dr. Horváth Gábor
Hernyák Zoltán Programozási Nyelvek II.
Rendering pipeline Ogre3D
Grafikus játékok fejlesztése Szécsi László t09-texture
Honlap készítés 4. óra.
OpenGL 4 shaderek, GLSL Valasek Gábor
GPGPU A grafikus hardver általános célú felhasználása
Objektum orientált programozás
2. gyakorlat DirectX 2007/2008 tavasz Klár Gergely
CUDA C/C++ programozás Textúra memória A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
Objektum orientált programozás
CUDA C/C++ programozás Szál struktúra A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
CUDA C/C++ programozás Egyéb eszköztárak vegyesen A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt.
CUDA C/C++ programozás
1 Mivel foglalkozunk a laborokon? 7. hét: Do-Loop-Until Do-Until-Looptömbök Function 7. hét: Do-Loop-Until és Do-Until-Loop ciklusok. Egy indexes tömbök,
A Visual Basic nyelvi elemei
CUDA C/C++ programozás Atomikus műveletek A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
CUDA C/C++ programozás CUDA C bevezetés A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
Computing n-Gram Statistics in MapReduce Klaus Berberich, Srikanta Bedathur EDBT/ICDT 2013 Joint Conference.
Memóriakezelés feladatok Feladat: 12 bites címtartomány. 0 ~ 2047 legyen mindig.
Számítógépes grafika gyakorlat: DirectX 2007/2008 tavasz Klár Gergely
Számítógépes Grafika OpenGL 4 shaderek, GLSL. OpenGL 4 A következő programozható fázisok vannak a 4.x-es OpenGL-ben: Vertex shader Tesselation control.
1 Számítógépek felépítése 5. előadás a CPU gyorsítása, pipeline, cache Dr. Istenes Zoltán ELTE-TTK.
1 Függvények használata – az első függvénynél a formulát háromszor be kell írni, rendre az x, x+h, x-h argumentumokkal, – a második függvénynél az új (feltételes.
Az 5,6,7 laborok VBA anyagának összefoglalása
Képek, képfeldolgozás Szirmay-Kalos László.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Google Summer of Code 2015 OpenCL image support for the r600g driver.
Bevezetés.  Miért …  … egyszálúan programozunk?  … probléma ez?  Hogyan …  … változik ez?  … tudjuk kihasználni?  Megéri-e párhuzamosítani?
Szécsi László 3D Grafikus Rendszerek 15. előadás
GPGPU – CUDA 1..
OpenCL bővítmények.
Script nyelvek előadás
Script nyelvek előadás
Vizualizáció és képszintézis
Görbék, felületek.
Lineáris egyenletrendszerek megoldása
Változók.
Nikházy László Ureczky Bálint Konzulens: dr. Horváth Gábor
Bevezetés GPGPU Alkalmazások.
A digitális kép bevezetés.
Informatikai gyakorlatok 11. évfolyam
Bevezetés a mély tanulásba
CUDA – OpenGL.
Cache példák 2019 (IMSC).
Előadás másolata:

GPGPU – CUDA 2.

CUDA Libraries cuBLAS-XT: Lineáris algebrai műveletek megoldása több GPU-val. cuFFT: Fourier-transzformációk gyors számolása NPP: Kép-, videó- és jelfeldolgozási algoritmusok gyűjteménye. cuSPARSE: Ritka mátrixok feldolgozásására lineáris algebrai algoritmusok. Stb.

OpenGL with CUDA 1.0-… Texture memory 2.0-… Surface memory A device memóriában vannak. A globális memória is a device memóriában van, és bár annak elérése kb. 100-szor lassabb, mint a lokális memória olvasása. A texture, és a surface memória a cache-elés miatt lényegesen gyorsabb.

VBO A Vertex Buffer Object (VBO) egy OpenGL feature, ami lehetővé teszi vertexek feltöltését a videó device-ra. Vertex adatok: Pozíció Normálvektor Szín Stb.

Grid-es feldolgozás dim3 block(n, m, o); n * m * k szálat fog tartalmazni egy blokk dim3 grid(i, j, k); i * j * k blokkot fog tartalmazni a grid.

Grid indexelés kernelen belül blockIdx.x, blockIdx.y – A blokk pozíciója a griden belül. blockDim.x, blockDim.y – Egy blokk mérete threadIdx.x, threadIdx.y – A szál pozíciója a blokkon belül.

Aktuális szál pozíciója a griden X koordináta: blockIdx.x*blockDim.x + threadIdx.x Y koordináta: blockIdx.y*blockDim.y + threadIdx.y

simpleGL projekt Projekt link: http://cg.elte.hu/~gpgpu/cuda/02/01_simpleGL.zip Egyszerű OpenGL – CUDA interakció. VBO kezelése CUDA-n keresztül.

simple_vbo_kernel Aktuális szál indexe unsigned int x = blockIdx.x*blockDim.x + threadIdx.x; unsigned int y = blockIdx.y*blockDim.y + threadIdx.y;

simple_vbo_kernel Egyszerű szinuszos hullám. UV koordináták float u = x / (float) width; float v = y / (float) height; u = u*2.0f - 1.0f; v = v*2.0f - 1.0f;

simple_vbo_kernel Egyszerű szinuszos hullám. Magasság kiszámolása. float freq = 4.0f; float w = sinf(u*freq) * cosf(v*freq) * 0.5f;

simple_vbo_kernel Egyszerű szinuszos hullám. Vertex végső pozíciója. pos[y*width+x] = make_float4(u, w, v, 1.0f);

simple_vbo_kernel Egyszerű szinuszos hullám. Hullámoztatás. Új globális változó: float g_fAnim = 0.0; Kernel módosítása: simple_vbo_kernel(…, float time) Kernelhívás módosítása: simple_vbo_kernel<<<grid, block>>>(…, g_fAnim)

simple_vbo_kernel Egyszerű szinuszos hullám. Hullámoztatás. Time változtatása (timerEvent fv.): g_fAnim += 0.01f; Magasság számolása: float w = sinf(u*freq + time) * cosf(v*freq + time) * 0.5f;

Dobozszűrő (Box filter) 3*3-as átlagszűrő: [1 1 1] Alkalmazva konvolúcióval a kép minden pixelére:

boxFilter projekt Projekt linkje: http://cg.elte.hu/~gpgpu/cuda/02/02_boxFilter.zip OpenGL – CUDA interakció. Textúra kezelés CUDA-n keresztül. Egyszerű doboszűrő megvalósítása.

boxFilter.cpp CUDA kernel meghívása Display függvénybe a megfelelő helyre: boxFilterRGBA(d_result, width, height, filter_radius, nthreads, kernel_timer);

boxFilter_kernel.cu boxFilterRGBA függvény checkCudaErrors( cudaBindTextureToArray(rgbaTex, d_array) ); double dKernelTime; dKernelTime = 0.0; checkCudaErrors(cudaDeviceSynchronize()); sdkResetTimer(&timer); d_boxfilter_rgba<<< (width * height) / nthreads, nthreads, 1 >>>(d_dest, width, height, radius); dKernelTime += sdkGetTimerValue(&timer); return dKernelTime/1000.;

boxFilter_kernel.cu d_boxfilter_rgba függvény Aktuális pixel indexének kiszámolása: unsigned int idx = blockIdx.x*blockDim.x + threadIdx.x; Túlindexelés esetén ne hajtódjon végre a kód if (idx < w*h) { … }

boxFilter_kernel.cu d_boxfilter_rgba függvény Skála kiszámolása float scale = 1.0f / ((2*r + 1)*(2*r + 1)); X koordináta unsigned int x = idx / w; Y koordináta unsigned int y = idx % w;

boxFilter_kernel.cu d_boxfilter_rgba függvény if (y <= r || y >= h-r || x <= r || x >= w-r) return; float4 t = make_float4(0.0f); float2 center = make_float2(x,y); for (int y = -r; y <= r; y++) for (int x = -r; x <= r; x++) t += tex2D(rgbaTex, center.y + y, center.x + x); od[idx]= rgbaFloatToInt(t * scale);

boxFilter.cpp Animáció TimerEvent függvénybe: filter_radius = filter_radius % 9 + 1;

Köszönöm a figyelmet