Aceleradoras de vídeo: 2D

Author Photo
7:03 pm - 04 de outubro de 2010

As placas aceleradoras

As placas aceleradoras começaram a aparecer no início dos anos noventa e não pararam de se desenvolver.

Uma “placa aceleradora de vídeo” é uma controladora que, além da memória de vídeo e dos circuitos necessários para codificar as imagens e enviá-las ao monitor (analógica ou digitalmente, conforme o monitor), contém ainda um chip muito especial, na verdade um processador auxiliar capaz de “desenhar” as telas baseando-se apenas em comandos genéricos enviados pela UCP. Este chip é o coprocessador gráfico ou Unidade Gráfica de Processamento (UGP), em inglês GPU (Graphics Processor Unit).

A UGP é o componente mais importante de toda a circuitaria dedicada a vídeo. Como toda sua capacidade de processamento visa gerar imagens, ela o faz muito mais depressa, o que justifica o nome de “aceleradora” dado às controladoras que dispõem de UGP.

Neste ponto convém notar que o aumento da rapidez na exibição de imagens alcançado pelas placas aceleradoras não se restringe ao fato delas disporem de uma UGP dedicada exclusivamente à geração de imagens (embora este seja um fator relevante). O desempenho melhora também porque reduz significativamente o tráfego sobre o barramento, já que a UCP não mais precisa enviar para a controladora cada ponto das telas, mas apenas instruções genéricas sobre como e onde desenhá-los.

Seu funcionamento se baseia no fato de que, como as UGPs “sabem” gerar imagens, basta que recebam da UCP alguns comandos gráficos de alto nível para cumprir sua tarefa. Estes comandos solicitam à UGP que desenhem polígonos e figuras curvas bidimensionais, além de executar operações de transferência de grandes blocos de dados de um ponto para outro da tela (operação denominada Bit-BLT, de “bit block transfer”).

Por exemplo: sem a placa aceleradora, para desenhar um círculo vermelho em uma determinada região da tela, a UCP precisa identificar um ponto pertencente ao círculo, localizar sua posição na memória de vídeo e lá armazenar um valor de quatro bytes (nos padrões de 16 milhões de cores) representando o tom adequado de vermelho. E repetir a tarefa para cada um os pontos do círculo. Mas se a placa de vídeo contém uma UGP, tudo o que a UCP tem que fazer é enviar as coordenadas do centro da circunferência, seu diâmetro e cor do círculo que ela limita e voltar a seus afazeres. Daí para frente o problema é da UGP, que vai descobrir onde fica cada pixel na memória de vídeo e “colori-lo” de acordo.

Mas como funciona efetivamente uma UGP? Bem, se você for “fuçar” direitinho vai descobrir que ela é na verdade uma poderosíssima unidade de processamento matemático especializada na execução de operações do tipo “ponto flutuante” (ou seja, com operandos fracionários), posto que desenhar imagens na tela nada mais é que decompô-las em polígonos elementares (e quanto maior o número de polígonos, mas realista é a imagem) e calcular não somente as coordenadas de cada um de seus vértices como também a cor do polígono. E armazenar os dados correspondentes na memória de vídeo. E tudo isto nada mais é que um intrincado encadeamento de operações matemáticas.

[singlepic id=2988 w=320 h=240 float=]

Veja, na Figura 3, um exemplo simples porém ilustrativo de como uma imagem (neste caso, obtida no blog de Brandon Huang) pode ser decomposta em polígonos.

Este processo pode continuar sendo mais e mais detalhado aumentando o número de polígonos e calculando suas cores. Evidentemente, quanto maior o número de polígonos e menor seu tamanho, mais realista será a imagem. E, mais evidentemente ainda, o cálculo das coordenadas de cada um dos vértices de todos os polígonos consumiria um bocado de capacidade de processamento adicional. Daí a importância da UGP.

Investir tanto no processamento de gráficos parece exagero. Mas não é. Pois, por incrível que pareça, em sistemas com interface gráfica este é um dos fatores determinantes do desempenho de todo o sistema. E a principal razão para que as interfaces gráficas tenham demorado tanto a se disseminarem foi justamente a inexistência, na época em que surgiram, de hardware com capacidade de gerar gráficos com a necessária rapidez.

E a razão é simples: como tudo nas interfaces gráficas é composto por desenhos na tela, quanto maior a resolução e o número de cores, mais os usuários se sentiam compelidos a usá-las (ou a rejeitá-las quando não satisfatórias). E quanto maior a resolução e o número de cores, maior a capacidade de processamento drenada da UCP nas máquinas sem placas aceleradoras. O resultado disto é que as deficiências não se faziam sentir apenas no que toca à geração de gráficos, mas sim a tudo o que dizia respeito ao processamento. Simplificando: quem se metesse a usar uma interface gráfica em telas de alta resolução de máquinas sem “placas aceleradoras de vídeo” acabaria descobrindo que seu sistema havia ficado insuportavelmente lento, e não apenas no que toca aos gráficos. A máquina parecia funcionar em câmara lenta.

E olhe que estamos falando apenas de imagens bidimensionais.

Quando começaram a aparecer os aplicativos (principalmente jogos) que usam e abusam da tridimensionalidade, a questão mudou completamente de figura.

E saltou para o estágio seguinte: as “placas aceleradoras 3D”.

Assunto da próxima coluna.

Até lá

B. Piropo

Newsletter de tecnologia para você

Os melhores conteúdos do IT Forum na sua caixa de entrada.