22
Programação em GPU Paulo A. Pagliosa [email protected] Faculdade de Computação Universidade 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

Programação em GPU Paulo A. Pagliosa [email protected] Faculdade de Computação Universidade Federal de Mato Grosso do Sul IV Programa de Verão em

Embed Size (px)

Citation preview

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

Programação em GPUPaulo A. Pagliosa

[email protected]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Introdução a GPGPU

• Aplicações CUDA– Visualização e simulação

– CUDA Zone22

•Traçado de raios •Simulação de fluídos