DirectX 12 – Capacidades das placas Nvidia para computação assincrona são questionáveis.

Dizer que se suporta o feature level 12.1 quando as placas Nvidia se revelam incapazes de realizar computação assincrona é, no mínimo, curioso!

O DirectX 12 irá revolucionar o mercado PC em três pontos.

  • A melhor utilização de todos os núcleos do CPU
  • Os acessos baixo nível com libertação do CPU e aumento do número de chamadas de desenho possíveis.
  • O uso livre e sem limitações da computação assincrona e que permitirá extrair toda a potência disponível nas placas gráficas, bem como libertar largura de banda e aumentar as performances gerais.

Se o primeiro ponto diz exclusivamente respeito aos CPUs, e o segundo ponto ser uma realidade em todas as placas que suportam o DirectX 12, independentemente do feature level suportado, o terceiro ponto parece ser um espinho atravessado na garganta da Nvidia.

A computação assincrona será revolucionária em muitos aspectos. E as placas da AMD mesmo com vários anos já a suportam convenientemente. Já as placas Nvidia, apesar de o anunciarem, não a suportam convenientemente!

Por incrível que possa parecer, nem AMD nem Nvidia possuem grande documentação técnica sobre a forma como as suas placas funcionam, sendo que no segundo caso (Nvidia), a situação é a pior de todas.

Tendo os programadores começado a usar a programação assincrona os resultados com as placas Nvidia foram surpreendentes. Basicamente a sobrecarga colocada no CPU é de tal forma intensa que o seu uso não compensa.

Daí que a Nvidia tenha lançado um tutorial sobre o que fazer e o que não fazer nas suas placas, fornecendo soluções que contornam os problemas, forçando a muita gestão manual e que revelam as limitações das suas placas gráficas ao ponto de a empresa recomendar o uso do CUDA e vez do DirectX 12 para processamento genérico no GPU.

O artigo que se segue mostra alguns dados a que se conseguiu chegar após alguns testes a placas de ambos os fabricantes:

Nos APIs tradicionais e que sempre tivemos nos PCs podemos dizer que apenas o motor gráfico 3D estava exposto. E ali os comandos enviados eram ordenados e executados por ordem de funcionamento fixo.

Mas o Vulkan e o DirectX 12 trazem um novo motor… o motor de computação. E ambos os motores podem funcionar assincronamente, o que se torna possível pelo facto de a ordem de funcionamento não ser fixa.

Os motores quando funcionam possuem momentos em que ficam impedidos de trabalhar. Isso acontece quando, por exemplo há que esperar por dados do CPU ou mesmo dados de outro processamento do GPU. E se antes isso implicava um tempo morto na placa gráfica, agora o outro motor pode continuar a trabalhar sem ser afetado pela paragem do primeiro.

Os trabalhos realizados pelo motor de computação é de extremo significado para os motores de jogos recentes uma vez que eles podem realizar trabalhos realizados pelo CPU e que o GPU ia depois necessitar, como processamentos de física, de IA ou outros.

Ora esta capacidade de trabalhar com os dois motores em paralelo é exactamente o ponto 3 acima referido, e uma das grandes novidades do DirectX 12. E curiosamente é o ponto fraco das placas Nvidia.

Os princípios aqui discutidos aplicam-se ao GNC 1.0, 1.1 (GCN 2), 1.2 (GCN 3) da AMD e às arquiteturas Kepler, Maxwell v1 e Maxwell v2. Alguns dos dados relativos aos GPUs anteriores ao GK110 tambem são aplicáveis à arquitetura Fermi.

Será de notar que o que aqui será referido diz respeito ao que alguns programadores encontraram a nivel de capacidades das placas com as drivers atualmente no mercado, motivo pelo qual poderão existir alterações no futuro. Há por isso que não tomar esta situação como uma realidade absoluta, mas apenas a verificada na presença desses mesmos testes.

Vamos ver os possíveis ganhos em usar o motor de computação:

  • O ganho mais fácil de se perceber é que se mode manter sempre o GPU ocupado com trabalhos de um dos motores, mesmo quando os trabalhos escalonados para o outro motor ficam em stand-by por necessitarem de dados do CPU ou de aguardar por alguma outra operação.
  • É possível colocar operações 3D clássicas dentro de um motor de computação, aumentando assim a performance gráfica.
  • O hardware mais sofisticado, o que inclui as consolas de nova geração, pode executar os vários motores com um paralelismo acrescido, escondendo latências dentro do próprio hardware.

Vejamos então o que se parece concluir do suporte a recursos do DirectX 12 nas placas de ambos os fabricantes baseado num pequeno teste efectuado à computação genérica das placas Nvidia e AMD nos fóruns do Beyond 3D:

NOTA IMPORTANTE: Apesar de tal já ter sido referido anteriormente, insiste-se: Nada do que é dito abaixo deverá ser tomado como uma verdade absoluta. Como referido alterações às drivers podem alterar a realidade actual, e o que é indicado abaixo não passam de conclusões parciais baseadas em testes efetuados, mas que podem inclusive pecar por lacunas na forma e variedade de implementação.

Suporte a recursos

Motor 3D

AMD – O motor 3D é o motor clássico e actualmente usado na quase totalidade dos jogos. Naturalmente a AMD suporta-o.
Nvidia – O motor 3D é o motor clássico e actualmente usado na quase totalidade dos jogos. Naturalmente a Nvidia suporta-o.


Motor de Computação

AMD – A AMD suporta computação no GPU e tal já foi explorado em alguns jogos.
Nvidia – A Nvidia suporta computação no GPU, sendo o CUDA o melhor exemplo da sua utilização.

Limite de comandos do motor 3D

AMD – Não mensurável. Normalmente o limite dá-se quando é atingida a capacidade da memória.
Nvidia – Não mensurável. Normalmente o limite dá-se quando é atingida a capacidade da memória.

Limite de comandos do motor de computação

AMD – 64 no GCN 1.2, 64 no GCN 1.1 e 2 no GCN 1.0. Parte da gráfica pode inclusive estar com partes dedicadas 100% a gráficos e outras 100% a computação.
Nvidia – Os testes parecem revelar que com o DirectX 12 o motor de 3D e de computação não podem estar ativos ao mesmo tempo uma vez que usam uma mesma unidade de função. A placa a cada momento ou calcula gráficos, ou calcula computação. 32 comandos de computação.

Limite de comandos para cada motor quando executados em simultaneidade

AMD – 1 comando gráfico + 8 de computação no GCN 1.2, 1 comando gráfico + 8 de computação no GCN 1.1 e 1 comando gráfico + 2 de computação no GCN 1.0
Nvidia – Mais uma vez os resultados parecem mostrar que o motor de 3D e de computação não podem estar ativos ao mesmo tempo uma vez que usam uma mesma unidade de função pelo que não existe simultaneidade.

Execução de shaders de computação em simultaneidade com o motor 3D

AMD – de 64 a 128 no GCN 1.2, de 32 a 64 no GCN 1.1 e 64 no GCN 1.0
Nvidia – 1 pois como já referido, aparentemente o motor de 3D e de computação não podem estar ativos ao mesmo tempo.


Execução de shaders 3D 

AMD – de 64 a 128 no GCN 1.2, de 32 a 64 no GCN 1.1 e 64 no GCN 1.0
Nvidia – 30 (GM2xx), 30 (GK110), 5/10/15 (GK10x)

Execução de shaders de computação 

AMD – de 32 a 64 no GCN 1.2, 32 no GCN 1.1 e 64 no GCN 1.0
Nvidia – 32 (GM2xx), 32 (GK110), 6/11/16 (GK10x)

Intercalação de instruções 3D

AMD – Suportado
Nvidia – Suportado

Intercalação de instruções de computação

AMD – Suportado
Nvidia – Suportado

Intercalação de instruções Mistas computação/3D

AMD – Suportado
Nvidia – Limitado – Pelo visualizado nos testes, as unidades SMX/SMM podem apenas executar um tipo de comandos. Torna-se necessária uma limpeza da cache L1, da memória local e do agendador para se mudar de modo, uma operação com severas penalizações de performance.

Notas finais:

Que fique claro que a Nvidia é capaz de computação assíncrona (pelo menos até certo ponto). Os testes realizados são bastante simplistas, mas relevam essa capacidade, apesar de limitações, pelo menos atuais. Uma conclusão que se tira igualmente do teste é que as placas da Nvidia até se portam relativamente bem com pouca carga no GPGPU, mas é quando se carrega no mesmo que os problemas acontecem.

A situação aplica-se às drivers actuais, não sendo assim factual para o futuro, e convêm esclarecer e frisar de forma clara que os testes são simples e podem mesmo apresentar lacunas na metodologia uma vez que foram criados apenas com a função de teste e simplificado.

No entanto, perante estes resultados e as afirmações da Oxide que iniciaram toda a polémica, parece assim claro que, perante os dados existentes, as placas Nvidia, pelo menos na sua actual situação, não serão a melhor escolha para o DirectX 12. Daí que se pretendes comprar algo nos próximos tempos será melhor pensares bem na escolha que fazes e que te mantenhas o mais informado possível relativamente a atualizações sobre este assunto.

Da nossa parte, limitamos-nos a informar e continuaremos a faze-lo sempre que houver novos dados!

Fonte: Fóruns Beyond3D

Publicidade

Posts Relacionados