![Page 1: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/1.jpg)
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
![Page 2: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/2.jpg)
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 • •
![Page 3: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/3.jpg)
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
![Page 4: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/4.jpg)
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
![Page 5: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/5.jpg)
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
![Page 6: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/6.jpg)
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
![Page 7: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/7.jpg)
Hardware
Exibição
FramebufferFramebuffer
Rasterização
Processamento de geometria
Processamento de fragmentos
Introdução a GPGPU
• Pipeline gráfico fixo (OpenGL)
7
![Page 8: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/8.jpg)
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
![Page 9: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/9.jpg)
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
![Page 10: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/10.jpg)
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
![Page 11: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/11.jpg)
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
![Page 12: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/12.jpg)
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
![Page 13: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/13.jpg)
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
![Page 14: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/14.jpg)
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
![Page 15: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/15.jpg)
Introdução a GPGPU
15
• NVIDIA GeForce 6800– Até 6 processadores de vértices– 16 processadores de fragmentos
![Page 16: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/16.jpg)
Introdução a GPGPU
• Linguagens de shaders– Cg (C for graphics), NVIDIA– HLSL (High Level Shader Language), Microsoft– GLSL (OpenGL Shader Language)
16
![Page 17: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/17.jpg)
Introdução a GPGPU
• Programas GLSL
17
Programa
glCreateProgram
glAttachShader
glLinkProgram
glUseProgram
Shader
glCreateShader
glShaderSource
glCompileShader
Código GLSLCódigo GLSL
![Page 18: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/18.jpg)
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
![Page 19: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/19.jpg)
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
![Page 20: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/20.jpg)
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
![Page 21: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/21.jpg)
Introdução a GPGPU
21
• NVIDIA GeForce 8800 GTX– 16 multiprocessadores (SMs)– 8 processadores (SPs) por multiprocessador
![Page 22: Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em](https://reader036.vdocuments.net/reader036/viewer/2022062307/552fc133497959413d8d784a/html5/thumbnails/22.jpg)
Introdução a GPGPU
• Aplicações CUDA– Visualização e simulação
– CUDA Zone22
•Traçado de raios •Simulação de fluídos