3. Arquiteturas Modernas

Antes de abordarmos a estrutura das novas arquiteturas de GPUs, faremos uma pequena análise da evolução das mesmas.

3.1. Evolução das Arquiteturas de GPUs



Inicialmente, as GPUs de segunda geração possuíam uma arquitetura do tipo pipeline cujos estágios podem ser resumidos conforme esquematizado na Figura 6.
       No primeiro estágio (Vertex Transform & Lighting), eram feitas operações de transformação da posição dos vértices e alteração da cor dos mesmos de acordo com suas propriedades de iluminação. No estágio seguinte (Triangle Setup & Rasterization), eram construídos e preenchidos os triângulos de acordo com a conectividade dos vértices, formando assim os componentes necessários ao processamento do próximo estágio: os fragmentos, comumente associados aos pixels do monitor. Logo em seguida (Texturing & Pixel Shading), eram realizadas as aplicações de textura e outras transformações relativas à cor dos fragmentos. Por fim, no último estágio (Depth Test & Blending), eram realizados os testes de profundidade entre os objetos da cena e aplicados os devidos efeitos de composição, sendo que ao final deste estágio era gerada a imagem a ser exibida no monitor (Frame Buffer).
       Com o passar do tempo, conforme visto nas inovações apresentadas pelas terceira e quarta gerações, os estágios de Vertex Transform & Lighting e Texturing & Pixel Shading se tornaram programáveis e foram adicionados novos estágios (Tessellation e Geometry), sendo que a quinta geração possuía uma arquitetura mais ou menos como a apresentada na Figura 7.
       Um exemplo real de arquitetura em pipeline de GPU de quinta geração pode ser visto na Figura 8, que representa a arquitetura da NVidia GeForce 6. Repare que os processadores de vértices não são os mesmos que os processadores de texturas e fragmentos e que, nesta arquitetura, há mais processadores de vértices que de pixels.


Figura 6 - Pipeline de processamento das primeiras GPUs.
Figura 8 - Arquitetura da GPU NVidia GeForce 6.
Figura 7 - Esquema genérico das GPUs até a quinta geração.
3.2. As novas arquiteturas: o modelo unificado

A fim de planejar a nova geração de GPUs, os desenvolvedores, primeiramente, verificaram qual seria a nova proporção de processadores de vértices e de fragmentos. Após alguns testes envolvendo diversos aplicativos, chegou- se à conclusão que não era possível estabelecer uma proporção adequada, pois programas que trabalhavam com uma grande quantidade de modelos geométricos, como programas de modelagem do tipo CAD, utilizam principalmente os processadores de vértices, enquanto que programas que realizam uma grande quantidade de efeitos visuais, como programas de renderização de filmes, utilizam principalmente os processadores de fragmentos (Figura 9).

Figura 9 - À esquerda: exemplo de utilização de processadores de vértices e pixels por diferentes programas. À direita: utilização da proposta de processadores unificados.
       Sendo assim, decidiu-se por unificar ambos os processadores e criar um único que fosse capaz de processar tanto vértices quanto pixels. Desta forma, não importa qual tipo de pixel a aplicação mais utiliza, sempre que houver algum dado a ser processado e um processador disponível, este nunca ficará ocioso.
       Uma vez que ficou decidido que as novas arquiteturas teriam um único processador para executar todos os tipos de shaders, os diferentes tipos existentes - como vertex shader, pixel shader, geometry shader, physics shader, etc - podem agora ser tratados simplesmente como diferentes threads a serem rodados em paralelo dentro de um mesmo cluster de processadores, necessitando apenas mapear a saída de um com a entrada de outro (Figura 10).
       Uma das primeiras GPUs a apresentar esta nova arquitetura foi a NVidia GeForce 8800, lançada em fevereiro de 2007 e cuja estrutura é apresentada no esquema da Figura 11.

Figura 10 - Design Discreto x Design Unificado
Figura 11 - À esquerda: arquitetura unificada da NVidia GeForce 8800. À diretira: detalhes dos componentes de um cluster de processamento.