You are on page 1of 25

Capítulo

1
Programação em GPU: Passado, presente e futuro
José Ricardo Mello Viana

Abstract Previously designed to process only graphics, the graphics cards (GPU - Graphics Processing Unit) have a fixed rendering pipeline. Because they have features as parallel processing, arithmetic intensity and constant evolution, programmable stages were introduced in GPU’s pipeline. This makes possible to the programmer create their own specific methods of rendering. The next natural evolution is use the GPU power for general processing, the so-called GPGPU. In this tutorial we discuss the evolution of graphics cards, showing the characteristics of GPU generations and programming possibilities in each of them. Also shows the main languages and techniques used for GPU programming in today and future trends of GPU programming. Keywords: Computer Graphics, Parallel programming, GPU, graphics card. Resumo Inicialmente projetadas para processar somente gráficos, as placas gráficas (GPU Graphics Processing Unit) continham um pipeline fixo de renderização de cenas. Por possuir características como processamento paralelo, alto poder computacional para cálculos aritméticos e estar em constante evolução, começou-se a introduzir estágios programáveis dentro desse pipeline das GPU’s. Desta forma, foi possível, ao programador, criar seus próprios métodos de renderização específica. A evolução natural disso é usar a GPU para processamento genérico, a chamada GPGPU. Neste tutorial iremos abordar a evolução das placas gráficas, mostrando as características de cada geração de GPU’s e quais as possibilidades de se programar em cada uma delas. Mostraremos ainda as principais linguagens e técnicas usadas para programar em GPU atualmente e as tendências de futuro para a programação em GPU. Palavras-chave: Computação Gráfica, Programação paralela, GPU, placa gráfica.

1.1. Introdução
A Unidade de Processamento Gráfico (Graphic Processing Unit, ou GPU - também chamada de unidade de processamento visual, ou VPU) é um processador especializado em renderização de gráficos 3D. É usada em videgames, computadores pessoais, estações de trabalho, chegando a estar presente, hoje em dia, em telefones celulares como o Apple iPhone e equipamentos portáteis de multimídia como o Microsoft Zune HD [13]. Criadas inicialmente para processar apenas gráficos de videogames ou de computadores, as GPU’s possuem diversas outras funções importantes. Devido a este propósito inicial, são bastante poderosas e eficientes para manipular gráficos computacionais em operações como adição de efeitos de iluminação, suavização de contornos de objetos e criação de imagens. As GPU’s recebem os objetos vindos da CPU (Central Processing Unit - Unidade Central de Processamento), as transformam, segundo informações também advindas da CPU e geram as imagens que o usuário vê na tela [17]. Seu alto poder de processamento paralelo a torna, muitas vezes, mais eficiente para que as CPU’s para uma vasta gama de algoritmos complexos que são melhor resolvidos por algoritmos paralelos, como por exemplo na otimização de algoritmos genéticos [22], principalmente quando a quantidade de dados a ser processada é muito grande. Além da facilidade de processar imagens, a GPU também é usada em cálculos matemáticos e geométricos complexos, devido a sua capacidade de processar vetores ou matrizes com extrema facilidade. Essa grande velocidade e poder para cálculos matemáticos vem do fato das GPU’s modernas possuírem muito mais circuitos para processamento que para caching de dados e controle de fluxo que as CPU’s, como mostra a figura 1.1.

Figura 1.1. Comparação do número proporcional de transistores em uma CPU e uma GPU modernas

Em computadores pessoais, uma GPU pode estar presente na forma de placa de vídeo ou embutida na própria placa-mãe, usualmente chamada de on-board. Devido a não terem necessidade específica, mais de 90 % dos usuários de computadores possuem GPUs integradas à placa-mãe, as quais são menos poderosas que placas de vídeo dedicadas. Sua primeira função foi de processar cálculos com ponto flutuante, com o tempo, foi descoberta sua facilidade para processar imagens, visto que imagens são matrizes de números, onde cada número se transforma em um pixel. Para usuários comuns, a GPU é responsável pela qualidade gráfica do dispositivo, seja ele um computador, um videogame ou até mesmo um celular [20].

e a DVI . A lista de exibição e os dados da exibição eram escritos na RAM (Random Access Memory).exibia linhas horizontais e Jump Instruction . grande aumento na sua capacidade de processamento. veremos as precursoras das GPU propriamente ditas. devemos diferenciar os componentes para esclarecer quaisquer dúvidas: a placa de vídeo é o periférico responsável por gerar e enviar imagens para os monitores.Digital Visual Interface. os programadores poderiam personalizar a forma como os objetos seriam renderizados. ANTIC O ANTIC (Alpha-Numeric Television Interface Controller). no decorrer dessa evolução.exibia pixels coloridos. gerando a imagem. assim as enviando para CTIA (Colleen Television Interface Adapter).Video Graphics Array. a memória e outros componentes são encarregados de lidar com os dados a serem processados. Hoje. e principalmente. fazendo um paralelo com as possibilidades de programação em cada uma das etapas da história da evolução das GPU’s. processava tais instruções de alto nível para instruções simples em tempo real. Character Mode .2. como a programação em GPU modificou-se nesta evolução. Nosso objetivo é mostrar. os painéis de saída (como a VGA . 1. Enquanto a GPU. Com o decorrer do tempo. iremos apresentar a história da evolução das GPU’s.As GPU’s possuíam uma funcionalidade fixa para renderização de gráficos. químicas. transferindo-as para as GPU’s. 1. e até em clusters. foi um chip criado especialmente para mapping (mapeamento). Dispositivos que já tinham características parecidas com o que viriam a ser a placas gráficas propriamente ditas [17]. as GPU’s são usadas para vários tipos de pesquisas. 1. O ANTIC acessava essas informações através de DMA (Direct Memory Access).3. dessa forma.exibia caracteres. Sendo assim. Blank Line . ocorreram muitas mudanças.3. Ele possuía quatro tipos de instruções: Map Mode . devido a alta programabilidade. História e Evolução Desde a criação das primeiras GPU’s. devido a seu alto grau de paralelismo [12]. geográficas. Antes de tudo. sendo introduzidos estágios programáveis dentro do pipeline de renderização das GPU’s. essa tecnologia evoluiu. foram descobertas novas utilizações. como médicas. novas funções. conhecida por sua tradicional cor azul . Era pré-GPU Nesta seção. então. matemáticas. Isso fez com que fosse retirada uma grande carga de trabalho das CPU’s. As placas de vídeo eram dispositivos simples. que se limitavam a mostrar o conteúdo da memória de vídeo no monitor. Era usado em microcomputadores e no videogame Atari 5200.1. o programador só tinha a possibilidade de enviar os objetos a serem renderizados e a placa somente os desenharia. O ANTIC possuía 14 modos de apresentação de gráficos/textos. ou seja. a saída digital) são os responsáveis pela transmissão das imagens da placa à tela [19]. e estes modos também poderiam ser misturados.

era que ele possuía uma Genlock (Generator Lock). conseguindo exibir 25 linhas e 80 colunas de caracteres na tela em alta resolução.2. ou adaptador de vídeo monocromático . uma das versões do Commodore Amiga 1. e também possuía um co-processador gráfico. 1. Amiga 1200. Commodore Amiga Commodore Amiga teve seu design projetado para ser um videogame. Figura 1. desenho de linhas.Monochrome Display Adapter. O Amiga carregava todas as funções de geração de vídeo para o hardware. em 32 ou 64 cores no modo EHB (Extra Half-Brite). IBM PC A GPU pioneira veio com o lançamento do primeiro IBM PC.usada para recarregar o PC (Program Counter) [17]. e até 4096 cores no modo HAM (Hold-And-Modify).3.2. Ele era capaz de exibir em tela cheia. que possuía um conjunto de próprias instruções.. IBM PC com placa de vídeo IBM MDA . Figura 1. funções como preenchimento. A IBM MDA . onde sincronizava sua frequência de atualização de tela com o modo NTSC ou PAL [17].3.trabalhava apenas em modo texto. Ele conseguia mostrar imagens (na realidade. mas foi reprojetado para ser um computador pessoal. Um ponto importante do Amiga. textos) em apenas uma cor e conta com 4 KB de memória de vídeo. Foi o primeiro computador a ser vendido em massa a conter um blitter no seu hardware de vídeo.4.

Mach64. que era pouco melhor que o da CPU (realizado por software) [16]. um chip de vídeo reunia os três componentes básicos de vídeo nos computadores: o processador propriamente dito. Também cabe citar os chips da ATI. Essa família se dividia nos modelos: Trio64 e Trio64V+: Não suportavam VRAM (memoria de video) e possuiam controladora de memoria 64bits. Chegada das 3 dimensões Com o fim da família Trio. Todos eles muito parecidos. . A única desvantagem desse primeiro acelerador gráfico era o seu desempenho 3D. A S3 Trio teve diferentes versões voltadas para placas de vídeo e para placas mãe com vídeo onboard. Trio32: Versão de baixo custo do Trio64 com controladora de memoria 32bits.1. lançado pela antiga fabricante de chips S3. Placa da série S3 Trio 1. o RAMDAC (conversor entre os sinais digitais dos chips e os sinais analógicos do monitor) e o gerador de frequência [16].5. Figura 1. Mach32. foi usado como acelerador 2D nos GPUs ViRGE. Sua linha com controladora de memória de 64bits foi uma das mais vendidas pela S3. Os seus modelos foram: ViRGE/325: O primeiro Acelerador da familia ViRGE. A novidade da época é que. que eram utilizados em PCs durante a primeira metade da década de 90. com pequenas evoluções de um para outro.6. são eles: Mach8.4. Trio64V2: Atualização do Trio64V+. Para a época ela tinha um processamento gráfico muito bom. entra em cena a segunda família de aceleradores gráficos fabricados pela S3: o ViRGE. pela primeira vez. Também era retrocompatível com as placas projetadas para o Trio. Aceleração 2D A primeira GPU com recurso de aceleração gráfica 2D foi a S3 Trio. O S3 ViRGE veio ao mundo em 1995 e possuía um incrível processamento 2D (Trio64V2).

com áudio próprio (embutido na placa de vídeo) e até compatibilidade com o SEGA Saturn. Aparecimento da NVIDIA.7. que mesmo tendo um desempenho pior que o NV1. a NVIDIA. ViRGE/GX2: Um dos primeiros aceleradores compatíveis com o slot AGP. Chegou a haver um projeto para o NV2. Placa de vídeo NVIDIA NV1 O NV1 também tentou ser uma central multimídia completa.6. Alpha Blending. empresa recém criada. Z-Buffering. porém o projeto não progrediu [16]. . ViRGE/GX: Era um ViRGE/DX com suporte a outros tipos de memoria. era muito mais barato. que seria usado no Dreamcast. O NV1 Integrava acelerador 3D com base em polígonos quadrangulares (hoje triângulos).5. o NV1 Pouco depois do lançamento do S3 ViRGE. um processador sonoro e VRAM (memória de vídeo). Ele não teve como competir com o ViRGE. Placa de vídeo S3 ViRGE 1. Figura 1. mapeamento MIP. Contando com 4 MB de memória onboard e com uma frequência de memória de até 66 MHz. Figura 1.ViRGE/DX: Atualização do ViRGE/325. entre outros. lançou o NV1. a ViRGE despontou com uma série de funcionalidades interessantes: filtro de texturas Bilinear e Trilinear. que infelizmente contribuiu para o fracasso do NV1 (forte concorrência do Sony Playstation). mapeamento de texturas de vídeo.

lança a família Rage. destacando a ATI na briga pelo mercado.Em 1996. a família Rage II que dobrava a velocidade da Rage original [17]. o pífio desempenho da ViRGE finalmente seria deixado para tras.8. respectivamente. o PowerVR e a Vérité 1000. Placa de vídeo ATI Rage 1. ainda estagnada no projeto Mach. ainda reina sobre o mercado de aceleradores gráficos. mesmo fraco. Isso é um tanto ruim. Vendo que as iniciativas de tornar placas de vídeo verdadeiras centrais multimídias. Diversos títulos mostraram o potencial da primeira Voodoo e fizeram com que os concorrentes apenas assistissem o sucesso da placa. Uma revolução ocorreu. a 3dfx. o custo valia a pena. Nesse mesmo ano a indústria de placas de vídeo sofreria uma grande transformação. Tudo isso com suporte a execução de DVD. A primeira Rage não foi um bom projeto. 1. Porém ainda não era o que a ATI queria e essa placa não foi um sucesso. começaram a aparecer no mercado as primeiras placas de vídeo que realmente otimizavam tarefas gráficas. A placa não apresentava nenhuma funcionalidade 2D. três empresas entraram no ramo de aceleradores 3D. o ViRGE. e nenhuma das suas concorrentes conseguiu alcança-la [16]. . a ATI lança em 1997 a sua segunda geração de aceleradores gráficos. Com isso. com seus aceleradores graficos Voodoo 1. o desempenho foi melhorado consideravelmente. mas para os gamers hardcore. essas duas variáveis a tornaram um sucesso. Voodoo 1: A revolução Ainda em 1996. a Imagination Tecnologies e a Rendition.7.9. Com 8 MB de memória SDRAM. Porém esse reinado não duraria muito tempo. 64-bit e 60 MHz de clock. A série não durou muito. então. ATI desponta no mercado A ATI technologies. Figura 1. mas causou estrago [18]. A Voodoo 1 tinha um bom processamento gráfico e um preço ótimo. que unia ao Mach o poder do processamento 3D. o que exigia que o consumidor comprasse mais de uma placa caso optasse pela Voodoo 1[21].

Placa da série 3dfx Voodoo 1 1.10. da ATI. que tinha um desempenho inferior a Voodoo 1 e a Rage PRO.8. honrava o nome e retomou a coroa de melhor acelerador gráfico. que tinha desempenho inferior à Voodoo 1. no inicio de 1998 a NVIDIA lança a Riva 128ZX.Figura 1. como a Voodoo Rush. mas não consegue ameaçar a primeira placa 3D da história a suportar a nova tecnologia 3D da Microsoft (Direct 3D): a NVIDIA Riva 128. a 3dfx lançou a verdadeira sucessora da Voodoo 1: a Voodoo 2 e a Voodoo Banshee (versão enfraquecida da Voodoo 2. Figura 1. com menor custo) [17]. pequena atualização da Riva 128. Primeira placa com suporte a Direct 3D: NVIDIA Riva 128 Poucos meses depois. que se tornou a melhor placa de vídeo 3D do mercado. com desempenho próximo ao da Riva 128. Ascensão e queda da 3dfx Em 1997. que trouxe apenas um suporte de memoria de vídeo maior (8MB). Houveram ainda outros lançamentos. apareceram no mercado diversos adversários da Voodoo 1.9. que . Após o fiasco da Voodoo Rush. mas ela não chegou a ser um problema para a NVIDIA [18]. A ATI lançou a linhas Rage II. Esta sim.

Figura 1. Ou seja. em 1999 haviam apenas três grandes competidores no mercado de placas de vídeo 3D: ATI. com as linhas Rage 128.10.11. Meses depois. 1. mas ela serviu como base para as placas de vídeo a sucederam. mas quem sai vencedor desta briga é a placa da 3dfx devido a problemas de aquecimento com a placa da NVIDIA. Os chips da Rage 128 PRO foram usados como base para a criação da Rage Fury MAXX. a placa de vídeo servia apenas como um dispositivo que enviava os dados para o monitor. Investida da Intel no ramo de placas de vídeo Essas placas de vídeo lançadas até 1998 constituem a chamada primeira geração das GPU’s. respectivamente. com melhor processamento do Direct 3D e na codificação/decodificação de vídeos. A ATI Rage 128 recebeu diferentes versões e foi atualizada para a Rage 128 PRO. Contendo um pipeline de renderização fixo (Figura 1. muito menos possibilidade de se implementar programas que substituíssem essa funcionalidade fixa da placa de vídeo. a NVIDIA lança a Riva TNT (NV4). nenhum processamento era feito internamente. um fiasco devido aos erros na produção. Também em 98 a S3 lança a família Savage3D.12). . onde dois chips ocuparam a mesma placa e cada um renderizava um frame diferente. NVIDIA e 3dfx. essas placas. A segunda era das placas de vídeo: cai a 3dfx Após diversos fabricantes desistirem de criar placas de vídeo.11. Até mesmo a Intel tentou entrar o mercado. Riva TNT2 e Voodoo 3. Figura 1. mas logo desistiu e passou fabricar apenas chips de vídeo onboard [18]. em sua maioria possibilitam apenas a renderização de triângulos pré-transformados. que consegue incomodar um pouco a Voodoo 2. Voodoo 2: verdadeira sucessora da Voodoo 1 estava na cabeça da Riva 128ZX.

dependendo do aplicativo. A família TNT2 foi uma pequena atualização da TNT original. Figura 1.Figura 1. a diferença entre elas era exclusivamente o barramento de memória. seriam tornados programáveis Como não havia softwares compatíveis com esta tecnologia. Placa de vídeo ATI Rage Fury MAXX A Riva TNT2 também teve dois modelos: a TNT2 e a TNT2 M64. embora a ideia de se usar dois chips de vídeo na mesma placa seja utilizada até hoje em dia. Possuía uma GPU potente que se alternava no topo com a TNT2. Só não foi o GPU top na época porque não tinha suporte a alguns modos de cores que a TNT2 tinha.13. que na TNT2 M64 era cortado pela metade (64bits). contudo ela conseguiu manter a coroa de melhor acelerador gráfico com a NVIDIA devido a TNT2 Ultra. mais tarde. Pipeline de renderização: estágios em azul. A Voodoo3 era um processador integrado 2D/3D. ela foi comercialmente ignorada. . uma TNT2 com os clocks bem inflados e memórias de baixa latência (para a época). Para o segmento de baixo custo a 3dfx repetiu a teoria do bem sucedido Voodoo Banshee.12. lançando a linha Velocity.

afundando de vez a companhia que no fim de 2000 seria vendida para a NVIDIA. um dos últimos sucessos da 3dfx .14. Este fato tornou a velocidade de renderização ainda maior.15. e pouco mais tarde a empresa lançou o VSA-100. Essas linhas foram a Voodoo 4 e 5. os sucessivos atrasos (que foram cruciais na queda da empresa) abriram uma margem para a NVIDIA lançar uma resposta para a ainda nem lançada Voodoo 5. baseadas no mesmo núcleo. visto que os objetos e operações seriam apenas transportados para a GPU. Na época o SLI. e tirou muito peso de processamento da CPU. enquanto a segunda possuía dois desses chips em paralelo. Elas deveriam ter um nível pouco maior que o da TNT2. Quando a Voodoo 5 foi definitivamente lançada a Geforce 2 e a Radeon a deixaram para trás. Como últimos projetos dessa grande empresa do setor estão as Voodoo 4 e 5 e a grande contribuição que ela deu ao mercado de VGAs. chamado de Scan-Line Interleave. a saber. começou a ruir. podendo ser interligados de 2 a 32 chips. o SLI. que se encarregaria do cálculo pesado. mesmo com bons projetos de aceleradores gráficos. chip que poderia ser utilizado em paralelo e na mesma placa. Figura 1. rotação. o VSA100. e não mais a CPU. uma ficava com as linhas pares e outra com as impares. principalmente as transformações geométricas. ou seja. Nesta segunda geração muitas funcionalidades que antes eram feitas pela CPU passaram a ser feitas diretamente para o harware da GPU. A 3dfx ainda lançou duas linhas de GPUs. a primeira era baseada em um único VSA-100. Voodoo 3. a aplicação de iluminação.Figura 1. translação e escala e ainda. porém. com o SLI. a Geforce 256. Placa de vídeo NVIDIA Riva TNT2 A 3dfx. funcionava do seguinte modo: cada GPU renderizava alternadas linhas horizontais. A 3dfx foi a primeira empresa a oferecer processamento paralelo em GPUs.

Figura 1. Em termos de desempenho. a mesma com DDR era inalcançável.16. superando a ATI. que fazia com que ela só fosse acessível para poucos. Geforce 256. além de ser a primeira VGA totalmente compatível com o Direct3D 7. No início. A terceira era das placas de vídeo: NVIDIA x ATI No fim de 1999 a NIVIDIA lançava a Geforce 256. dedicada a estações de trabalho e servidores. marco inicial da terceira era de placas gráficas A ATI Rage Fury MAXX conseguia bater a Geforce 256 com SDR. porém. 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. O único problema desse “gigante” do fim do século passado era o seu preço. a ATI lança uma rival à altura da Geforce 256: a Radeon 7000 (codinome R100). ela utilizava memória SDR. também começou com a Geforce 256. a Geforce 256 era melhor que todos os chips existentes e superava a linha Riva TNT2 Ultra por uma margem de no mínimo 50%. a NVIDIA resolveu atacar vários segmentos do mercado. Com a Geforce 2. Figura 1. A NVIDIA obviamente não ficou parada e lançou a Geforce 2 GTS. lançando versões de baixo custo e desempenho (linha Geforce 2 MX). A Geforce 256 corrigia alguns erros da linha Riva.1. que por não tirar todo o potencial do chip foi substituída mais tarde pela DDR. Os modelos são os seguintes: . A linha Quadro da NVIDIA.17. versões custo/benefício (linha Geforce 2 TI) e versões de alto desempenho e preço (linha Geforce 2 GTS). a placa que marcou o fim da 3dfx.12. Placa de vídeo ATI Radeon 7000 No ano seguinte.

Introdução do Rv200. Alem disso a NVIDIA vendeu vários modelos de Geforce 2 MX. – MX100: Equipada com memórias SDR de 32bits de barramento. Esse chip fez a alegria dos OEM. competindo com a Geforce 2 Ti. – MX200: Equipada com memórias SDR de 64bits de barramento. era basicamente um R100 feito em 150nm e com clocks maiores. Figura 1. mais penava nos filtros. Introdução do Rv100 conhecido como Radeon 7000. Geforce 2 GTS: Chip High-end da família liderou por muito tempo esse segmento por parte da NVIDIA. Geforce 2 Pro: Um pouco mais rápida que a GTS devido a pequenas melhorias na arquitetura. Geforce 2 Ultra: A melhor das placas dessa linha. e o chip RV100 (versão rebaixada) foi lançado como Radeon 7000 para competir com a Geforce 2 MX. muito barato e com um bom desempenho 3D foi o maior sucesso da linha Geforce 2. O único porem desse chip foi a retirada de muitos componentes em relação ao R100 (1 pixel shader e vários componentes desenvolvidos pela ATI). A reação da ATI foi imediata: o chip R100 foi rebatizado comercialmente como Radeon 7200 para competir com a Geforce 2 TI. GeForce 2 Ti: Era uma Geforce 2 GTS “capada”. Eles eram os seguintes: – MX400: MX original (memórias de SDR 128bits) com um clock maior. Uma das placas mais raras da história.18. tinha um clock bastante alto. Conseguia bater a Geforce 2 Ti e até incomodar a sucessora Geforce 3 Ti. Placa de vídeo NVIDIA Geforce 2 GTS . o que fez dele um perdedor em relação a Geforce MX. Para o corte de custos a NVIDIA tirou 2 pixel shaders e usou memórias SDR.Geforce 2 MX: Era o chip entry level da linha. foi concebido para disputar 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. até o lançamento da Ultra.

as operações possíveis são: transformações nos vértices. após serem enviados pela CPU para renderização. iluminação.19. sem conhecimento dos vértices restantes. 1. Placa de vídeo ATI Radeon 7200 É nesta geração que começa a ser possível implementar programar que executarão diretamente na GPU. Ela apresentava praticamente os mesmos clocks da GeForce 2 Ultra. ainda. para criar seus vertex shaders o programador deveria escrever programar diretamente na linguagem de montagem da GPU (assembly). e ainda contava com suporte ao ainda novo DirectX 8.13. etc. havia apenas um número bastante limitado de instruções possíveis de serem executadas e não havia suporte para números em ponto flutuante. Cada vértice é trabalhado isoladamente. o que fez com que o produto da NVidia perdesse logo nos primeiros meses o suporte a tecnologia mais atual. Infelizmente (para a NVIDIA) o DirectX 8 teve uma vida muito curta. Não havia. Apesar de limitado. mas sim pela nova proposta que trazia: a de possuir o primeiro GPU totalmente programável do mercado. Ao utilizar vertex shaders. que representou um grande salto para a indústria dos jogos não só pela performance que apresentava. que simplesmente superava a performance da GeForce 3 por uma margem . a funcionalidade fixa da placa é substituída e não pode ser usada. A briga das gigantes NVIDIA e ATI e o início da programação em GPU Em fevereiro de 2001 a NVIDIA lançou a GeForce 3. ou seja programas que efetuam alguma transformação nos vértices dentro da GPU. uma linguagem de programação voltada para a GPU. uma posição resultante para o vértice. tais como cores. apenas variáveis de ponto fixo eram possíveis [15]. sendo logo substituído pela versão 8. etc. Dessa forma. dependendo do que a aplicação enviar. com características que a aproximaria de uma máquina vetorial ou de processamento paralelo. batizado de Radeon 8500. Deve-se calcular. mas com uma contagem de transistores mais de duas vezes maior.Figura 1. obrigatoriamente. Com os vertex shaders é possível operar sobre os vértices e informações associadas. Em placas mais recentes pode-se acessar texturas. começa-se a vislumbrar a GPU como hardware programável e. geração de coordenadas de textura.1.. transformações de normais e normalização. Cor e outros atributos são opcionais. Em menos de 6 meses a ATI respondeu lançando o modelo R200 . Suportando apenas vertex shaders. o que complicava bastante o desenvolvimento. normais. Neste estágio. na verdade.

A virada da ATI Tendo um desempenho estupendo porem um custo benefício não muito bom com o R200. litografia em 150nm refinada. Por isso uma nova revisão do chip (NV28) foi lançada. o que não conseguiu. Enquanto isso.20. A Geforce 4 foi muito bem sucedida. o que era extraordinário.de até 20% e contava com um GPU programável totalmente compatível com DirectX 8. Placas de vídeo NVIDIA Geforce 3 e ATI Radeon 8500 A NVIDIA tentou contra-atacar em 2002 com a nova linha Geforce 4. a linha de baixo custo da NVIDIA (Geforce 4 MX) foi um sucesso comercial por causa do seu preço baixo. O R300 foi lançado sob os modelos: Radeon 9550. O R300 vem ao mundo no fim de 2002. ou seja. Alem da serie Radeon 9000 o R300 também foi utilizados nas placas da geração seguinte: X300. mais tarde ambas as placas foram introduzidas com memórias DDR 128bits. porém com clocks menores. era um belo chip para a época. Com esse lançamento a ATI conseguiu uma grande façanha. o que rendeu a este grande chip mais desempenho. 4 vertex shaders e um sistema de filtros bastante eficiente. X550 e X600. Pela primeira vez na . dobro de transistores se comparado ao R200. 8 TMUs. Radeon 9600. A linha Geforce 4 foi concebida para destronar o R200. Radeon 9500. Além disso o sistema de refrigeração de toda a linha ocupava apenas um slot. A ATI também lançou a 8500LE que era idêntica a Radeon 8500. Radeon 9700 e Radeon 9800. tanto que o NV28 ganhava em desempenho da FX5600 e empatava com o fenômeno Radeon 9600. 1. a ATI decide que chegara a hora de lançar outro chip. Ela era um chip completamente diferente do R200. A arquitetura R200 original usava memórias DDR 64bits. mas a versão de alto desempenho (Geforce 4 TI) não conseguiu cumprir seu objetivo. O sistema de filtros do R300 era tão eficiente que ela chegava a ser 100% mais rápido que a Radeon 8500 sob filtros ativados.14. Figura 1. com uma maior variedade de modelos. 8 pixel shaders. Esse chip era excelente e teve um dos maiores custo beneficio da história. por ser menos potente do que a Radeon 8500.1. As principais características do R300 eram o suporte ao Direct3D 9. tanto que a Radeon 9600 foi uma das melhores placas nesse quesito de todos os tempos.

2) para o mercado mid/low end.Figura 1.21. Mesmo com novas revisões. normal e Ultra). 5800 (normal e Ultra) pra o mercado high-end. 5950 Ultra (substituta da 5900 Ultra). Placa de vídeo NVIDIA Geforce FX 5200 Os modelos da série FX são os seguintes: 5200 (normal e Ultra) e 5300 para o mercado entry level. 5700 (VE. Placas da série ATI Radeon 9000 história do mercado de VGAs o melhor custo beneficio e o melhor chip eram da mesma empresa. A NVIDIA teve muitos atrasos com o NV30 e esse foi um dos principais motivos do seu fracasso. ela foi um grande fiasco. As principais características no NV30 são: Litografia de 130nm. é onde deslancha verdadeiramente a programação em placas gráficas. infelizmente. LE. 5900 (XT. toda a linha FX perdia para suas concorrentes diretas da ATI. Querendo retomar o trono a NVIDIA lança a tão esperada serie FX e. Figura 1. já é possível para o programador . Substitutas das 5800. normal e Ultra) e 5750 para o mercado mid-end. Excetuando-se a FX5200. 9600Pro e 9800XT. DDR2 e GDDR3. 35 e 36. suporte a DDR. respectivamente. como o NV34. mas a guerra continuaria e muito mais intensa. Ultra e Ultra Ver.22. Esta pode ser considerada a quarta geração de GPU’s. os chips NVIDIA não eram muito competitivos. Agora. normal. alem disso os driver não eram dos melhores. 5500 e 5600 (XT. que apesar da baixíssima desempenho foi a placa de vídeo mais vendida da historia. Pela primeira vez a rainha NVIDIA havia perdido uma batalha.

sem qualquer informação sobre os fragmentos vizinhos. Ou seja. acesso e aplicação de texturas. Vertex Shader escrito em Cg Permite a programação de efeitos como reflexão/refração em tempo real. Seu desenvolvimento foi baseado na linguagem de programação C. fragmentos podem ser descartados. como OpenGL e Direct3D e a compilação dinâmica. Além disso. Da mesma forma que nos vertex shader. além dos vertex shaders. ou seja.criar. cálculo de normais no caso de iluminação por pixel. há a possibilidade de um código Cg rodar também em placas da ATI. Neste momento. Na figura 1. podendo assim criar efeitos bastante ricos. Figura 1. Cada shader deve ser compilado e incorporado em um programa. como suporte a tipos de dados textura e a números de ponto flutuante de 32 bits. a funcionalidade fixa da placa é substituída e não pode ser usada e. GLSL e HLSL. A implementação de um tipo de shader não implica na obrigatoriedade de se implementar os outros. ainda. pode-se implementar apenas um fragment shader e continuar com a funcionalidade fixa da placa para o outro. .23. a integração com APIs gráficas. Cg (C for Graphics). é uma linguagem de alto nível para programação em GPU. que serão responsáveis por efetuar transformações nos pixels que serão desenhados na tela. cálculo de nevoeiro. no entanto. as coordenadas de um fragmento não podem ser modificadas. ao utilizar fragment shaders. o qual será linkado.23 temos um pequeno exemplo de vertex shader escrito em Cg. As operações que são possíveis de serem efetuadas num fragment shader são: cálculo de cores e coordenadas de textura por pixel. fragment shader. operam isoladamente em um único fragmento. começam a surgir linguagens para substituir o Assembly que outrora era usado. Os exemplos mais famosos são Cg. Isso também se deve ao fato da expansão do número de instruções que era possível utilizar. Os fragment shader (ou pixel shader) operam sobre os fragmentos que são produzidos pelo processo de rasterização. permite otimização de código para a placa em que vai rodar. que foi desenvolvido pela própria NVIDIA. Nesta etapa. por isso os comandos são bastante parecidos.

Na figura 1. a ATI resolveu continuar apostando no Direct3D 9 em sua nova linha de placas de vídeo.HLSL (High Level Shading Language) é uma linguagem proprietária desenvolvida pela Microsoft com suporte à sua API Direct 3D. Do outro lado. um produto realmente poderoso. 6. . que vinha do erro chamado FX lançou uma série que não prometia muito.24. 10]: compatibilidade com diferentes plataformas. os shaders feitos em GLSL podem ser executados em qualquer hardware com suporte a OpenGL. normal e GTO2. Em 2004. linguagem aberta pertencente à série de especificações OpenGL [4]. Vertex shader e fragment shader escritos em GLSL 1. incluind Windows. porém.24 temos dois exemplos de vertex e fragment shader feitos em GLSL. a Serie 6. É uma linguagem bastante parecida com Cg por ter sido desenvolvida junto com ela. Movida pelo embalo de sua geração atual. no entanto. As grandes vantagens de GLSL ser totalmente integrada com o OpenGL são [2. o modelo Radeon 9800XT. respectivamente. XT e XT PE . Com isso a ATI perdeu muito mercado para a recém lançada serie 6 da NVIDIA. A placa mais poderosa dessa geração foi a X850XT PE. O suporte. o R420 foi usado para equipar as placas de vídeo da linha Radeon X700. não é compatível com o padrão aberto OpenGL [3]. porém no segmento midend o velho R300 era utilizado e ele não foi o bastante para competir com a 6600GT. X800 (SE. Pro. XT e XT PE . mas que teve seu brilho ofuscado por ter que concorrer com um produto ainda mais eficiente. ao Direct3D 9. Linux e Mac OS. O R420 foi lançado sob esses modelos: X700 (normal. como era de se esperar.substitutas das suas respectivas X800 para o mercado high-end). foi uma das mais bem sucedidas da história. após alguns meses percebeu-se a tendência do marcado em migrar para o Direct3D 9.0c que vinha com o shader model 3. que conta com taxa de preenchimento significativamente superior a da 9800PRO e ainda com vazão de memória quase 50% maior.0c foi um de seus principais diferencias.15. Ao fim de 2004 é lançada a sexta geração de VGAs sob codinome Geforce. X850 (Pro. mesmo precário. GTO. A aposta no Direct3D 9 no inicio se mostrou acertada.0. XL. A retomada a NVIDIA Das diversas variantes da GeForce FX que foram lançadas. Figura 1. GTO-16. GT.Substitutas da X600 para o mercado mid-end). Pro e XT . A NVIDIA.para os mercados mid e high-end). temos GLSL (OpenGL Shading Language). nenhuma conseguia competir com a ATI até o lançamento da GeForce FX 5950 Ultra. a grande maioria dos fabricantes inclui um compilador GLSL nos drivers das suas placas. X800 e X850. sendo possível otimizar o código GLSL para cada placa em específico. mas que no fim.

e XT) para os mercados mid e high end. Placa de vídeo NVIDIA Geforce 6600 GT . 1.0c com a linha Radeon X1XXX.2. XT e XTX) substitutas das suas variantes X1900. GT e XT) para o mercado mid-end. lançou a série Geforce 7XXX com suporte melhorado ao mesmo Direct3D 9. Pro. Empate das gigantes No ano seguinte. 16 pixel shaders e 6 vertex shaders. que perdia apenas para a Geforce 7950GX2 (que utilizava duas placas de vídeo ligadas em modo SLI). XTX) destinadas ao mercado high-end. GT Rev. Os modelos da ATI eram: X1300 (normal.0c. GTO Ver. Placa de vídeo ATI Radeon x850 XT PT As suas principais características são: Primeiro chip com suporte a SLI. sendo ul- Figura 1.Figura 1. Primeiro chip com suporte a processamento de vídeo.2. XT. para não ficar para trás. mas pouca diferença de desempenho. X1900 (GT. Pro e XT) e X1550 (SE e normal) para o mercado entry level. XL. No quesito entry level e mid-end essa serie não foi muito boa. Processo de construção de 130nm e de 110nm (para a 6600GT). A X1950 XTX foi a melhor placa dessa geração. X1950 (GT. Pro.25. porém no quesito high-end ela foi estupenda. X1600 (Pro e XT) e X1650 (normal.26.16. exceto pela Radeon X1950 XTX. A NVIDIA. Esta geração foi marcada pro preços bem elevados das placas de vídeo. a ATI se rende ao Direct3D 9. X1800 (GTO.

Placa de vídeo ATI Radeon X1950 XTX trapassada apenas pelas 7950GX2. GTX e GX2). GTO. Nessa série também foi introduzido um novo estágio programável. No fim de 2006 a NVIDIA. . se comparadas com as gerações anteriores. uma placa com duas 7950GT em SLI.17.Figura 1. As operações possíveis de serem efetuadas são: amplificação de geometria.28. Placa de vídeo NVIDIA Geforce 7950 GX2 1. 7950 (GT e GX2). o geometry shader.0c melhorado em relação a serie 6. com ou sem informações sobre adjacências. Figura 1. GT. 7900 (GS. lançou a serie 8 [8]. Aqui a ATI não pode competir no mercado mid-end com a NVIDIA. Ela foi lançada sob os seguintes modelos: 7300 (LE. 7600 (GS e GT).27.00 por uma Geforce 8800 Ultra!) e as melhorias muito modestas das outras placas. 7800 (GS. Os geometry shaders operam sobre primitivas. a primeira a possuir os shaders unificados: não haveria mais diferenciação entre elementos processadores de vértices ou de fragmentos. cansada de empates. as mesmas unidades genéricas serviriam para as duas coisas. que permite ao programador criar seus próprios métodos de processamento de geometria [7]. tendo que lançar uma X1800 dedicada a esse mercado. GT e GTX). Inércia na ATI Os dois pontos fracos desta geração da NVIDIA foram o altíssimo custo das placas de alto desempenho (até US$ 700. porém em todos os quesitos ficou praticamente empatada com a serie X1000 da rival ATI. A série 7 da NVIDIA possuía um desempenho em Direct3D 9. A serie 7 foi uma boa linha para a NVIDIA. GS e GT).

sistemas de níveis de detalhes (LoD). começou-se a pensar em programação genérica dentro da GPU. 1]. tesselação. zero ou mais primitivas de um mesmo tipo. tais como Sh e Brook [14. GTS (G92) e Ultra) para o mercado high-end. ao invés de gerar imagens no fim da renderização. Através do stream output pode-se associar dados às primitivas (render-tovertex-array) e. 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 [11]. GTS 320 e 640. bibliotecas de funções e um mecanismo de abstração de hardware que esconde os detalhes da implementação em GPU. a empresa resolveu lançar uma revisão do chip G80 para o mercado de usuários comuns. GT. mas os engenheiros da NVIDIA fizeram um trabalho tão bom no chip G92 que todas as placas lançadas com base nele eram melhores que suas rivais . detecção de silhueta por extrusão (substituir CPU para geração de sombras). A principal linguagem. Assim como os outros shaders. No ano seguinte. Dessa forma. não usar mais a GPU apenas para desenhar gráficos na tela. Exemplo de código CUDA A arquitetura CUDA inclui ferramentas de desenvolvimento em C/C++. mas também para programas de propósito geral. GTX. A partir de cada primitiva pode-se gerar. renderização através de um Cube Map (mapeamento em cubo) [9]. ao utilizar geometry shaders.29 temos um exemplo de código CUDA. Na figura 1. já projetada pensando em GPGPU e feita pela própria NVIDIA. A serie 8 da NVIDIA foi lançada sob os seguintes modelos: 8400GS e 8500GT para o mercado entry level. a funcionalidade fixa da placa é substituída e não pode ser usada. ou seja. Com todo esse poder de programação.29. como saída. chama-se CUDA (Computer Unified Device Architecture). 8800 (GS. pela primeira vez a NVIDIA quebrou a sua nomenclatura e lançou uma placa com codinome GT melhor que outra GTS. o chip era tão bom que. 5. mas o que se viu foi o contrario. serão gerados vetores que podem ser usados em novos cálculos na CPU ou na própria GPU. A revisão G92 foi concebida no fim de 2007 para ocupar a lacuna entre a 8600GTS e a 8800GTS 320. Figura 1. 8600 (GT e GTS) para o mercado mid-end. foram criadas linguagens específicas para a chamada GPGPU (General Purpose computation on Graphics Processing Unit). As primitivas geradas podem ser desconectadas.

Figura 1. O resultado foi tão bom.18. e com isso o consumidor comum teve acesso a placas de vídeo muito poderosas. A Geforce 9600GT (chip G94) foi lançada e fez muito sucesso por ser barata e ter desempenho superior à Radeon HD 3870 (um modelo de alto desempenho). ATI volta a briga Em 2007. a ATI resolveu fazer pequenas melhorias no chip Rv670 para permitir que mais de um processador pudesse ser utilizado em uma única placa de vídeo. 1.30. Geração atual de placas de vídeo Antes de lançar novas tecnologias. . utilizando o conceito de duas placas de vídeo em uma. Mas isso durou dois meses. pois a NVIDIA contra-atacou com a Geforce 9800GX2. Comprada pela AMD.31. a Radeon HD3870X2 foi a placa de vídeo mais potente do mercado.19.Figura 1. Isto obrigou a ATI a cortar o preço de seus produtos para se manter competitiva. Como resultado. a NVIDIA resolveu aumentar a produção de chips G92 e lançar uma versão do mesmo com menos recursos (G94) para atacar a ATI no mercado de placas de vídeo baratas. que consumia menos energia e era muito mais barata do que a R600. a ATI fez uma revisão no chip R600. 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 de vídeo. 1. e lançou a Rv670. Placa de vídeo ATI Radeon HD 3870 Antes de lançar novas tecnologias. que ela foi usada na nova linha Radeon HD 3000. Placa de vídeo NVIDIA Geforce 8800 Ultra com o chip G80.

O GT200 já nasceu com problemas. Figura 1. Em compensação. mas ainda não há . Temos os modelos Radeon HD4650/4670 enfrentando as Geforce 9500GT/9600GSO. mas nem isso foi capaz de tomar a coroa da ATI no mercado de placas de alto desempenho e de custo/benefício. a NVIDIA e a ATI finalmente lançaram seus novos chips: o GT200 e Rv770. Placas de vídeo ATI Radeon HD 3870X2 e NVIDIA Geforce 9800 GX2 Em 2008.Figura 1.32. a NVIDIA ainda é líder devido à demora da ATI em lançar novos modelos para esta lucrativa fatia. no atual mercado de baixo custo. pois consumia muita energia sem ter uma potência que justificasse estes gastos.34. foi a NVIDIA que se viu obrigada a baixar o preço de suas placas para permanecer competitiva. lançou o Rv700 (Radeon HD 4850/Radeon HD 4870) alguns meses depois. Placa de vídeo NVIDIA Geforce 9600 GT Figura 1. A ATI.33. sendo um sucesso de público e crítica. Placa de vídeo ATI Radeon HD 4870 Desta vez. por outro lado.

2007. A cada ano a ATI e NVIDIA se degladiam para ter a melhor placa de vídeo do mercado.. imaginar um futuro onde não haja mais distinção entre CPU e GPU. tornando-se assim também máquinas paralelas. principalmente em programação genérica atualmente.. . atualmente. Matt. [3] HAWKINS. os dois farão parte do mesmo componente altamente paralelizável que. GPUGems2. e no final o consumidor ganha com isso. 2005 [2] LENGYEL. 2003. [7] Nguyen. muito provavelmente com técnicas de renderização que hoje são muito custosas. Randima and PHARR. Addison Wesley.35. Premier Press.org/s2007/ Acesso em 15 de setembro de 2009. Nota-se uma convergência. como Ray-Tracing.20. trazem novas ferramentas para programadores utilizarem o alto potencial de cálculos em paralelo utilizarem toda a velocidade das GPU’s em suas aplicações. processadores como o Intel Core i7 possuem 8 núcleos e a tendência é que esse número aumente cada vez mais. www em: [6] FERNANDO. Hubert.gpgpu. GPU Gems 2 Addison Wesley. Randi J. GPU Gems 3 Addison Wesley. as CPU’s cada vez possuem mais núcleos. se encarregará do processamento central do computador e do processamento gráfico. coisa que as GPU já são há muito tempo. Pode-se. Dave. além disso. Charles River Media (Graphics Series). 2005. Disponível por http://www. Programming Techniques for High-Performance Graphics and General-Purpose Computation. OpenGL Shading Language. Beginning OpenGL Game Programming. em tempo real.rival direto para a 9800GT. Referências [1] PHARR. ao mesmo tempo. 2004. E o futuro. então. 2004. [5] SIGGRAPH 2007 GPGPU COURSE. Eric. [4] ROST. Addison-Wesley Professional. Kevin and ASTLE. pois as placas de vídeo se tornam cada vez mais potentes e mais baratas e. Figura 1. Placa de vídeo NVIDIA Geforce GTX 280 1. The OpenGL Extensions Guide. Matt.

[21] From Voodoo to Geforce: The Awesome History of 3D Graphics. Disponível por www em: http://accelenation.com/article/features/graphics_extravaganza_ultimate_gpu_retrospective Acesso em 11 de outubro de 2009.com/video/showdoc. 45-48.baboo.br/msn08/content. Tomas. Disponível por www http://www. [16] Galeria: Evolução das Placas de Vídeo.123.clubedohardware. [19] GPU Cheatsheet . Disponível por www em: http://www.mathematik.aspx?i=2195&p=10 Acesso em 11 de outubro de 2009. RODRIGUEZ. Celso Carneiro.com. [13] Graphics Hardware 2008. http://developer.de/ goeddeke/gpgpu/index.nvidia.maximumpc. dezembro 1999. 2008 [9] OPPELSTRUP. Disponível por www em: http://www.[8] NVIDIA. [17] História das Placas de Vídeo.com/page/home.graphicshardware. Disponível por www em: http://nehe. Disponível por http://forum. . Disponível por www em: http://www.htm Acesso em 11 de outubro de 2009. GPGPU Tutorials. Dominik.gatech.com/opengl/glsl/ Acesso em 15 de setembro de 2009.A History of Modern Consumer Graphics Processors. [11] NVIDIA Developer Zone.html 2009.edu/ lanterma/mpg/ Acesso em 15 de setembro de 2009. Disponível por www em: Acesso em 15 de setembro de [12] NeHe Productions.gamedev. www em: Acesso [18] A evolução das placas de vídeo. Noemi de la Rocque Otimização e Processamento Paralelo de Alto Desempenho.com.br/info/2314-a-evolucao-das-placas-de-video.org Acesso em 15 de setembro de 2009. em: [14] GODDEKE. Disponível por www em: http://www.uni-dortmund. [20] 7 Years of Graphics.id. [22] RIBEIRO.asp?z=300&id=34175 Acesso em 11 de outubro de 2009. [10] GLSL Tutorial.br/historia-placas-video/509834 em 11 de outubro de 2009. Revista PUC Ciência.anandtech. Disponível por www em: http://www.lighthouse3d.baixaki. Introduction to GPU programming for PDC summer school 2008 2008. GPU Programming Guide Geforce 8 and 9 Series NVIDIA Corporation.com/?ac.com. Disponível por www em: http://users.1 Acesso em 11 de outubro de 2009. Disponível por www em: http://www.ece.html Acesso em 15 de setembro de 2009. [15] Multicore and GPU programming for Video Games.net/ Acesso em 15 de setembro de 2009.