Nincs szinkronizáció és kommunikáció Csővezeték alkalmazása Párhuzamosítás

Hasonló dokumentumok
Fraktálok és káosz. Szirmay-Kalos László

2D képszintézis. Szirmay-Kalos László

dimenziója Szirmay-Kalos László N= 1/r D D= (logn) / (log 1/r) D= (log4) / (log 3) = 1.26 N = 4, r = 1/3 Vonalzó ( l ) db r =1/3 N = 4 r 2 N 2 N m r m

Számítógépes grafika

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

Véletlen szám generálás Labirintus felépítése 1x1-es felbontástól a teljes méretig

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

HLSL programozás. Szécsi László

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

Grafikus csővezeték (Általános áttekintés) Grafikus csővezeték (Általános áttekintés)

Tanács Attila. Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

OpenGL Compute Shader-ek. Valasek Gábor

Szakdolgozat. Dandár Gábor

Árnyalás, env mapping. Szécsi László 3D Grafikus Rendszerek 3. labor

Párhuzamos és Grid rendszerek

2. Generáció ( ) 3. Generáció (2001) NVIDIA TNT2, ATI Rage, 3dfx Voodoo3. Klár Gergely

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

Direct3D pipeline. Grafikus játékok fejlesztése Szécsi László t03-pipeline

Grafikus csővezeték 1 / 44

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

A számítógépes grafika inkrementális képszintézis algoritmusának hardver realizációja Teljesítménykövetelmények:

GPU Lab. 11. fejezet. Vizualizáció. Lectures on Modern Scientific Programming Wigner RCP November D. Berényi M. F.

Eichhardt Iván GPGPU óra anyagai

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Grafikus csővezeték 2 / 77

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

Valasek Gábor

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

Eichhardt Iván GPGPU óra anyagai

Geometriai modellezés. Szécsi László

Bevezetés a CGI-be. 1. Történelem

Textúrák. Szécsi László

1. Bevezetés 1. Köszönetnyilvánítás A számítógépes játékfejlesztésről 3

Magas szintű optimalizálás

Tanács Attila. Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Klár Gergely 2010/2011. tavaszi félév

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

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

Sergyán Szabolcs szeptember 21.

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

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

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

Számítógépes Graka - 4. Gyak

BME MOGI Gépészeti informatika 15.

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Algoritmusok raszteres grafikához

Tartalmi összefoglaló

Objektumok reprezentációja. Általános áttekintés

Realisztikus színtér 1 / 59

Google Summer of Code OpenCL image support for the r600g driver

Fordítás Kódoptimalizálás

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

Mintavételes szabályozás mikrovezérlő segítségével

FIR SZŰRŐK TELJESÍTMÉNYÉNEK JAVÍTÁSA C/C++-BAN

Gauss szűrő L ' ( X, Y ) L ( X x, Y y ) w ( X, Y, x, y ) dxdy 2 2 x y w ( x, y ) e /

Plakátok, részecskerendszerek. Szécsi László

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

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

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

A bemutatott példa a Phong modell egy egyszerűsített változatát alkalmazza a Blinn-Phong-féle megközelítést

Él: a képfüggvény hirtelen változása. Típusai. Felvételeken zajos formában jelennek meg. Lépcsős

C# gyorstalpaló. Készítette: Major Péter

Máté: Számítógépes grafika alapjai

21. évfolyam 4. szám. Fizika InfoRmatika Kémia Alapok. Kiadó. Levélcím Cluj, C. P. 1/140

Feldspar: Nyelv digitális jelfeldolgozáshoz

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

Maga a tématerület így nagyon nagy. A fények pontos fizikai szimulációja kimondottan számításigényes

Matematika szigorlat, Mérnök informatikus szak I máj. 12. Név: Nept. kód: Idő: 1. f. 2. f. 3. f. 4. f. 5. f. 6. f. Össz.: Oszt.

Féléves feladat. Miről lesz szó? Bemutatkozás és követelmények

A Számítógépek hardver elemei

Képfeldolgozás jól párhuzamosítható

Fejlett programozási nyelvek C++ Iterátorok

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon) b) Minden belső pont kirajzolásával (kitöltött)

Képfeldolgozó eljárások áttekintés. Orvosi képdiagnosztika

BME MOGI Gépészeti informatika 18. Grafika, fájlkezelés gyakorló óra. 1. feladat Készítsen alkalmazást az = +

Általános áttekintés. Általános áttekintés

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

PTE PMMFK Levelező-távoktatás, villamosmérnök szak

Matematika osztályozó vizsga témakörei 9. évfolyam II. félév:

Alkalmazott Informatikai Tanszék SZÁMÍTÓGÉP-PROGRAMOZÁS dr.dudás László 21./0. 3D grafika programozása OpenGL támogatással A 3D API

3. Gyakorlat Ismerkedés a Java nyelvvel

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

KÉPFELDOLGOZÁS A DIRECTX 9 MAGAS SZINTŰ ÁRNYALÓ NYELVÉNEK SEGÍTSÉGÉVEL

D3D, DXUT primer. Grafikus játékok fejlesztése Szécsi László t01-system

Heterogén számítási rendszerek gyakorlatok (2017.)

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

Matematika. 9.osztály: Ajánlott tankönyv és feladatgyűjtemény: Matematika I-II. kötet (Apáczai Kiadó; AP és AP )

3D koordináta-rendszerek

Farkas Gyula Szakkollégium Bit- és számtologatók. DirectX9 1. Szín, fény, textúra 2. Stencil buffer használata (tükörkép, hamis árnyék)

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

Képszegmentáló eljárások. Orvosi képdiagnosztika 2018 ősz

PTE PMMFK Levelező-távoktatás, villamosmérnök szak

egy szisztolikus példa

Jelfeldolgozás bevezető. Témalaboratórium

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

4. gyakorlat: interpolációs és approximációs görbék implementációja

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

Lényege: valamilyen szempont szerint homogén csoportok képzése a pixelekből. Amit már ismerünk:

Képfeldolgozó eljárások áttekintés. Orvosi képdiagnosztika 9. ea ősz

Átírás:

Nincs szinkronizáció és kommunikáció Csővezeték alkalmazása Párhuzamosítás Proc Proc 2 Csővezeték Proc 2 Proc Párhuzamosság Proc 22

Alapműveletek Map Amplify Reduce Sum

CPU Vertex Shader Vertexek + tulajdonságok: Bemenő adatfolyam: 3 x 4 float Leképzés (Mapping): Az adatfolyam elemeinek átalakítása Textúra memória Framebuffer Geometria shader Tesszelációs shader Vágás Háromszög előkészítés+ raszterizáció + lineáris interpoláció Pixel Shader Kompozitálás Bővítés (amplification) Feltételes redukció Bővítés (amplification) Leképzés (Mapping) Összegzés + redukció

SISD (Single Instruction on Single Data) Egymagos CPU, beágyazott vezérlők SIMD (Single Instruction on Multiple Data) GPU Multiprocesszor CPU kiterjesztések (MMX, SSE, 3DNow!) MIMD (Multiple Instruction on Multiple Data) Több processzoros rendszerek Több magos CPU GPU

SIMD Adatközpontú Globális I/O igény Erőteljesen párhuzamosítható Példa két vektor összege vektor mátrix szorzás

SIMD a CPU-n Intel MMX 8 speciális 64 bites regiszter 8, 6, 32, 64 bites darabok Egész műveletek Intel SSE 8-6 speciális 28 bites regiszter Float, double, integer darabok Egész és lebegő pontos műveletek

SIMD a GPU-n Bemenő adatfolyam Vertex és tulajdonság streamek Textúrák Kimenő pixelhalmaz Újra feldolgozható vertex és fragmens folyam

Teljes képernyős téglalap (CPU): glviewport(,, HRES, VRES) glbegin(gl_quads); gltexcoord2f(,); glvertex4f(-,-,, ); gltexcoord2f(,); glvertex4f(-,,, ); gltexcoord2f(,); glvertex4f(,,, ); gltexcoord2f(,); glvertex4f(,-,, ); glend( ); Vertex shader (GLSL): in vec4 position; in vec2 texcoord; out vec2 ftexcoord; Geometria: háromszögek Az eredménytömb melyik elemeit számítjuk ki? Eredmény tömb void main (void) { gl_position = position; ftexcoord = texcoord; } Fragment shader (GLSL): in vec2 ftexcoord; out vec4 outcolor; void main (void) { outcolor = F(fTexCoord); } Képszintézis Minden kimeneti tömbelemre ugyanaz az algoritmus, más adatokra: SIMD Kimeneti kép Textúra vagy rasztertár

Primitívek Pont (GL_POINTS) (x,y,z) Szakasz (GL_LINES) (x,y,z ) (x 2,y 2,z 2 ) Háromszög (GL_TRIANGLES) (x 2,y 2,z 2 ) (x 3,y 3,z 3 ) (x,y,z )

Vertex Array Adat bufferek.. GL_MAX_VERTEX_ATTRIBS 4 komponensű vektor tömbök Nincs meghatározott értelmezés Vertex Array Textúra koordináta Normál vektor Szín Pozíció

GLfloat vertices[8] = { -.f,.f,.f,.f,.f,.f, -.f, -.f,.f, -.f, -.f,.f,.f,.f,.f,.f, -.f,.f }; GLfloat texcoords[2] = {.f,.f,.f,.f,.f,.f,.f,.f,.f,.f,.f,.f }; (, ) (,, ) (-, -, ) (, )

GLuint vertexarray; glgenvertexarrays(, &vertexarray); glbindvertexarray(vertexarray); GLuint vertexbuffer; glgenbuffers(, &vertexbuffer); glbindbuffer(gl_array_buffer, vertexbuffer); glbufferdata(gl_array_buffer, sizeof(glfloat) * vcount, vertices, GL_STATIC_DRAW); glvertexattribpointer((gluint), 3, GL_FLOAT, GL_FALSE,, );... glbindvertexarray(); glbindvertexarray(vertexarray); shader->bindattriblocation(, position ); shader->bindattriblocation(, texcoord ); gldrawarrays(gl_triangles,, vcount); glbindvertexarray();

Shader program Egybe fogja a rendereléshez használt shadereket Az OpenGL driver fordítja Összeköti a shader változókat Shader program Vertex shader Geometria Shader Fragmens shader Tesszelációs shader

Shaderek létrehozása GLuint shader; shader = glcreateshader(gl_vertex_shader); glshadersource(shader,, (const char**)&shadersource, &length); glcompileshader(shader); GLuint errorflag; glgetshaderiv(shader, GL_COMPILE_STATUS, &errorflag); if(!errorflag){ glgetshaderinfolog(...); } Shader program GLuint shaderprogram; shaderprogram = glcreateprogram(); glattachshader(shaderprogram, shader);... gllinkprogram(shaderprogram); glgetprogramiv(shaderprogram, GL_LINK_STATUS, &errorflag); if(!errorflag){ glgetprograminfolog(...); }

Program engedélyezése gluseprogram(shaderprogram); Program tiltása gluseprogram(); Vertex attribútumok glenablevertexattribarray(vertexarray); glbindattriblocation(shaderprogram,, position ); glbindattriblocation(shaderprogram,, texcoord ); Uniform paraméterek GLuint location = glgetuniformlocation(shaderprogram, name); gluniformf(location, floatval); gluniform3f(location, floatvalx, floatvaly, floatvalz);

Adattípusok Egyszerű típusok bool, integer, float Vektor típusok vec2 texcoord vec3 position vec4 colorrgba bvec, ivec Mátrix típusok mat2, mat3, mat4 mat[2,3,4]x[2,3,4]

Minősítők const: fordítási idejű konstans változó const float maxiteration uniform: globális változó a primitívre uniform vec2 viewportsize in: bemenő változó az előző shader lépcsőből in vec2 texcoord out: kimenő változó a következő lépcsőnek out vec3 position

Operátorok Aritmetika és bitműveletek +,-,*,/,%, <<, >>, &, ^,,... Adatkonverzió (int)float, (float)bool,... Vektor és mátrix konstruktor vec3(float), vec4(float, vec3), mat2(float) Swizzle operátor.{xyzw},.{rgba},.{stpq} vec2 v2 = vec3(.,.,.).xy

Beépített függvények Trigonometria és szögfüggvények radians, degrees, sin, cos, atan,... Geometriai függvények length, distance, dot, cross, normalize,... Exponenciális függvények pow, exp, log, sqrt,... Általános függvények abs, sign, floor, ceil, mix, smoothstep, min, max,... Mátrix függvények transpose, determinant, inverse,...

Vertex shader in vec4 position; // bemenő pozíció in vec2 texcoord; // bemenő textúra koordináták out vec2 ftexcoord; // interpolálandó textúra koordináták void main (void) { gl_position = position; // pozíció a pipeline további részére ftexcoord = texcoord; // textúra koordináta a fragmens shadernek } Fragmens shader in vec2 ftexcoord; // interpolált textúra koordináta out vec4 outcolor; // a rasztertárba írandó szín void main (void) { outcolor = vec4(ftexcoord,.,.); }

F z = x + iy Egy pontba konvergál Divergál Egy tartományon ugrándozik: Attraktor

divergens z = re iφ r r 2 φ 2φ konvergens Attraktor: H = F(H)

Attraktor a labilis és a stabil tartomány határa Kitöltött attraktor = amely nem divergens z n+ = z n 2 : ha z < akkor fekete

Im z (X,Y) FilledJuliaDraw () FOR Y = TO Ymax DO FOR X = TO Xmax DO ViewportWindow(X,Y x, y) z = x + j y FOR i = TO n DO z = z 2 + c IF z > infinity THEN WRITE(X,Y, white) ELSE WRITE(X,Y, black) ENDFOR ENDFOR END Re z

Julia halmaz z = x + iy 2 zn = zn + c Nem divergens vec2 z = TexCoord; int i; for(i=;i<maxiteration; ++i){ z = vec2(z.x*z.x z.y*z.y, 2.*z.x*z.y)+c; if(dot(z, z) > 4.){ outcolor = vec4(.); return; } } outcolor = vec4(vec3(.),.);

Azon c komplex számok, amelyekre a z z 2 + c Julia halmaza összefüggő

MandelbrotDraw( ) FOR Y = TO YmaxDO FOR X = TO XmaxDO ViewportWindow(X,Y x, y) c = x + j y z = FOR i = TO n DO z = z 2 + c IF z > infinity THEN WRITE(X,Y, white) ELSE WRITE(X,Y, black) ENDFOR ENDFOR END

Mandelbrot halmaz c = x + iy z = c 2 zn = zn + c Nem divergens vec2 c = TexCoord; vec2 z = c; int i; for(i=;i<maxiteration; ++i){ z = vec2(z.x*z.x z.y*z.y, 2.*z.x*z.y)+c; if(dot(z, z) > 4.){ outcolor = vec4(.); } } outcolor = vec4(vec3(.),.);

GPGPU: GPU mint vektorprocesszor Geometria: háromszögek Az eredménytömb melyik elemeit számítjuk ki? Bemeneti adat Eredmény tömb Bemeneti kép Képszintézis Kimeneti kép Textúrák Minden kimeneti tömbelemre ugyanaz az algoritmus, más adatokra: SIMD Textúra vagy rasztertár

Bemeneti adat Teljes képernyős téglalap (CPU): glviewport(,, HRES, VRES) glbegin(gl_quads); gltexcoord2f(,); glvertex4f(-,-,, ); gltexcoord2f(,); glvertex4f(-,,, ); gltexcoord2f(,); glvertex4f(,,, ); gltexcoord2f(,); glvertex4f(,-,, ); glend( ); Vertex shader (GLSL): in vec4 position; in vec2 texcoord; out vec2 ftexcoord; void main (void) { gl_position = position; ftexcoord = texcoord; } Fragment shader (GLSL): uniform sampler2d bemadat; in vec2 ftexcoord; out vec4 outcolor; void main (void) { outcolor = Bemeneti képből számított adat a tex2d(bemadat, f(tex)) alapján; } Melyik kimeneti tömbelemet számítjuk Eredmény tömb

Textúra definíció GLuint texture; glgentextures(, &texture); glbindtexture(gl_texture_2d, texture); gltexparameteri(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gltexparameteri(gl_texture_2d, GL_TEXTURE_MAG_FILTER, GL_LINEAR); gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_S, GL_REPEAT); gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_T, GL_REPEAT); glteximage2d(gl_texture_2d,, GL_RGBA32F, w, h,, GL_RGBA, GL_FLOAT, ); Shader paraméter GLuint location = glgetuniformlocation(shaderprogram, texturemap ); glactivetexture(gl_texture); glbindtexture(gl_texture_2d, texture); gluniformi(location, ); Shaderbeli elérés uniform sampler2d texturemap; vec4 texcolor = texture(texturemap, texcoord);

Szórás (Scatter) Gyűjtés (Gather)

Fényességi transzformációk CIE Luminancia I = [ x y z].2.39.4 uniform sampler2d colormap; in vec2 texcoord; out vec4 outcolor; void main{ vec4 color = texture(colormap, texcoord); outcolor =vec4(dot(color.rgb, vec3(.2,.39,.4))); }

Küszöbözés uniform sampler2d colormap; uniform float threshold; in vec2 texcoord; float I(vec2 texcoord){ vec4 color = texture(colormap, texcoord); return(dot(color.rgb, vec3(.2,.39,.4))); } void main(){ outcolor = I(texCoord) > threshold? vec4(.) : vec4(.); }

Adatgyűjtés (Gather) Egy-egy elem módosítása a környezete alapján Konvolúciós szűrés (lehetne bármi más is) Kép Kép transzformáció: konvolúció * g f g = Képfeldolgozási műveletek * g f g = = = = = = = = ), ( ), ( ), )( * ( ), ( ), ( ), )( * ( ), ( ), ( ), )( * ( u v u v u v v y u x g v u f y x g f v u v y u x g v u f y x g f dudv v y u x g v u f y x g f = v u

Élkeresés 5 55 54 28 28 28 Gradiens alapján detektáljuk az éleket Central differences 2 ), ( ), ( ), ( 2 ), ( ), ( ), ( + = + = y x L y x L y x y L y x L y x L y x x L 2 2 + = y L x L I

Élkeresés uniform sampler2d colormap; uniform vec2 texturesize; in vec2 ftexcoord; out vec4 outcolor; void main(){ float gradx = (I(vec2(fTexCoord.x+./textureSize.x, ftexcoord.y)) I(vec2(fTexCoord.x-./textureSize.y, ftexcoord.y)) / 2.; } float grady = (I(vec2(fTexCoord.x, ftexcoord.y+./texturesize.y)) I(vec2(fTexCoord.x, ftexcoord.y-./texturesize.y)) / 2.; outcolor = vec4(sqrt(gradx * gradx + grady * grady));

Élkeresés Prewitt operátor I G x = I G y = Sobel operátor I G x = 2 2 I G y = 2 2 I G x = I G y =

Prewitt operátor uniform sampler2d colormap; uniform vec2 texturesize; const float kernelx[9]=float[9]( -./6.,.,./6., -./6.,.,./6., -./6.,.,./6. ); const float kernely[9]=float[9](./6.,./6.,./6.,.,.,., -./6., -./6., -./6. ); in vec2 ftexcoord; out vec4 outcolor; void main(){ float gradx =.; float grady =.; for(int i=; i<9; ++i){ gradx += I(fTexCoord.xy + offset[i]) * kernelx[i]; grady += I(fTexCoord.xy + offset[i]) * kernely[i]; } outcolor = vec4(sqrt(gradx * gradx + grady * grady)); }

Sobel operátor uniform sampler2d colormap; uniform vec2 texturesize; const float kernelx[9]=float[9]( -./8.,.,./8., -2./8.,., 2./8., -./8.,.,./8. ); const float kernely[9]=float[9](./8., 2./8.,./8.,.,.,., -./8., -2./8., -./8. ); in vec2 ftexcoord; out vec4 outcolor; void main(){ float gradx =.; float grady =.; for(int i=; i<9; ++i){ gradx += I(fTexCoord.xy + offset[i]) * kernelx[i]; grady += I(fTexCoord.xy + offset[i]) * kernely[i]; } outcolor = vec4(sqrt(gradx * gradx + grady * grady)); }

Élkeresés Laplace operátor uniform sampler2d colormap; uniform vec2 texturesize; in vec2 texcoord; const float kernel[9] = float[9](.,.,.,., -4.,.,.,.,.); void main(){ for(int x=-; x<; ++x) for(int y=-; y<; ++y) outcolor += I(texCoord + vec2(x/texturesize.x, y/texturesize.y))* kernel[x+y*3]; } G x = 4 I

Élkiemelés A képből vonjuk ki a második deriváltját = 5 4

Gauss szűrő G x + y 2 2σ ( x, y) = e 2 2πσ 2 2 2 2 4 2 2 /6