Hardware das consolas. Fraco? Potente? Ou o ideal? – A apresentação da Naughty Dog!

A naughty Dog fez uma apresentação muito interessante sobre as suas técnicas de programação na PS4. Eis alguns dos pontos mais relevantes que nos fazem perceber melhor as escolhas do hardware das consolas.

Nota: Este artigo é baseado na apresentação da Naughty Dog sobre a tecnologia e optimização da PS4. Apesar de a maior parte dos princípios básicos aqui referidos se poderem aplicar igualmente à Xbox One, tal não se aplica na totalidade dos casos devido às diferentes optimizações. Naturalmente a Xbox One terá igualmente optimizações que a PS4 não possui, mas dada a ausência de apresentações semelhantes por parte da Microsoft não se pretende com este artigo fazer qualquer tipo de comparativo entre consolas.

ps4

Ao longo do tempo muitos tem vindo a criticar as escolhas do hardware das consolas, alegando que, comparativamente ao que vemos nos PCs, as placas gráficas são fracas, que os CPUs são ainda piores, etc.



Mas será que há efectivamente razões para isso? Talvez a apresentação realizada pela Naughty Dog e que fala sobre como optimizar o hardware da consola deixe perceber que tal escolha não foi ao acaso e que, pelo menos no que toca à PS4, a consola abordada na apresentação, o hardware possui potência para vários anos de performance de topo.

Comecemos pelo CPU. Há quem se queixe que os CPUs das consolas são fracos. Que não são mais do que processadores utilizados em Tablets (e o Surface Pro da Microsoft possui efectivamente um destes processadores, se bem que uma versão mais antiga, mais lenta, e com apenas 4 núcleos). Mas será que há razões para queixas?

Naturalmente que na concepção das consolas foi definido um objectivo e para se atingir o mesmo haveria que se responder a uma questão: O que se pretende, e para esse objectivo o que é necessário?

As respostas a essa questão é necessária para se conseguir criar um produto que seja atractivo na relação performance/preço. Claro que se podia construir melhor e mais potente, mas tal teria um custo, e esse custo implicaria menos vendas e uma menor implementação da marca e menores vendas de software. Numa altura onde as empresas se queixam que produzir software para as consolas é caro e que se torna difícil ter lucros, uma base de utilizadores grande é mais do que uma vantagem, é uma necessidade. Dessa forma as consolas foram pensadas com tudo isso em mente. Há que oferecer a melhor performance possível, mas igualmente a preços acessíveis, com uma base de utilizadores grande o suficiente que garanta o total suporte e empenho dos criadores de software.

Mas voltando à questão da potência, o que pudemos ver é que até Novembro passado, PS3 e Xbox 360 conseguiam correr os mesmos jogos que os PCs topo de gama. Não eram exactamente iguais, isso é certo, apresentado cortes, particularmente gráficos, mas mesmo assim eram os mesmos jogos.

Isso levou a perceber que as consolas, mesmo possuindo hardware agora com mais de 8 anos, apesar de limitadas em todos os aspectos, ainda permitiam que se extraísse das mesmas o poder necessário para versões dos jogos adequadas às suas realidades. E mais do que limitadas a nível de CPU, os grandes cortes eram nas componentes gráficas.

Isso permite claramente ver que as actuais escolhas para o CPU são adequadas. Não é necessário um processador de topo quando podemos constatar que mesmo uma Xbox 360 ainda acompanha um PC a nível das necessidades computacionais genéricas. Daí que colocar processadores mais potentes era uma necessidade, mas colocar processadores topo de gama era… uma utopia.

Vejam por exemplo Metal Gear Solid V: Ground Zeroes. Trata-se de um jogo com um motor completamente novo e que no tocante às versões de nova geração e geração anterior basicamente se distingue por melhor resolução (ok, isso não é uma realidade tão clara na Xbox One, mas por outros motivos que não a performance), melhores efeitos de luz, texturas, velocidade e fluidez. Mas com as limitações inerentes à versão antiga, se retirarmos as diferenças gráficas, o jogo é o mesmo.

Battlefield 4 é um outro exemplo. Extremamente cortado a nível gráfico (limite GPU) e no número de jogadores suportado (limite do CPU), o jogo é igualmente impressionante visualmente na PS3 e Xbox 360. E trata-se de tecnologia com 8 anos, ou seja hardware basicamente obsoleto.

Ou seja, para uma nova geração interessava ter processadores mais potentes. Mas não topos de gama e sim processadores que se adequassem à realidade do que são jogos, que fornecessem o poder computacional extra necessário, mas mantivessem o produto acessível. E os Jaguar são uma boa escolha ao apresentarem só no CPU uma potência de cálculo superior a metade da potência global das consolas de anterior geração, e oferecendo um preço competitivo e uma capacidade de computação paralela bastante elevada pelo número de núcleos disponibilizado.

São comparativamente ao que existe no mercado processadores fracos? São! Mas para o que a realidade dos jogos de consola mostrou precisar, são mais do que suficientes para garantir esta nova geração por vários anos.

Mas o grande problema é que infelizmente o DirectX actual é um API de alto nível e que penaliza bastante o CPU ao não permitir o acesso directo ao hardware e obrigando a comunicações entre diversas layers de software que penalizam o processamento sobrecarregando o núcleo responsável pelas tarefas gráficas mutuas entre CPU e GPU. Essa é uma situação que facilmente se comprova usando um API de baixo nível como o Mantle que faz a libertação do CPU ao permitir acessos directos ao hardware da placa gráfica sem passar pelas diversas layers de software e espalhando pelos vários núcleos o trabalho que reste, uma situação que igualmente poderemos ver a ser superada no PC com o recém apresentado DirectX 12.

PS4 e Xbox 360 já possuem APIs de baixo nível desde o seu lançamento!

Infelizmente os programadores PC, devido ao grande poder disponível nos processadores de topo, habituaram-se a sobrecarregar o núcleo principal (e não só com as tarefas gráficas), não aproveitando os núcleos secundários. A imagem de baixo é um bom exemplo de tal.

CPUUsage

O que se pode ver é que o primeiro núcleo já andou perto do limite, quando os seguintes mal estão a ser utilizados. Isto quer dizer que com um processador mais fraco este jogo estaria já a sofrer de problemas de performance por o primeiro núcleo ter atingido a saturação, e isto tendo os outros basicamente sem fazer nada. Trata-se de um claro problema de má distribuição de tarefas pelos núcleos disponíveis e que é agravado com o uso de APIs de alto nível que como explicado em cima sobrecarregam ainda mais o CPU, particularmente o primeiro dos núcleos.

Infelizmente esta é a realidade da qualidade do software PC, causada pela grande diversidade de hardware, e um dos motivos pelo qual os processadores AMD sofrem face aos Intel. Nos processadores AMD cada núcleo não possui a potência de cálculo dos Intel, mas em compensação há mais núcleos pelos quais distribuir tarefas. Caso essa situação aconteça devidamente feita, os processadores AMD atingem performances ao nível dos Intel, mas caso haja sobrecarga de núcleos específicos os CPUs AMD ficam bastante longe dos Intel. E infelizmente, com o hábito de upgrades e novos processadores sempre a sair as empresas que criam o software não pretendem despender tempo e dinheiro a optimizar o seu código. Afinal se não corre no processador A, corre no B e no PC há um mercado diversificado o suficiente para que o excluir mais um ou dois processadores não tenha verdadeiro impacto no volume de vendas!

Isso quer dizer que com os processadores Jaguar da AMD, acima de tudo há que se saber tirar partido da sua capacidade de processamento paralelo. Estes processadores não são os mais rápidos do mundo, mas possuem vários núcleos pelos quais se pode distribuir o trabalho, e se isso for bem feito, a capacidade de processamento global do CPU acaba por ser enorme, e mais do que o necessário para que o CPU não seja um Bottleneck à performance.

É aqui que entra a apresentação da Naughty Dog. E é extremamente importante perceber que a empresa está a programar para a PS4 usando todo o conhecimento de divisão de trabalho por núcleos que já deriva da PS3, de forma a tirar o máximo rendimento do CPU.



E esquecendo a realidade das arquitecturas, o resultado prático nas técnicas usadas entre a PS3 e a PS4 acaba por ser muito semelhante.

Basicamente a Naughty Dog programa o CPU da PS4 para tirar o melhor e máximo partido de todos os seus núcleos, trabalhando-os como se estes fossem os SPUs da PS3.

No entanto, apesar de serem tratados como SPUs, cada um destes núcleos é capaz de lidar com mais processamento do que o PPU da PS3 pela forma como lidam de forma mais genérica com código e pela sua capacidade de previsão de ramificação de cálculo (branch prediction) bastante avançada, o resultado é bastante mais optimizado. E dado que os vários CPUs podem comunicar entre si, algo que não acontecia com os SPUs da PS3, a complexidade da integração é notóriamente superior.

Mas há mais. Na computação a capacidade do processador prever o que vai calcular a seguir e começar esse processamento mesmo sem ter tido ainda a ordem para tal, é algo essencial nos dias que correm. O PPU da PS3 que era o coração de todo o sistema de processamento, valia basicamente zero nesse sentido, mas os núcleos do Jaguar são de “Out-of-Order execution CPU’s” e possuem uma capacidade de previsão de cálculo avançada (advanced branch prediction). Isto quer dizer que o CPU é bastante bom a adivinhar os pedaços de código que vai receber de seguida podendo iniciar o seu processamento. Caso o que recebe seja diferente do esperado o calculo é parado e um novo é começado sem qualquer prejuízo, mas no caso contrário já se poupou tempo de cálculo.

mispredicted-branch-prediction

Mas reparem nas semelhanças entre o uso que a Naughty Dog dava aos SPUs e o que dá aos 6 nucleos da PS4 que estão disponíveis para jogos:

ps3-job-system-naughty-dog

playstation-4-job-system-analysis

Para conseguir isto a Naughty Dog corre uma pequenissima tarefa em cada um dos núcleos existentes e que controla e analisa as suas performances. Desta forma é sempre possível ter uma noção da sua ocupação e saber em tempo real qual o núcleo que pode receber trabalho sem sobrecarregar o sistema.

Isto pode parecer básico, mas curiosamente não é! Infelizmente esta não é a realidade da qualidade de programação actual, e por vezes vemos jogos a requererem processadores extremamente potentes, não porque precisem deles, mas porque as tarefas estão concentradas em um único núcleo que precisa de ser potente o suficiente para tal. E isto mesmo tendo os outros mal usados.

A Naughty Dog refere ainda uma situação engraçada, a regra dos 80/20, e que considera essencial. Segundo esta regra, em 80% do tempo de processamento o código que está a correr é apenas 20% do código total. Assim a naughty Dog considera que face a essa realidade é preferível optimizar ao máximo esses 20% do que o resto do código uma vez que será aí que estarão os maiores ganhos.



Igualmente curioso constatar na comparação destes dois esquemas é a colocação do GPU da PS4 na posição do processador principal da PS3 (o PPU), e incluído no sistema de trabalhos, não esquecendo assim que o seu GPGPU é o componente mais potente da consola e que deverá ser explorado sempre que necessário auxiliar o CPU.

Basicamente o GPGPU é usado para os modelos das personagens, luz, texturas, poligonal, etc (O Rendering). Já o Wavefront é um pouco mais complexo e lida com a parte de simulação de tecidos, física e até a Inteligência Artificial, e é um dos pontos fortes da PS4 graças aos seus 8 ACEs.

Naturalmente, e comparado a um CPU, um GPU possui um processamento paralelo gigantesco e incomparavelmente superior e cada uma das Wavefronts possui até 64 threads que correm nos 1152 Stream Processors do GPU da PS4.

Mas apesar desta potência bruta o CPU continua a ser mais “esperto” que o GPU, mas dada potência do GPU se revelar tão importante a Sony viu nele uma necessidade obrigatória e para tal optimizou este processador gráfico com parte da tecnologia das novas placas gráficas da AMD, as Vulcanic Islands.

r9 290 arquitectura

Como se sabe o GPU da PS4 é baseado na arquitectura Graphic Core Next (GNC) da AMD, mas no entanto a sua estrutura de computação é em tudo semelhante às novas placas Vulcanic Islands. O GPU corre a 800 Mhz com 1152 Stream Processors (que constituem os seus 18 CPUs ao dividirmos este número pelo número 64 das Wavefronts)

Se até aqui isto é algo comum à arquitectura GNC é no facto de a placa suportar 8 comandos em fila para cada um dos seus ACEs (Asynchronous Compute Engines), e possuir 8 dessas unidades, que a PS4 se distingue ao poder receber até 64 comandos de computação que gere de forma a optimizar a ordem de processamento. Isto é uma característica única das Vulcanic Islands e que a PS4 herdou que optimiza ao máximo a sua capacidade de computação.

E esta é uma característica única da PS4 uma vez que todas as placas GNC da série em que o GPU das novas consolas se baseiam, possuem apenas 2 Aces e duas filas de espera por Ace (2*2=4). Segundo se sabe a Xbox One melhorou igualmente esta situação ao aumentar, tal como a PS4 o número de comando em fila para 8, mas mantendo o número de ACEs em apenas 2, o que lhe permite receber 16 comandos de computação no global). Estes são dados confirmados oficialmente pela Microsoft em entrevista à Digital Foundry!

Por aqui se vê que falar na potência do CPU, esquecendo a potência de GPGPU da consola é, no mínimo, descontextualizar a realidade. A PS4 não só possui GPGPU, mas inclusive possui grandes optimizações para o mesmo, possuindo mesmo 4 CUs que são optimizados para este tipo de processamento, possuindo duas unidades de lógica aritmética (ALUs) em cada uma dessas Compute Units, em vez da tradicional unidade única. E se nos PCs poderemos continuar a ver processadores muito potentes mal programados e GPUS com GPGPU não utilizado, nas consolas essa realidade terá de ser diferente, e no futuro essas optimizações serão uma realidade.

A conclusão a que se pode chegar é que pesando todos os factores, o hardware das consolas é o ideal. A sua relação potência preço permite o melhor de todos os mundos, e garantidamente há nas consolas poder suficiente para garantir o seu futuro. Há porém é que optimizar a programação para elas, e na apresentação da Naughy Dog há várias dicas de todos os tipos sobre como o fazer. Mas dado que são algo técnicas fiquemos-nos por estas situações de cima que são as mais relevantes aqui. Quem quiser ver o PDF todo, pode consulta-lo aqui.



Posts Relacionados