artigo gpu

14
GPU: Aspectos Gerais Charlan Luís Mocelin, Eduardo Fialho Barcellos da Silva, Geison Igor Tobaldini Universidade Regional Integrada Campus de Erechim – Erechim – RS – Brasil {charlan.mocelin,eduardofialho}@gmail.com, [email protected] Abstract. This paper describes the general aspects of GPUs, its history, evolution, buses that are used to interconnect between the GPU and CPU, its modes of operation, programming, performance and applications in which it is used. Resumo. Esse artigo descreve os aspectos gerais de GPUs, sua história, evolução, barramentos que são utilizados para interligação entre a GPU e CPU, seus modos de funcionamento, programação, desempenho e aplicações em que é utilizada. 1. Introdução A Unidade de Processamento Gráfico (Graphic Processing Unit, ou GPU) é um processador especializado em processamento gráfico ou visual. Ele pode ser encontrado em videogames, computadores pessoais, estações de trabalho e até em celulares. Apesar de muitas pessoas pensarem que ele existe apenas para processar os gráficos de jogos de computadores ou videogames, ele possui muitas outras funções importantes. Na maioria dos casos, é utilizado para processar as imagens com maior velocidade e qualidade, podendo suavizar os contornos de objetos, adicionar efeitos de luz complexos e criar imagens, dentre vários outros. As GPUs processam as informações binárias da imagem e as transformam na imagem que os usuários vêem. Além da capacidade de processar imagens com facilidade, a GPU também é utilizada para efetuar complexos cálculos matemáticos e geométricos. Ela tem a capacidade de processar vetores e matrizes com facilidade. Elas foram criadas para reduzir a carga de trabalho da Unidade Central de Processamento (Core Processing Unit, ou CPU) que antigamente, realizava todas as tarefas. Como usuários comuns não necessitavam de um processador para cálculos complexos, e as interfaces visuais eram simples, não havia a necessidade de ter uma GPU. 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, nesses casos, ela é utilizada na Placa de Vídeo.

Upload: wesley-carcado

Post on 30-Jun-2015

264 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Artigo GPU

GPU: Aspectos Gerais

Charlan Luís Mocelin, Eduardo Fialho Barcellos da Silva, Geison Igor Tobaldini

Universidade Regional Integrada Campus de Erechim – Erechim – RS – Brasil

{charlan.mocelin,eduardofialho}@gmail.com, [email protected]

Abstract. This paper describes the general aspects of GPUs, its history, evolution, buses that are used to interconnect between the GPU and CPU, its modes of operation, programming, performance and applications in which it is used.

Resumo. Esse artigo descreve os aspectos gerais de GPUs, sua história, evolução, barramentos que são utilizados para interligação entre a GPU e CPU, seus modos de funcionamento, programação, desempenho e aplicações em que é utilizada.

1. Introdução

A Unidade de Processamento Gráfico (Graphic Processing Unit, ou GPU) é um processador especializado em processamento gráfico ou visual. Ele pode ser encontrado em videogames, computadores pessoais, estações de trabalho e até em celulares. Apesar de muitas pessoas pensarem que ele existe apenas para processar os gráficos de jogos de computadores ou videogames, ele possui muitas outras funções importantes.

Na maioria dos casos, é utilizado para processar as imagens com maior velocidade e qualidade, podendo suavizar os contornos de objetos, adicionar efeitos de luz complexos e criar imagens, dentre vários outros. As GPUs processam as informações binárias da imagem e as transformam na imagem que os usuários vêem.

Além da capacidade de processar imagens com facilidade, a GPU também é utilizada para efetuar complexos cálculos matemáticos e geométricos. Ela tem a capacidade de processar vetores e matrizes com facilidade.

Elas foram criadas para reduzir a carga de trabalho da Unidade Central de Processamento (Core Processing Unit, ou CPU) que antigamente, realizava todas as tarefas. Como usuários comuns não necessitavam de um processador para cálculos complexos, e as interfaces visuais eram simples, não havia a necessidade de ter uma GPU.

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, nesses casos, ela é utilizada na Placa de Vídeo.

Page 2: Artigo GPU

Hoje, as GPUs são usadas para vários tipos de pesquisas, como médicas, químicas, matemáticas, geográficas, e são até usadas em clusters, devido a seu alto grau de paralelismo.

2. História e Evolução

Desde a criação das primeiras GPUs, ocorreram muitas mudanças, foram descobertas novas utilizações, novas funções, e principalmente, grande aumento na sua capacidade de processamento. Isso fez com que fosse retirada uma grande carga de trabalho das CPUs, transferindo-as para as GPUs.

2.1. ANTIC

O ANTIC (Alpha-Numeric Television Interface Controller), foi um chip criado especialmente para mapping (mapeamento). Este chip era usado em microcomputadores e no videogame Atari 5200.

O ANTIC possuía 14 modos de apresentação de gráficos/textos, e estes modos também poderiam ser misturados.

A lista de exibição e os dados da exibição eram escritos na RAM (Random Access Memory), o ANTIC acessava essas informações através de DMA (Direct Memory Access), então, processava tais intruções de alto nível para instruções simples em tempo real, assim as enviando para CTIA (Colleen Television Interface Adapter), gerando a imagem.

Ele possuía quatro tipos de instruções:

• Map Mode – exibia pixels coloridos.

• Character Mode – exibia caracteres.

• Blank Line – exibia linhas horizontais.

• Jump Instruction – usada para recarregar o program counter

1. JMP – transferia a lista de execução da exibição para outro endereço.

2. JVB – era colocado no final da execução, ele carregava a lista de execu-ção, podia ser usado para carregar outra lista de execução em sincronia com o final da atual, evitando a tela preta.

2.2. Commodore Amiga

Commodore Amiga teve seu design projetado para ser um videogame, mas foi re-projetado para ser um computador pessoal. Foi o primeiro computador a ser vendido em massa a conter um blitter no seu hardware de video. Foi considerado o primeiro computador a conter uma GPU completa.

Page 3: Artigo GPU

O Amiga carregava todas as funções de geração de vídeo para o hardware, funções como preenchimento, desenho de linhas, e também, possuía um co-processador gráfico, que possuía um conjunto de próprias instruções.

Ele era capaz de exibir em tela cheia, em 32 ou 64 cores no modo EHB, e até 4096 cores no modo HAM. Um ponto importante do Amiga, era que ele possuía uma Genlock (Generator Lock), onde ele sincronizava sua freqüência de atualização de tela com o modo NTSC ou PAL.

Extra Half-Brite (EHB) usava seis bitplanes(6 bits por pixel), onde os cinco primeiros bits referenciavam a cor em uma paleta de cores, e caso o sexto bit estivesse presente, o brilho da cor era cortado pela metade, assim transformando a paleta de 32 cores em 64 cores. Deste modo era possível usar 64 cores usando apenas 32 registradores de paleta.

Hold-And-Modify(HAM) era um modo usado digitalização de fotos e vídeos, também era usado para manipular imagens estáticas. No modo HAM, a imagem era dividida em linhas, como em uma matriz, e cada linha possuía pixels, usando o modo RGB(Red Green Blue). Sendo assim, o modo HAM sempre grava qual foi a última cor usada no pixel a esquerda do atual, e então procede escolhendo uma nova cor ou alterando a cor gravada. Seu limite de cores era de 4096, ele armazenava as cores por 16 valores de azul, 16 valores de verde e 16 valores de vermelho, resultando nas 4096 cores, sendo assim necessários 12 bits para armazenar uma cor.

2.3. Placas Aceleradoras

Com o interesse por exibição gráfica crescendo, com a alta resolução e o alto desempenho, começaram a ser criadas GPUs com processamento 2D em chip único.

Anos a frente, começaram a ser produzidas Placas Aceleradoras 3D. A NVidia 256 marcou o mercado, pois conseguiu retirar a transformação e a iluminação do software e levou ao hardware. Então, começou a ser usado Pixel Shader e Vertex Shader.

Também foram criadas APIs (Application Programming Interface), melhorando mais ainda o desempenho das GPUs.

As GPUs receberam a capacidade de processar cálculos de ponto flutuante maiores, e a capacidade de processar figuras geométricas, tornando-se tão flexíveis quanto uma CPU.

Atualmente as placas de vídeo contem GPUs muito potentes, chegando a conter até vários GBRAM de memória, com freqüências elevadas.

3. Barramentos

As placas de vídeo podem ser onboard, ou offboard. Uma placa onboard é integrada na placa mãe do computador, geralmente não tem um desempenho tão bom quanto uma

Page 4: Artigo GPU

placa offboard. As placas offboard, podem usar vários tipos de barramentos, mas os dois principais são os barramentos PCI-E(do inglês Peripheral Component Interconnect Express), ou o barramento AGP(do inglês Accelerated Graphics Port).

3.1 AGP

O barramento AGP foi criado para melhorar a comunicação do processador com o slot, como na época o barramento mais usado era o PCI, que compartilhava seu bus com outros slots PCI. Ao ter um caminho dedicado, o barramento AGP conseguia transferências mais rápidas que o PCI.

Outro motivo é que o AGP consegue ler as texturas diretamente da RAM, sem precisar copiar para ler, como os PCIs, ele consegue fazer isso através do GART(do inglês Graphics Address Remapping Table).

A largura do AGP é de 32 bits, que opera a 66 MHz, e essa velocidade de operação é multiplicada pela versão AGP, essas versões são 1X, 2X, 4X ou 8X, a versão 1X é capaz de ter um data rate de até 266 MB/s, enquanto a última versão, 8X pode ter um data rate de até 2133MB/s, e tem a sua velocidade de operação de 533 MHz.

As placas AGPs conseguem usar a memória RAM, caso sua própria memória seja 100% usada, esse valor de RAM pode ser alterado na BIOS do computador.

3.2 PCI-E

O PCI-E substituiu o AGP, ele tem uma taxa de operação e transferência maior. O PCI-E utiliza links seriais ponto-a-ponto, onde cada para cria uma lane, que seria como uma rua, assim permitindo que cada um receba e envie dados simultaneamente. Essas lanes são roteadas por um hub na placa mãe, agindo como um crossbar switch. Isso faz com que cada par possa se comunicar com outros ao mesmo tempo. O número de lanes pode ser alterado de acordo com o dispositivo acoplado.

O data rate de um PCI-E pode chegar até 500 MB/s por lane, tendo até 16 lanes. Seu clock pode chegar até 2,5 GHz.

4. Funcionamento

Existem dois tipos de processamento em uma GPU, o Graphic Pipeline e o método de Stream Processing.

4.1 Graphic Pipeline

Cada fragmento e vértice do pipeline é independente e pode ser processado simultaneamente, por causa de sua independência, os processadores gráficos podem usar processamento paralelo em várias partes do pipeline agilizando o processo. Esse método de organização de dados permite à placa de vídeo receber e responder a pacotes múltiplos de dados em uma única solicitação.

Page 5: Artigo GPU

Figura 1. Etapas do processamento realizado pela GPU

Page 6: Artigo GPU

4.1.1 Bus interface

Interface para enviar e receber dados ou comandos.

4.1.2 Vertex Processing

Converte cada vertex para uma posição em uma tela 2D. Para determinar sua cor, pode ser adicionado efeito de luz. Se o vertex shader for programável, pode adicionar deformações e efeitos.

4.1.3 Clipping

Remove todos os pixels que não ficarão visíveis na tela 2D, um exemplo são pixels que ficam atrás de um objeto.

Primitive Assembly, Triangle SetupVertices são convertidos em triangulos. Aqui as informações necessárias para gerar atributos de cada pixel são criadas.

4.1.4 Rasterização

Os triângulos criados no estágio anterior são preenchidos com pixels. Cada triângulo é chamado de fragmento.

4.1.5 Occlusion Culling

Remove todos os pixels escondidos, esses pixels geralmente acabam sendo sobrepostos, por isso são removidos.

4.1.6 Parameter Interpolation

Neste estágio, os valores de cada pixel são processados, valores como cor, textura, brilho e outros.

4.1.7 Pixel Shader

Aqui são adicionadas as texturas e as cores finais para cada fragmento. O pixel shader programável permite que a aplicação combine os atributos do pixel, como cor, profundidade e posição.

4.1.8 Pixel Engines

Combina matematicamente a cor final de cada fragment, o grau de transparência e os dados armazenados no frame buffer produzem a cor final, e o pixel é armazenado para ser exibido.

4.1.9 Frame Buffer Controller

O Frame Buffer Controller é usado para manter os valores atuais dos pixels que estão sendo exibidos na tela. Também é usado para armazenar comandos gráficos, texturas e qualquer outro atributo associado a um pixel.

Page 7: Artigo GPU

Figura 2. Diagrama de Blocos da Arquitetura da série NVIDIA GeForce 6. Destaque para os processadores dedicados em processamento de vértices (Vertex Processing) e de pixels (Texture and Fragment Processing).

4.2 Stream Processing

A partir de um Stream(conjunto de dados), uma série de operações podem ser aplicadas a cada elemento do Stream. O sistema de Stream Processing pode sacrificar flexibilidade para ganhar uma execução mais simples, rápida e com maior eficiência. A principal diferença entre o Stream Processing e o Graphic Pipeline é que no Stream Processing o Vertex Shader e o Pixel Shader são unificados, e o Stream Processing pode processar uma maior variedade de dados e com maior paralelismo.

Este método é efetivo quando se tem três condições.

Paralelismo de Dados: Quando uma mesma operação é executada em todos elementos e esses elementos não tem dependências.

Intensidade de Computação: Número de aplicações aritméticas por E/S, exemplo 100:1.

Localização de Dados: É um tipo especial de localidade temporal, onde o dado é produzido uma vez, e lido, uma ou duas vezes depois na mesma aplicação, e nunca mais é usado. As Streams podem capturar esses dados diretamente.

As placas mais atuais dispõem de até 800 Stream Processors, tendo assim uma enorme capacidade de computação.

Page 8: Artigo GPU

Figura 3. Diagrama de Blocos da Arquitetura da ATI/AMD Radeon HD 2xxx. Destaque para os processadores unificados.

5. Modelo de Programação Um dos maiores desafios do programador é transformar conceitos utilizados na programação tradicional em conceitos que podem ser diretamente processados pela GPU.

Para aproveitar o potencial do hardware se torna necessário o uso de ferramentas de desenvolvimento. As primeiras ferramentas surgiram para dar suporte às aplicações gráficas como jogos. No início a programação era feita em linguagem assembly de cada placa de cada fabricante, o que tornava o processo lento, com mais falhas e pouca portabilidade.

5.1 APIsPara facilitar o desenvolvimento, foram elaboradas APIs (Application Programming Interface) como OpenGL e DirectX.

As duas APIs realizam a emulação de funções que o hardware não suporta, aumentando assim a portabilidade. Porém a emulação por software não traz resultados iguais em comparação com a execução em hardware.

5.1.1 DirectX

O DirectX é um padrão proprietário mantido pela Microsoft para o sistema operacional Windows e o console Xbox. É constituído por um SDK (Software Development Kit),

Page 9: Artigo GPU

conjunto de APIs, que são usadas em multimídia. Ela contem APIs como Direct3D, DirectDraw.

• DirectDraw- desenha gráficos 2D(Raster).

• Direct3D – desenha gráficos 3D.

5.1.2 OpenGL

O OpenGL é um padrão aberto, ou seja, todos os fabricantes de hardware podem adotá-lo. Ele é mantido por um consórcio de empresas que formam o Khronos Group. As principais empresas são AMD, Apple, IBM, Intel, NVIDIA, Sun.

É usado para a criação de gráficos 2D e 3D. É usado para simulações de vôo, visualização cientifica, realidade virtual e CAD (Computer-Aided Design).

5.2 Linguagens de Programação

Várias linguagens foram desenvolvidas para tirar proveito do hardware gráfico. C for Graphics (Cg), High Level Shading Language (HLSL), OpenGL Shading Language (GLSL) são algumas.

Com a mudança arquitetural ocorrida nas GPUs, em que os processadores de vértices e de fragmentos e texturas foram unificados, ficou menos difícil usar as unidades de processamento gráfico para propósitos gerais.

Destacam-se as plataformas Brook, Sh, AMD Stream e a NVIDIA CUDA.

5.2.1 BrookA plataforma Brook foi desenvolvida em Stanford para permitir a utilização da GPU para cálculo numérico. O sistema é baseado em C e o aplicativo pode ser desenvolvido para executar com funções do DirectX e OpenGL.

5.2.2 ShSh consiste numa biblioteca que funciona com a linguagem C++. Em 2004 foi criada a empresa RapidMind para comercializar a plataforma e portanto deixou de ser de uso livre.

5.2.3 AMD StreamPlataforma para as GPUs da AMD/ATI. Contém várias bibliotecas e ferramentas incluindo uma modificação do Brook, chamada Brook+, otimizada para as GPUs da marca.

5.2.4 NVIDIA CUDA

Plataforma para GPUs da NVIDIA. Contém bibliotecas e ferramentas, incluindo compilador, para desenvolver aplicações paralelas para executarem em suas GPUs. É baseado nas linguagens C/C++.

Page 10: Artigo GPU

6. DesempenhoO processador gráfico tem alto grau de paralelismo e vazão de memória necessários para o processamento de imagens cada vez mais complexas. Um exemplo é o processador NVIDIA GeForce 7900 GTX com uma vazão de 51.2 GB/s, já a ATI Radeon X1900 XTX consegue alcançar 240 GFLOPS em comparação com o processador Intel Pentium Extreme Edition 965 de uma vazão de memória de 8.5 GB/s e 25.6 GFLOPS.

Figura 4. Essa figura mostra que o crescimento do desempenho em operações de ponto flutuante por segundo das GPUs da marca NVIDIA aconteceu de forma acentuada através dos últimos quatro anos em comparação com as CPUs Intel.

O desempenho da GPU está crescendo duas vezes a cada doze meses, ou seja, a um ritmo maior que o desempenho da CPU que cresce a aproximadamente 1.4 vezes. Essa diferença é atribuída ao propósito de cada processador.

A unidade de processamento central deve ser otimizada para realizar tarefas seqüenciais, com várias estruturas de controle para realizar análises de dependência, predição de desvios e execução fora de ordem. Mesmo com as novas tecnologias, como multi-threading e vários núcleos no mesmo encapsulamento, não foi possível alterar significativamente o desempenho por ainda dependerem de estruturas complexas de controle.

Já a unidade de processamento gráfico deve realizar uma instrução sobre um conjunto enorme de dados. A execução de instruções segue um vetor de dados. O processador executa as operações sobre cada unidade do vetor de entrada e coloca os resultados na mesma ordem num vetor de saída.

Esse modelo é eficiente, pois cada elemento pode ser executado em paralelo. O processador pode executar sobre os dados que estão mais próximos na hierarquia de memória sem afetar o resultado da execução.

Page 11: Artigo GPU

Figura 5. Comparação do crescimento da vazão de memória de GPUs e CPUs nos últimos anos.

7. AplicaçõesAlém da renderização de imagens e vídeos, as GPUs são usadas para cálculos científicos intensos que podem ser realizadas em um ambiente de alto grau de paralelismo. Essa forma de uso é chamada de GPGPU (General-Purpose Computation on Graphics Processing Units).

Simulações de fenômenos físicos, segmentação de imagens, processamento de sinal, computação geométrica, ordenação de dados, consultas a banco de dados, data mining.

8. ConclusãoAs GPUs proporcionam processamento de alto grau de paralelismo e desempenho. Estão presentes em desktops, notebooks e consoles de jogos, o que traz uma grande oportunidade para os desenvolvedores aproveitarem seu hardware.

Os resultados ao seu uso em relação a CPU são animadores. É preciso incentivar a migração de programas feitos seqüencialmente e que possam ter ganhos bons se executados paralelamente.

A evolução da GPU para propósitos gerais pode ser considerada algo relativamente novo. Os esforços da indústria e comunidade científica são de como aproveitar melhor a arquitetura dos novos processadores e trazer essa melhora ao público em geral.

Page 12: Artigo GPU

9. Termos

Paleta(do inglês, Palette) – Número total de cores que um sistema é capaz de controlar ou gerar. O número total de cores pode ser diferente do total que pode ser exibido.

Pixel – É o menor elemento da imagem, pode ser um ponto, um quadrado ou um retângulo. A união dos pixels forma a imagem digital. Chamado também de Picture element.

Texel – É um pixel de textura, a união de texels forma a textura de uma imagem digital. Chamado também de Texture Element.

Voxel – É um pixel de volume, a união dos voxels resulta no volume de uma imagem digital. Chamado também de Volume Element

Blitter(Block Image Transfer): É um bloco lógico com rápida transferência de dados. Ele é usado para transferir bitmaps, ao invés de transferir bit a bit, transfere em blocos, enquanto o blitter trabalha, a CPU fica livre para executar outras tarefas.

Renderização – Processamento de imagens digitais. Converte uma série de símbolos gráficos em um arquivo visual, geração de uma imagem a partir de um modelo.

Gráficos Vetoriais – usa primitivas geométricas (pontos, quadrados, curvas, linhas), que são baseadas em equações matemáticas para representar uma imagem.

Rasterização (Raster) – Representação de uma imagem em uma matriz de pixels para ser exibida em uma superfície 2D, como monitores. Converte um gráfico vetorial de formas em uma imagem raster (pixels).

Pixel Shader – É capaz de alterar o tom da cor, criar efeitos de luz, sombra, pontos de luz, transparência e outros. Ele altera pixel por pixel, e não leva em consideração a imagem completa, nem os pixels vizinhos.

Vertex Shader – Trabalha na estrutura de vértices 3D, melhorando sua modelagem.

Framebuffer – Transfere um display de vídeo do memory buffer para a saída, levando a imagem até o monitor. Ele pega o valor de cor de cada pixel.

Memorybuffer – Segura os dados, geralmente é usado quando as velocidade de entrada de dados e a de saída são diferentes ou variáveis.

Texture mapping unit – Rotaciona e redimensiona a imagem, depois aplica em uma superfície ou em um objeto 3D.

Page 13: Artigo GPU

Referências

AMD/ATI. http://ati.amd.com/technology/streamcomputing/index.html Acesso em: 09/06/09

DevHardware.com. http://www.devhardware.com/c/a/Video-Cards/The-Graphics-Pipe-line/ Acesso em: 09/06/09

IEEE Computer Society. How GPUs Work http://www.computer.org/portal/site/com-puter/menuitem.5d61c1d591162e4b0ef1bd108bcd45f3/index.jsp?&pName=com-puter_level1_article&TheCat=1055&path=computer/homepage/Feb07&file=howth-ings.xml&xsl=article.xsl&;jsessionid=G10s8pkpkP1K0Lk07bXx5dR0mXLS-j8hXdnLDN5Kjj5GZTJtTTLZ0!1592783441 Acesso em: 09/06/09

John D. Owens, David Luebke, Naga Govindaraju, Mark Harris, Jens Krüger, Aaron E. Lefohn, and Tim Purcell. A Survey of General-Purpose Computation on Graphics Hardware. Computer Graphics Forum, 26(1):80–113, Março 2007. http://www.cse.ii-tb.ac.in/~prekshu/myddp/DDP/papers/ASurveyofGeneralPurposeComputationon-GraphicsHardware.pdf Acesso em: 03/06/2009.

John D. Owens, Mike Houston, David Luebke, Simon Green, John E. Stone, and James C. Phillips. GPU Computing. Proceedings of the IEEE Vol. 96 No. 5, Maio 2008. ht-tps://www-s.ks.uiuc.edu/Publications/Papers/paper.cgi?tbcode=OWEN2008-JS Acesso em: 04/06/2009

Kayvon Fatahalian, Mike Houston. A Closer Look at GPUs. Communications of the ACM, Vol. 51, No 10, Outubro 2008. http://doi.acm.org/10.1145/1400181.1400197 Acesso em: 04/06/2009

Kurt Akeley, Pat Hanrahan. The Graphics Pipeline. 2001 http://graphics.stanford.edu/courses/cs448a-01-fall/lectures/lecture2/ Acesso em: 09/06/09

NVIDIA Corporation. GPU Gems 2. 2005 Game Developers Conference, Março 2005. http://download.nvidia.com/developer/GPU_Gems_2/GPU_Gems2_ch30.pdf Acesso em: 04/06/2009.

NVIDIA Corporation. CUDA Programming Guide. Maio 2009. http://developer.down-load.nvidia.com/compute/cuda/2_2/toolkit/docs/NVIDIA_CUDA_Programming_Guide_2.2.pdf Acesso em: 27/05/2009

NVIDIA Corporation. CUDA Zone. http://www.nvidia.com/object/cuda_home.html Acesso em: 09/06/09

OpenGL. http://www.opengl.org/ Acesso em: 09/06/09

Vítor Oliveira. Computação genérica de alto desempenho com GPUs. Distributed Com-puter Graphics. http://paginas.fe.up.pt/~aas/pub/Aulas/DiCG/VitorOliveira.pdf Aces-so em: 07/06/2009

ZDNet.com. ZDNet Definition for: Graphics Pipeline http://dictionary.zdnet.com/defin-ition/graphics+pipeline.html

Wikipedia, the free encyclopedia. http://en.wikipedia.org/wiki/Gpu http://en.wikipedi-a.org/wiki/Commodore_Amiga http://en.wikipedia.org/wiki/Amiga_Hold-and-Modi-

Page 14: Artigo GPU

fy http://en.wikipedia.org/wiki/Amiga_Halfbrite_mode http://en.wikipedia.org/wiki/ANTIC Acesso em: 09/06/09