DirectX 12 e computação assincrona e como estes alterarão as performances no futuro

O DirectX 12 e computação assincrona estarão na base daquilo que será a maior revolução na optimização dos nossos sistemas informáticos. Vamos falar sobre ambos e perceber o que estes nos podem oferecer.

O DirectX 12

directx-12

O DirectX 12 é o mais recente API criado pela Microsoft para a plataforma Windows. É um API que implementa técnicas inovadoras que não eram suportadas pelo DirectX 11 e que permitirão, pela primeira vez, aproveitar ao máximo os diversos núcleos dos CPUs, bem como permitirá o desenvolvimento e crescimento da computação assincrona pelas placas gráficas mais recentes, extraindo-se assim a sua performance máxima das mesmas.

Mas mais ainda, o DirectX 12 é o primeiro API de baixo nível para PC. Um API que permite passar sobre as camadas de abstração que facilitam a programação de alto nível, permitindo aos programadores descer ao Metal, isto é, comunicar directamente com o Hardware numa linguagem de interpretação directa pelo mesmo, e que como tal não requer conversões de comandos e a existência de várias layers de software interpretadas pelo CPU. O resultado de tal é um aumento de performances do GPU, derivado de uma libertação enorme da ocupação do CPU que anteriormente gastava parte do seu processamento apenas com a interpretação e conversão de comandos da linguagem do utilizador para a linguagem do hardware (o chamado “overhead” ou como nós nos referimos nos nossos artigos, sobrecarga). E é aqui neste ponto que se dá a grande vantagem de um API de baixo nível.

Acima de tudo, como perceberam pelas linhas de cima, os aumentos de performance de um sistema estão na base do DirectX 12. Basicamente o que este API irá permitir é que os sistemas possam extrair a sua capacidade de processamento máxima. Anteriormente ao DX 12 havia um mau uso dos recursos do sistema com processamento adicional e sub aproveitamento das capacidades do hardware. O DirectX 12 manterá a compatibilidade com o DirectX 11 por uma questão de facilitar a programação uma vez que os acessos baixo nível requerem conhecimentos de programação muito mais avançados, mas quando usado permitirá a obtenção de muito mais performance com o mesmo hardware.



Infelizmente as novidades trazidas pelo DirectX 12 requerem programação específica, e isso quer dizer que os jogos atualmente existentes não terão ganhos com a simples presença do novo API. Será necessário que os programadores passem a usar as capacidades que o API aporta para que os ganhos sejam visíveis.

Os ganhos do DirectX 12 nas consolas

Xbox1-m

Xbox One

Ao contrário do que muitos podem pensar, os ganhos da Xbox One com o DirectX 12 serão relativamente pequenos, sendo que onde o API fará verdadeiramente diferença é no mercado PC.

Como já referimos, o DirectX 12 é o primeiro API de baixo nível para PC, mas não é o primeiro API de baixo nível da Xbox One. E de forma simplificada isso quer dizer que face ao que a Xbox One já possui atualmente, o DirectX 12 é apenas uma evolução!

Se re-lerem os dois primeiros parágrafos deste artigo temos ali duas situações distintas. O primeiro parágrafo diz respeito a ganhos aportados pelas técnicas de programação optimizadas no uso do hardware presentes no DirectX 12, ao passo que o segundo refere aquela que é a principal virtude de um API de baixo nível, a eliminação do “Overhead” no CPU e que permite que este possa passar a ser usado para realizar mais chamadas de desenho e melhorar assim as performances gerais do sistema.



A questão é que relativamente a tudo o que o DX 12 pode aportar de novo a única coisa que a Xbox One atualmente não faz é a total optimização dos núcleos do CPU. Pelos resultados que tem sido obtidos com os jogos actuais, acredita-se que o faz melhor que o DirectX 11 standard, mas não ao nível do que será implementado no DirectX 12.

Wolfgang Engel: The Xbox One already has an API which is similar to DirectX 12. So Microsoft implemented a driver that is similar to DirectX 12 already on the Xbox One. That freed up a lot of CPU time.

Já a computação assincrona e a libertação do CPU pela eliminação do “Overhead” são situações que o API da Xbox One já implementa.

E isso mostra que os ganhos directos da Xbox One com o DirectX 12 não se podem minimamente comparar ao que existirá no PC.

Existem no entanto os ganhos indirectos. Aqueles que serão aportados pela criação de uma base de programação baixo nível e pensada de raiz em explorar as novas potencialidades do API. Dado que os jogos são basicamente programados em PC que não usava estas capacidades, consequentemente a consolas, salvo os casos onde o código era depois devidamente optimizado, não tiravam partido daquilo que o seu API já suportava. E vantagens como a computação assincrona só irão arrancar em força agora, o que permitirá à Xbox mostrar muito mais performance do que a atualmente exibida.

PS4



PS4-1-m

Naturalmente a PS4 não usa o DirectX (e não, não usa o OpenGL), usa o GNM, um API do qual se sabe muito pouco mas que já foi muito elogiado por vários programadores que comparativamente ao DirectX 12 até referem que ele vai bastante mais ao metal (mais baixo nível). E este API suporta todas as caracteristicas que o DirectX 12 trará de novo.

Daí que os ganhos para a PS4 serão todos eles indiretos e passam pelo facto de os jogos passarem a ser programados no PC usando essas capacidades,o que permitirá que, com a devida conversão como sempre ocorreu, a PS4 tambem as use.

A realidade é que esta geração permite-nos mais do que qualquer outra ter uma noção das potencialidades das consolas. E com um hardware basicamente idêntico e já usado em PC sabemos que o que uma consola suporta por hardware a outra também suporta (apesar de poderem haver diferenças nas optimizações). Aliás as placas equivalentes às das consolas e usadas no PC estão cobertas pelo suporte do DirectX 12, o que significa que o suportam.

Isso quer dizer que no futuro, quando os programadores começarem a programar usando as novas caracteristicas e capacidades, ambas as consolas tirarão partido dessa situação, a Xbox One de forma direta pois o API será o mesmo, a PS4 após a devida conversão para os seus comandos específicos.



A computação assincrona

DX11

DX12

Antes de falarmos da computação assincrona vamos esclarecer só alguns termos que se podem tornar confusos.

O que é o GPU

O GPU ou Graphics Processing Unit é o nome vulgarmente dado ao processador presente nas placas gráficas. E se quando o termo apareceu as placas gráficas eram apenas responsáveis pelo processamento dos pixels que aparecem no ecrã, tornando o termo GPU associado ao processador gráfico em si, esse conceito alterou-se com as arquitecturas modernas onde as placas gráficas são capazes de muito mais.



Daí que se antes GPU era o nome vulgarmente usado para nos referirmos à totalidade do processador gráfico, actualmente a situação torna-se um pouco confusa pois ele passou ser usado igualmente para nos referirmos apenas à parte do processador responsável pelos cálculos efetuados pela pipeline gráfica tradicional! No entanto nesses casos um outro termo surge em paralelo, o GPGPU, a componente responsável pelo cálculo genérico efetuado no mesmo processador gráfico.

No caso das actuais consolas, a PS4 possui uma placa gráfica que corre a 800 Mhz contando com 1152 pipelines, ou linhas de cálculo de shaders, capazes de debitar um máximo de 1,84 Teraflops (ou 1,84×1012 operações de virgula flutuante por segundo). A Xbox One possui uma arquitectura exatamente idêntica (GCN) a 853 Mhz e com 768 pipelines, capaz de 1,31 Tflops.

Dado que estamos a falar da mesma arquitetura e basicamente o mesmo hardware (algo inédito no que toca a consolas concorrentes), os Flops são totalmente comparáveis, e vemos que a PS4 possui uma capacidade de cálculo gráfico adicional de cerca de 41%. Isto sem contar com algumas unidades de cálculo do pixel final, e responsáveis pelo número de pixels que a placa consegue desenhar no ecrã, como as ROPS que são em dobro das da Xbox One e que garantem que os gargalos gráficos não ocorrem.

Mas e o que é exactamente o GPGPU?

Como referido, desde à algum tempo que as placas gráficas evoluíram ao ponto de serem versáteis o suficiente para poderem fazer qualquer tipo de cálculo, e devido a tal surgiram as Compute Units. Cada conjunto de 64 pipelines gráficos pode ser agrupado para cálculos genéricos, denominando-se esta capacidade de GPGPU – Generic Processing Graphics Processing Unit. Estes cálculos, ao serem genéricos e bastante rápidos, podem ser igualmente gráficos ou outros. Aliás e dada a sua velocidade de cálculo este processamento pode mesmo substituir o pipeline gráfico tradicional na sua totalidade com vantagens a nível do uso de largura de banda, performance, e memória requerida para o processamento.



No entanto é no processamento genérico de situações como raycasting de audio (para alteração de som mediante os materiais e geometrias presentes em cena), física, efeitos, pós processamento, IA de detecção de caminhos para centenas ou mesmo milhares de personagens NPCs, e muito mais, que está a vantagem deste tipo de cálculo que auxilia e liberta de tarefas o CPU.

A computação assincrona nunca foi usada antes?

Foi! O uso do GPGPU não vai nascer agora. No universo das consolas, alguns jogos atuais, quer da Sony, quer da Microsoft,  já o usaram, e alguns até exploraram um bocadinho a computação assincrona para a obtenção de mais performances. No entanto nunca até hoje a computação assincrona foi um standard, e mais ainda, não desenvolveu técnicas universais maturas. Daí que esta seja uma tecnologia muito discutida atualmente em todas as conferências de programadores e de trocas de metodologias. É basicamente algo que está a dar os primeiros passos e que só agora mostra tendências a tornar-se algo de uso universal em todos os jogos.
Basicamente, dado que os jogos que usaram o GPGPU se contam pelos dedos, o que podemos dizer é que o uso do GPGPU é basicamente nulo no panorama atual. E o pouco que há… foi só um cheirinho!

Mas porque falamos aqui novamente da diferença de performances das consolas?

A realidade atual é que, quando é mais notória (e umas vezes é mais, outras é menos), a diferenças de performances de 41% entre os jogos mais atuais das consolas resume-se a uma diferença de resolução que muitos não consideram ser verdadeiramente relevante. E efetivamente a resolução é um mal menor dado que ambas as consolas tem apresentado sempre os mesmos jogos com idêntica qualidade.



O GPGPU pode modificar isso, criando uma disparidade maior entre as consolas. E já vão perceber porque!

Antes disso convêm perceber que, tal como no pipeline gráfico, a PS4 está mais optimizada do que a Xbox One para este tipo de cálculo. As suas 8 unidades ACE (contra 2 na Xbox One) permitem que a placa gráfica possa lidar sem saturação com milhares de pequenos processos independente, algo que muito mais facilmente pode acontecer com menos unidades. Mas perceba-se também que as unidades ACE em si não acrescentam performance, apenas optimizam a existente.

No entanto os 41% de performance adicional da gráfica voltam de novo à baila. É que aqui, com o GPGPU,  eles podem ser bem diferentes dos 41% ganhos no pipeline gráfico (GPU)! Se no caso atualmente existente e proporcionado pelo pipeline gráfico, nos limitamos a ter diferenças no débito de pixels para o ecrã, algo que é imediatamente gasto com o aumento de resolução em igual proporção ao ganho, nos 41% de diferença no GPGPU a situação pode ser bem diferente!

Aqui estamos perante um caso onde mais potência pode significar capacidade de processamento livre e a possibilidade de se poder acrescentar coisas novas de forma independente da resolução.

Fisica, IA, raycasting de audio, e tudo o mais que possamos fazer que não seja processamento gráfico e como tal não dependente do número de pixels debitado, usa o mesmo processamento de forma independente da resolução. O que quer dizer que ao termos 41% mais GPGPU temos efetivamente 41% de performance extra livre que podemos usar para acrescentar situações novas. Seria basicamente o mesmo no pipeline gráfico se não houvesse aumento de resolução e que poderia ser usado para debitar mais fotogramas por segundo (desde que não limitado pelo CPU, claro).



PS4_Async

Ora as situações que podem ser processadas pelo GPGPU são tipos de cálculos que por norma são apenas efetuadas pelo CPU. E o seu uso pode permitir libertar o mesmo ao ponto de este deixar de ser o fator limitativo nos fotogramas mínimos de uma consola, deixando esta ficar apenas limitada pelo GPU. É por isso uma tecnologia que, devidamente usada, permite ganhos de performance no CPU e mesmo no GPU.

No entanto o GPGPU é versátil e rápido o suficiente para interferir com o processamento gráfico. Um exemplo é o seu uso em uma outra tecnologia AMD denominada de Shaders Assincronos e que oferece ganhos de 46% na performance graças ao uso do GPGPU.

Assincrona3AMD

Mais ainda, a computação assincrona no uso destes compute shaders, como em tempos a Avalanche demonstrou, permite às consolas superarem os limites daquilo que era possível fazerem com as suas ROPS e as suas larguras de banda, podendo assim trabalhar com shaders mais complexos e perfeitos (maior realismo gráfico).



Mas a Xbox fica a perder com isto?

A resposta é simultaneamente um sim… e um não!

Vamos ver algumas considerações para percebermos como a Xbox One não tem como igualar esta performance da PS4, mas vamos ver de seguida o que a Microsoft tem previsto para contrariar e equilibrar a situação.

A vantagem hardware da PS4

Havendo mais de 40% de performance de diferença entre as consolas, o que acontece é que, tal como com o uso do GPU o GPGPU, ao correr exactamente no mesmo hardware que a componente gráfica, terá igualmente uma diferença de performances de 40% que no entanto poderá aumentar devido às optimizações específicas ao GPGPU que são conhecidas na PS4.



Isto é pura matemática! 1,4*100=140

30+70=100 => 30*1,4+70*1,4=100*1,4 => 42+98=140!

A computação assincrona funciona preenchendo os espaços entre o usado pelo processamento gráfico e a capacidade total da placa gráfica (para um bom exemplo que todos percebem, leiam este artigo). E isso quer dizer que se a capacidade total é 40% superior e se o processamento gráfico também está a ser 40% superior, então a parte disponível para o GPGPU é igualmente 40% superior! (aqui usamos 40% e não 41% por uma questão de simplicidade)

A arma não tão secreta da Xbox One



Estes 41% de performance adicional do GPU da PS4 podem atingir os 530 Gflops de performance que a Xbox One não tem como combater por hardware ou mesmo por qualquer optimização de software.

Mas como a Microsoft já demonstrou, nem só do que está em nossa casa vive a Xbox One. E a Cloud poderá ser preponderante no equilíbrio desta situação.

Apesar de a tecnologia poder ter desvantagens (sempre online, apenas aplicável ao online e multi-jogador, etc e quase impossibilidade de se melhorar a componente gráfica), é inegável que possui igualmente vantagens de performance (cálculos de física de objectos, animações de cenários, etc). E a Microsoft conta com ela para quando for necessário, poder criar o equilíbrio desejado para com a PS4, ou pelo menos criar jogos igualmente tão interessantes que a sua consola se mantenha desejável.

xbox-one-cloud-powered

O Futuro

Sinceramente é dificil adivinhar o que o futuro nos trara. Mas as expectativas estão altas para os dois lados. Daí que a conclusão que se pode tirar é que o futuro promete, independentemente das escolhas de cada um. E há bons argumentos dos dois lados.



error: Conteúdo protegido