Você está na página 1de 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, geison_igor@hotmail.com

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.
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.
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
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.
Figura 1. Etapas do processamento realizado pela 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.
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.
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 APIs
Para 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),
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 Brook
A 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 Sh
Sh 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 Stream


Plataforma 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++.
6. Desempenho
O 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.
Figura 5. Comparação do crescimento da vazão de memória de GPUs e CPUs
nos últimos anos.

7. Aplicações
Alé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ão
As 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.
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.
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_Gu
ide_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-
fy http://en.wikipedia.org/wiki/Amiga_Halfbrite_mode http://en.wikipedia.org/wiki/
ANTIC Acesso em: 09/06/09