Você está na página 1de 33

Conceitos de programao em GPU

Alvaro Cuno Jos Ricardo Mello Viana Laboratrio de Computao Grfica - UFRJ

Roteiro
Contextualizao Caractersticas das GPUs Conceitos para programao

Arquitetura de um PC
GPU Alta largura de banda Alto poder de clculo

Graphics Processing Unit (GPU)


Processador extremamente potente e flexvel Inicialmente projetado para processamento grfico em 3D
Placa de video GeForce 8800GT

CPU/GPU: poder computacional


Intel Core2 Quad 3.0GHz 96 GFLOPS Largura de banda: 21 GB/s Preo: $1100 Crecimento anual: 1.4x NVidia GeForce 8800GTX 330 GFLOPS Largura de banda: 55.2 GB/s Preo: $550 Crecimento anual: 1.7x (fragment shader ) 2.3x (vertex shader )

CPU/GPU: poder computacional

GPU: flexibilidade
GPU so altamente programveis {vertex , geometry , fragment } shader Linguagens de programao de alto nvel GPUs recentes suportam clculos de alta preciso 32 bits em todo o pipeline Preciso suficiente para a maioria das aplicaes

Por que so to potentes?


Inicialmente foram projetadas para executar clculo matemtico e processamento paralelo intenso Maior nmero de transistores para processamento que para caching de dados e controle de fluxo

Por que so to potentes?


Inicialmente foram projetadas para executar clculo matemtico e processamento paralelo intenso Maior nmero de transistores para processamento que para caching de dados e controle de fluxo

Indstria do entretenimento Tamanho -> economa de escala, Competitividade -> estimula a inovao

Exemplos de aplicaes recentes

Correa C. and Silver D. (2007)

Fedkiw et al. (2007)

Problema: no simples de usar


GPUs foram desenhadas para processamento grfico Modelo de programao no usual Programao dependente do pipeline grfico Ambiente de programao restrito Arquiteturas de GPUs Executam processamento paralelo Em constante evoluo Fechada, segredo do fabricante Codificao No basta "recompilar" cdigo tradicional Ferramental mnimo Novas tendncias: CTM (AMD), CUDA (NVIDIA)

Problema: no simples de usar


GPUs foram desenhadas para processamento grfico Modelo de programao no usual Programao dependente do pipeline grfico Ambiente de programao restrito Arquiteturas de GPUs Executam processamento paralelo Em constante evoluo Fechada, segredo do fabricante Codificao No basta "recompilar" cdigo tradicional Ferramental mnimo Novas tendncias: CTM (AMD), CUDA (NVIDIA)

Problema: no simples de usar


GPUs foram desenhadas para processamento grfico Modelo de programao no usual Programao dependente do pipeline grfico Ambiente de programao restrito Arquiteturas de GPUs Executam processamento paralelo Em constante evoluo Fechada, segredo do fabricante Codificao No basta "recompilar" cdigo tradicional Ferramental mnimo Novas tendncias: CTM (AMD), CUDA (NVIDIA)

Problema: no simples de usar


GPUs foram desenhadas para processamento grfico Modelo de programao no usual Programao dependente do pipeline grfico Ambiente de programao restrito Arquiteturas de GPUs Executam processamento paralelo Em constante evoluo Fechada, segredo do fabricante Codificao No basta "recompilar" cdigo tradicional Ferramental mnimo Novas tendncias: CTM (AMD), CUDA (NVIDIA)

Pipeline grfico
Aplicao Computa geometria 3D e faz chamadas API grfica Transforma geometria 3D para 2D (em paralelo) Gera fragmentos a partir da geometria 2D (em paralelo) Combina fragmentos para formar uma imagem

Transformao

Rasterizao

Composio GPU

Pipeline grfico (simplificado)

Hardware em evoluo constante


Pre-GPU 1 gerao 2 gerao (1999-2000) 3 gerao (2001-2002) 4 gerao (2003-2006) 5 gerao (2007-) NVidia TNT2, ATI Rage, 3DFX Voodoo3 NVidia 256, Geforce2, ATI Radeon 8500 NVidia Geforce 3 and 4, and the ATI Radeon 8500 FX series, ATI Radeon 9700/9800 NVidia GeForce serie 8 Solues custosas de S/H (SGI)
rasterizao, no transformaes transformaes e lighting Vertex shader, limited instructions number, absence of program flow control, fixed-point numbers Vertex and fragment shaders, texture data, floating-point numbers Graphics hardware for generalpurpose computation

Arquitetura de uma GeForce 6


Pipeline grfico Aplicaes no grficas

Fonte: GPU Gems 2

Todas as operaes so feitas em ponto flutuante de 32 bits por componente

Arquitetura de uma GeForce 8

Programao em GPU
Caracteristicas: GPU vs. CPU Linguagens e ambientes Stream programming GPUs foram desenhados para rendering interativo e no para computao A memria das GPUs e as suas unidades de clculo so mais otimizadas para shading do que para GPGPU

Caractersticas: GPU vs. CPU


Modelos de acesso a memria Intensidade aritmtica Transferncia de dados Representao em ponto flutuante Operaes tpicas em GPU: Gatter/Scatter

Acesso a memria
Cached, sequential and random

Then ... locality, locality, locality A computao deve ser estruturada considerando acesso a memria seqncial

Acesso a memria
Memria de GPUs Projetada para acelerar filtragem de texturas Muito pequena para GPGPU Formatos foram otimizados para acessar vizinhanas em 2D Acesso de somente leitura Pentium 4 Taxas de freqncia extremamente altas Grande quantidade de Mbytes ExemploAcesso deacesso de padro de leitura e timo para GPUs: soma de dois escrita
vetores grandes

Acesso a memria
Memria de GPUs Projetada para acelerar filtragem de texturas Muito pequena para GPGPU Formatos foram otimizados para acessar vizinhanas em 2D Acesso de somente leitura Pentium 4 Taxas de freqncia extremamente altas Grande quantidade de Mbytes Acesso de leitura e escrita

Intensidade Aritmtica (IA)


Processador de fragmentos = 60 GFlops Pentium 4 = 12 GFlops Mais clculo! ... quanto? Para cobrir a latncia de acesso texturas os programas precisam conter uma quantidade considervel de operaes aritmticas IA = operaes_aritmticas / acesso_a_memoria Por tanto ... escreva algoritmos com alta IA

Transferncia de dados entre GPU e CPU


Questes de transferncia de dados PCI: 3.2 GB/s Adio de vetores Como evitar esta penalidade? Amortizar o custo de transferncia de dados Formatos de pixels: RGBA, BGRA, etc.

Aritmtica de ponto flutuante


IEEE 754 (32-bits float value) 1 sign bit, 8-bit exponent, 23-bit mantisa A preciso limitada da representao em ponto flutuante no permite calcular endereos de memria corretos Exemplo: usando NVidia f16 no podemos calcular o endereo 3079. Nmero mais prximos so 3078 e 3080

Operaes corriqueiras na GPU


Gatter /Scatter Map M' = k M, simples para implementar na GPU Reduo N para 1, mltiplas passadas Filtragem Reduo no uniforme, envolve remoo de items Busca e ordenao

Gather/Scatter
Gather: x = a[ i ] Scatter: a[ i ] = x

Operao de leitura indexada Trivial na GPU (instrues de leitura de texturas)

Operao de escrita atravs de ndice Operao comum em quicksort, hashing, etc. Difcil de implementar num fragment program No existe operao de escrita num endereo calculado Posio fixa no frame buffer

Gather/Scatter
Gather: x = a[ i ] Scatter: a[ i ] = x

Operao de leitura indexada Trivial na GPU (instrues de leitura de texturas)

Variveis de sada gl_FragColor = vec4(1,0,0,0) gl_FragData[0] = vec4 (1,0,0,0) gl_FragDepth = 1.0;

Operao de escrita atravs de ndice Operao comum em quicksort, hashing, etc. Difcil de implementar num fragment program No existe operao de escrita num endereo calculado Posio fixa no frame buffer

Linguagens e ambientes
Linguagens de alto nvel Cg HLSL GLSL Linguagens para GPGPU Sh Brook Debuggers glslDevil gDEBugger Ambientes RenderMonkey FX composer 2

Recursos
http://www.graphicshardware.org http://www.gpgpu.org/

Bibliografia
Matt Pharr and Randima Fernando. Programming Techniques for High-Performance Graphics and General-Purpose Computation. GPUGems2 . AddisonWesley Professional, 2005
http://developer.nvidia.com/object/gpu_gems_2_home.html

SIGGRAPH 2007: GPGPU COURSE


http://www.gpgpu.org/s2007/

Você também pode gostar