introdução às gpus - cin.ufpe.brmarcelow/marcelow/programacao cg... · introdução às gpus...
TRANSCRIPT
11
Introdução às GPUs
Marcelo WalterMarcelo WalterUFPEUFPE
atualização/maio 2009
2
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
FB
22
3
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D API:OpenGL or Direct 3D
3D API commands
glBegin(GL_TRIANGLES);glVertex3f(0.0,0.0,0.0);glVertex3f(1.0,0.0,0.0);glVertex3f(0.5,1.0,0.0);...glEnd();
FB
3D Applicationor Game
4
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
1
2
3
4
FB
33
5
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
1
2
3
4
1 2 3 134
FB
6
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
1 2 3 134
FB
•transf em coordenadas câmera•iluminação
44
7
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
1’
2 3 1 34
FB
8
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
1’2’
3 1 3 4
FB
55
9
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
1’2’3’
1 3 4
FB
10
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
1’
2’
3’1 3 4
FB
•Conecta vértices em triângulos•recorte•Eliminação de faces traseiras•rasterização
66
11
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
1 3 4
1’
2’
3’
FB
12
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
Fragments
Colored Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
3 4
FB
•Executa interpolações•Determina cor final do fragmento
77
13
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
Fragments
Colored Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
4
1’3’
FB
14
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
Fragments
Colored Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
1’3’4’
FB
88
15
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
FB
•Depth buffer•Blending•Stencil operations
16
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
FB
99
17
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
FB
18
Graphics Pipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
FB
1010
19
Graphics Pipeline: Paralelização
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
Vertex Transformation
Vertex Transformation
1
2
3
FB
20
Graphics Pipeline: Paralelização
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
Vertex Transformation
Vertex Transformation
1’
2’
3’
FB
1111
21
Graphics Pipeline: Paralelização
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
Fragment Texturing and Coloring
Fragment Texturing and Coloring
Fragment Texturing and Coloring
Fragment Texturing and Coloring
Fragment Texturing and Coloring
FB
22
Graphics Pipeline: Paralelização
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
Fragment Texturing and Coloring
Fragment Texturing and Coloring
Fragment Texturing and Coloring
Fragment Texturing and Coloring
Fragment Texturing and Coloring
FB
1212
23
ProgrammableProgrammable GraphicsPipeline
Vertex Transformation
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
CPU – GPU Boundary
ProgrammableVertex Processor
FB
// In:// eye_space position = TEX7// eye space T = (TEX4.x, TEX5.x, TEX6.x) denormalized// eye space B = (TEX4.y, TEX5.y, TEX6.y) denormalized// eye space N = (TEX4.z, TEX5.z, TEX6.z) denormalized
fragout frag program main(vf30 In) {
float m = 30; // power float3 hiCol = float3( 1.0, 0.1, 0.1 ); // lit color float3 lowCol = float3( 0.3, 0.0, 0.0 ); // dark color float3 specCol = float3( 1.0, 1.0, 1.0 ); // specular color
// Get eye-space eye vector. float3 e = normalize( -In.TEX7.xyz );
// Get eye-space normal vector. float3 n = normalize( float3(In.TEX4.z, In.TEX5.z, In.TEX6.z ) );
24
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
CPU – GPU Boundary
Vertex Processor
ProgramFB
ProgrammableProgrammable GraphicsPipeline
1313
25
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
CPU – GPU Boundary
Vertex Processor
Program
Vertex Processor
Vertex Processor
Vertex Processor
FB
ProgrammableProgrammable GraphicsPipeline
26
Primitive Assemblyand Rasterization
Fragment Texturing and Coloring
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
CPU – GPU Boundary
ProgrammableFragment Processor
Program
Vertex Processor
FB
ProgrammableProgrammable GraphicsPipeline
Vertex Processor
1414
27
Primitive Assemblyand Rasterization
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
CPU – GPU Boundary
Fragment Processor
Program
Vertex Processor
FB
ProgrammableProgrammable GraphicsPipeline
Vertex Processor
28
Primitive Assemblyand Rasterization
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
CPU – GPU Boundary
Fragment Processor
Program
Vertex ProcessorFragment Processor
Fragment Processor
Fragment Processor
FB
ProgrammableProgrammable GraphicsPipeline
Vertex Processor
1515
29
Graphics Pipeline: The BigPicture
Primitive Assemblyand Rasterization
Raster Operations
FragmentsColored
Fragments
Vertices
TransformedVertices
Pixel Updates
3D Applicationor Game
3D API:OpenGL or Direct 3D
3D API commands
CPU – GPU Boundary
Fragment ProcessorVertex Processor
FB
30
GPU como um processador de streams (fluxo)•Multiple programmable processing units•Connected by data flows
Application VertexProcessor
FragmentProcessor
Assem
bly &R
asterization
Framebuffer
Operations
Framebuffer
Textures
Program Program
1616
31
Gargalos: Computation Frequencies1’
2’
3’
Primitive Assemblyand Rasterization Fragment ProcessorVertex Processor
134
3 3 −> −> vváriosários
32
Processador de Vértices
•• Totalmente programTotalmente programávelável (SIMD / MIMD)(SIMD / MIMD)•• Processa Processa 4-vectors (RGBA / XYZW)4-vectors (RGBA / XYZW)•• NNão consegue ler informações ão consegue ler informações de de outros vérticesoutros vértices
• No edge, face, nor neighboring vertex info
•• NNão cria nem deleta vérticesão cria nem deleta vértices• 1 vertex in and 1 vertex out
•• Programas podem Programas podem ser ser carregados dinamicamentecarregados dinamicamente•• Vertex Texture FetchVertex Texture Fetch
• Consegue acessar texturas
1717
33
Processador de Vértices
Vertex Processor
temporary registers
inputparameters
Vertex inputattributes Vertex output
attributes
texture memory
34
Atributos de Entrada dos Vértices
Vertex Processor
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
texture coord 0
texture coord 1
texture coord 2
texture coord 3
texture coord 4
texture coord 5
texture coord 6texture coord 7
position
weight
normal
primary color
secondary color
fog
-
-
1818
35
Parâmetros de Entrada
Vertex Processor
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
parameter 0
...
-
...
parameter 1
parameter 2
parameter 3
parameter 4
parameter 127
• modelview• modelview inverse• skinning matrices• other parameters
36
Parâmetros de Entrada
Vertex Processor
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
temporary 0
...
-
...
temporary 1
temporary 2
temporary 3
temporary 4
temporary 12
1919
37
Atributos de Saída dos Vértices
Vertex Processor
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
x y z w
texture coord 0
texture coord 1
texture coord 2
texture coord 3
texture coord 4
texture coord 5
texture coord 6texture coord 7
clip-space position
front primary color
fog
point size
-
front secondary color
back secondary color
back primary color
38
Processador de Fragmentos
•• Totalmente programTotalmente programávelável (SIMD)(SIMD)•• Processa Processa vectors (4 vectors (4 valores)(valores)(RGBA / XYZW)RGBA / XYZW)•• Acesso Acesso a a TexturasTexturas•• Render to TextureRender to Texture
• Fragmentos transformados em pixels são escritos numatextura e não enviados ao FB
•• Tipicamente mais Tipicamente mais útil útil do do que que o VPo VP• Mais pipelines de fragmentos do que de vértices
2020
39
Processador de Fragmentos
Fragment Processor
temporary registers
inputparameters
Interpolated vertex attributes
texture memory
Fragment attributes
40
Atributos de Entrada
Fragment Processor
Interpolated vertex attributes
x y z w
x y z w
x y z w
x - - -
color
Secondary color
Texture coordinateFog coordinate
2121
41
Atributos de Saída
Fragment Processor
Fragment attributes
Frag data
x y z w
z depth
color
x y z w
x y z w
42
Tipos de Dados
•• Scalars:Scalars:float/integer/booleanfloat/integer/boolean• Precisão de 32 ou 16 bits
• ATI suporta 24 bits
• GLSL tem inteiros de 16 bits
•• VectorVector• 3 ou 4 componentes
•• Arrays (de Arrays (de tamanho fixotamanho fixo))
•• No bit operationsNo bit operations•• Matrix data typesMatrix data types•• Texture data typeTexture data type
2222
43
Data Binding
ModosModos::•• uniformuniform: o : o parparââmetro metro éé fixo dentro fixo dentro de de umauma
chamda glBeginchamda glBegin()()-glEnd-glEnd()()•• varyingvarying: dados : dados interpolados enviados aointerpolados enviados ao
programa programa de de fragmento fragmento (ex. (ex. cor cor pixel,pixel,coordenadas coordenadas de de texturatextura))
•• attributeattribute: dados per-vertex : dados per-vertex enviados enviados à à GPU GPU pelapelaCPU (CPU (coordenadas coordenadas de de vvéérticesrtices, , coordenadas coordenadas dedetexturastexturas, , normaisnormais, etc)., etc).
44
Data Binding
•• DireDireçãoção::•• inin: dados : dados enviados para dentro enviados para dentro dodo
programa programa (ex. vertex coordinates)(ex. vertex coordinates)•• outout: dados : dados enviados para fora enviados para fora do thedo the
programa programa (ex. depth)(ex. depth)•• inoutinout: ambos : ambos acima acima (ex. (ex. corcor))
2323
45
Operações e Fluxo de Controle
•• AritmAritmética ética usual e usual e operações algébricas especiaisoperações algébricas especiais(trigonometry, interpolation, discrete derivatives, etc)(trigonometry, interpolation, discrete derivatives, etc)
•• No integer modNo integer mod……•• for-loops, while-do loops, if-then-else statements.for-loops, while-do loops, if-then-else statements.•• discarddiscard permite desabilitar permite desabilitar um um fragmento fragmento e e encerrar encerrar oo
processamentoprocessamento•• Chamadas recursivas nChamadas recursivas não estão suportadasão estão suportadas•• Sempre uma funSempre uma função ção ““mainmain”” default default que comeque começa ça oo
programaprograma