Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp
Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp
Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
2.4 <strong>Arquitetura</strong> das GPUs programáveis 37<br />
predicado usado em comparações, um registrador contendo a posição do pixel correspon<strong>de</strong>nte em co-<br />
or<strong>de</strong>nadas da tela, e um registrador que informa a área da face que está sendo processada. Entretanto,<br />
atualmente nenhum ambiente <strong>de</strong> execução <strong>de</strong> modificadores <strong>de</strong> fragmentos utiliza registradores <strong>de</strong><br />
en<strong>de</strong>reçamento.<br />
Os registradores <strong>de</strong> entrada contém os valores interpolados <strong>de</strong> saída do sha<strong>de</strong>r <strong>de</strong> vértices, tais<br />
como os valores <strong>de</strong> cor dos fragmentos ou coor<strong>de</strong>nadas <strong>de</strong> textura, e só possuem permissão <strong>de</strong> leitura<br />
pelo modificador. Utilizando instruções especiais, o sha<strong>de</strong>r <strong>de</strong> fragmentos po<strong>de</strong> amostrar valores<br />
filtrados <strong>de</strong> textura usando estágios <strong>de</strong> amostragem <strong>de</strong> texturas.<br />
O sha<strong>de</strong>r po<strong>de</strong> tanto usar as coor<strong>de</strong>nadas interpoladas <strong>de</strong> textura passadas em um dos registrado-<br />
res <strong>de</strong> entrada como também as coor<strong>de</strong>nadas <strong>de</strong> textura calculadas diretamente no modificador para<br />
amostrar uma textura. Usando os valores dos registradores <strong>de</strong> entrada e os valores amostrados <strong>de</strong> tex-<br />
turas, o sha<strong>de</strong>r produz seus resultados e armazena-os em registradores <strong>de</strong> saída. Como no sha<strong>de</strong>r <strong>de</strong><br />
vértices, esses registradores <strong>de</strong> saída possuem uma semântica pré-<strong>de</strong>finida. A saída inclui obrigatori-<br />
amente o valor final da cor do fragmento que será utilizado para formar a cor do pixel no frame buffer<br />
e, opcionalmente, o valor <strong>de</strong> profundida<strong>de</strong> que será utilizado no teste <strong>de</strong> profundida<strong>de</strong>. As atuais<br />
GPUs permitem a escrita <strong>de</strong>sses valores em vários alvos <strong>de</strong> ren<strong>de</strong>rização ao mesmo tempo, através<br />
do uso <strong>de</strong> vários registradores <strong>de</strong> saída <strong>de</strong> cor e valor <strong>de</strong> profundida<strong>de</strong> no sha<strong>de</strong>r <strong>de</strong> fragmentos.<br />
2.4.3 A GPU como um processador <strong>de</strong> propósito geral<br />
Com o aumento do número <strong>de</strong> instruções aritméticas e registradores disponíveis nos processadores<br />
<strong>de</strong> vértices e fragmentos, e particularmente com o advento <strong>de</strong> instruções <strong>de</strong> fluxo <strong>de</strong> controle dinâmico<br />
e capacida<strong>de</strong> <strong>de</strong> acessar e escrever em texturas com formato em ponto flutuante, as atuais GPUs pro-<br />
gramáveis têm possibilitado a realização <strong>de</strong> processamento paralelo que extrapola aquele <strong>de</strong>stinado<br />
à síntese <strong>de</strong> imagens em tempo real [Luebke et al., 2004a]. Tão importante quanto o aprimoramento<br />
do conjunto <strong>de</strong> instruções, as atuais GPUs possuem po<strong>de</strong>r computacional maior do que as CPUs para<br />
processamento <strong>de</strong> fluxos <strong>de</strong> dados e, como já discutido na seção 1.1, fornecem acesso mais eficiente<br />
a dados armazenados em memória <strong>de</strong> ví<strong>de</strong>o local.<br />
A arquitetura <strong>de</strong> uma GPU se assemelha ao mo<strong>de</strong>lo <strong>de</strong> um processador <strong>de</strong> fluxo (stream proces-<br />
sor). Nessa arquitetura, cada elemento <strong>de</strong> um fluxo <strong>de</strong> dados é processado <strong>de</strong> forma paralela por uma<br />
mesma função, chamada kernel, e os resultados são armazenados em um fluxo <strong>de</strong> saída, normalmente<br />
(mas não necessariamente) com um mapeamento biunívoco entre os elementos <strong>de</strong> entrada e saída.<br />
O processamento <strong>de</strong> cada elemento do fluxo in<strong>de</strong>pen<strong>de</strong> do processamento dos <strong>de</strong>mais elementos,<br />
possibilitando assim a criação <strong>de</strong> diversos fluxos <strong>de</strong> processamento paralelo. De fato, as atuais GPUs<br />
são compostas <strong>de</strong> centenas <strong>de</strong> fluxos simultâneos <strong>de</strong> processamento <strong>de</strong> fragmentos. Texturas po<strong>de</strong>m<br />
ser consi<strong>de</strong>radas como fluxo <strong>de</strong> dados <strong>de</strong> entrada e saída dispostos em matrizes 2D, nas quais os