programação em gpu paulo a. pagliosa [email protected] faculdade de computação universidade...
TRANSCRIPT
Programação em GPUPaulo A. Pagliosa
Faculdade de ComputaçãoUniversidade Federal de Mato Grosso do Sul
IV Programa de Verão em Matemática Computacional, Estatística e Computação
São Carlos, fevereiro de 2010
Apresentação
• Objetivo geral do minicursoIntrodução à programação de GPUs com arquitetura CUDA.
• Requisito: C++• Horário
2
Segunda(01/02)
Quarta(03/02)
Sexta(05/02)
Segunda(08/02)
Terça(09/02)
Quarta(10/02)
15h-16h •
16h-17h • • • • • •
17h-18h • • • • • •
18h-19h • •
Apresentação
• Ementa– Introdução a GPGPU (www.gpgpu.org)– Fundamentos de programação CUDA– Toolkit e SDK CUDA– Otimizações– Estudos de caso
• Bibliografia (www.nvidia.com/object/cuda_develop.html)
– CUDA Programming Guide– CUDA Reference Manual– CUDA Best Practices Guide
3
Introdução a GPGPU
• GPUs: unidades de processamento gráfico– Originalmente projetadas para processamento
gráfico 3D– Exemplos
4
NVIDIA GeForce 9500 GTNVIDIA Tesla C1060
Introdução a GPGPU
• Pipeline gráfico fixo (OpenGL)
5
HardwareSoftware
Aplicação Processamento de geometria
Exibição
Processamento de fragmentos
Cena
Dados de geometriaDados de geometria
Dados de pixelsDados de pixels
Fontes de luzFontes de luz
MateriaisMateriais
Rasterização
FramebufferFramebuffer
Hardware
Exibição
Rasterização
FramebufferFramebuffer
Introdução a GPGPU
• Pipeline gráfico fixo (OpenGL)
6
Processamento de geometria
Processamento de fragmentos
Transformação
Iluminação
Projeção
Montagem de primitivos
Recorte
PrimitivosPrimitivos
Hardware
Exibição
FramebufferFramebuffer
Rasterização
Processamento de geometria
Processamento de fragmentos
Introdução a GPGPU
• Pipeline gráfico fixo (OpenGL)
7
Mapeamento de textura
Aplicação de neblina
Composição
Tonalização
Hardware
Exibição
FramebufferFramebuffer
Rasterização
Processamento de geometria
Processamento de fragmentos
Introdução a GPGPU
• Pipeline gráfico fixo (OpenGL)
8
Introdução a GPGPU
• GPUs de primeira geração (1998)– Pipeline fixo– Renderização de triângulos pré-transformados– Exemplos: TNT2, Voodoo3
• GPUs de segunda geração (1999-2000)– Transformações geométricas– Iluminação– Velocidade de renderização maior– Exemplos: GeForce 2, ATI 5700
9
Hardware
Exibição
FramebufferFramebuffer
Rasterização
Processamento de geometria
Processamento de fragmentos
Introdução a GPGPU
• Pipeline gráfico programável (OpenGL 3.1)
10
Transformação
Iluminação
Projeção
Montagem de primitivos
Recorte
PrimitivosPrimitivos
Mapeamento de textura
Aplicação de neblina
Composição
Tonalização
Hardware
Exibição
FramebufferFramebuffer
Rasterização
Processamento de geometria
Processamento de fragmentos
Introdução a GPGPU
• Pipeline gráfico programável (OpenGL 3.1)
11
Introdução a GPGPU
• Shaders– Módulos que executam em GPU– Um shader pode ser de:• Vértice• Geometria (SM 4)• Fragmento
– Substituem a funcionalidade do pipeline fixo• Programa em GPU: um ou mais shaders
12
Programa GPU
Shader de vérticeShader de vértice Shader de geometriaShader de geometria Shader de fragmentoShader de fragmento
Introdução a GPGPU
• Shader de fragmento– Opera isoladamente sobre um fragmento– Entrada
• Variáveis pré-calculadas pela OpenGL• Variáveis definidas pela aplicação
– Saída: cor do fragmento– Operações
• Mapeamento de textura• Tonalização• Aplicação de neblina
– Fragmento pode ser descartado– Coordenadas do fragmento não podem ser mudadas
13
Introdução a GPGPU
• GPUs de terceira geração (2001-2002)– Pipeline programável com shaders de vértices– Número limitado de instruções sem ponto flutuante– Programação em linguagem de montagem– Exemplos: GeForce3 e 4, ATI 8500
• GPUs de quarta geração (2003-2006)– Shaders de vértices e fragmentos– Expansão do número de instruções– Ponto flutuante de 32 bits e dados em texturas– Surgimento de linguagens de shaders – Exemplos: GeForce FX, 6 e 7; ATI 9700 e 9800
14
Introdução a GPGPU
15
• NVIDIA GeForce 6800– Até 6 processadores de vértices– 16 processadores de fragmentos
Introdução a GPGPU
• Linguagens de shaders– Cg (C for graphics), NVIDIA– HLSL (High Level Shader Language), Microsoft– GLSL (OpenGL Shader Language)
16
Introdução a GPGPU
• Programas GLSL
17
Programa
glCreateProgram
glAttachShader
glLinkProgram
glUseProgram
Shader
glCreateShader
glShaderSource
glCompileShader
Código GLSLCódigo GLSL
Introdução a GPGPU
• GPGPU: programação genérica em GPU• GPGPU com shaders– Modelo de programação: streams e kernels– Streams: dados de entrada e saída• Vetores em CPU — texturas em GPU
– Kernels: shaders (de fragmento)– Saída: renderização em textura– Execução: rasterização– Mapping Computational Concepts to GPUs– Dificuldades
18
Introdução a GPGPU
• Exemplos– Simulação dinâmica de corpos rígidos
– Multiplicação de matrizes potência de dois19
•Sem restrições •Com detecção de colisões
Introdução a GPGPU
• Desvantagens de GPGPU com shaders– GPU é programada através de uma API gráfica
• Curva de aprendizado da API• Overhead para aplicações não gráficas
– Flexibilidade• Memória da GPU pode ser lida (gather) mas não pode ser
escrita (scatter) de maneira geral• Shader de fragmento produz apenas saídas RGBA
• CUDA: Compute Unified Device Architecture• GPUs de quinta geração (2007-)– Computação de propósito geral– Exemplos: GeForce 8, 9, 100 e 200
20
Introdução a GPGPU
21
• NVIDIA GeForce 8800 GTX– 16 multiprocessadores (SMs)– 8 processadores (SPs) por multiprocessador
Introdução a GPGPU
• Aplicações CUDA– Visualização e simulação
– CUDA Zone22
•Traçado de raios •Simulação de fluídos