Apesar dos avanços, as GPUs modernas ainda possuem rasterizadores fixos. Altamente personalizável, com shaders programáveis, mas não totalmente programável.
Por que é que?
Por que as GPUs não podem ser simplesmente dispositivos maciçamente paralelos com unidades de computação universais onde o rasterizer é apenas um software para esse dispositivo fornecido pelo usuário?
Ter hardware de função fixa é tão benéfico em termos de desempenho que tal abordagem é inviável?
gpu
rasterizer
mrpyo
fonte
fonte
Respostas:
Em resumo, as razões de desempenho são o motivo pelo qual não são programáveis.
História e Mercado
No passado, costumava haver núcleos separados para processadores de vértices e fragmentos para evitar designs de FPU inchados. Havia algumas operações matemáticas que você só podia fazer no código de fragmentos de sombreador, por exemplo (porque elas eram principalmente relevantes apenas para fragmentos de sombreadores). Isso produziria fortes gargalos de hardware para aplicativos que não maximizavam o potencial de cada tipo de núcleo.
À medida que os shaders programáveis se tornaram mais populares, foram introduzidas unidades universais. Mais e mais etapas do pipeline de gráficos foram implementadas no hardware para ajudar no dimensionamento. Durante esse período, o GPGPU também se tornou mais popular; portanto, os fornecedores tiveram que incorporar parte dessa funcionalidade. Ainda é importante observar que a maioria da receita das GPUs ainda eram videogames, portanto, isso não poderia interferir no desempenho.
Eventualmente, um grande participante, a Intel, decidiu investir em rasterizadores programáveis com sua arquitetura Larrabee . Este projeto deveria ser inovador, mas o desempenho foi aparentemente menor que o desejado . Ele foi desligado e partes dele foram recuperadas para os processadores Xeon Phi. Vale ressaltar, porém, que os outros fornecedores não implementaram isso.
Tentativas em Rasterizadores de Software
Houve algumas tentativas de rasterização por meio de software, mas todas parecem ter problemas com o desempenho.
Um esforço notável foi uma tentativa da Nvidia em 2011 neste documento . Isso foi divulgado perto de quando o Larrabee foi encerrado, então é muito possível que isso tenha sido uma resposta a isso. Independentemente disso, existem alguns números de desempenho nisso, e a maioria deles mostra desempenho várias vezes mais lento que os rasterizadores de hardware.
Problemas técnicos com a rasterização de software
Há muitos problemas que foram enfrentados no documento da Nvidia. Aqui estão alguns dos problemas mais importantes dos rasterizadores de software:
Problemas maiores
Interpolação: A implementação de hardware gera equações de interpolação em hardware especializado. Isso é lento para o renderizador de software, pois ele precisa ser feito no shader de fragmentos.
Anti-aliasing: também houve problemas de desempenho com anti-aliasing (especificamente com memória). As informações sobre as amostras de sub-pixel devem ser armazenadas na memória do chip, o que não é suficiente para conter isso. Julien Guertault apontou que o cache / textura da textura pode ser mais lento com o software. O MSAA certamente tem problemas aqui, porque transborda o cache (os caches que não são de textura) e entra na memória do chip. Os rasterizadores compactam os dados armazenados nessa memória, o que também ajuda no desempenho aqui.
Consumo de energia: Simon F apontou que o consumo de energia seria menor. O documento mencionou que as ALUs personalizadas estão em rasterizadores (o que reduziria o consumo de energia), e isso faria sentido, já que as unidades de processamento de fragmentos e vértices no passado costumavam ter conjuntos de instruções personalizadas (tão provavelmente ALUs personalizadas). Certamente seria um gargalo em muitos sistemas (por exemplo, móveis), embora isso tenha implicações além do desempenho.
Sumário
TL; DR: há muitas ineficiências que a renderização de software não pode superar e essas coisas se somam. Há também muitas limitações maiores, especialmente quando você está lidando com largura de banda VRAM, problemas de sincronização e cálculos extras.
fonte