Esse cap é mais sobre uma visão técnica das GPUs e uma opinião sobre elas.
Diferentes fornecedores surgiram no mercado, assim surgiram diferentes microarquiteturas. Foi constúindo ao longos dos anos muitas features e possibilitando o programador usar com mais eficiência as GPUs. Cada microarquitetura de GPU, ao longo dos anos tráz e melhora novos aspectos, por isso que é bom comprar GPUs com microarquiteturas mais recente.
Em especifico, a NVIDIA, algumas das suas microarquiteturas:
Lovelace (2023)
Ampere (2020)
Turing (2018)
Pascal (2016)
Maxwell (2014)
Kepler (2012)
Fermi (2010)
GPUs da AMD e algumas suas mais recentes microarquiteturas:
Vega (2017)
Navi 1x (2019)
Navi 2x (2020)
Navi 3x (2022)
A nova microarquitetura das GPUs Intel:
Xe HPG
GPUs menos recentes como a GTX 1080 usa da microarquitetura Pascal, por isso não suportam tão bem a técnologia ray-tracing.
A microarquitetura Lovelace contém features muito incriveis que podem ser implementadas pela aplicação, como DLSS, que em tempo real gera novas imagens de alta qualidade para serem apresentadas apartir de AI.
"As placas de vídeo criadas com base na arquitetura Ada apresentam os NVIDIA Encoders (NVENC) de nova geração com codificação AV1, trazendo uma série de novas possibilidades para streamers, broadcasters e chamadas de vídeo." "Ele é 40% mais eficiente do que o H.264 e permite que os usuários que estão fazendo streaming em 1080p aumentem sua resolução para 1440p enquanto executam com a mesma taxa de bits e qualidade." - descrições pela NVIDIA Ada Lovelace.
Visões corporativas de manter os drivers closed-source geram também problemas frustantes na comunidade software 100% livre. No Linux os drivers da NVIDIA geram problemas muito chatos, como no caso do window manager wayland com KDE.
Embora seja o que é, a NVIDIA está a frente que todos os outros fornecedores pela sua ampla variedadade de software(s).
As GPUs da Intel, embora sejam novas, elas são muito interessante, pois considerando a sua performance em integradas (e.g Intel IrisX), sendo as melhores no estágio de geometria em termos de otimização, elas podem ser boas concorrentes no futuro. Infelizmente as novas GPU Intel ARC não contém unidades de processamento 64bits (elas não contem double e int64 em shaders), são limitadas a 32bits.
Qualquer pessoa pode ir no repositório da Vulkan e implementar uma feature, mas a tarrefa ultimato de implementação das features são feitas pelo driver (fornecedor). Cada GPU pode disponibilizar extensões e essas extensões em sua maioria são exclusivas. Mas é de responsabilidade do fornecedor otimizar essas features.
As extensões precisam ser checadas pela aplicação e usadas na aplicação CASO a GPU tenha essa feature. A NVIDIA em consideração tem uma vasta possibilidade de efeitos como a distância de renderização ser maior em comparação com uma GPU AMD.
No OpenGL extensões contém o prefixo ARB. https://developer.nvidia.com/nvidia-opengl-specs
Essas extensões também funcionam dentro de shaders, possibilitando algumas otimizações interessantes nativas feita pela GPU.
No desenvolvimento de aplicações que podem rodar em diferentes GPUs, é normal existir incopatiblidade, muitas GPUs não suportam as mesmas features, quando a situação é entre fornecedores, isso pode piorar drásticamente, nem todo fornecedor se importa e nem prioriza os mesmos aspectos.
Um dos exemplos citados acima é a diferença entre NVIDIA e AMD, na distância de renderização, GPUs AMD conseguem renderizar relativamente curta distâncias (em comparação com a NVIDIA).
Também pode ocorrer problemas na hora de compilar JIT uma shader no OpenGL. As GPUs NVIDIA são diferentes, funcionam e priorizam coisas diferentes. Um exemplo prático.
// GPUs AMD não conseguem compilar shaders no OpenGL quando existir uniforms de structs anonimas repetidas.
uniform struct {
bool uMeow;
} uCat;
// qualquer outro struct anonimo uniform não pode.
uniform struct {
bool uAuau;
} uDog;
Infelizmente essa estrutura de código não funciona em GPUs AMD (pois dá um erro de compilação), na NVIDIA sim.