220 likes | 345 Vues
IV Programa de Verão em Matemática Computacional, Estatística e Computação. Programação em GPU. Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul. São Carlos, fevereiro de 2010. Apresentação. Objetivo geral do minicurso
E N D
IV Programa de Verão em Matemática Computacional, Estatística e Computação Programação em GPU Paulo A. Pagliosa pagliosa@facom.ufms.br Faculdade de Computação Universidade Federal de Mato Grosso do Sul São Carlos, fevereiro de 2010
Apresentação • Objetivo geral do minicurso Introdução à programação de GPUs com arquitetura CUDA. • Requisito: C++ • Horário
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
Introdução a GPGPU • GPUs: unidades de processamento gráfico • Originalmente projetadas para processamento gráfico 3D • Exemplos • NVIDIA GeForce 9500 GT • NVIDIA Tesla C1060
Introdução a GPGPU • Pipeline gráfico fixo (OpenGL) Software Hardware Cena Dados de geometria Processamento de geometria Aplicação Rasterização Processamento de fragmentos Dados de pixels Fontes de luz Framebuffer Materiais Exibição
Introdução a GPGPU • Pipeline gráfico fixo (OpenGL) Hardware Processamento de geometria Transformação Iluminação Rasterização Projeção Processamento de fragmentos Montagem de primitivos Framebuffer Recorte Exibição Primitivos
Introdução a GPGPU • Pipeline gráfico fixo (OpenGL) Hardware Processamento de geometria Rasterização Processamento de fragmentos Framebuffer Exibição
Introdução a GPGPU • Pipeline gráfico fixo (OpenGL) Hardware Processamento de geometria Mapeamento de textura Rasterização Tonalização Aplicação de neblina Processamento de fragmentos Composição Framebuffer Exibição
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
Introdução a GPGPU • Pipeline gráfico programável (OpenGL 3.1) Hardware Processamento de geometria Transformação Iluminação Rasterização Projeção Processamento de fragmentos Montagem de primitivos Framebuffer Recorte Exibição Primitivos
Introdução a GPGPU • Pipeline gráfico programável (OpenGL 3.1) Hardware Processamento de geometria Mapeamento de textura Rasterização Tonalização Aplicação de neblina Processamento de fragmentos Composição Framebuffer Exibição
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 Programa GPU Shader de vértice Shader de geometria Shader 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
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
Introdução a GPGPU • 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)
Introdução a GPGPU • Programas GLSL Shader glCreateShader Programa Código GLSL glShaderSource glCreateProgram glCompileShader glAttachShader glLinkProgram glUseProgram
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
Introdução a GPGPU • Exemplos • Simulação dinâmica de corpos rígidos • Multiplicação de matrizes potência de dois
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
Introdução a GPGPU • 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 Zone