Como é possível que dando trabalho extra a um GPU saturado, para processar usando o GPGPU, se possa melhorar as performances de um sistema?

async

A pergunta é pertinente: Se temos um GPU que já está saturado, quais as vantagens que podem existir em se lhe dar mais trabalho? Na realidade muitas, e tal pode melhorar mesmo performances. Mas para isso é preciso perceber como as coisas funcionam!

Certos programadores referem em entrevistas que pretendem passar mais trabalho para o GPGPU de forma a libertar mais CPU e/ou obter melhores performances.

Mas se em jogos anteriores destes produtores o GPU já se via à rasca para conseguir uma resolução e fotogramas decentes, como é que saturar ainda mais um GPU pode ajudar?

Na realidade pode e muito. Mas há que se perceber o que acontece e como acontece, de forma a se perceber que a sobrecarga adicional de trabalho na realidade não afecta o que o GPU já fazia antes, e na prática pode ajudar a libertar CPU e mesmo GPU, permitindo melhores performances.

É certo que pode parecer um contra-senso entregar mais trabalho a uma peça que está já limitada, mas como irão perceber, na realidade a lógica é muita!

Comecemos por compreender uns conceitos básicos ligados aos GPUs.

O que é um GPU?

O GPU é basicamente um conjunto de processadores que funcionam em paralelo. Estes processadores são basicamente pipelines, ou condutas, por onde os dados seguem, e dotados de várias etapas de processamento dedicadas a grafismo. Basicamente os dados entram no pipeline e saem processados do outro lado. É como se fosse uma fábrica, onde a matéria prima entra, passa pelas várias etapas de produção, e sai do outro lado.

A título de exemplo, para localizarmos o que falamos, a PS4 possui 1152 destes pipelines, a Xbox One 768, sendo que por vezes eles são chamados de Shader Pipelines ou de Stream Processors (um nome específico do hardware AMD).

E antigamente um GPU era assim, e apenas assim, que funcionava. As suas etapas estavam completamente dedicadas ao processamento de pixels, e o GPU apenas fazia isso. Processava os pixels para o ecrã!

O GPGPU

Mas actualmente essas linhas de produção dos pipelines, devido ao avanço do 3D, contam com etapas de processamento que são extremamente versáteis e potentes. E apesar de muitas das etapas do pipeline serem específicas para grafismo, podemos passar as mesmas à frente e usar apenas aquelas que podem, graças às novas tecnologias, processar dados de forma genérica, para fazer processamento não gráfico.

Isso quer dizer que actualmente um pipeline gráfico tornou-se versátil ao ponto de processar não apenas gráficos, mas igualmente dados genéricos. A esta capacidade de processamento genérico chama-se GPGPU, com as letras GP a significarem Generic Processing, ou processamento genérico.

Esta capacidade aparece com a definição de unidades de computação (Compute Units ou CUs), que no caso das placas AMD são constituídas por 64 dos já referidos pipelines.

Um pequeno historial do GPGPU

A Nvidia foi pioneira na criação do GPGPU! Os seus núcleos Cuda eram versáteis ao ponto de as suas placas terem sido das primeiras a poderem fazer os dois tipos de processamento.

E a Nvidia rapidamente colocou esta capacidade a uso com o PhysiX, que lhes permitia libertar o CPU calculando física complexa, e acrescentando animações (como física de tecidos e poeiras), que não se fariam sem esta capacidade.

E durante muito tempo a Nvidia foi o único fabricante com GPGPU nos seus GPUs, algo que lhe valeu muita popularidade.

No entanto a AMD, apesar de entrar posteriormente nesta corrida, rapidamente superou a Nvidia neste campo, com o seu GPGPU a mostrar-se bastante superior.

A computação síncrona

Com os GPUs a processarem os dois tipos de dados, o primeiro tipo de processamento que apareceu, e o implementado pela Nvidia, foi a computação síncrona, ou em série!

Basicamente o que acontece aqui é que os dados entram por ordem sequencial e vão sendo processados por essa ordem. Naturalmente, sem pensarmos muito, percebemos logo que este tipo de processamento sequencial tem necessariamente perdas de performance pois ao acrescentarmos processamento genérico ao gráfico temos mais trabalho para calcular. Mas curiosamente, como irão ver, as perdas não são na mesma proporção da carga adicional de trabalho.

Esta é a situação usada pelas placas Nvidia pré Pascal, onde a computação funciona desta forma. A activação do CUDA para física ou outros, melhora a quantidade de animações realisticamente presentes no ecrã, mas possui impactos na performance.

Temos então como vantagem desta computação o facto de a mesma permitir libertar o CPU, passando o cálculo para o GPU. Mas como desvantagem temos algum impacto nas performances gráficas que varia com o nível de processamento genérico efectuado.

Na computação sincrona, quando atribuída uma tarefa só podemos passar à seguinte quando esta está terminada.

A computação assíncrona

A diferença desta computação para a anterior é que esta requer um GPU que possa instantaneamente mudar o modo de cálculo. E se no caso das Nvidia, apenas as placas gráficas com a arquitectura Pascal são capazes de tal (apesar de algumas outras limitações), o hardware AMD é capaz desta realidade desde à vários anos (apesar que estava desaproveitado pela ausência de APIs que tirassem partido da capacidade).

E é esta pequena diferença que faz toda a diferença do mundo, permitindo à AMD superar e bastante a Nvidia neste campo.

Basicamente esta situação, que é resultado da presença das unidades ACE nos GPUs AMD, permite que o processamento não seja sequencial, e como tal o acréscimo não se coloca forçosamente na fila existente em local fixo para ser processado. Há a possibilidade de alteração da ordem de forma a optimizar o cálculo e o rendimento do GPU.

Basicamente, graças à análise do sistema efectuada pelas unidades ACE que permitem que as unidades de processamento do GPU que estão IDLE (paradas), possam manter o pedido em stand-by, mudando nesse ciclo em que estaria parado, o tipo de tarefa, o rendimento do GPU sube para muito perto dos 100%.

Mas esta é uma situação que se percebe melhor explicada. Tentem acompanhar.

Como é habitual a PCManias tenta explicar como estas coisas funcionam de uma forma generalista e pálpável que permita mesmo aos mais leigos nesta matéria perceberem os conceitos por detrás das coisas. Nesse sentido o nosso exemplo não irá respeitar a realidade das placas gráficas, mas sim criar uma situação ficticia mais corriqueira que permita que percebam, não o funcionamento do GPU, mas sim as diferenças entre as diversas formas de computação.

Aqui vai então esse exemplo:

Um caso de exemplo para se perceber as diferenças.

Imaginemos então o seguinte cenário:

Um conjunto de 4 pessoas vão simular os diversos tipos de processamento. Uma delas será o capataz (CPU), e as outras três farão o papel de unidades de cálculo de um GPU.

Todas estão munidas de uma calculadora que lhes permite executar cálculo matemático. E vamos por simplificação ignorar o tempo que essas pessoas demoram a calcular a conta pedida, considerando apenas que ocorre um ciclo quando essa conta está terminada.

Eis a lista de ordens relativas a cálculos que vamos atribuir a estas pessoas. A vermelho temos contas que correspondem a cálculo gráfico, e a verde contas de cálculo genérico! Como compreendem as contas em si não interessam dizer quais são, apenas temos de aceitar que são relativas a cada um dos tipos de cálculo.

1- Calculo gráfico 1

2- Calculo genérico 1 

3 – Integração de dados do mundo com o grafismo dependente dos dois resultados anteriores

4- Calculo genérico 2

5 – Calculo gráfico dependente dos valores do passo 3 e 2

6- Calculo genérico dependente dos resultados do passo 2 e passo 4

7 – Calculo gráfico dependente do passo 5

8 – Integração de dados do mundo com o grafismo dependente dos passos 5 e 6

9 – Cálculo genérico 3
10 – Calculo genérico dependente do passo 9 e passo 6.
11 – Cálculo gráfico dependente do passo 3 e 5

12 – Cálculo genérico 4

Vamos então processar estes dados segundo vários métodos.

Computação Standard, CPU no cálculo genérico + GPU no cálculo gráfico

Com este tipo de cálculo, a pessoa nomeada capataz fará os cálculos do CPU. As restantes três simularão então as unidades de cálculo de um GPU, fazendo o seu trabalho.

Para executarmos a lista de comandos de cima, dado que CPU e GPU correm em paralelo teríamos o seguinte:

A cada ciclo o capataz executa uma das contas a verde. E a cada ciclo, cada uma das pessoas que simulam as unidades de processamento, executa uma das contas a vermelho.

Dado que nos interessa apenas ver as diferenças entre o que ocorre na gráfica em cada tipo de processamento, aqui não vamos fazer mais referências ao capataz, apenas percebendo que ele executa em tempo útil os seus cálculos.

Vamos mas é ver o que acontece com as pessoas que executam o cálculo gráfico! As três pessoas serão futuramente designadas por P1, P2 e P3.

Ciclo 1

  • A P1 aceita e processa a ordem gráfica 1.
  • A P2 aceita a ordem gráfica 3, mas não a processa ficando IDLE pois ela é dependente de dados que o capataz está a calcular em paralelo neste ciclo.
  • A P3 aceita a ordem gráfica 5, mas mais uma vez não a processa, ficando IDLE por precisar dos dados atribuidos ao capataz e à P2.

Comandos executados acumulados no final deste ciclo- Comando 1.
Pessoas libertadas para novos cálculos no final do ciclo – P1

Ciclo 2

  • A P1 aceita a ordem gráfica 7, mas não pode processar pois precisa de dados da P3 que só agora pode calcular, ficando IDLE.
  • A P2 processa a ordem gráfica 3 que tinha pendente.
  • A P3 continua a aguardar pois não pode ainda processar a ordem gráfica 5 que depende do resultado agora a ser processado pela P2, ficando IDLE. -Comandos executados acumulados no final deste ciclo – Comandos 1 e 3
    Pessoas libertadas para novos cálculos no final do ciclo – P2

Ciclo 3

  • A P1 não pode ainda processar a ordem gráfica 7, ficando mais uma vez IDLE.
  • A P2 recebe a ordem gráfica 8, mas precisa do resultado da ordem gráfica 5 que vai agora ser calculada pela P3, ficando IDLE.
  • A P3 processa a ordem gráfica 5.

Comandos executados acumulados no final deste ciclo – 1, 3, 5
Pessoas libertadas para novos cálculos no final do ciclo – P3

Ciclo 4

  • A P1 processa a ordem gráfica 7.
  • A P2 processa a ordem gráfica 8.
  • A P3 recebe e processa a ordem 11!

Comandos executados acumulados no final deste ciclo – 1, 3, 5, 7, 8, 11
Pessoas libertadas para novos cálculos no final do ciclo – P1, P2, P3

E estão terminados todos os cálculos gráficos, a vermelho, atribuidos ao GPU. Dado que tudo o resto é processado pelo Capataz (CPU) a devido tempo, o GPU calculou o que lhe era atribuído em 4 ciclos!

Mas convém perceber que, devido às dependências dos trabalhos, as componentes de cálculo estiveram paradas sem processar (IDLE) por 6 vezes!

O gráfico de baixo mostra a verde as vezes em que as tarefas foram completas e a vermelho as em que ficaram pendentes.

i1

Computação Sincrona (Grafismo + Computação genérica no GPU, processado sequencialmente)

Vamos passar processamento genérico para o GPU usando computação sincrona, libertando o CPU que pode agora fazer outras coisas. Eis novamente a lista de comandos.


1- Calculo gráfico 1

2- Calculo genérico 1 

3 – Integração de dados do mundo com o grafismo dependente dos dois resultados anteriores


4- Calculo genérico 2

5 – Calculo gráfico dependente dos valores do passo 3 e 2

6- Calculo genérico dependente dos resultados do passo 2 e passo 4

7 – Calculo gráfico dependente do passo 5

8 – Integração de dados do mundo com o grafismo dependente dos passos 5 e 6

9 – Cálculo genérico 3
10 – Calculo genérico dependente do passo 9 e passo 6.
11 – Cálculo gráfico dependente do passo 3 e 5

12 – Cálculo genérico 4

O que acontece aqui?

Na computação síncrona os dados entram sequencialmente e não há qualquer alteração na ordem de processamento. Vamos entregar os mesmos por ordem a cada um das nossas 3 pessoas que simulam o GPU. E aqui, o nosso capataz não vai fazer absolutamente nada!

Mais uma vez temos a vermelho o cálculo gráfico, a verde o genérico! Tentem acompanhar!

Ciclo 1

  • A P1 recebe e executa a ordem 1 gráfica.
  • A P2 recebe e executa a ordem 2 genérica.
  • A P3 recebe e tenta executar a ordem 3 gráfica, mas tem de ficar IDLE neste ciclo pois não tem os dados para processar.

Comandos executados acumulados no final deste ciclo – 1, 2
Pessoas libertadas para novos cálculos no final do ciclo – P1, P2

Ciclo 2

  • A P1 recebe e executa a ordem genérica 4.
  • A P2 recebe a ordem 5 gráfica, mas não a pode executar pois precisa do resultado da ordem 3 que só agora será executada, ficando IDLE.
  • A P3 executa a ordem 3 gráfica pendente.

Comandos executados acumulados no final deste ciclo – 1, 2, 3, 4
Pessoas libertadas para novos cálculos no final do ciclo – P1, P3

Ciclo 3

  • A P1 recebe e processa a ordem 6 genérica.
  • A P2 executa então a ordem 5 gráfica pendente.
  • A P3 recebe a ordem gráfica 7, mas não a pode executar por falta de dados, ficando IDLE.

Comandos executados acumulados no final deste ciclo – 1, 2, 3, 4, 5 ,6
Pessoas libertadas para novos cálculos no final do ciclo – P1, P2

Ciclo 4

  • A P1 recebe a ordem gráfica 8 e processa-a.
  • A P2 executa a ordem 9 genérica.
  • A P3 processa a ordem gráfica 7 pendente.

Comandos executados acumulados no final deste ciclo – 1, 2, 3, 4, 5 ,6, 7, 8, 9
Pessoas libertadas para novos cálculos no final do ciclo – P1, P2, P3

Ciclo 5

  • A P1 recebe e executa a ordem 10 genérica.
  • A P2 executa a ordem gráfica 11.
  • A P3 executa a ordem genérica 12!

Comandos executados acumulados no final deste ciclo – 1, 2, 3, 4, 5 ,6, 7, 8, 9, 10, 11, 12
Pessoas libertadas para novos cálculos no final do ciclo – P1, P2, P3

O que tiramos daqui?

Basicamente duas situações.

  • O CPU ficou livre de trabalho!
  • Aumentamos o número de comandos no GPU para o dobro, mas tal apenas o prejudicou em mais um ciclo.

Esta é a situação que já tinhamos referido em cima. A percentagem em que o GPU é penalizado não corresponde à percentagem de trabalho adicional. Neste exemplo demos-lhe mais 100% de trabalho, mas ele só levou mais um ciclo, ou seja, como antes tinha usado 4, foi penalizado em 25%.

 

Como se explica isto? Porque os momentos em que o GPU fica IDLE (sem trabalhar) alteram-se, com o trabalho diferente a eliminar muitos dos tempos mortos por esperas devidas a dependências de cálculo. No nosso exemplo elas descem de 6 para apenas 3!

E por norma, devido a esta alteração, acabamos por ter um aumento de carga real que normalmente se revela inferior à proporção do aumento do trabalho.

Vendo num gráfico como o anterior, temos a verde as alturas em que se completaram tarefas (Verde escuro gráficas, claro as genéricas), e a vermelho as alturas em que elas ficaram pendentes.

i2

Computação Assincrona (Grafismo + Computação genérica no GPU, processado paralelamente)

Na computação assincrona há. como referido, quase apenas uma pequena diferença face ao que temos na síncrona. Uma pequena diferença que, como já foi também referido,  faz toda a diferença do mundo. É que quando o processamento fica IDLE  a placa tem a capacidade de mudar o tipo de processamento procurando uma instrução de outro tipo. Basicamente o que acontece aqui é que diminuimos drasticamente os tempos em que o GPU está parado, aproximando a eficiência dos 100%.

Eis novamente a lista de comandos que vamos agora analisar assincronamente.

1- Calculo gráfico 1

2- Calculo genérico 1 

3 – Integração de dados do mundo com o grafismo dependente dos dois resultados anteriores

4- Calculo genérico 2

5 – Calculo gráfico dependente dos valores do passo 3 e 2

6- Calculo genérico dependente dos resultados do passo 2 e passo 4

7 – Calculo gráfico dependente do passo 5

8 – Integração de dados do mundo com o grafismo dependente dos passos 5 e 6

9 – Cálculo genérico 3
10 – Calculo genérico dependente do passo 9 e passo 6.
11 – Cálculo gráfico dependente do passo 3 e 5

12 – Cálculo genérico 4

Ciclo 1

  • A P1 executa a ordem 1 gráfica.
  • A P2 executa a ordem 2 genérica.
  • A P3 recebe a ordem 3 gráfica mas não pode executar pois ela depende de resultados ainda a serem executados neste ciclo. Assim, muda de processamento gráfico para genérico e executa a ordem 4 genérica.

Comandos executados acumulados no final deste ciclo – 1, 2, 4
Pessoas libertadas para novos cálculos no final do ciclo – P1, P2, P3

Ciclo 2

  • A P1 executa a ordem 5 gráfica, mas como não a pode ainda calcular muda para processamento genérico e executa a ordem 6 genérica.
  • A P2 recebe a ordem 7 gráfica e como não a pode executar passa a processamento genérico, executando a ordem 9 genérica.
  • A P3 pega agora na ordem 3 gráfica que estava pendente, calculando-a pois já tem os dados.

Comandos executados acumulados no final deste ciclo – 1, 2, 3, 4, 6, 9
Pessoas libertadas para novos cálculos no final do ciclo – P1, P2, P3

Ciclo 3

  • A P1 já pode agora executar a ordem 5 gráfica que tinha ficado pendente.
  • A P2 executa a ordem 7 gráfica que tinha ficado pendente.
  • O CU 3 executa a ordem 8 gráfica, mas como não a pode calcular pois ela depende da ordem 5 que está agora em cálculo, muda para processamento genérico e calcula a ordem genérica 10 (a 9 já estava calculada).

Comandos executados acumulados no final deste ciclo – 1, 2, 3, 4, 5, 6, 7, 9, 10
Pessoas libertadas para novos cálculos no final do ciclo – P1, P2, P3

Ciclo 4 – A P1 executa a ordem 8 gráfica.  A P2 executa a ordem 11 gráfica. A P3 executa a ordem 12 genérica.

Comandos executados acumulados no final deste ciclo – 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
Pessoas libertadas para novos cálculos no final do ciclo – P1, P2, P3

O que concluímos?

  • A placa gastou o mesmo número de ciclos que gastou a processar apenas grafismo, ou seja, sem qualquer penalização.
  • A placa processou o dobro do trabalho!
  • A eficiência de trabalho da placa foi 100%, isto é, sem tempos mortos (IDLE=0).
  • O CPU está livre do trabalho.

Vamos ver isso num gráfico:

i3

Basicamente o acréscimo de trabalho colocado, graças à computação assíncrona não criou peso no GPU pois ela foi feita nas alturas onde o processamento gráfico estava parado.

E assim podemos agora responder a parte da vossa questão: Como é que se se pode atribuir mais trabalho a um GPU já saturado?

Colocando o mesmo a processar dados genéricos nas pausas do processamento gráfico que o GPU tem! E isto permite que o mesmo efectivamente debite mais, sem que prejudique o rendimento do que já debitaria!

Mas como é que isto ajuda o sistema?

De duas maneiras possíveis:

  • Se o gargalo está no CPU o mesmo é libertado e pode ser usado para outras situações.
  • Se o gargalo está no GPU esta computação genérica pode ser usada como auxiliar ao processamento gráfico. Jogos como Forza e Forza Horizon já o fazem usando uma metodologia denominada Forward Rendering + que utiliza a computação assincrona para processamento gráfico adicional, melhorando fps e a qualidade gráfica.

Espero que tenham compreendido. Agora não nos critiquem por o exemplo fugir um pouco à realidade dos GPUs, mas aqui a intenção era que percebessem as diferenças entre as computações, o que cremos que aqui se percebe plenamente desde que acompanhem e percebam o descrito nos vários ciclos para cada um dos tipos de cálculo.

Agora estarão em condições de perceber a imagem que está no topo deste artigo com as diversas carruagens. Elas estão em várias pistas (as PistasdP1, P2 e P3) com espaços entre elas (as alturas em que não calculavam nada), mas na computação assincrona, os processamentos encaixam todas nos espaços vazios uns dos outros. Aumenta-se a eficiencia do GPU para perto dos 100% (no nosso exemplo foi mesmo 100%, mas é um exemplo teórico) e processa-se mais em paralelo, sem se prejudicar o cálculo que já havia.

Note-se que este tipo de cálculo melhora a eficiência, mas aumenta a produção de calor no GPU, sendo que, por esse motivo nunca podemos ter todo o GPU a executar este tipo de processamento.

Publicidade

Posts Relacionados

Readers Comments (22)

  1. Mário, bom dia! Primeiro: Parabéns pela matéria, pois além de estar bem explicada, vi que deve ter demandado um bom tempo para ter feita. Gostaria de lhe fazer uma pergunta: Alguns insiders estão falando que o Nintendo switch terá 1 Tflop de desempenho no tablet, e se posto no dock, terá algum aumento, mas que por ele ser uma tecnologia ARM, faz com que seu desempenho seja superior a um x86, fazendo que ele alcance desempenho similar a um xbox one ou até um ps4. Isto é conversa de leigos sonhadores ou tecnicamente é possível algo desta natureza??? Ou seja, que nem sempre os números podem mostrar desempenhos reais. Abraço a todos…

    • A questão da performance está e sempre esteve ligada aos consumos. Uma consola ligada à energia pode efectivamente ter mais capacidade do que a funcionar por bateria.
      No entanto a questão do 1 Tflops levanta-me questões.
      Caso o SOC seja efectivamente um X1, ele é capaz de 1 Tflop sim senhor, mas apenas em meia precisão ou 16 bits. Até pode ter mais ligado à tomada, mas com esta precisão isto não é comparável a nível da qualidade do apresentado ao fornecido pela One/PS4 que trabalha a 32 bits.
      Ou seja, aqui falta saber exactamente do que estamos a falar. Até porque a X1 debitar mais de 1 Tflop será uma alteração ao SOC inicial. E conforme há essa alteração… podem haver outras!

      E sim, o artigo demorou bastante a ser feito. Encontrar um exemplo que fuja à realidade mas sem ser completamente desfasado da mesma, e que seja genérico o suficiente para que todos percebam, nem sempre é fácil.

  2. Qual o impacto do gpgpu na largura de banda? Essa técnica não aumentaria a temperatura da GPU?E até onde sei esse poder extra gerado pelo gpgpu pode ser usado para inteligência artificial e física… Tem algo a mais onde possa ser usado? Ótimo artigo.

    • Sim, o uso do GPGPU aumenta a temperatura, por isso nunca podes usar os CUs todos para GPGPU, mas sim apenas uma percentagem dos mesmos. Alternativamente colocas todos a funcionar de forma alternada para espalhar melhor a térmica pela bolacha do chip.
      Seja como for, actualmente o máximo usado tem sido 1 ou 2 CUs e isso ainda está longe daquilo que se pode eficientemente usar, especialmente na PS4 que possui 50% mais CUs que a One.
      Quanto ao uso da largura de banda ele existe. Mais processamento implica mais largura de banda. Mas é um acréscimo bem menor que o usado pelo GPU, e mais ao nível do usado por um CPU.
      Diga-se apenas que nesse campo os benefícios superam os prejuízos.

      Teoricamente o GPGPU poderia substituir totalmente o CPU em tudo o que este faz. A questão é que os motores atuais não prevêem isso, e o CPU ainda é indispensável. Daí a criação destes APUs que são basicamente GPUs auxiliados por um CPU.

      • Sendo o CPU da PS4 o gargalo de muitos jogos a que se forçar mais este tipo de processamento, a aqui um ponto mais sensível ainda! Se na PS4 o CPU é um gargalo, na PS4PRO o CPU se transforma em uma torneira. Se derem volta nisso a algo que vão melhorar tanto na Xbox quanto na PS4 AMATEUR.

        • A ideia é essa. Aumentar a capacidade de processamento genérico.
          Mas tens aí um conceito completamente errado. Na Pro o CPU não é pior. É melhor! Seria mau se a PS4 Pro pretendesse ser mais do que uma PS4. Mas não. A PS4 Pro é uma PS4, e trabalha com o mesmo nível de detalhe de uma 4. A única coisa que aumenta é a necessidade de memória para guardar mais informação de pixels e a largura de banda para transferir esses pixels. O CPU apenas aumenta na proporção necessária de garantir que não será ele a impedir as melhorias do GPU.
          A PS 4 Pro é uma PS4 pura e dura, apenas mais potente… Não é uma nova consola!

          Já agora, a diferença entre o CPU da PS4 e da One é de apenas 9% a favor desta última. Não é verdadeiramente nada que te possa dizer que uma consola tem gargalo no CPU e a outra não. Quando muito podes dizer que numa o gargalo é um pouco maior que na outra!

          • Mário, há jogos lançados ou que estão em desenvolvimento que tiram grande proveito desta tecnologia ao ponto de dizermos que só foi possível o conceber devido estas diferenças no hardware e programação?

          • Não só há, como já houve. Olha para Forza 5 e 6. O 6 só melhorou face ao 5 graças à computação assíncrona.
            Outro exemplo foi o Doom. Segundo os programadores, sem ela o jogo não seria possível nas consolas.
            Uncharted 4 e Gears of War 4 tambem a usam para física, animações de particulas e outras situações.

  3. Mário, já que o assunto é processamento, a inteligência artificial dos games se dá mais ao fato da programação e criatividade dos desenvolvedores ou o hardware tem grande relevância nisso?

    • A IA que vês nos jogos raramente é efectivamente IA. É isso sim uma quantidade grande de ciclos If, Then, Else, ou em portugues, Se, Então, Caso contrário, que se aplicam conforme as circunstâncias.
      Basicamente há uma programação que refere que:

      Se aconte isto, então faz aquilo, caso contrário faz aqueloutro

      Com várias instruções deste género consegues scriptar acções que parecem realistas, mas que na prática não tem uma verdadeira escolha livre, arbitrária e consciente.

      Para perceberes o que distingue verdadeiramente uma sequência bem scriptada deste tipo de verdadeira IA recomendo que vejas o filme Ex-Machina.

      • Acho que me expressei mal,mas entendi sua resposta.
        Eu achava que a Inteligência artificial tinha grande peso no processamento, mas pelo o que vc citou tem mais haver com a programação.

        • É uma série de rotinas. Tem peso como tudo, especialmente porque quanto mais forem os casos previstos, mais o comportamento se aproxima do real.
          Daí que tal como há motores de fisica, tambem há motores de IA. A questão é que tanto a fisica como a IA são aproximadas e adaptadas às necessidades de um jogo e ao hardware que o corre, e nada tem a ver com os modelos complexos de fisica e IA que ouves falar que existem.

  4. Excelente artigo Mário. Parabéns e obrigado pela explicação acessível a leigos como eu.
    Acabei lembrando dos computadores quânticos que trabalham de forma diferente e os processos ocorrem ao que entendi, praticamente em simultâneo, no canal In a nut Shell eles explicam bem os processos enfim, mas tem aquele problema todo com resfriamento e tudo, pensei que seria a próxima big thing mas parece que teremos que continuar um bom tempo com as velhas técnicas que foram demonstradas no artigo. E praticamente sanou uma dúvida que tinha a anos, se não seria possível e até melhor substituir CPUs por GPUs para o processamento geral dos PCs.

    • Substituir CPUs por GPUs…

      Eis algo que ainda não pode acontecer. Talvez no futuro.

      Apesar do GPU oferecer beneficios tremendos em algumas aplicações, não é ainda uma solução universal para todos os problemas. Algumas tarefas possuem natureza mais adequada ao processamento em série do que em paralelo, e nesses casos o CPU bate o GPU. Para além do mais os GPUs ainda não possuem os interfaces de input/output que são necessários para a computação crua. Apesar dos atuais avanços dos GPUs, nesta face o CPU está longe de estar em risco.

      A piorar a coisa está o facto de a programação em CPUs estar generalizada e bem conhecida. Já a dos GPUs está ainda em crescimento e obriga a investimento, experimentação e formação.

      • Hum, Ok entendido. Esse GPGPU já me deixa bastante satisfeito por hora. Uma pena não ser usado a mais tempo e também nos PCs. (Digo usado pra valer)

        • Culpa da Microsoft. A AMD andava à anos a pedir o DX12 mas a Microsoft não o fazia. Vai daí a AMD cria ela o Mantle, e a Microsoft aparece então com o DX12. A AMD cede o Mantle à Khronos e surge o Vulkan.
          Agora estamos cheios de APIs com bom suporte à computação, onde antes não tínhamos nada.
          Mas a Microsoft não avançou com o DX12 devido aos pedidos dos seus parceiros. Apenas o fez para melhorar as performances da sua consola que estava a vender mal.

  5. Artigo em minha homenagem haha

  6. Interessante artigo exclusivo, parabéns Mário. Bem elucidado como sempre.

  7. Mário no PS2 no final da geração fomos presentados com God of War 2 até hoje não acredito que aquele gráfico partia de um PS2.
    No final do PS3, The las of us, GTA V, tiraram leite de pedra novamente…

    O que aconteceu com essa geração que não foi aproveitada ao extremo, os consoles são fracos para as tecnologia de hoje?
    È possível que quando eles fizeram os consoles dessa gen, eles erraram na dedução da potencia?
    Mesmo eu sendo um leigo acho que a GPGPU foi pouco aproveitada então?
    E por qual motivo eles preferiram deixar de “lado” GPGPU e lançar console melhorado.

    Cade o jogo de encher os olhos, como foi GOW 2, The last, GTA V, ainda não tem nenhum…

    Existe jogos lindos, The Witcher 3, Uncharted 4, mas não chega ter o impacto visual dos outros que eu mencionei em suas respectivas épocas.

    Uma ultima pergunta para um jogo como Batlefield 1 rodar 60 FPS, 1080 p, sem ter quedas de FPS e ficar fixo nos 1080 p, em todo tipo de cenário, com as 64 pessoas jogando, cenários pequenos, abertos, com explosões, tiroteio e tudo o que tiver direito…
    Qual a potencia que o console precisa ter para isso funcionar?

    Xbox One/PS4 seria capaz de fazer isso, se não, o PS4 pro, Scorpio vai ser capaz?
    Uma ultima pergunta jogos para atingir o patamar perfeito, precisa mais de competência dos desenvolvedores ou potencia do console?

    • Igor…
      Infelizmente, e compreensivelmente, estás a ver as coisas mal.
      A questão é que a cada geração o grafismo evolui. Mas atualmente essa evolução chegou a um ponto onde o que vês não é tão marcante como a evolução da geração anterior.
      Por exemplo, nos primeiros computadores um boneco como um tato
      Seria algo do género \€##@>, mas depois o grafismo evolui.
      Começas a ter sprites (grafismo definido pelo utilizador 2D) em vez de simbolos, a resolução e detalhe sobem, e a certa altura o teu rato 2D já é inconfundivelmente um rato.
      Depois passas o bicho para 3D. Tens poucos poligonos e texturas de baixa definição, mas vais melhorando com a evolução das técnicas e hardware. O bicho vai ficando mais perfeito e a certa altura é mesmo realista sem que notes a geometria.
      Mas depois queres melhorar. E acrescentas pelo porque o harware já te deixa. Inicialmente pouco, depois mais, e acabas por cobrir o bicho todo.
      Mas depois queres que o pelo não seja apenas estético, e acrescentas-lhe fisica, e reflexos de luz. Queres que os olhos sejam vidrados e realistas, etc etc.
      O que te quero fazer ver é que a evolução variou por etapas onde em umas os passos eram mais notórios. Atualmente entraste na fase do pormenor e do realismo, e onde tens em Uncharted 4 o melhor exemplo disso mesmo.
      Estamos a falar da aplicação de efeitos gráficos pesados que consomem muita potencia, mas que, face ao que já vinha da geração passada, apenas acrescentam pormenor e realismo.
      Isso não é culpa das máquinas, é culpa da evolução.
      No futuro a tendencia é que os modelos de fisica, de luz e outros sejam ainda mais reais. A diferença face ao existente será muito pequena, mas as coisas não serão falsas e pré calculadas mas sim realistas e feitas em tempo real. A questão é que isso vai comer potencia sem veres para onde a mesma vai. E a cada geração a coisa será pior.
      É disso que esta começou a sofrer. Mas a realidade é que jogos como Uncharted 4, e nesse campo ele está num patamar que mais nenhum ainda atingiu, mostram bem o que distingue esta geração da outra, o realismo e a atenção ao pormenor. Tudo isso consome recursos, mas chama pouco à atenção. A questão é que está lá. E onde em Ryse: Son of Rome, os legionários retiravam lanças sabe-se lá de onde, e as mesmas desapareciam quando não estavam em uso, em Uncharted o pegar na arma obriga a pegar na fivela e passa-la sobre a cabeça, sendo que ela anda nas costas e não desaparece. A pistola entra e sai do coldre, e as espingardas quando entras num carro são pousadas junto do travão de mão. Mais ainda o relógio de drake tem os ponteiros e marcam horas condizentes com a luminosidade (apesar de não funcionar verdadeiramente), e o seu telemóvel funciona mesma com as mensagens que são recebidas a aparecerem mesmo no ecrã (e no jogo nem vês nada disso, tens de entrar no photomode e rodar a câmara).
      Isto é a nova geração. É a nível de evolução algo diferente do que estavas habituado.

      Quanto à pergunta sonre battlefield 1. Não há verdadeiramente nenhum hardware para consolas que o corra perfeito. A cada nova versão de um jogo, o mesmo é feito para explorar o hardware existente. Ele usa efeitos graficos, modelos de fisica, animações e outras situações criadas para tal. Resumidamente ele vai ter sempre limites dependendo do nível de detalhe.
      Claro que não estou a dizer com isto que duas TITAN X, ou mesmo apenas uma, não corram tudo sem problemas. O que estou a dizer é que os jogos a cada iteração tentam superar-se e exigem mais do hardware. Daí que as consolas ao serem limitadas na performance necessitam acima de tudo de serem bem optimizadas e qualquer problema reflete-se na performance. Elas são capazes, mas não são hardware de topo.
      E aqui o problema não é o hardware, são os programadores. Aliás, nem sequer são eles. São as editoras! Elas querem os jogos a cada ano e isso não dá tempo de optimizar correctamente. Depois temos jogos como AC Unity a 24 fps e 900p.

Os comentarios estao fechados.