Há alguns anos atrás escrevi aqui para a pcmanias um artigo sobre a arquitectura da PS2. Nele explicava como era possível que uma consola com apenas 32 megabytes de ram e 4 MB de memória vídeo conseguia correr jogos que na sua versão PC exigiam um mínimo de 256 Megas de Ram e uma placa gráfica com 64 MB de memória.
E este tipo de situações nem é novidade. Vemos actualmente correr na Xbox e PS3, ambas com 512 MB de Ram, jogos que nas versões PC exigem muito mais requisitos (2GB RAM e placa gráfica com 256 MB vídeo).
Como era então isso explicado?
A explicação para tal deve-se à diferença de arquitecturas entre as consolas e os PCs. Vejamos o exemplo que referi na PS2.
Se um PC é um sistema onde os processadores (CPU e GPU) se encontram ligados por pipelines com pequena largura de banda, a verdade é que possui caches grandes nas extremidades das mesmas, a memória RAM, e a memória Vídeo. A comparar com algo mais palpável seria como referir que o PC é uma rede de distribuição de água, onde as suas cisternas (o CPU e o GPU) comunicam por canos de pequena capacidade (o Bus). Apesar disso, existem grandes reservatórios de água nas extremidades (a RAM e a Memória Video), onde a água é armazenada e trabalhada para que nunca falte.
A PS2 apresentou na altura uma estrutura radicalmente diferente. Os reservatórios eram extremamente pequenos (32 MB e 4 MB), mas em compensação os canos conseguiam transportar toda a água que fosse necessária ao possuir uma largura de banda interna total de 48 GB/s, em oposição aos 2GB por segundo que os PCs da altura apresentavam no AGP 4x. Basicamente estes “canos mais largos” permitiam à consola funcionar internamente num esquema muito semelhante ao do “Streaming”.
Ora a PS3 e a Xbox 360 não são PCs, apesar desta última ainda partilhar muito do conceito de PC.
A Xbox 360 possui 512 MB de ram, acessíveis ao CPU e ao GPU em simultâneo por um canal (Bus) capaz de transferências até 22,4 GB/s. O CPU por sua vez comunica usando um canal de 10,8 GB/s, que para evitar congestionamentos foi colocado a funcionar apenas em um sentido, sendo a sua capacidade duplicada para o outro. Comparativamente, a arquitectura do Core2 Duo com o chipset G965 da Intel apenas oferece um canal de entrada/saída do CPU com uma capacidade total de 8,5 GB/s, o que mostra que a Microsoft não se poupou aqui. No entanto é de notar que o Bus de acesso à memória com capacidade de 22,4 GB/s é partilhado e a largura de banda efectiva disponível para o CPU é a que o GPU deixar livre e vice versa.
Igualmente para compensar a falta de um reservatório com capacidade no lado da memória vídeo (que é de apenas 10 MegaBytes), a Microsoft dotou essa mesma memória com uma largura de banda de uns impressionantes 256GB/s, bem superior a tudo o que podemos encontrar actualmente mesmo em placas de vídeo topo de gama actuais (a título de exemplo uma Nvidia GTX 480 possui uma largura de banda interna de 177,4 GB/s), e completamente arrasador face ao que existia na altura do lançamento da consola, onde os valores rondavam os 54 GB/s.
A questão aqui é a seguinte. Aparentemente temos canos mais largos do que o normal Porque?
O motivo é exactamente compensar a falta de memória. Fazer as memórias render o mais possível, não a armazenar a informação lá, mas a calcular e mover a mesma o mais depressa possível entre os sistemas, tal como acontecia na PS2.
A PS3 partilha da mesma ideologia. Vejamos a sua estrutura.
A memória da PS3 é igualmente de 512 MB, mas a Sony dispensou totalmente a memória vídeo dividindo a RAM em duas partes. Isto permite que o RSX aceda à RAM a 22,4 GB/s e o Cell a 25.6GB/s sem interferirem um com o outro. É uma impressionante largura de acesso exclusivo à totalidade da RAM de 48 GB/s.
Como vemos, o acesso à ram na PS3 tem mais do dobro da largura de banda de acesso a RAM da Xbox, e, ao contrário da Xbox, não há interferência entre o CPU e o RSX caso cada um aceda à sua parcela, o que pode não acontecer dado que, em caso de necessidade (que existe dado que a geometria do universo 3D tem de ser partilhada), eles podem aceder à memória um do outro usando os canais de 20 GB/s no sentido RSX Cell e de 15 GB/s no outro sentido.
Mas seja como for está aqui parte da explicação que pretendemos.
Comecemos então por explicar porque motivo a Xbox 360 tem tão poucos jogos a utilizar os 1080p e a maior parte dos que existem são re-escalados dos 720p e não 1080p nativos.
A Xbox 360 usa uma arquitectura mista. Nem é canos grandes e baldes pequenos, nem baldes grandes e canos pequenos, é algo misto. Os canos não são muito grandes (mas são mais largos que o normal), mas os baldes também não (apesar do seu tamanho aceitável), e é a combinação da mistura de ambos os mundos que lhe dá a grande performance que possui.
Com a sua arquitectura, criar jogos a 1080p é algo que pode ser feito com uma perna às costas. O único inconveniente é que a consola actualmente encontra-se a ser espremida ao máximo, quer a nível de potência, quer a nível da utilização do seu Bus de comunicação.
Ora um jogo a 720p (1280*720) requer pouca memória vídeo. Vamos calcular quanta:
A formula de cálculo do frame buffer para uma imagem de 1280*720 com 32 bits de cor é a seguinte:
Resolução horizontal*resolução vertical*profundidade de cor <=> 1280*720*32 = 29491200 bits de memória
Ora convertendo para Megabytes usando as formulas de 1 MB=1024 KB, e 1 KB=1o24 Bytes e 1 Byte=8 bits, temos:
29421200/8/1024/1024 ~= 3,51 MegaBytes.
Como vemos, a Xbox ao possuir 10 Megabytes de memória vídeo pode trabalhar uma imagem bi-dimensional (2D) na sua memória vídeo, sem ter de recorrer a acessos adicionais à memória do sistema, atafulhando ainda mais o Bus de comunicação ao qual a gráfica já precisa necessariamente de recorrer para acesso às texturas.
Mesmo com uma imagem 3D, em que acrescentamos o Z-buffer o uso dessa memória apenas duplica, dado que o cálculo do Z-Buffer é algo semelhante, apenas mudado os bits de cor pelo Depth Buffer. Ora como este é, normalmente, igualmente de 32 Bits, a fórmula vai ser exactamente igual, e o valor de memória necessário será de outros 3,51 MegaBytes/s.
Assim, de acordo com este cálculo simplista, com uma imagem 3D a 720, a Xbox ocupará algo como 7,02 MegaBytes de Ram. Ora com uma largura de banda interna de 256 GB/s, a Xbox poderá, caso os cálculos de shaders permitam à placa gráfica potência para tal, fazer aqui rapidamente todos os cálculos que precisa, e ainda aplicar um anti-aliasing à imagem. Mas claro, o AA, está limitado pela ocupação do processador gráfico. Caso este não possua potência disponível, a largura de banda da memória não servirá de nada.
Mas a 1080p a coisa muda de figura. Fazendo os mesmos cálculos de cima, mas para uma resolução de 1920*1080, vemos que uma imagem 2D passa a usar 7,91015 MegaBytes. E no caso de uma imagem 3D precisaríamos de 15,82 MB.
Para alem do aumento de processamento na placa gráfica devido ao aumento da resolução que passa a ter de calcular 2,25 vezes mais pixéis, e que pode causar logo à partida o impedimento no processamento de 1080p reais, aqui ainda vamos ter de saturar o Bus de comunicação no acesso à memória RAM, dado que a memória vídeo não é suficiente para conter toda a informação 3D de um único ecrã. E isto tendo em conta que a performance não será igual uma vez que a memória RAM não possui a mesma velocidade da memória dedicada.
No caso da PS3 esse problema não se coloca. A consola possui canos larguissimos, e a placa gráfica tem acesso a 256 MB de memória vídeo num BUS que pode utilizar de forma exclusiva.
O sobrecarregar este bus com mais alguma informação não será o problema, estando este mais ligado à possibilidade de a processador gráfico possuir ou não a potência livre para a sobrecarga causada pelo aumento de 2,25 vezes a resolução.
Este é o motivo porque os jogos em 1080p são raros nas duas consolas. A condicionante criada pela falta de performance disponível para calcular 2,25 vezes mais pixels é a principal causa, mas na Xbox temos ainda a possibilidade de podermos vir a sobrecarregar um BUS que pode já estar saturado e do eventual impacto na performance de cálculo.
Mas numa utilização menos intensa das consolas, 1080p, 60 fps e até um 2xAA (em particular na Xbox) são uma possibilidade, e ambas possuem potência e características para isso.
Esse será talvez o motivo porque a PS3 possui mais jogos a 1080p nativo do que a Xbox. Mas seja como for, estes são os motivos porque o re-escalar dos 720p acaba por ser a melhor solução até porque ambas as consolas possuem chips dedicados para isso e cuja utilização não traz impacto na performance.
Aliás, nos jogos actuais, devido ao aumento da sua complexidade, os programadores tem imensas dificuldades em manter a performance aceitável, mesmo a 720p, pelo que, independentemente dos motivos, a realidade dos 1080p nativos está cada vez mais distante para esta geração de consolas.