Programação em GPU: Passado, Presente e Futuro



Documentos relacionados
Programação em GPU: Passado, presente e futuro

Bruno Pereira Evangelista.

Utilização. de Shaders de efeitos realistas para jogos. Bruno Pereira Evangelista. Pontifícia Universidade Católica de Minas Gerais

CPU Unidade Central de Processamento. História e progresso

OpenGL. Uma Abordagem Prática e Objetiva. Marcelo Cohen Isabel Harb Manssour. Novatec Editora

Tecnologia PCI express. Introdução. Tecnologia PCI Express

Computação Gráfica. Renderização em Tempo Real. Erivaldo Xavier de Lima Filho

Capítulo 5. Figura 5.2. Conector para o monitor.

Visão Geral de Hardwares de Renderização e Ferramentas de Avaliação. Carlos Eduardo Rodrigues

Técnico em Informática - Instalação e Manutenção de Computadores PROCESSADORES

Computação Gráfica. GLSL Programação de Shaders

Introdução. Em se tratando de computador, entendemos que memória são dispositivos que armazenam dados com os quais o processador trabalha.

GLSL Programação de Shaders

Placas de Vídeo. Prof. Alexandre Beletti Ferreira

INSTITUTO DE EMPREGO E FORMAÇÃO PROFISSIONAL, I.P.

LICENCIATURA EM COMPUTAÇÃO PROCESSADOR TEGRA 2

A história do Processadores O que é o processador Características dos Processadores Vários tipos de Processadores

Contil Informática. Curso Técnico em Informática Processadores Core

Aula 26: Arquiteturas RISC vs. CISC

OpenGL Shading Language

TRABALHO COM GRANDES MONTAGENS

DESENVOLVIMENTO PARA DISPOSITIVOS MÓVEIS. PROFª. M.Sc. JULIANA H Q BENACCHIO

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware

Trabalho de: Alexandre / Paulo / Rui

Introdução as Unidades de Processamento Gráfico (GPUs) Giovane Roslindo Kuhn

ESTUDO DE CASO WINDOWS VISTA

ARQUITETURA DE COMPUTADORES

Arquitetura de processadores: RISC e CISC

VIRTUALIZAÇÃO CONVENCIONAL

Placa de vídeo em CUDA

CONHEÇA MELHOR SEU COMPUTADOR

Sistemas Computacionais II Professor Frederico Sauer

Algoritmos e Programação Estruturada

Tecnologia AMD agregando valor

Capítulo 2. AMD K6, K6-2, K6-III Super 7 Cyrix MII / 6x86 / 6x86MX Super 7 ou Socket 7 AMD K5, Pentium, Pentium MMX Socket 7

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.

Hardware de Computadores

CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA

Computadores de Programação (MAB353)

Arquitetura de Computadores Paralelismo, CISC X RISC, Interpretação X Tradução, Caminho de dados

Evolução dos Processadores

Processadores. Guilherme Pontes

Montagem e Manutenção. Luís Guilherme A. Pontes

Prof. Esp. Lucas Cruz

1. CAPÍTULO COMPUTADORES

Sistemas Operacionais

Capacidade = 512 x 300 x x 2 x 5 = ,72 GB

Ao longo do presente capítulo será apresentada uma descrição introdutória da tecnologia FPGA e dos módulos básicos que a constitui.

INTRODUÇÃO BARRAMENTO PCI EXPRESS.

28/9/2010. Paralelismo no nível de instruções Processadores superescalares

AULA4: PROCESSADORES. Figura 1 Processadores Intel e AMD.

Aula 04 A. Barramentos. Prof. Ricardo Palma

29/3/2011. Primeira unidade de execução (pipe U): unidade de processamento completa, capaz de processar qualquer instrução;

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

Introdução à Arquitetura de Computadores

Figura 1 - O computador

O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema.

Arquiteturas RISC. (Reduced Instructions Set Computers)

Informática, Internet e Multimídia


Admistração de Redes de Computadores (ARC)

Laboratório de Hardware

Um Driver NDIS Para Interceptação de Datagramas IP

Virtualização Gerencia de Redes Redes de Computadores II

Sistema de Computação

1. NÍVEL CONVENCIONAL DE MÁQUINA

Sumário. Organização de Computadores Módulo 3. Primeira Geração Válvulas ( ) Primeira Geração Válvulas ( )

SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA

Barramentos - BUS. Professor Especialista: Airton Ribeiro de Sousa

JSP - ORIENTADO A OBJETOS

FUNDAMENTOS DE HARDWARE PROCESSADORES. Professor Carlos Muniz

Orientação a Objetos

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

O que é RAID? Tipos de RAID:

Serial Paralela USB FireWire(IEEE1394)

A Evolução dos Sistemas Operacionais

Arquitetura de Computadores Arquitetura de entrada e saída

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande

RISC X CISC - Pipeline

Curso de Instalação e Gestão de Redes Informáticas

FUNDAMENTOS DE HARDWARE COMO FUNCIONA UM PC? Professor Carlos Muniz

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Um Tutorial sobre GPUs

Itinerários de Ônibus Relatório Final

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01

Informática I. Aula 5. Aula 5-13/05/2006 1

Software Básico. Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly. Prof. MSc. Hugo Vieira L. Souza

R S Q Tabela 17 - Tabela verdade NOR

Aula 14: Instruções e Seus Tipos

SISTEMAS OPERACIONAIS. Maquinas Virtuais e Emuladores

Fundamentos de Hardware

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES. Prof. André Dutton

Modelagem 3D e Raytracing

4 Estrutura do Sistema Operacional Kernel

O modelo do computador

Introdução a Informática. Prof.: Roberto Franciscatto

Transcrição:

2 Conteúdo Programático Programação em GPU: Passado, Presente e Futuro José Ricardo Mello Viana Msc. em Engenharia de Sistemas e Computação PESC/COPPE/UFRJ Parte 1 Introdução Conceitos Iniciais Programação em GPU CPU/GPU: Poder Computacional Aplicações Recentes Problema: não é simples de usar Pipeline Gráfico Evolução das GPU s Da era pré-gpu à terceira era das placas de vídeo 3 4 Conteúdo Programático Parte 2: Início da programação em GPU A virada da ATI Mini tutorial de GLSL A retomada da NVIDIA Empate das gigantes Inércia na ATI Comprada pela AMD, ATI volta a briga Geração atual de placas de vídeo E o futuro... Introdução GPU: Graphics Processing Unit Chip responsável pelo processamento gráfico Especializado em processamento gráfico 3D Videogames, Computadores pessoais, Celulares e equipamentos multimídia Nintendo Wii, Playstation 3, XBOX 360, PSP, Nintendo DS, iphone, Microsoft Zune HD On-board ou Off-board Poucos usuários realmente necessitam 5 6 Conceitos Iniciais Inicialmente projetadas para gráficos Recebimento de informações da CPU e geração de imagens para o usuário visualizar na tela Alto desempenho para cálculos matemáticos e geométricos complexos Alto poder de processamento paralelo Muito mais unidades de processamento que de armazenamento (em contraste com a CPU) 1

7 8 Programação em GPU CPU/GPU: Poder Computacional Funcionalidade fixa para processamento gráfico Estágios programáveis foram introduzidos Vertex shader Geometry shader Fragment Shader (Pixel shader) Arquiteturas mais recentes possuem unidades genéricas para processar quaisquer desses shaders Programação Genérica em GPU 9 10 Aplicações Recentes Problema: não é simples de usar GPUs foram desenhadas para processamento gráfico Modelo de programação não usual Programação dependente do pipeline gráfico Ambiente de programação restrito Arquiteturas de GPUs Executam processamento paralelo Em constante evolução Fechada, segredo do fabricante Codificação Não basta "recompilar" código tradicional Ferramental mínimo Novas tendências: CTM (AMD), CUDA (NVIDIA) 11 12 Pipeline Gráfico Pipeline Gráfico Computa geometria 3D e faz chamadas à API gráfica Transforma geometria 3D para 2D (em paralelo) Gera fragmentos a partir da geometria 2D (em paralelo) Combina fragmentos para formar uma imagem 2

13 14 História das GPU s Desde a criação das primeiras GPU s, ocorreram muitas mudanças Novas utilizações Novas funções Grande aumento na sua capacidade de processamento Retirada uma grande carga de trabalho das CPU s, transferindo-as para as GPU s. Era pré-gpu ANTIC (Alpha-Numeric Television Interface Controller) Criado especialmente para mapping (mapeamento) Microcomputadores e no videogame Atari 5200 Lia os dados de exibição da RAM Commodore Amiga Projetada para ser um videogame Carregava todas as funções de geração de vídeo para o hardware (preenchimento, desenho de linhas, etc) Co-processador gráfico com conjunto de instruções próprias 15 16 Commodore Amiga GPU pioneira IBM PC IBM MDA Monochrome Display Adapter (Adaptador de Vídeo Monocromático) Apenas em modo texto: 25 linhas e 80 colunas 17 18 Aceleração 2D S3 Trio Primeiro com recurso de aceleração 2d: S3 Trio Lançado pela antiga S3 Primeira a reunir os três componentes básicos: o processador, o RAMDAC (conversor digital/analógico) e o gerador de frequência Diferentes versões on-board e off-board Controladora de memória de 64bits Modelos: Trio64 e Trio64V+, Trio32, Trio64V2 3

19 20 Chegada das 3 dimensões S3 ViRGE Segunda família da S3: o S3 ViRGE (1995) Compatível com as placas projetadas para o Trio Desempenho 3D pouco melhor que o da CPU Modelos: ViRGE/325, ViRGE/DX, ViRGE/GX, ViRGE/GX2 Filtro de texturas Bilinear e Trilinear, Alpha Blending, mapeamento MIP, mapeamento de texturas de vídeo, Z-Buffering, entre outros 21 22 Aparecimento da NVIDIA NVIDIA NV1 Pouco depois do lançamento do S3 ViRGE, a recém-criada NVIDIA lançou o NV1 Melhor que o ViRGE, mas muito mais caro Integrava acelerador 3D com base em polígonos quadrangulares (hoje triângulos), um processador sonoro e VRAM (memória de vídeo) Tentou ser uma central multimídia completa Áudio próprio e compatibilidade com o SEGA Saturn (forte concorrência do Playstation) 23 24 1996 ViRGE ainda reina Fabricantes, cada vez mais, tentam transformar placas de vídeo em centrais multimídia Do lado oposto, começam a surgir as primeiras placas realmente otimizadas para processamento gráfico ATI desponta no mercado A ATI technologies, lança a família Rage: chip ainto Mach com poder de processamento 3D Não foi muito boa Em 1997, ATI lança a família Rage II que dobrava a velocidade da Rage original 8 MB de memória SDRAM, 64-bit e 60 MHz de clock Suporte a execução de DVD Desempenho foi melhorado consideravelmente, destacando a ATI na briga pelo mercado Porém, não foi um sucesso 4

25 26 ATI Rage Voodoo 1: A revolução Ainda em 1996, surgem três empresas : a 3dfx, a Imagination Tecnologies e a Rendition Voodoo 1, PowerVR e Vérité 1000 Voodoo 1: bom processamento gráfico e preço ótimo => sucesso, nenhuma as concorrentes conseguiu alcançá-la Não apresentava nenhuma funcionalidade 2D Era necessário comprar mais de uma placa 27 28 3dfx Voodoo 1 Ascensão e queda da 3dfx Em 1997, apareceram diversos adversários da Voodoo 1 Rage II, da ATI e NVIDIA Riva 128 NVIDIA Riva 128: primeira placa 3D da história a suportar o Direct 3D Tornou-se a melhor placa de vídeo 3D do mercado Outros lançamentos: Voodoo Rush, Rage PRO, da ATI 29 30 NVIDIA Riva 128 Ascensão e queda da 3dfx Inicio de 1998: NVIDIA lança a Riva 128ZX Pequena atualização da Riva 128: apenas um suporte de memória de vídeo maior(8mb) 3dfx lança a verdadeira sucessora da Voodoo 1: a Voodoo 2 e a Voodoo Banshee (Voodoo 2 de baixo custo) Retomou a coroa de melhor acelerador gráfico NVIDIA lança a Riva TNT (NV4): incomoda um pouco a Voodoo 2, mas a 3dfx sai vencedora Problemas de aquecimento com a placa da NVIDIA S3 lança a família Savage3D, um fiasco: erros na produção 5

31 32 Voodoo 2 Investida da Intel Também a Intel tentou entrar na briga, mas logo desistiu e passou fabricar apenas chips de vídeo on-board 33 34 Primeira Geração de GPU s Placas até 1998 constituem a chamada primeira geração das GPU s Pipeline de renderização fixo Possibilitam apenas a renderização de triângulos pré-transformados Servia apenas como um dispositivo que enviava os dados para o monitor, sem processamento interno, nem possibilidades de implementar programas para execução na GPU Segunda Geração de GPU s: A queda da 3dfx 1999: haviam apenas 3 grandes competidores no mercado: ATI, NVIDIA e 3dfx, com as linhas Rage 128, Riva TNT2 e Voodoo 3 A ATI Rage 128 recebeu diferentes versões e foi atualizada para a Rage 128 PRO Usados como base para a criação da Rage Fury MAXX, onde dois chips ocuparam a mesma placa e cada um renderizava um frame diferente. Foi ignorada por não haver software compatível, embora a ideia de se usar dois chips de vídeo na mesma placa seja utilizada até hoje em dia. 35 36 ATI Rage Fury MAXX Segunda Geração de GPU s: A queda da 3dfx A Riva TNT2 (2 modelos: a TNT2 e a TNT2 M64) Diferença: barramento de memória, que na TNT2 M64 era cortado pela metade (64bits) Pequena atualização da TNT original, contudo ela conseguiu manter a coroa de melhor acelerador gráfico com a NVIDIA devido a TNT2 Ultra Voodoo3 : processador integrado 2D/3D Alternava-se no topo com a TNT2, dependendo do aplicativo Para o segmento baixo custo a 3dfx repetiu a teoria do bem sucedido Voodoo Banshee, com a linha Velocity. 6

37 38 NVIDIA Riva TNT2 Segunda Geração de GPU s: A queda da 3dfx A 3dfx começa a ruir Últimos projetos: Voodoo 4 e 5 e a grande contribuição que ela deu ao mercado de VGAs, o SLI Scan-Line Interleave: cada GPU renderizava alternadas linhas horizontais (foi a primeira empresa a oferecer processamento paralelo) Sucessivos atrasos acabaram por matar a 3dfx Geforce 256 e Radeon davam resposta antes mesmo dos lançamentos da 3dfx No fim de 2000 a 3dfx é vendida para a NVIDIA 39 40 Voodoo 3: um dos últimos sucessos da 3dfx Segunda Geração de GPU s: A queda da 3dfx Nesta segunda geração várias funcionalidades foram migradas da CPU para a GPU Transformações geométricas (rotação, translação e escala) e ainda, a aplicação de iluminação. Velocidade de renderização ainda maior Desafogamento da CPU Objetos e operações são apenas transportados para a GPU, que se encarregaria do cálculo pesado Nada de programação em GPU ainda 41 42 Terceira Geração de GPU s: NVIDIA x ATI No fim de 1999, NIVIDIA lança a Geforce 256 Corrigia alguns erros da linha Riva Primeira VGA totalmente compatível com o Direct3D 7 No início, ela utilizava memória SDR, que por não tirar todo o potencial do chip foi substituída mais tarde pela DDR Possuía desempenho melhor que todos os chips existentes e superava a linha Riva TNT2 Ultra por uma margem de no mínimo 50% Geforce 256 7

43 44 Terceira Geração de GPU s: NVIDIA x ATI A ATI Rage Fury MAXX conseguia bater a Geforce 256 com SDR, porém, a com DDR era inalcançável O problema era seu preço: fazia com que ela fosse acessível para poucos No ano seguinte, a ATI lança uma rival à altura da Geforce 256: a Radeon 7000 (codinome R100), que foi lançada em duas versões diferentes (com e sem entrada/saída de vídeo) e ambas eram melhores que a Geforce 256 ATI Radeon 7000 45 46 Terceira Geração de GPU s: NVIDIA x ATI A NVIDIA não ficou parada e lançou a Geforce 2 GTS, superando a ATI NVIDIA resolveu atacar vários segmentos do mercado, lançando versões: Baixo custo e desempenho (linha Geforce 2 MX) Custo/benefício (linha Geforce 2 TI) Alto desempenho e preço (linha Geforce 2 GTS) NVIDIA Geforce 2 GTS 47 48 Terceira Geração de GPU s: NVIDIA x ATI A reação da ATI foi imediata: O chip R100 foi rebatizado comercialmente como Radeon 7200 para competir com a Geforce 2 TI O chip RV100 (versão rebaixada) foi lançado como Radeon 7000 para competir com a Geforce 2 MX. As mudanças da ATI foram as seguintes: O R100 original mudou de nome para Radeon 7200 e preencheu o mercado midend Introdução do Rv100 conhecido como Radeon 7000, para disputar com a Geforce 2 MX Introdução do Rv200, um R100 de 150nm e clocks maiores. Batia a Geforce 2 Ti e incomodava a Geforce3 Ti. ATI Radeon 7200 8

49 50 Terceira Geração de GPU s: NVIDIA x ATI Nesta geração começa a ser possível a programação em GPU Suporte apenas à vertex shaders Número bastante limitado de instruções possíveis de serem executadas Não havia suporte para números em ponto flutuante, apenas para variáveis de ponto fixo Não havia linguagem de programação voltada para a GPU, era necessário escrever diretamente na linguagem de montagem da GPU (Assembly) A briga das gigantes NVIDIA e ATI e o início da programação em GPU Em fevereiro de 2001, NVIDIA lança a GeForce 3: grande salto para a indústria dos jogos: Era a primeira GPU totalmente programável do mercado Mesmos clocks da GeForce 2 Ultra, mas com uma contagem de transistores mais de duas vezes maior Suporte ao ainda novo DirectX 8 Infelizmente (para a NVIDIA) o DirectX 8 teve uma vida muito curta (substituído pela versão 8.1) NVIDIA perde, logo nos primeiros meses, o suporte a tecnologia mais atual. 51 52 A briga das gigantes NVIDIA e ATI e o início da programação em GPU Em menos de 6 meses a ATI respondeu lançando o modelo R200 (Radeon 8500) Superava a performance da GeForce 3 por uma margem de até 20% GPU programável totalmente compatível com DirectX 8.1 A ATI lançou 8500LE, idêntica a Radeon 8500, mas com clocks menores. A R200 original possuia memórias DDR 64bits Mais tarde, ambas passaram a memórias DDR 128bits, o que rendeu mais desempenho. NVIDIA Geforce 3 e ATI Radeon 8500 53 54 A briga das gigantes NVIDIA e ATI e o início da programação em GPU Contra-ataque da NVIDIA: Geforce 4 (2002) Sua versão de alto desempenho (Geforce 4 TI) não conseguiu cumprir superar a Radeon 8500 Sua linha de baixo custo (Geforce 4 MX) foi um sucesso comercial por causa do seu preço baixo A Geforce 4 foi muito bem sucedida, tanto que o NV28 ganhava em desempenho da FX5600 e empatava com o fenômeno Radeon 9600 A virada da ATI R200 tinha custo benefício ruim ATI decide lançar outro chip: O R300 chega no fim de 2002 Completamente diferente do R200 Suporte ao Direct3D 9, litografia em 150nm, dobro de transistores, 8 pixel shaders, 8 TMUs, 4 vertex shaders e um sistema de filtros bastante eficiente (100%) R300 também utilizado na geração seguinte: X300, X550X600. Um dos maiores custo beneficio da história Radeon 9600 foi uma das melhores placas nesse quesito de todos os tempos Pela primeira vez, o melhor custo beneficio e o melhor chip eram da mesma empresa, 9600Pro e 9800XT, respectivamente. 9

55 56 Placas da série Radeon 9000 A virada da ATI Querendo retomar o trono a NVIDIA lança a serie FX: um grande fiasco Exceto a FX5200, que, apesar de fraca, foi a placa de vídeo mais vendida da história Toda a linha FX perdia para suas concorrentes diretas da ATI Um dos principais motivos do fracasso foram os vários atrasos da NVIDIA Os drivers também não eram dos melhores Mesmo com novas revisões (NV34, 35 e 36), os chips NVIDIA não eram muito competitivos 57 58 NVIDIA Geforce FX5200 Quarta geração de GPU s Deslancha a programação em placas gráficas Além dos vertex shaders, fragment shader Expansão do número de instruções Suporte a tipos de dados textura e a números de ponto flutuante de 32 bits Linguagens de programação em GPU aparecem Cg, HLSL e GLSL 59 60 Cg (C for Graphics) Vertex Shader em Cg Desenvolvida pela própria NVIDIA Efeitos como reflexão/refração em tempo real Integração com APIs gráficas, como OpenGL e Direct3D Compilação dinâmica, ou seja, otimização de código para a placa em que vai rodar Possibilidade de um código Cg rodar também em placas da ATI 10

61 62 HLSL High Level Shading Language Linguagem proprietária desenvolvida pela Microsoft com suporte à sua API Direct 3D Bastante parecida com Cg por ter sido desenvolvida juntamente à ela, no entanto, como era de se esperar, não é compatível com o padrão aberto OpenGL GLSL OpenGL Shading Language Linguagem aberta pertencente à série de especificações OpenGL Compatibilidade com diferentes plataformas, incluindo Windows, Linux e MacOS Shaders feitos em GLSL podem ser executados em qualquer hardware com suporte a OpenGL Maioria dos fabricantes inclui um compilador GLSL nos drivers das suas placas, sendo possível otimizar o código GLSL para cada placa em específico 63 64 Vertex Shader e Fragment Shader em GLSL Mini tutorial de GLSL É possível que sejam programados shaders para os seguintes estágios: Transformações nos Vértices (Vertex Shaders). Transformações nas Geometrias (Geometry Shaders) Transformações nos Fragmentos (Fragment Shaders) 65 66 Vertex Shader Operam sobre os vértices e informações associadas, tais como cores, normais, etc., dependendo do que a aplicação enviar Operações possíveis: Transformações nos Vértices, Transformações de Normais e Normalização, Iluminação, Geração de Coordenadas de Textura, etc. Ao utilizar Vertex Shaders, a funcionalidade fixa da placa é substituída e não pode ser usada. Vertex Shader Cada vértice é trabalhado isoladamente, sem conhecimento dos vértices restantes Deve-se calcular, obrigatoriamente, uma posição. Cor e outros atributos são opcionais Tem-se acesso ao estado do OpenGL atual, incluindo algumas varíaveis pré-calculadas pelo próprio OpenGL Em placas mais recentes pode-se acessar texturas 11

67 68 Geometry Shader Operam sobre primitivas, com ou sem informações sobre adjacências. Operações possíveis: Amplificação de Geometria, Sistemas de Níveis de Detalhes(LoD), Tesselação, Detecção de Silhueta por Extrusão (substituir CPU para geração de sombras), Renderização através de um Cube Map (mapeamento em cubo) Ao utilizar Geometry Shaders, a funcionalidade fixa da placa é substituída e não pode ser usada Geometry Shader A partir de cada primitiva pode-se gerar, como saída, zero ou mais primitivas de um mesmo tipo As primitivas geradas podem ser desconectadas Através do stream output pode-se associar dados às primitivas (render-to-vertex-array). Disponível apenas a partir da série 8 da NVIDIA 69 70 Fragment Shader Operam sobre os fragmentos que são produzidos pelo processo de rasterização Operações possíveis: Cálculo de cores e coordenadas de textura por pixel, Acesso e Aplicação de Texturas, Cálculo de Nevoeiro, Cálculo de normais no caso de iluminação por pixel Ao utilizar Fragment Shaders, a funcionalidade fixa da placa é substituída e não pode ser usada. Fragment Shader Operam isoladamente em um único fragmento, sem qualquer informação sobre os fragmentos vizinhos Fragmentos podem ser descartados As coordenadas de um fragmento não podem ser modificadas Tem acesso ao estado do OpenGL atual, incluindo algumas variáveis pré-calculadas pelo próprio OpenGL, mas não tem acesso (de leitura) ao framebuffer 71 72 GLSL Shaders Inicialização OpenGL A implementação de um tipo de shader não implica na obrigatoriedade de se implementar os outros Ou seja, pode-se implementar apenas um geometry shader e continuar com a funcionalidade fixa da placa para os outros. Cada shader deve ser compilado e incorporado em um programa, o qual será linkado. 12

73 74 Inicialização OpenGL Primeiro, verifica-se se o sistema é capaz de executar programas GLSL. Biblioteca utilizada: GLee.h (Disponível para download no site: http://www.opengl.org/sdk/libs/glee/). GLEE_VERSION_2_0 será true se suportar e false se não. Verifica-se suporte a gemoetry shader através da variável GLEE_EXT_geometry_shader4 Criação dos shaders GLuint glcreateshader (enum type) Onde type pode ser: GL_VERTEX_SHADER GL_GEOMETRY_SHADER_EXT (Ainda está como extensão) GL_FRAGMENT_SHADER 75 76 Associação de código e compilação dos shaders GLuint glshadersource (uint shader, sizei count, const char **string, const int *length) GLuint glcompileshader (uint shader) Onde: shader é o que foi retornado pelo glcreateshader. count é quantidade de strings. string é o vetor de strings. length é o tamanho de cada string, ou NULL, se terminadas em \0. Construção do programa uint glcreateprogram() void glattachshader(uint program, uint shader) Onde: glcreateprogram retorna um ponteiro para um programa objeto glattachshader une o shader shader ao programa objeto program, que foi retornado pelo glcreateprogram 77 78 Linkagem e uso void gllinkprogram (uint program) void gluseprogram (uint program) Onde: gllinkprogram faz a linkagem dos shaders associados ao programa. gluseprogram determina se a placa usará a funcionalidade fixa (quando program = 0) ou os shaders associados ao programa (program!= 0). Exemplo GLuint v; v = glcreateshader (GL_VERTEX_SHADER); vs = textfileread( arquivo.vert ); glshadersource (v, 1, &vs,null); glcompileshader (v);... p = glcreateprogram (); glattachshader(p,v); gllinkprogram(p); gluseprogram(p); 13

79 80 Comunicação Aplicação->Shader Pode ser feita através de variáveis uniform ou attribute uniform São invariáveis ao longo da primitiva (ex: posição da luz) Acessíveis nos vertex, geometry e fragment shader attribute Atributos associados à vértices (ex: tangente) Acessíveis nos vertex e geometry shaders Comunicação entre shaders Pode ser feita através de variáveis varying. São definidas nos vertex shaders. Seus valores podem ser lidos nos geometry shaders, se houver algum ativo, ou nos fragment shaders Se não houver um geometry shader ativo, os valores de todas as variáveis varying seram interpoladas sobre todos os fragmentos da primitiva 81 82 Sintaxe GLSL Parecida com C/C + +. Tipos de Dados Simples: Escalares float (ex: float x, y = 2.5;) int (ex: int z = 1;) bool (ex: f= true;) Vetores vec2, vec3, vec4 (ex: vec4 v = vec4(1.0, 2.2, 3.1, 4.8);) ivec2, ivec3, ivec4 (ex: ivec3 v = ivec3(1, 2, 4);) bvec2, bvec3, bvec4 (ex: bvec2 v = bvec3(true, false);) Matrizes mat2, mat3, mat4 (ex: mat2 m = mat2(3.1, 2.2, 5.1, 4.2); // Matriz 2x2) Acesso a elementos de vetores Acesso aos elementos de vetores: Através de nomes (x, y, z, w): vec4 a (a.x, a.y, a.z, a.w, a.xy, a.yw). Através de nomes (r, g, b, a): vec4 a (a.r, a.g, a.b, a.a, a.ra, a.gb). Através de nomes (s, t, p, q): vec4 a (a.s, a.t, a.p, a.q, a.sp, a.tq). Através dos índices: vec4 a (a[0], a[1], a[2], a[3]). 83 84 Sintaxe Básica GLSL Tipos de Dados Especiais para Texturas: sampler1d (texturas 1D). sampler2d (texturas 2D). sampler3d (texturas 3D). samplercube (texturas para cube maps). sampler1dshadow (texturas para shadow maps). sampler2dshadow (texturas para shadow maps). Estruturas com sintaxe parecida com C: struct dirlight { vec3 direction; vec3 color; }; Qualificadores de variáveis Qualificadores de variáveis: const (definição de constantes). uniform (variável global de somente leitura para todos os shaders (Descrita anteriormente)). attribute (variável global acessível nos vertex e geometry shaders (Descrita anteriormente)). varying (variável global escrita pelos vertex shaders e lida nos outros (Descrita anteriormente)). 14

85 86 Sintaxe Básica GLSL Ponto de entrada é a função main É possível fazer loops com for, while e do-while Variáveis podem ser declaradas dentro deles Palavras-chave break e continue existem Condicionais podem ser feitos com if e if-else Variáveis não podem ser declaradas dentro Operador?: está dispon ıvel Palavra-chave especial: discard (Descartar um fragmento no fragment shader) goto e switch não estão disponíveis Sintaxe Básica GLSL if (expressão booleana)... else... for (inicialização; expressão booleana; expressão do loop)... while (expressão booleana)... do... while (expressão booleana) 87 88 Funções Uma função deve retornar um valor, a palavra-chave return é usada para isso O tipo de retorno pode ser qualquer, exceto array (pode ser void) Funções não pode ser chamadas recursivamente Passagem de parâmetros in: Semelhante à passagem por valor de C/C++. Este parâmetro pode ser reescrito dentro da função (em contraste com const) out: Copia somente para fora, porém é indefinido no momento da chamada da função inout: Semelhante à passagem por referência de C/C++ Exemplos de funções Correto void ComputeCoord(in vec3 normal, vec3 tangent, inout vec3 coord) Ou, vec3 ComputeCoord(const vec3 normal, vec3 tangent, in vec3 coord) Incorreto void ComputeCoord(const out vec3 normal, const inout vec3 tangent, in out vec3 coord) 89 90 Funções integradas Trigonométricas: sin, cos, tan,... Exponenciais: pow, exp2, log2, sqrt,... Comuns: abs, sign, mod, min,... Interpolações Geométricas: cross, dot, normalize,... Matrizes: matrixcompmult Relações entre vetores: lessthan, lessthanequal, greaterthan,... Texturas: texture1d, texture2d, texture3d,... Vértices: ftransform A retomada da NVIDIA Nenhuma placa da série FX conseguia competir com a ATI até a GeForce FX 5950 Ultra Conta com taxa de preenchimento superior a da 9800PRO e ainda com vazão de memória quase 50% maior Teve seu brilho ofuscado por ter que concorrer com a Radeon 9800XT 15

91 92 A retomada da NVIDIA ATI Radeon x850 XT PT Em 2004, o R420 foi usado para equipar as placas de vídeo da linha Radeon X700, X800 e X850 A ATI resolveu continuar apostando no Direct3D 9 No inicio foi acertado, porém, após alguns meses o mercado migrou para o Direct3D 9.0c com shader model 3.0 ATI perdeu mercado para a recém lançada serie 6 da NVIDIA A placa mais poderosa dessa geração foi a X850XT PE No segmento midend o R300 era usado e não foi o bastante para competir com a 6600GT O R420 foi lançado sob esses modelos: X700 (mid-end), X800 (mid e high-end), X850 (high-end) 93 94 A retomada da NVIDIA NVIDIA Geforce 6600 GT A NVIDIA, vinda do erro chamado FX lançou uma série que não prometia muito, a Serie 6 Foi uma das mais bem sucedidas da história Ao fim de 2004 é lançada a sexta geração de VGAs sob codinome Geforce O suporte, mesmo precário, ao Direct3D 9.0c foi um de seus principais diferencias 95 96 Empate das gigantes ATI Radeon X1950 XTX No ano seguinte, a ATI se rende ao Direct3D 9.0c com a linha Radeon X1XXX. A NVIDIA, Para não ficar para trás, lançou a série Geforce 7XXX com suporte melhorado ao Direct3D 9.0c Esta geração foi marcada pro preços bem elevados das placas de vídeo, mas pouca diferença de desempenho 16

97 98 NVIDIA Geforce 7950 GX2 Inércia na ATI No fim de 2006 a NVIDIA lançou a serie 8 Shaders unificados: Mesmas unidades genéricas serviriam para as duas quaisquer processamentos Novo estágio programável: o geometry shader Começou-se a pensar em programação genérica na GPU Foram criadas linguagens específicas para a chamada GPGPU, tais como Sh e Brook A principal linguagem, já projetada pensando em GPGPU e feita pela própria NVIDIA, chama-se CUDA (Computer Unified Device Architecture) 99 100 Fragmento de código CUDA A arquitetura CUDA inclui Ferramentas de desenvolvimento em C/C++, bibliotecas de funções Mecanismo de abstração de hardware que esconde os detalhes da implementação em GPU As ferramentas funcionam com compiladores convencionais, o que possibilita a união de código específico para GPU com códigos gerais para CPU 101 102 NVIDIA no topo NVIDIA Geforce 8800 Ultra A revisão G92 foi concebida no fim de 2007 para ocupar a lacuna entre a 8600GTS e a 8800GTS 320 O chip era tão bom que, pela primeira vez a NVIDIA quebrou a sua nomenclatura e lançou uma placa com codinome GT melhor que outra GTS 17

103 104 Comprada pela AMD, ATI volta à briga ATI Radeon HD 3870 Em 2007, a ATI fez uma revisão no chip R600, e lançou a Rv670, com menores consumo de energia e preço que a R600 Usada na nova linha Radeon HD 3000. Os chips revisados das duas gigantes (Rv670 da ATI e G92 da NVIDIA) foram os grandes responsáveis pela queda de preço das placas Consumidor comum teve acesso a placas de vídeo muito poderosas. 105 106 Comprada pela AMD, ATI volta à briga NVIDIA Geforce 9600 GT NVIDIA aumenta a produção de chips G92 e lançar versão com menos recursos (G94) para atacar a ATI no mercado de placas baratas A Geforce 9600GT (chip G94) foi lançada e fez muito sucesso Era barata e tinha desempenho superior à Radeon HD 3870 (um modelo de alto desempenho) Isto obrigou a ATI a cortar o preço de seus produtos para se manter competitiva 107 108 Geração atual de GPU s ATI Radeon HD 3870X2 e NVIDIA Geforce 9800 GX2 ATI resolve fazer pequenas melhorias Rv670 para permitir que mais de um processador pudesse ser utilizado em uma única placa Radeon HD3870X2 foi a placa de vídeo mais potente do mercado Durou dois meses, pois a NVIDIA contra-atacou com a Geforce 9800GX2, utilizando o conceito de duas placas de vídeo em uma 18

109 110 Geração atual de GPU s ATI Radeon HD 4870 Em 2008, NVIDIA e ATI finalmente lançam seus novos chips: o GT200 e Rv770 O GT200 nasce com problemas, pois consumia muita energia sem ter uma potência que justificasse estes gastos Rv700 (Radeon HD 4850/Radeon HD 4870) alguns meses depois, sendo um sucesso de público e crítica 111 112 Geração atual de GPU s NVIDIA Geforce GTX 280 Agora, a NVIDIA que se viu obrigada a baixar o preço de suas placas para permanecer competitiva Não foi capaz de tomar a coroa da ATI no mercado de alto desempenho e de custo/benefício No atual mercado de baixo custo, a NVIDIA ainda é líder devido à demora da ATI em lançar novos modelos para esta lucrativa fatia Ainda não há rival direto para a 9800GT 113 114 E o futuro... A cada ano ATI e NVIDIA se degladiam para ter a melhor placa de vídeo do mercado No final o consumidor ganha com isso, pois as placas se tornam cada vez mais potentes e baratas Trazem, ainda, novas ferramentas para programadores utilizarem o alto potencial de cálculos em paralelo das GPU s em suas aplicações, principalmente em programação genérica E o futuro... Nota-se uma convergência CPU s cada vez possuem mais núcleos: Intel Core i7 (8 núcleos) E a tendência é que esse número aumente cada vez mais, tornando-se também máquinas paralela Pode-se imaginar um futuro sem distinção entre CPU e GPU, os dois farão parte do mesmo componente altamente paralelizável Utilização de técnicas como Ray-Tracing em tempo real. 19

115 Obrigado... Perguntas??? 20