As alteração ao processador de comandos da Xbox One

xboxone-kinectic

Já havíamos referido que as alterações ao processador de comandos realizado pela Microsoft na Xbox One se destinavam a poupar CPU. Agora sabemos exactamente como!

Os APIs de baixo nível, e o DirectX 12

No nosso artigo recente e em que comparávamos as consolas de nova geração face ao que actualmente era conhecido, referimos que a novidade hardware DX 12 já conhecida e actualmente exclusiva da Xbox One é a sua alteração ao processador de comandos gráficos.

O DirectX 12 é um API de baixo nível concentrado no CPU. O seu objectivo é libertar o máximo de CPU possível de forma a que este não seja um gargalo no desempenho do GPU. Basicamente, apesar de alguns outros APIs específicos e igualmente de baixo nível irem um pouco mais longe, este é o grande objectivo do novo DirectX. Actualmente a XBox One não usa o DirectX 12 mas sim um DirectX 11 com extensões. No entanto as funções principais e nucleares do DX 12 estão já em vigor na consola. O que não quer dizer que o novo API não lhe vá trazer ganhos, mas nunca ao nível do que veremos nos PCs.

Apesar de os ganhos do DirectX 12 serem no CPU, seguindo a premissa que um CPU não limitador não coloca entraves aos GPU,  permitindo um muito maior número de chamadas de desenho, as performances com estes APIs sobem no seu geral permitindo ao GPU libertar melhor a sua capacidade. O API não garante melhores performances ao GPU e não o liberta de gargalos nos seus componentes, mas apenas ajuda a que o CPU seja menos limitador na equação.

E apesar de os ganhos só serem reais nas situações onde o CPU era o gargalo, e em valores médios entre os 16 e os 50%, a realidade é que em jogos pensados e concebidos de raiz para estes APIs os ganhos podem chegar bastante mais longe! Pontualmente em situação muito específicas, estes APIs podem mostrar ganhos face a um API de alto nível que podem chegar aos 300% ou mais, mas tal aplica-se a situações muito particulares e não de forma genérica, pelo que somente jogos muito específicos e pensados de raiz para tirar partido do mesmo, poderão ver ganhos dessa magnitude.

No entanto, com um jogo devidamente pensado para estes APIs, e mais realisticamente, ver o hardware a debitar em média capacidades quase em dobro face ao que seria possível sem ele é uma realidade mais comum e que já assistimos na geração passada, onde jogos como The Last of Us nunca se pensaram ser sequer possíveis de serem realizados numa consola como a Playstation 3.

A XBox One

Apesar de a Xbox não ir ganhar desta forma com o novo API pois já implementa os acessos baixo nível, ela beneficiará um pouco mais com o mesmo graças a novas rotinas, novos suportes e optimizações acrescidas.

Mas o ganho principal poderá vir de um suporte hardware ainda por utilizar.

A Microsoft quando concebeu a Xbox One já tinha em mente o DirectX 12, daí que realizou-lhe alterações no sentido de permitir que o próprio hardware optimizasse ainda mais o uso do CPU. E essa alteração passou pelo processador de comandos gráfico (o GCP) que a Microsoft deu a conhecer ter sido alterado para descer ainda mais a sobrecarga no CPU.

Esta situação já tinha sido referida aqui, mas sem se saber em que consistia exactamente a mesma.

Após alguma pesquisa, eis o que se conseguiu apurar sobre o funcionamento dessas alterações e para as explicar vamos-nos socorrer de alguns gráficos comparativos do Anandtech no PC.

O funcionamento de um API baixo nível – Mantle vs DirectX 12

O CPU normalmente é penalizado quando necessita de lidar com grandes quantidades de objectos para os quais tem de gerir trajectórias, físicas, etc.

Os APIs de baixo nível, resolvem essa situação criando aquilo que se chama de Batch jobs. Basicamente o API prepara os objectos para serem processados em grupos ou lotes, por meio de uma rotina agendada. Há então um conjunto de comandos que é processado sequencialmente de uma forma optimizada, e com pequena penalização no CPU.

Vamos ver uns gráficos de comparação entre o futuro DirectX 12 e o Mantle para podermos desenvolver este assunto:

Dx12vsMantle1

O gráfico de cima mostra a optimização de ambos os APIs para um sistema com um processador de 4 núcleos. Apesar de não termos os valores com o DirectX 11, os valores de cima são ganhos significativos sobre o mesmo! Naturalmente, sendo o Mantle um API exclusivo AMD, ele pode recorrer a pequenos “truques” de optimização do hardware que o DirectX 12, ao ser mais genérico não pode. E esses truques traduzem-se nos ganhos adicionais que vemos em cima!

E em que consistem essas optimizações? Para percebermos isso vamos analisar as performances dos dois APIs, mas para um sistema com um processador mais fraco e com apenas  2 núcleos:

Dx12vsMantle2

O que vemos? O DirectX 12 recupera a diferença e até ultrapassa o Mantle! Porque motivo?

A resposta está no gráfico que se segue e que mostra o tempo usado pelo sistema para submeter os seus Batchs em milisegundos:

Dx12vsMantle3

Como vemos, o DirectX 12, ao ser um API genérico, foi pensado em gastar menos tempo a submeter os referidos trabalhos Batch. A AMD optou por não fazer isso, e já vamos perceber o porque!

Na realidade o maior tempo na submissão é propositado. É que o Mantle possui uma pequena rotina adicional de optimização pensada para o hardware AMD (OptimizeSmallBatch=1). Esta rotina quando activada o CPU faz uma passagem adicional ao ordenamento já feito pelo processador de comandos gráficos do GPU, obtendo uma ordenação adicional. A vantagem é que tal permite-lhe passar sobre o limite atingido pelo processador de comandos gráfico, ao passar parte do seu trabalho de Batch para o CPU.


Ou seja, com o Mantle, para optimizarmos estes trabalhos Batch e ganhar a performance extra vamos precisar de um pouco de processamento do CPU para os organizar. O Mantle vai requerer que o CPU crie estes lotes para que este se possa posteriormente libertar do processamento pesado que seria necessário sem eles, ao mesmo tempo que supera os limites impostos pelo processador de comandos gráfico à performance do API. Isto é algo que se consegue fazer com o Hardware AMD, mas não necessariamente com outros, motivo pelo qual não pode ser implementado de forma genérica.

É um caso onde o CPU é usado para se libertar a si mesmo de um trabalho mais pesado, ao mesmo tempo que liberta igualmente o GPU do seu gargalo no processador de comandos gráfico!


Podemos desactivar a rotina optimizadora do Mantle para vermos então quais seriam os seus tempos de submissão face ao DirectX 12.

Dx12vsMantle4

Neste gráfico temos repetidos os valores de cima para a R9-290X, mas temos agora uma nova linha com a optimização desligada. E como vemos os valores do Mantle são inferiores aos do DirectX 12. Isto prova que a optimização e perda de tempos na entrega dos trabalhos é propositada e causada pelo trabalho adicional do CPU!

No entanto é esta optimização adicional que é a responsável pelas performances nos sistemas com mais núcleos. Com ela desligada, o Mantle perde não só performance, como até satura o processador de comandos gráfico mais cedo!.

Dx12vsMantle5

Ou seja, o Mantle acaba por ter um dilema propositado. Para uma melhor optimização sacrifica-se um pouco a performance dos processadores, o que prejudica os sistemas mais fracos (que no caso dos CPUs AMD abrange apenas gamas claramente não dedicadas ao Gaming). E automatizar a situação para se ajustar ao número de núcleos poderia igualmente ser um problema com a saturação do GCP.

NOTA: O DirectX 12 ainda não é um API acabado. Apesar de ser mais genérico, a versão final poderá revelar-se mais optimizada que a actual, e consecutivamente que o Mantle!

A optimização Xbox One

Ora as alterações no processador de comandos da Xbox One foram criadas para evitar essa situação, e este dilema, permitindo fazer o mesmo que o Mantle faz. Os lotes passam a ser dispensados no CPU pelo ordenamento que passa a ser integralmente feito no processador de comandos. Ou seja, a Xbox One, usando o DX12 ao fazer a optimização na sequência de processamento consegue obter este ganho adicional, mas no entanto não precisa de usar o CPU para libertar o próprio CPU, criando uma situação onde o seu uso fica assim optimizado.

Resumidamente as alterações feitas ao processador de comandos da Xbox One destinam-se a permitir fazer por hardware aquilo que o Mantle faz usando o CPU. A Xbox One terá o ganho de performance adicional que o Mantle oferece, mas que actualmente não está disponível em mais nenhum hardware DX 12. Tudo isso sem o seu CPU, ser penalizado!

Note-se que se nos exemplos de cima falamos em núcleos, mas no entanto na Xbox One não são os núcleos que estão em questão, mas sim a potência disponível. Os processadores Jaguar não são um modelo de potência e são considerados como relativamente fracos face aos processadores de topo actuais. Ora com a alteração no GCP da X1 a Microsoft resolveu esse problema, e todo esse peso é retirado totalmente do CPU de forma a o optimizar ao máximo.

Esta situação é relevante no sentido que no artigo anterior referimos a existência de ganhos, mas sem os sabermos justificar ou quantificar. E esta explicação vem mostrar agora como eles acontecerão. Com jogos pensados de raiz para o um API de baixo nível, e onde este tipo de optimização na ordem e agrupamento do processamento é uma constante, os ganhos de CPU da XBox existirão. Estimam-se que, dependendo do caso, possam atingir os 10% (20% em alguns casos) face ao que a Xbox One já consegue actualmente! (os valores que vimos no comparatativo dá até 16% de vantagem ao Mantle)

Outra questão que poderá justificar o facto de tanto Xbox One como PS4 possuírem dois GCPs é que aparentemente, pelos gráficos do Anandtech, um sistema com 4 núcleos parece suficiente para saturar o processador de comandos de uma gráfica GCN. Daí que o segundo processador terá o seu interesse adicional para permitir performances extras.

Falta agora saber se o limite de dimensão na ESRAM face a tantos draw calls não obrigará ao uso da DDR3 e como tal a baixa largura de banda desta memória poderá arruinar os ganhos.

Seja como for, confirma-se aquilo que referíamos antes. Desconhecendo-se uma optimização do género aos processadores de comandos do lado da PS4 (o que não quer dizer que não existam), até um uso em maior escala do GPGPU, os jogos da actual geração lançados futuramente poderão pender ora para um lado, ora para o outro, dependendo se o factor limitador é o CPU (lado da Xbox One) ou o GPU (lado da PS4).

O Futuro

Curiosamente, quando a programação de baixo nível entrar em força, os ganhos obtidos nas consolas nunca serão totalmente claros. Dado que o PC passará no futuro a fazer exactamente o mesmo, na perspectiva da comparação a situação até deverá piorar e não melhorar pois os sistemas de topo que já batem as consolas, nessa altura esmagarão as mesmas. E se agora vemos as consolas a obter performances comparáveis às obtidas com CPUs e GPUs bem mais potentes, no futuro, com o DirectX 12, qualquer PC com um hardware de 400 euros bater-se-à lado a lado com as novas consolas.

E esta situação altera muita coisa! Se aqui na PCManias sempre separamos as consolas dos PCs pelas diferenças de custo, no futuro essa situação poderá e deverá alterar-se! O futuro poderá vir a ser muito diferente do presente, com as consolas a deixarem de ser tão atractivas como são agora! Até porque os jogos PC são em média 10 euros mais baratos!

NOTA: Dada a relevância do artigo resolvi publica-lo mesmo sem ter grande tempo para o rever. Infelizmente questões de saúde com familiares obrigaram a que não tivesse grande tempo para ele, pelo que algumas situações poderão não estar totalmente claras. Entendam assim o artigo apenas como uma explicação simplificada das coisas.

Publicidade

Posts Relacionados