Por que as GPUs ainda possuem rasterizadores?

14

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?

mrpyo
fonte
1
"Por que uma unidade de processamento gráfico não está na unidade universal de processamento", é isso?
Andreas
1
@ Andréas Não, minha pergunta é como está declarado no post. Por que os rasterizadores ainda são uma parte do hardware, quando poderiam ser feitos em software (na verdade, eles já podiam ser feitos com o OpenCL, ou computadores de som). A pergunta é por isso que não é comum ... talvez seja simplesmente performance, eu não sei, é por isso que eu estou pedindo ...
mrpyo
Você pode ignorar a rasterização e implementar seu próprio rasterizador com unidades de computação em GPUs modernas e, de fato, conheço pessoas que fazem isso para fins específicos.
precisa saber é o seguinte
Os rasterizadores convertem polis vetoriais em um monte de pixels que podemos iluminar. Quando não temos mais pixels ou paramos de usar a geometria vetorial, não precisamos mais de rasterizadores. Independentemente da aparência do restante do pipeline, no final do dia (ou quadro), você precisa de pixels. O rasterizador apenas nos diz com quais pixels estamos preocupados com um determinado triângulo. Tudo isso é programável - se você deseja uma saída diferente do rasterizador, envie triângulos diferentes. Ou simplesmente desenhe tudo em uma textura de renderização em um sombreador de computação e blit na tela com um quad alinhado à vista.
precisa saber é o seguinte

Respostas:

15

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.

ases
fonte
Eu não acho que você precise armazenar as amostras de subpixel se a filtragem de caixa for suficiente, então você pode apenas executar médias em execução.
Joojaa #
2
Suspeito que a amostragem e o cache de textura provavelmente também sejam áreas em que as implementações de hardware permitem um desempenho impossível de obter com implementações de software.
Julien Guertault
3
@aces Um outro item que vale a pena mencionar é o poder. O hardware dedicado fará o mesmo trabalho normalmente com uma fração do orçamento de energia e, com a limitação de energia já um problema, especialmente em dispositivos móveis, tornar-se totalmente programável tornaria muito pior.
Simon F
@JulienGuertault Fair, mas acho que isso se aplica principalmente à MSAA. Os resultados dos testes parecem indicar que esse não é um grande problema quando tudo se encaixa na memória do chip (embora isso possa ter algum impacto no desempenho, independentemente).
Aces #
@ SimonF Eu acho que esse é um ótimo ponto também. Eu o incluí na resposta.
Aces #