Quando 1 Tflops não é igual a 1 Tflops

Com o advento de consolas como a Neo e a Scorpio, muitos websites lembraram-se agora de explicar o que é um Tflop. Só não explicam é porque a medida é extremamente pouco fiável e como se associa ao hardware e software.

No que toca a explicações sobre Tflops a PCManias deve ter sido dos primeiros websites a explicar o que isso significa. Aliás desde os tempos da PS2 que se fala em Gflops, e não faria sentido usar a medida sem que as pessoas soubessem o que isso é.

Mas neste momento não vamos reviver ou relembrar artigos antigos, vamos apenas explicar de forma sucinta o que é um Flops, e porque motivo devemos ter muito cuidado com comparações entre produtos que usam esta medida como definidora de performance.

O termos Flops associadoa à computação, é apenas acrônimo do termo Floating-point Operations Per Second (operações de virgula flutuante por segundo). Basicamente as operações com números não inteiros (de virgula flutuante) são operações mais complexas do que as operações com inteiros, e são as usadas nos universos 3D. Daí que seja pela capacidade de um produto neste tipo de operações que podemos ter uma ideia da sua performance.

Note-se que o curioso aqui é que muitos acham que o S no final do termo representa Plural, ou seja mais do que uma operação de virgula flutuante, mas na realidade o S é aqui muito mais importante pois ele representa o termo segundo. Dado que nos computadores tudo se mede em termos de capacidade por segundo, este é o valor no qual medimos a capacidade de cálculo dos sistemas.



Claro que depois é uma questão de unidades matemáticas. 1 Flops é uma operação de virgula flutuante em um segundo, mas um MegaFlops (Mflops) são 1 000 000 operações por segundo, um GigaFlops (Gflops) são 1 000 000 000 operações por segundo, e um TeraFlops (Tflops), são 1 000 000 000 000 operações por segundo.

Num caso muito prático, a Xbox One, ao ser capaz de 1.31 Tflops, pode processar 1 310 000 000 operações de virgula flutuante por segundo.

E aqui não há que enganar. É pura matemática. Asim, um sistema como a PS4, com 1,84 Tflops, pode processar 1 840 000 000 operações de virgula flutuante por segundo.

Os ganhos são claros, há  530 000 000 operações adicionais de diferença que se traduzem em ganhos de performance.

Para a Neo e a Scorpio as contas são igualmente fáceis, basta multiplicar o valor de 1 Tflops por 4.19 e por 6, respectivamente, e temos as operações matemáticas que os GPUs dessas consolas podem realizar.

Mas há que ter em conta algumas situações:

1º – O Tflops representam uma capacidade máxima teórica de cálculo. Não é garantido que o sistema consiga atingir esse pico. No processamento gráfico normal esse valor nunca é, por norma, atingido. Há tempos mortos em que os vários componentes de um GPU necessitam de esperar por resultados de outros, e consequentemente o aproveitamento real de um GPU varia muito de jogo para jogo, dependendo da programação aplicada. Isso explica porque motivo muitos jogos com grafismos simplificados face a outros possuem por vezes performances inferiores. É uma questão de aproveitamento da performance, optimizando a mesma de forma a garantir que os tempos de espera são os menores possíveis e que o rendimento obtido é o mais alto possível.
Podemos assim concluir que Tflops não são necessariamente sinônimo de performance, mas sim de performance teórica. Depois é preciso saber usar o que há disponível. E podemos cair no caso onde numa apresentação podemos apresentar uma placa meio de gama a correr um GTA 5 a 60 fps, e uma placa topo de gama a correr um jogo de qualidade mais duvidosa onde os 30 fps são obtidos a custo.

2º – A questão do rendimento aplica-se não só à programação, mas igualmente à metodologia de funcionamento interno do GPU. E é aqui que a arquitetura do mesmo entra como factor diferenciador!
Cada arquitetura processa internamente de forma diferente, e isso quer dizer que as operações solicitadas podem gastar mais ou menos flops. Cada arquitetura, conjugada com o seu firmware e driver apresenta assim gastos de performance diferente para obter os mesmos resultados. E esse é o motivo porque temos constantemente novos GPUs. Não só para podermos ter mais Tflops disponíveis, mas igualmente para se implementares alterações que permitam aproveitar melhor os mesmos.
Mas a grande conclusão que se tira daqui é que só podemos comparar Tflops em arquiteturas semelhantes. Por exemplo, AMD com AMD, Nvidia com Nvidia, e que as comparações de Tflops AMD com Nvidia pecam por rendimentos internos diferentes.

Ou seja, voltando às consolas, é o ponto 2 que nos permite concluir que a diferença de performances entre a PS4 e a Xbox One é real e pode ser visualizada. Ambos os GPUs são AMD e com arquiteturas semelhantes!

Mas claro, neste ponto não posso deixar de referir uma outra situação pois a já conhecida frase “Mas isso não se nota” virá certamente a baila.



Então onde fica essa diferença de performance entre as duas consolas?



  • Na maior parte das vezes no cálculo de pixels adicionais de forma nativa. Mantendo o mesmo tipo e qualidade de cálculo, um aumento de X% na resolução implica um aumento de igual percentagem no cálculo. Ou seja, as diferenças entre as consolas perdem-se muitas vezes na simples implementação de maior resolução.  Esse é aliás o conceito de consolas como a Scorpio. A Microsoft precisa de 4x mais resolução do que a Xbox One apresenta para atingir os 4K. Daí que a performance da Scorpio precisa, rendendo com a mesma qualidade, de 4x mais Flops. Na prática a Scorpio possui 4.6x mais performance, para permitir os 4K em jogos que na One possam ser 900p!
  • Outras vezes em pequenas diferenças que mesmo que pouca diferença façam visualmente utilizam mais processamento ao serem mais precisas e perfeitas. E este é um outro caso! Um melhor Anti Aliasing pode não ser algo que se note sem uma análise mais cuidada, mas sendo este um efeito pós processamento de cálculo algo intensivo pode gastar ou ajudar a gastar a diferença de performances de uma forma que visualmente tem pouco impacto. Outro exemplo é o HDR, que pode ser calculado com vários níveis de precisão. Todos apresentam resultados visualmente diferentes, mas quase imperceptíveis sem análise cuidada.
    Muitas vezes, quando a performance disponível em ambas as consolas é suficiente para que ambas atinjam os patamares desejados, muitas equipas preferem gastar a performance adicional em maior qualidade e precisão de cálculo, do que em outras situações que criem grandes disparidades visuais.

Como nota final, e dado que está extremamente ligado ao assunto, termino com uma nota sobre a Computação Assincrona.

O que é? Bem, nos dias atuais os GPUs tornaram-se capazes de cálculos a um ritmo tão elevado que nem os CPUs são capazes de executar. E dado que não há qualquer rigidez no tipo de pedidos que podem ser feitos, os GPUs podem ser usados para processamento genérico, seja ele gráficos, física, áudio, etc.

Mas infelizmente há restrições. Apesar da sua capacidade e liberdade de cálculo, os GPUs são criados e optimizados para grafismo, possuindo diversas unidades especializadas para esse factor. Daí que a programação genérica seja um pouco diferente. basicamente o que se manda executar deve idealmente ser pensado de forma a ser processado como um shader gráfico a aplicar à cena de forma a que o processamento não seja muito divergente daquilo para que o GPU está optimizado. E esta situação obriga a uma lógica de programação radicalmente diferente e para a qual muitas das equipas não estão ainda preparadas. Daí que a computação assincrona esteja ainda pouco implementada.

Mas e qual a vantagem do seu uso?

Basicamente o GPU é uma espécie de linha de montagem onde temos várias componentes que trabalham sequencialmente. E como já explicamos, a performance teórica máxima dificilmente e atingida pois o normal é termos processamento que demora um pouco mais e que obriga os outros componentes a basicamente parar à espera dos resultados. Este é um processo normal no processamento, com imensos tempos mortos e consequentemente um grande desperdício da capacidade de processamento a nível de Flops.

A computação assincrona foi concebida exatamente a pensar nisso. Basicamente é um processamento paralelo que ocorre nestes tempos mortos do GPU usando as componentes que estão paradas.
Ou seja, ele traz ao GPU não só uma versatilidade maior, como permite que este possa calcular algo adicional para além do processamento gráfico que está a decorrer, de forma paralela e sem o prejudicar. Esta situação pode não só libertar o CPU de certos trabalhos ou, alternativamente, trazer para a mesa processamento adicional.

Mas a parte que nos interessa para este artigo é que esse processamento permite que se atinjam valores de rendimento muito superiores do GPU. É um tirar partido dos Flops disponíveis que de outra forma seriam pura e simplesmente perdidos.

A computação assincrona é a grande arma da AMD contra a Nvidia, onde as suas placas são basicamente incapazes de realizar a mesma sem penalizarem a sua capacidade de processamento gráfico. É uma característica do DirectX 12 e pode trazer ganhos de performances enormes.
Basicamente com eles podemos dizer que estamos a usar um GPU ao máximo da sua performance. Sem ele, o rendimento que temos depende da optimização do jogo para o GPU em causa, e das drivers para esse jogo, mas em qualquer dos casos, será sempre inferior ao obtimido por uma placa igual com a computação assíncrona ativa.

Cremos que a explicação de cima deixará claro o que o Flops representa, e até que ponto ele é uma boa e ao mesmo tempo uma má, medida de performance. Mas qualquer dúvida já sabem… tem sempre os comentários!



Posts Relacionados