
Playstation 4 e Xbox One, os novos consoles que vão invadir o mercado a partir dos dias 15 e 22 de novembro, são maravilhas técnicas ainda pouco conhecidas. Algumas informações já foram difundidas, mas o mercado ainda está carente de uma noção do potencial de ambos e o quanto teremos em benefícios em relação aos consoles atuais e até mesmo aos PCs.
O interesse em produzir uma análise tão logo saísse informações mais técnicas sobre o PS4 não me deixava sossegado. Afinal, qual seria a melhor opção nessa nova geração? Enfim, agora é possível ter uma boa ideia sobre isso.
Recentemente foi divulgado como funciona a implementação de hUMA no PS4, então ficou possível comparar e analisar de forma mais completa ambos os consoles. Acrescentei as fontes principais utilizadas no fim do texto. Considerem que as fontes usadas sobre o PS4 não são oficiais, mas de um site que já acertou várias vezes. As informações sobre o Xbox One são oficiais, disponibilizadas num simpósio sobre hardware de alto desempenho, o Hot Chips.
Para ficar mais claro o que vou falar para quem não estiver muito a par, vou deixar uns conceitos de antemão de forma bem simplificada, mas voltada ao uso em consoles. É necessário ter alguma noção prévia de como funciona um computador com placa de vídeo gráfica e 3D. Caso tenha interesse em debater o tema, não deixe de publicar sua opinião na lista de comentários!
Conceitos
Diferenças entre CPU e GPU: CPUs são melhores em processamento que contenha muita tomada de decisão (if-then-else ou se-então-senão), ainda mais se aninhadas (uma dentro da outra), que dependam de mais níveis de cache, que sejam pouco paralelizáveis. GPUs praticamente são boas no inverso disso. Um exemplo seria decidir quais impostos brasileiros e quais alíquotas aplicar dependendo do tipo de produto e empresa, cidade, estado. Essa decisão é boa de ser feita na CPU. Depois que se sabe quais são os impostos, poderíamos usar GPU para calculá-los sobre uma lista com valores de produtos e serviços, em paralelo, na própria GPU. Nos videogames podemos considerar que o código que lê os controles e define o que será executado se aproveitaria mais dos recursos da CPU. Já a análise das colisões entre objetos se beneficia mais da GPU.
GPGPU: Usar o poder computacional das GPUs para processamento não gráfico. Inteligência artificial, física, processamento de áudio estão entre os típicos usos de GPGPU nos videogames. No PS3 foi usado para calcular o dobramento e desdobramento de proteínas no programa Folding@home, um projeto que com essa informação pretende prevenir e tratar doenças. No Xbox 360 é usado para processamento de alguns sinais enviados pelo Kinect.
Coerência de cache e memória: Garante que toda informação necessária para a CPU ou GPU seja a mais recente, mesmo que ainda esteja numa cache L1 de um dos núcleos da CPU. É bem importante essa garantia para que a GPU não processe nada baseada em dados inválidos na RAM, sendo que na cache da CPU há informações mais recentes. Imagine a possibilidade de trabalho perdido e em alguns casos até falhas de processamento e bugs difíceis de serem detectados. A AMD desenvolveu o melhor sistema de coerência entre caches de CPUs em sistemas multiprocessados já com o Athlon MP. Tem experiência boa nisso e acredito que será bem útil nos consoles.
hUMA: Acesso da CPU e GPU a mesma área de memória. No PC, quando se quer processar algo na GPU que não é gráfico, é necessário copiar da RAM da CPU para a da GPU, processar, e depois fazer a cópia de retorno. Em alguns casos, para aproveitar bem em fases distintas do processamento os recursos das CPUs e GPUs, essa sequência de cópias ocorre várias vezes para um único resultado final.
Esse é o tipo de coisa que poderá deixar os consoles superiores para algumas tarefas em relação aos PCs. A AMD ainda lançará esse recurso oficialmente de forma mais ampla e completa para os PCs no final desse ano, mas por um tempo só estará disponível em alguns computadores. Processadores de propósito especiais estão sendo desenvolvidos para transportar os dados e fazer a coerência mais transparente, sem interferência do desenvolvedor.
MMU/Move Engines/DRAM processors: São os processadores de propósito especial citados acima, desenvolvidos para cuidar de transferências de memória, fazendo operações específicas e adiantando o que será necessário de dados para cada componente capaz de processá-los, sem usar ciclos de processamento da CPU e GPU.
Latência de memória: Tempo para uma transferência começar a ocorrer, normalmente medida em ciclos do solicitante, da própria memória ou em unidade de tempo.
Banda de memória: Capacidade de transferência de um barramento de memória, normalmente medida em bytes por segundo.
Partially Resident Textures/PRT: São texturas ou outros assets parcialmente resididos na memória. Em vez de carregar todas as texturas necessárias para a cena, com o DirectX 11.2 e OpenGL mais recente será possível carregar apenas os blocos necessários. Esse recurso possibilita economizar muita memória RAM, banda de comunicação e tempo de carga do HD ou Blu-ray.
Análise
Comparações entre as arquiteturas anteriores
O trecho a seguir contem mais informações úteis para se entender os benefícios das novas arquiteturas, baseando-se nas vantagens e desvantagens das arquiteturas anteriores.
O Xbox 360 foi projetando desde o início para ter uma CPU voltada para o processamento típico de games além de uma GPU bem poderosa e inovadora. A GPU do Xbox 360, a Xenos, foi a primeira a possuir unified shaders. Com isso era possível usar código que alterasse tanto os vértices dos polígonos quanto os pixels em qualquer shader, além de GPGPU. A Xenos ainda estava ligada a uma eDRAM de alta velocidade (256GB/s), mais rápida ainda que a eSRAM do Xbox One, mas que fazia várias operações de framebuffer sem custo graças aos 192 processadores extras de ponto flutuante. Não há uma GPU de PC que seja muito similar a Xenos.
A CPU Xenon do Xbox 360 tem 3 núcleos que pode rodar bem qualquer tipo de código típico das CPUs. Há 1MB de cache compartilhada entre esses 3 núcleos. Todos esses núcleos são iguais e possuem capacidade de prever qual o caminho será seguido após uma decisão (Branch Prediction). Erros nessa previsão provocam trabalho perdido nas CPUs, necessitando por isso refazer tudo a partir do último desvio. Cada um dos núcleos possui duas threads, ou seja, conseguem executar 6 sequências de código simultâneas compartilhando os recursos de cada núcleo. Possui ainda as instruções VMX128, que podem processar informações em paralelo, como nas GPUs, em 128 registradores de 128 bits.
O PS3 foi inicialmente projetado tendo apenas o Cell como CPU, sem GPU, Ken Kutaragi achou que ia ser suficiente. Isso é bem parecido com a arquitetura do PS2, que tem uma CPU melhor e uma GPU que praticamente não faz nada sozinha. O Cell é uma CPU com um núcleo, a PPE, que executa 2 sequências de código e é voltado para tarefas típicas de CPU. A PPE possui 512KB de cache e branch prediction. É ela quem distribui tarefas para cada uma das 7 SPEs, núcleos especializados que possuem 256KB de SRAM e são rápidos em cálculos de ponto flutuante. As SPEs não possuem acesso à RAM, mas recebem dados por um barramento interno de alta velocidade, podendo trocar esses dados entre si ou passá-los de volta para o núcleo principal. São sete núcleos que precisam estar sempre recebendo pacotes de trabalho para serem bem aproveitados.
Durante o desenvolvimento do PS3, chegaram a pensar em dois Cells, mas desistiram dessa abordagem. Por fim, decidiram pela situação de se ter uma GPU da NVIDIA baseada na série 7800, sem muitas diferenças conhecidas, além de uma CPU Cell. O Cell é poderoso, mas é bem inferior a uma GPU em tarefas gráficas. Usar apenas o Cell para construir um framebuffer usando as SPEs deixaria o sistema todo bem limitado.
Uma das poucas desvantagens práticas da CPU do Xbox 360 para a do PS3 era a latência provocada pela GDDR3, memória compartilhada pela CPU e GPU como a GDDR5 no PS4. Se uma informação não estava nas caches da CPU, a mesma teria que esperar 500 ciclos para começar a ser disponibilizada. Como o Cell estava ligado a memória não feita para GPU, a RDRAM, ele conseguia latência bem menor (não sei quantos ciclos).
O Cell tinha metade da cache da Xenon e seus próprios problemas para distribuir dados para as SPEs, que não acessavam a memória diretamente, como comentado. Esses problemas incluíam muita latência num barramento em anel, que felizmente tinha muita banda.
No Xbox 360 há também um recurso útil que limitava parte dos seus problemas. Era permitido enviar estruturas de dados da CPU para a GPU passando pela cache L2, sem precisar sofrer com a latência da RAM. A GPU consumia esses dados em seu tempo, liberando a memória associada. A CPU marcava áreas da L2 para esse uso e com isso não era possível que operações da CPU invalidassem esses dados.
Outra recurso da GPU do Xbox 360 é a capacidade de ler e escrever dados diretamente na memória do sistema, usando a função MEMEXPORT. Isso permite usar tanto os recursos da CPU quanto da GPU, usando os fortes de cada, para processar uma determinada informação. O mesmo no PS3 demandaria cópias de dados entre as memórias da CPU e GPU, ou acessos bem lentos do Cell a memória da GPU. De toda forma, ficaria mais lento, mas esses problemas não foram totalmente eliminados com a nova arquitetura.
Diferenças de poder de processamento de CPU e GPU nos novos consoles
Com o que sei da arquitetura do PS4, teremos a possibilidade de usar CPU para processar dados em uma determinada área da RAM ao mesmo tempo que usamos a GPU, ou intercalando. Isso poderá ser bem útil para compensar o fato de não se ter processadores de propósito especiais para tarefas pesadas e da CPU ser baseada numa CPU mobile e off-the-shelf (bem similar ao que a AMD lançou nos PCs).
A CPU do Xbox One é baseada no mesmo projeto, mas muito customizada e está 150MHz mais rápida. Essa CPU também executa mais operações por clock e por núcleo (6 contra 4 no PS4).
Baseado nos dados atuais, fala-se muito do PS4 ter 40% mais poder na GPU (ainda citam várias vezes os 50%, mas teve um aumento de clock na GPU do Xbox One). Porém, isso é meio falho e baseado no seguinte: A CPU e GPU no PS4 não são balanceadas pois a CPU é mais lenta que o que seria necessário para aproveitar a GPU melhor. Quando isso ocorre nos PCs, computadores com GPUs muito melhores que as CPUs ou vice-versa, não conseguimos o máximo de desempenho. Com isso, dividiram as 18 compute units em 14 para gráficos e 4 para GPGPU. As 4 compute units podem ser usadas para gráficos, mas o ganho é mínimo segundo o próprio arquiteto chefe. Com isso há um incentivo para utilizá-las com GPGPU.
No Xbox One temos 12 compute units, mas seriam bem compatíveis com o poder de processamento da CPU. Incluíram também no Xbox One 15 processadores especiais que diminuem o trabalho necessário na CPU. As próprias GPUs são inferiores para tarefas típicas de CPU e ainda temos a situação da CPU do Xbox One ser mais customizada. Considerando tudo isso, é bem provável que essa diferença caia para apenas 2 compute units da GPU (14 contra 12). Se não tiver novidade nenhuma da Sony, o Xbox One e o PS4 devem ser bem equivalentes. A Sony prometeu especificações técnicas mais completas na última Tokyo Game Show, mas não revelou nada que pudesse afetar o desempenho gráfico.
Implementação de hUMA no PS4 e Xbox One
A forma de hUMA implementada no PS4 já existe desde a APU Llano de janeiro de 2011, com os mesmos 10GB/s para escrita e leitura pela CPU, mas acrescentou-se alguns modos de operação. A diferença é que o barramento sem coerência para a GPU permite acessos a até 176GB/s, 10x mais que na Llano, graças ao uso de memória GDDR5. Quando é necessário coerência dos dados da GPU, se compartilha o barramento de 10GB/s, e o PS4 tem que ser programado para isso previamente.
No Xbox One é possível acessar a eSRAM e RAM a até 272GB/s combinados, por 4 canais de comunicação bidirecional com cada tipo de memória. O acesso com coerência será a 30GB/s, graças às MMUs. A implementação de hUMA no Xbox One foi desenvolvida em parceria com a Microsoft e acredito ser baseada na implementação das APUs da AMD que sairão no fim do ano, pois possuem as MMUs em comum.
O PS4 tem limitações que podem ser significativas com a sua implementação de hUMA. Há várias formas de controlar como as informações solicitadas pela CPU ou GPU afetarão as caches, o que é bom, mas ao mesmo tempo é necessário muito trabalho manual e muito sincronismo entre threads para que não ocorram bugs por cache sujo. A implementação de hUMA é parcialmente automática, mas depende de definir informações corretas para cada página de memória e pedir que se transfira do cache para a RAM quando há a possibilidade dele se sujar com informações de outra thread ou núcleo.
O Xbox One está mais sintonizado com a hUMA que deverá ser lançada no fim do ano nos PCs. Com as MMU e a implementação de host/guest, é possível conseguir coerência de cache e memória mais completa e automatizada não só entre CPU e GPU, mas também entre os processadores específicos como a SHAPE (para áudio) e os outros processadores auxiliares da GPU. Pode-se começar um processamento na CPU, continuar na GPU e terminar com os processadores auxiliares da GPU sem que informações antigas sejam utilizadas. Isso é muito bom para não comprometer o desempenho, a confiabilidade e o tempo de desenvolvimento a procura de bugs. Acrescente o fato de que a banda de acesso com coerência é 30GB/s em vez de 20GB/s e temos um excelente ambiente para GPGPU e processamento com os processadores especiais.
De qualquer forma, só de ter algo parecido com hUMA, poderemos ter benefícios que não temos nos PCs no uso de CPU e GPU em ambos consoles.
Barramento da CPU e GPU
O PS4 pode usar a totalidade dos seus teoréticos 176GB/s para a GPU, deixando a CPU na saudade, desde que não faça coerência. Parece muito e é mesmo para um console, mas no Xbox One é possível ter sempre dados se movendo sem interferência de CPU e GPU a 68 + 204GB/s. Tem quem não goste de somar esses números, mas a soma é bem correta quando se tem num sistema vários processadores que podem consumir informações de várias áreas de memória diferentes. Como há 4 barramentos de 64 bits com a DDR3 e 4 de 256 bits com a eSRAM, essa movimentação pode ser sempre antecipada e quem precisa de dados em alta velocidade pode estar sendo sempre alimentado pela eSRAM. E isso de forma transparente, segundo o que foi apresentado, sem necessidade alguma do desenvolvedor atuar. Os dados que precisam de mais velocidade (texturas, framebuffer) vão invariavelmente se encontrar na eSRAM quando forem acessados.
Outra coisa que pode comprometer o desempenho do PS4, além da latência muito maior da GDDR5, é que o barramento da CPU com coerência é de apenas 10GB/s por sentido, no máximo, pois compartilha parte desses 10GB/s para fazer a coerência da GPU também. No Xbox One é 30GB/s, mas não sei como é ainda direito os limites, pois não foram divulgados. É possível que compartilhe também para fazer a coerência, mas DDR3 e eSRAM são praticamente sem latência, diminuindo o problema.
Por que latência afeta mais CPU que GPU?
Por que operações na CPU normalmente dependem de dados em áreas mais distintas da memória RAM, evocando a latência a cada mudança de área. Isso dificultava muito o uso de SPEs no Cell para processamento típico de CPU, além das SPEs não terem hardware para prever qual o caminho mais provável após uma tomada de decisão. Já a GPU normalmente trabalha em blocos grandes de dados, mas contíguos, diminuindo a latência de cada acesso.
Conclusão – EMPATE
A arquitetura do PS4 é uma proposta muito melhor que a do PS3. Disparado. Só de ser mais PC, já se ganha muito em facilidade de desenvolvimento. Da mesma forma, o Xbox One é também muito melhor que o Xbox 360 que já possui uma arquitetura melhor que a do PS3. As customizações do Xbox One vão possibilitar que CPU e GPU sejam utilizadas próximo do máximo de suas capacidade, algo muito difícil. É típico que CPUs no PC sejam utilizadas entre 40 e 60% da capacidade máxima. Para terem uma ideia, a força bruta das GPUs AMDs mais recentes é maior que as da NVIDIA, mas as da NVIDIA conseguem mais eficiência e melhores benchmarks na maioria dos jogos. O Xbox One aposta muito na eficiência, assim como o Xbox 360 com as unified shaders e a eDRAM.
Tanto quem comprar um Playstation 4 quanto o comprador do Xbox One terá um console com poder de processamento suficiente para exibir excelentes gráficos, som posicional distintamente melhor e implementar física e inteligência artificial bem superiores ao que estamos acostumados com o Xbox 360 e Playstation 3. O salto dessa geração não será proporcional ao da geração Playstation 2 para Playstation 3, em que se acrescentou gráficos de alta definição, mas os novos consoles conseguirão surpreender e entreter com ainda mais recursos e fidelidade.
Fontes:
Xbox One: Slides da apresentação da Hot Chips 25
PlayStation 4 includes hUMA technology
More exclusive PlayStation 4 hUMA implementation and memory enhancements details
PlayStation 4: Balanced or unbalanced?
Eu acho que ainda é cedo pra poder falar qual é melhor simplesmente pelos datasheets.
Só na hora que estiverem programando de fato, hackeando, e os consoles no mercado, é que vai dar pra ter alguma idéia.
Não dou a bandeira de melhor para um ou outro inicialmente.
Acho inclusive que ambos estão segurando a praga do 1080p60 pra se vangloriarem depois disso. Se os consoles antigos já faziam 720/30 com efeitos razoáveis, a nova geração sendo muuuuito mais poderosa que a atual consegue 1080/60 numa boa, é só quererem. Foi se a época que otimizavam bit a bit, mhz por mhz….
A análise é baseada no que conhecemos, Filipe, para apoiar gamers que vão comprar apenas um console no lançamento e estão ávidos pela next-gen, não querendo esperar muito para começar a curtir. Esse é o objetivo.
Sobre os 720p/30 e 1080p/60, os consoles são realmente mais poderosos que na última geração, mas os desenvolvedores podem preferir dedicar os recursos extras para melhorar a qualidade dos efeitos. Por fim, a qualidade de imagem pode ficar ainda melhor mesmo com uma resolução nativa baixa que necessite upscaling. Da mesma forma, em alguns gêneros de jogos se ganha menos ao passar de 30 para 60FPS. A resposta rápida é menos fundamental, sendo bom converter recursos para um gráfico melhor e até mesmo simulação de física e inteligência melhores.
Call of Duty Ghosts
PS4’s 1080p > XB1’s 720p.
Battlefield 4
PS4’s 900p > XB1’s 720p
Not even close to a draw.
the xone version of battlefield 4 is not finished and ea or dice has not confirmed the resolution on xbox one so do not lie to people with rumours
Till now, Battlefield 4 on Xbox One have the best image quality:
http://imageshack.us/a/img29/5305/8dj1.jpg
If you have 1080p as a objective, whatever the cost, you could get more pixels with less quality overall.
Cue the butthurt fanboys
Eu acho engraçado essas “análises” técnicas, que tentam de todas as formas justificar as fraquezas do Xbone. É impressionante. Eu reli o texto algumas vezes e é realmente…. Bem, não adianta insistir nisso, porque cada um cita o número que quiser e acredita naquilo que lhe convém. Os jogos multiplataforma estão aí, provando o óbvio….