22 Mai 2020
Artigos

Xbox 360 vs Xbox One – Parte I

Com o aproximar de uma nova geração de consolas, uma das coisas que muitas pessoas começam a pensar é sobre qual a diferença gráfica entre as duas gerações.

Neste artigo vamos tentar mostrar o que se pode esperar deste salto de geração nas consolas, em termos de capacidades do hardware. Iremos começar com uma comparação entre a Xbox 360, lançada no final de 2005, e a nova Xbox One, que será lançada no final de 2013. Com uma diferença de 8 anos, será que podemos esperar uma diferença de desempenho e capacidades enorme?

Iremos começar pela comparação entre os processadores que equipam estas duas consolas e tentar avaliar até que ponto temos aqui uma evolução.

O Xenon é o CPU presente na Xbox 360, este é um CPU desenhado pela IBM, baseado na arquitectura PowerPC, tendo como base o IBM 970 (G5), mas alterado consideravelmente para as necessidades da Microsoft. Tanto o PPE que encontramos no Cell, o CPU base que equipa a PS3, como os núcleos que encontramos no Xenon, são bastante semelhantes, no entanto, no caso da Xbox 360, temos um total de 3 núcleos completos e nenhum SPE. Cada núcleo do Xenon consegue realizar 2 threads em simultâneo, resultando num total de 6 threads. No entanto, é preciso considerar que estas threads são assimétricas, sendo que as threads secundárias não terão tanta capacidade como as primeiras.

[singlepic id=4177 w=610 h=458 float=center]

O Xenon é um CPU RISC (Reduced Instruction Set Computer), sendo que a filosofia deste foi a de retirar várias unidades que normalmente serviriam para ajudar a alimentar instruçõesde uma forma organizada e colocando no seu lugar mais unidades de execução, aumentando a capacidade computacional deste. Ou seja, o Xenon coloca mais trabalho sobre o programador, mas oferece-lhe mais hardware com que trabalhar. Não só lhe oferece mais hardware para trabalhar, como também lhe dá acesso a partes do CPU que normalmente não lhe seriam dadas.

O Xenon não possui uma Instruction Window, a qual serve para organizar a ordem pela qual as instruções são processadas. Isto permite poupar espaço que será utilizado para mais unidades de execução, mas caso uma instrução chegue fora de ordem, requerendo que uma outra seja processada antes, poderá obrigar a limpar o pipeline de execução do CPU, o que significa recomeçar o trabalho de novo. Sempre que isto acontece, perde-se uma boa quantidade de desempenho do CPU.

Quando um CPU está a correr uma determinada instrução, esta passa por um conjunto de estágios até ao resultado final. Isto implica que o CPU tenha um conjunto de unidades físicas em cadeia por onde cada instrução passa, mas resulta que quando a instrução está num estágio mais avançado, as unidades anteriores ficam paradas, até essa instrução estar completa. O conceito de SMT (Simultaneous Multi Threading), pretende utilizar as unidades que estão paradas, para começar a trabalhar sobre uma nova instrução, antes da primeira estar completa. Para isso duplica algum hardware, para permitir guardar as duas threads ao mesmo tempo. Isto não implica uma duplicação real de desempenho, pois a segunda thread tem de esperar que a primeira liberte certos recursos, mas permite adiantar trabalho e melhorar o desempenho.

No caso do Xenon, as suas capacidades SMT  são de uma implementação mais simples do que no caso de um Pentium 4 ou de um Core i7 da Intel. No caso dos CPUs da Intel, estes possuem um conjunto de registos  e um conjunto de buffers particionados, com o objectivo de manter as threads a correr de forma organizada. No caso do Xenon, teremos apenas a duplicação de alguns  registos. Isto significa que o SMT do Xenon irá ocupar menos espaço no chip, mas também significa que os programadores terão de gastar mais tempo e cuidado a organizar a forma como as threads primárias e as secundárias utilizam os recursos. Para além disso, é dado aos programadores controlo soba a unidade de SMT, incluindo a capacidade de definir a velocidade de descodificação de cada thread.

A parte que distingue o Xenon como um CPU para jogos são as suas unidades VMX-128, uma por núcleo, mas com um conjunto de registos de 128bits por thread.
Estas unidades VMX-128 dão uma capacidade considerável no calculo de vectores, o que faz do Xenon um excelente CPU para realizar gráficos em jogos. No entanto, em comparação, o Xenon é um CPU relativamente fraco em branching e integrers e isso significa que certos aspectos dos jogos terão hardware menos capaz, tais como alguns efeitos de física e inteligência artificial e controlo de jogo.

O Xenon é um CPU que sacrifica a facilidade de programação em troca de mais poder computacional e que tem uma capacidade extraordinária para criar gráficos em jogos, mas fora disto, tende a ficar para trás.

No caso do Jaguar, que equipa a Xbox One e a Playstation 4, temos uma filosofia quase oposta ao Xenon. Este é um CPU, desenhado pela AMD, com uma arquitectura X86 e tal como o Xenon, com capacidade de 64bits.
Este possui 8 núcleos reais, mas sem capacidades SMT, para um total de 8 threads simétricas. Isto significa que cada thread não tem de partilhar recursos com outra e por isso não se corre o risco de uma thread atrapalhar outra. No entanto, isto significa que uma segunda thread apenas pode começar quando a primeira estiver terminada, o que reduz o desempenho total do CPU.

Outra coisa a considerar é que o Jaguar é um CPU Out-of-Order, ao contrário do Xenon, que é um CPU In-Order. Tendo uma Instruction Window, o Jaguar consegue organizar a ordem de entrada da cada instrução. Esta unidade vai ocupar mais espaço no chip, mas também vai retirar trabalho aos programadores.

No caso do Xenon, este tinha uma cache L2 de apenas 1Mb, o que é algo reduzido para um CPU com 3 núcleos e 6 threads. O motivo para uma cache tão simples acaba por ser a limitação de espaço dentro do chip. No entanto, os programadores têm controlo quase total sobre esta, algo que não acontece noutros CPUs. Como uma cache é uma memória cara e muito rápida, é usada para guardar dados que se repetem muitas vezes, mas como uma boa parte do código que passa no Xenon é stream de dados, que normalmente não são repetidos frequentemente, o tamanho da cache acaba por não afectar tanto o desempenho, ainda por cima considerando a capacidade do Xenon em passar por completo a cache e enviar um stream de dados para o GPU, evitando o carregar da cache por completo. O problema é que o stream de dados de media é apenas uma parte de um motor de jogo e mais uma vez, elementos como a IA e certos efeitos de física física serão prejudicados.
No caso do Jaguar, este tem uma cache L2 de 2MB por cada módulo de 4 núcleos. O que significa que no caso da Xbox One, será um total de 4MB. Isto pode parecer muito mais do que o que o Xenon tem, mas também é preciso considerar que estamos a falar de 2 módulos, cada um com 4 CPUs, sendo que cada módulo não irá partilhar os seus dados. Isto significa que será necessário duplicar alguns dados em cada cache L2. mesmo assim, agrupando threads que precisam dos mesmos dados será possível maximizar a utilização desta cache.

[singlepic id=4176 w=610 h=327 float=center]

O Jaguar é um CPU que não servirá apenas para jogos e como tal, não dedica tanto espaço em colocar unidades especifica para gráficos. Mesmo assim, possui um conjunto de instruções avançadas para aceleração de cálculos em virgula flutuante, tais como SSE4.1/4.2, AES, CLMUL, MOVBE, AVX, F16C e BMI1.

No caso do Xenon, este corria a 3.2Ghz e conseguia produzir 115.2 GFLOPS, uma medida para cálculos em virgula flutuante e que é considerável para um CPU de uma consola lançada em 2005.
Apesar de não termos o valor exacto da velocidade do Jaguar que equipa a Xbox One, podemos extrapolar alguns valores. O rumor mais frequente é o de que o Jaguar irá correr a 1.6Ghz, sendo esta a velocidade com melhor relação desempenho/consumo. Tendo em conta que, segundo a AMD,  passar de 1.6Ghz para 2.0Ghz requer um aumento de consumo de 66%, aumentar a velocidade do Jaguar pode ter limitações, dentro do sistema da Xbox One. Mesmo assim, iremos considerar 3 velocidades: os 1.6Ghz, 2.0Ghz e 2.75Ghz, que é o valor que chegou a ser referenciado na documentação de aprovação de DevKits da Playstation 4 pelo FCC.

No caso de o Jaguar correr a 1.6Ghz, este ficaria com um desempenho máximo teórico em virgula flutuante, de apenas 102 GFLOPS. No entanto, tanto no caso da Playstation 4 como da Xbox One, tudo indica que estarão 2 núcleos reservados para o sistema, o que resulta em apenas 6 núcleos para os jogos. Como tal, o valor para o Jaguar passa a ser de 76.8 GFLOPS, um valor claramente abaixo do Xenon. No caso de uma velocidade de 2.0Ghz, o Jaguar passa a ter 96 GFLOPS e no caso de 2.75Ghz, passa a ter 130 GFLOPS.
Como podem ver, apenas no caso de o Jaguar correr a 2.75Ghz é que este iria ultrapassar o Xenon em cálculos em virgula flutuante. Mas verdade seja dita, é pouco provável que esta seja a velocidade final dos CPUs da PS4 e Xbox One, em boa medida por causa do aumento considerável dos consumos.

Uma coisa que salta à vista é a diferença de velocidades entre os dois CPUs, sendo que se tivermos em conta que o Jaguar é mais recente e fabricado num processo de fabrico mais avançado, seria de esperar que este tivesse uma velocidade maior. No entanto existem alguns motivos para isto, o primeiro é que o Jaguar vai estar colocado num SoC (System on a Chip) e como tal, pela concentração de transístores, tanto do CPU, como do GPU, da EDRAM e de controladores diversos, teremos uma maior concentração de calor. Se a velocidade do destes elementos subir de forma desproporcionada, podemos começar a encontrar problemas de estabilidade e durabilidade do sistema.
Outra coisa a considerar é que o Xenon vem de uma era em que ainda se considerava a corrida dos Mhz, como a melhor forma de ganhar desempenho. Por causa disso, encontramos uma das maiores desvantagens do Xenon em relação ao Jaguar, que é o comprimento do seu pipeline de execução. Como referimos em cima, cada instrução tem de passar por vários estágios durante o pipeline de execução, até estar completa. Uma das formas de conseguir maior velocidade num CPU, é simplificar cada estágio, significando que cada um irá fazer menos e por isso será necessário mais estágios para completar o pipeline de execução. O Xenon sendo um CPU que segue a velha filosofia do aumento dos Ghz, acaba por ter um pipeline de execução com 21 estágios, enquanto que o Jaguar é um CPU com apenas 13 estágios.
Apesar de se conseguir obter maior velocidade com um pipeline com mais estágios existem várias desvantagens. A primeira é que para completar todo o pipeline vai demorar mais ciclos de relógio do CPU e isso significa que o aumento de velocidade, não se traduz linearmente num aumento de desempenho. Como cada estágio é mais simples, é feito menos por ciclos de relógio.
O segundo problema é bem mais grave, especialmente tendo em conta a natureza In-Order do Xenon. Como referimos em cima, o Xenon não tem uma Instruction Window e isso significa que caso as instruções não sejam alimentadas ao CPU de forma ordenada, pode significar que é preciso limpar e recomeçar o pipeline de execução. Como o Xenon tem um pipeline mais longo e que requer mais ciclos de relógio para completar, isto significa que em caso de erro na ordem de instruções, teremos uma penalidade de desempenho maior.
No caso, do Jaguar, este tem uma Instruction Window e isso ajuda a evitar erros na ordem das instruções, mas não é garantido a 100% e por isso, também ocorrem perdas de desempenho por recomeçar o pipeline de execução, mas sendo este mais curto, essa perda será menor do que no Xenon.
O que isto mostra é que é mais importante o trabalho do programador no caso do Xenon, na obtenção de bom desempenho, mas quando este trabalho é bom, os ganhos são consideráveis.
O Jaguar permite a programador ter menos trabalho e como tal, fazer com que os jogos custem menos e demorem menos tempo a construir.

Será que isto significa que o Jaguar é um CPU mais fraco do que o Xenon? Não necessariamente, pois os cálculos em virgula flutuante são apenas uma das métricas do desempenho de um CPU e é muito provável que o Jaguar seja consideravelmente melhor em integrer e branching do que o Xenon e isso irá significar que certos aspectos dos jogos, como a IA e a física, deverão ser mais avançadas na Xbox One.
Outra coisa a considerar é a eficácia de cada arquitectura e com uma diferença de 8 anos de desenvolvimento e pesquisa, será de esperar que o Jaguar tenha vantagem.

Neste momento, não existem benchmarks directos entre estes CPUs e a diferença enorme entre arquitecturas e filosofias, tornam a comparação muito complexa.

O que se pode concluir é que o Jaguar não é uma melhoria considerável em termos de desempenho para jogos e tudo indica que esse nunca foi o objectivo da sua escolha.
O Xenon pretendia fazer apenas uma coisa, mas muito bem, por outro lado, o Jaguar pretende fazer várias coisas, o bem quanto baste.
Na Xbox 360 esperava-se apenas correr jogos e pouco mais, mas agora espera-se que a Xbox One faça muito mais coisas e que tenha muitas mais funções e isso requer um CPU todo o terreno.

Comparado com o Xenon, o Jaguar troca poder por facilidade de programação, velocidade por mais núcleos e desempenho bruto por mais funções.
Tendo em conta que os jogos não dependem tanto do CPU, como do GPU, esta parece ser uma aposta correcta. Para além disso, os GPUs evoluíram bastante desde os tempos da Xbox 360 e agora são elementos com mais capacidades de programação e como tal, podem auxiliar o CPU em certos cálculos.

No próximo artigo iremos continuar a comparação de hardware entre estas duas gerações de consolas da Microsoft.

Related posts