Avalanche comprova o que já tinhamos dito: Rops da Xbox One poderão limitar a consola

Quem nos acompanha sabe que nas nossas análises ao hardware da Xbox One e PS4 apontamos todos os possíveis problemas do hardware da Xbox. Mas se até agora tudo o que dissemos foi comprovado, algo faltava: a prova de que as 16 ROPS da Xbox One podem limitar a consola face à PS4. E isso é algo que a Avalanche acaba de fazer.

Shaders

Facto: as consolas de nova geração baseiam-se em hardware ATI.

Assim, no caso da PS4 a placa equivalente mais semelhante será a R9-270, apesar de a vertente computacional da PS4 superar a desta placa (Estrutura apenas existente nas R9-290).

Já a Xbox One terá na placa equivalente mais semelhante a nova R7-265x recentemente lançada.



Ora a Avalanche resolveu comparar essas placas à 7970, basicamente a actual R9-280x.

Vamos comparar as especificações das três placas:

Radeon 7970

Playstation 4

Xbox One

Velocidade de relógio 925 Mhz 800 Mhz 853 Mhz
Velocidade da RAM 1375 Mhz (5,5 Ghz) 1250 Mhz (5 Ghz) 853 Mhz Esram, 1066 Mhz DDR3 (2133 Mhz)
Largura de banda 264 GB/s 176 GB/s 68 GB/s DDR3, 109 GB/s em leitura ou escrita ESRAM
Interface memória 384
ROPS 32 32 16
Unidades de texturas 128 72 48
Compute Units 32 18 12
Tflops 3,79 1,84 1,31
ACEs 2 8 2

Estamos naturalmente a comparar o incomparável. A R9280x custa quase tanto sozinha como toda a Playstation4, mas no entanto é interessante ver os resultados da Avalanche, especialmente no que toca à comparação entre as duas consolas.E é igualmente interessante ver como na vertente computacional a PS4 está mais apetrechada para optimizar o seu processamento paralelo e genérico ao possuir 4x mais ACEs (note-se que optimizar não fornece mais processamento, apenas permite maximizar o existente eliminando as ineficiências e perdas).

Mas vamos então ver os resultados a que a Avalanche chegou:

Basicamente o Chefe de Pesquisa da Avalanche, Emil Persson falou de optimização de shaders de baixo nível para as novas consolas, e de acordo com ele o hardware DX 11 sofre pelo facto de os interpoladores terem um impacto negativo na performance. Isso quer dizer que quanto mais ramificado for o código maior será o número de registos que os shaders requerem, o que resultará em performance decrescida.

No geral o que se refere é que a ramificação dos shaders implica shaders mais complexos e de maior dimensão podendo passar a precisar de strings de 32, 64 ou 128 bits, mas quanto maiores, menor a performance, sendo que o ideal é o uso de shaders pequenos e pouco ramificados. Há por isso que, para melhores resultados, optimizar os shaders para ramificações pequenas e que não ultrapassem as strings de 32 bits.



Ora associado aos shaders temos as ROPS, as unidades que processam os pixels. E dado que um shader não é mais do que um tratamento dado ao pixel e que pode requerer várias passagens das ROPS até se chegar ao seu valor final, percebe-se facilmente a importância destas unidades no processamento da imagem e na qualidade final do produto.

Ora de acordo com Emil, a 7970 graças à sua largura de banda pode dar-se ao luxo de trabalhar com os seus shaders a 128 bits , mas na PS4 (e Xbox One), devido à menor largura de banda da memória os programadores terão de trabalhar com strings máximas de 64 bits devido ao menor limite de largura de banda:

Com o hardware a tornar-se mais poderoso ao longo dos anos, houve partes dele que foram ficando para trás. O número de ROPs (associado ao número de pixeis que podem ser debitados por ciclo de relógio) manteve-se muito baixo. Apesar de isto se reflectir nos casos típicos de uso onde o shader é razoavelmente longo, pode limitar a performance mesmo em shaders pequenos. A não ser que o formato de saída seja amplo, nem sequer somos capazes de usar a largura de banda total disponível. Para a 7970 precisamos de um formato 128 bits para usar toda a largura de banda disponível. Na PS4 bastariam 64 bits.

Emil comprova isto com os testes que fez e que levam o GPU a atingir o limite, seja ele pelas ROPS, seja pela largura de banda.

ps4vs7970

A tabela mostra os vários tipos de shaders, e os limites atingidos pelas placas.



Com a 7970, com um formato RGB A8, com apenas 32 ROPS, seria atingido o limite de capacidade de saída de pixels antes de se saturar a largura de banda, algo que aconteceria igualmente com o formato RGBA16F.

Já com o formato RGBA32F que requer mais bytes por pixel, a largura de banda seria saturada antes de as ROPs atingirem a sua capacidade máxima.

Com a PS4 este último formato saturaria a largura de banda muito rapidamente uma vez que mesmo o formato RGBA16F estaria limitado pela largura de banda e não pela capacidade das ROPS que apenas seriam levadas ao extremo e se tornariam o factor limitativo com o formato RGBA8.

Ora no caso da Xbox One a situação é bem pior. O limite de 16 ROPS e as menores larguras de banda são factores muito limitativos. Vejamos:

XboxOnevs7970



Antes que alguém argumente que a largura de banda da ESRAM não é 109 GB/s, mas sim 204 GB/s, não há aqui qualquer erro.

A ESRAM é uma memória capaz de leitura e escrita em simultâneo, o que permitiria dizer que os seus 109 GB/s se equivaleriam na prática a 109*2 GB/s ou 218 GB/s. Mas a ESRAM a cada 8 ciclos só consegue fazer uma das operações, o que quer dizer que em 7 ciclos lê e escreve e no oitavo apenas faz uma das operações. Ou seja o calculo correcto será 7*2+1*1=15 ciclos de leitura e escrita em 16 possíveis, e 109*15/16=204 GB/s, o valor oficial da Microsoft.

Mas mesmo isso não explica porque motivo temos ali 109 e não os 204. A questão é que a ESRAM é capaz de leitura e escrita simultânea sendo os 204 GB/s um valor meramente teórico aplicável caso ambas as operações ocorram em simultâneo, mas caso a operação efectuada seja só de leitura ou só de escrita o ciclo é gasto com o aproveitamento de apenas 109 GB/s. E o que temos aqui é um caso onde todas as operações são apenas de escrita, motivo pelo qual se atinge o limite da ESRAM da consola aos 109 GB/s.

E com estes valores, o gráfico mostra os três casos anteriores:

Com um formato RGB A8 o limite das ROPS é atingido muito rapidamente e usando apenas 54 GB/s da memória.



O formato RGBA32F é igualmente limitativo no uso pois satura imediatamente a largura de banda.

Já com um formato RGBA16F o limite é certinho e acaba por ser duplo. As ROPS saturam com a largura de banda a bater nos 109 GB/s, o que quer dizem que ambos os factores são limitativos neste formato. Estão ambos exactamente no limite, o que quer dizer que não há largura de banda para mais nada que não seja calculo gráfico, como por exemplo todos os cálculos do GPGPU. A possibilidade será a fuga de parte deste cálculo para a mais lenta DDR3, libertando largura de banda na ESRAM, mas isso não invalida que se atingiu o limite colocado pelas ROPS com apenas uma percentagem dos pixels debitados e processados na PS4

Emil refere exactamente isso:

Na XB1, se estivermos a render para a ESRAM, a 64 bits atingimos o ponto onde estamos no limite das ROPs e Largura de Banda. Mas mesmo que queiramos render mais na relativamente lenta DDR3, ainda estaríamos limitado pelas ROPS mesmo se o render target for uma textura típica de 32 bits.

Curiosamente a Avalanche refere uma possível solução usando Compute Shaders que pode apresentar ganhos entre 60 a 70% no uso da largura de banda, mas para isso há que usar o GPGPU. E é nesse aspecto que na tabela de cima referimos as Compute Units de ambas as consolas, bem como os ACEs, pois tal demonstra a PS4 está muito melhor equipada para ouso do GPGPU do que a Xbox One.

A solução é usar um compute shader. Escrever por uma UAV (unordered access view) passa as ROPS e vai directo para a memória. Esta solução obviamente não se aplica a todos os tipos de rendering, e um dos motivos é que estamos a passar ao lado de todo o pipeline gráfica da qual dependemos para a maior parte do rendering normal. No entanto nos casos onde tal é aplicável pode resultar em ganhos de performance substanciais. Casos onde estamos a inicializar texturas para algo mais do que uma cor constante e simples pós processamento, isto será útil.

Ropsvs



A apresentação da Avalanche pode ser vista aqui.

Conclusões

Desta apresentação podem-se concluir uma série de coisas:

A primeira é a necessidade de os programadores optimizarem os seus shaders para que estes não entrem nas loucuras de falta de optimização que por vezes se vê nos PCs. Shaders com strings a 128 bits são totalmente de evitar e de 64 bits levam as consolas a ficarem limitadas pela largura de banda disponível. Idealmente shaders bem programados com dimensões máximas de 32 bits são o ideal.

Note-se que a dimensão do formato do Shader não necessita forçosamente menor qualidade.

E o que vemos é que caso todos os shaders fossem 64 bits e o sistema não fizesse mais nada senão produzir shaders, Xbox One e PS4 atingiriam o seu limite de largura de banda. Teoricamente a PS4 seria capaz de produzir mais shaders (176 GB/s) devido à maior largura de banda da GDDR5, ao passo que a Xbox One se ficaria pelos 109 GB/s, mas na prática, com strings de 64 bits, as consolas ficariam mais próximas do que se pensa pois a PS4, ao contrário da Xbox One que ainda tem a DDR3, não se pode dar ao luxo de dedicar toda a sua largura de banda do GPU.



Para além do mais, com este tipo de shaders, a Xbox One revela-se aquilo que os seus criadores sempre referiram, uma consola equilibrada! O limite da largura de banda é atingido em simultâneo com o limite das ROPs. Isto demonstra claramente que a Microsoft pensou muito no hardware a colocar na consola, e que ele foi pensado de forma a que os componentes atingissem os limites em simultâneo.

 Infelizmente esse conceito de equilíbrio falha face ao poder bruto da PS4 quando trabalhamos  com os shaders mais comuns e ideais para estas consolas pois só eles permitem levar as ROPs ao máximo deixando largura de banda para os restantes componentes (e como as ROPs são as unidades que debitam os pixels percebe-se aqui diferenças de resolução ou qualidade de imagem). E aqui vemos como os ROPs da Xbox a limitam face à concorrência. Processando shaders optimizados a 32 bits, a PS4 é capaz de produzir até  102 GB/s de informação gráfica, ao passo que a Xbox One se fica pelos 54 GB/s devido ao limite das ROPs. Nenhuma das consolas fica limitada mas a Xbox One apenas processa pouco mais de metade dos pixels da Playstation 4.

E ninguém tenha dúvidas que daqui a uns anos o software, particularmente os exclusivos, estará completamente optimizado para tirar o máximo partido das consolas, altura em que esta situação será mais perceptível.

A apresentação permite ainda concluir que a capacidade de processamento gráfico pode ser aumentada usando o GPGPU. E esse é mais uma vez um ponto diferenciador entre as consolas uma vez que o GPGPU é o ponto forte da PS4 que possui não só optimizações extremas ao nível das existentes na r9-290X (8 ACEs), mas igualmente 4 Compute Units optimizados para essa função, com duas unidades lógicas aritméticas por CU em vez da tradicional unidade única. Mas mais ainda a PS4 não possui restrições à RAM para o GPGPU, ao passo que a Xbox One está já limitada no uso da sua memória rápida, a ESRAM com apenas 32 MB, apenas para manter o framebuffer gráfico, tornando difícil que operações de processamento genérico (GPGPU) consigam partilhar essa memória que se tem revelado tão limitada e problemática.

E o verdadeiro desequilibro nas performances certamente irá advir com o uso do GPGPU na PS4, mas para falarmos sobre isso há que ver resultados práticos e não apenas referências. Teoria é uma coisa, mas gostamos é de ver as coisas na prática e acima de tudo estamos curiosos com as soluções que a Microsoft poderá e deverá apresentar para poupar no uso da ESRAM.





error: Conteúdo protegido