O que é a capacidade de processamento “Out of order” de um CPU, e porque ela é relevante na obtenção de boas performances

Esta é uma tecnologia que se formos ler a explicação técnica se torna difícil de ser compreendida, mas que pode ser facilmente assimilada com um bom exemplo.

Xbox 360 e PS3 destacaram-se no seu tempo. No entanto, tanto uma consola como a outra, revelavam-se um pesadelo para os programadores, e o motivo??? A ausência de capacidade de processamento “Out of Order”.

Basicamente este tipo de lacuna tinha um enorme impacto na performance dos videojogos, obrigando a que todo o código tivesse de ser optimizado manualmente, de forma a que tais situações não ocorressem. E uma fez isso feito, os ganhos na performance, eram enormes, mas com um custo… Uma perda enorme de tempo na optimização manual de todo o código.

Mas então em que consiste a execução “Out of Order”?

Vamos ver um exemplo, usando umas pequenas linhas de código:



int x = 16;
x=x+4;
int y= 25;

Para quem não entende código, o que temos aqui é muito básico.

A primeira linha cria uma variável de nome x, que é definida como sendo um número inteiro, e que vai tomar o valor 16.

A segunda linha diz que x vai passar a ser o valor que x tem naquele momento, neste caso 16 conforme definido na linha anterior, ao qual acresce 4, ficando assim, x = 20

Finalmente, a terceira linha cria uma nova variável de nome y, igualmente um valor inteiro, com o valor 25.

Como podem perceber, no fundo este código não faz verdadeiramente nada, sendo que, a existir, faria parte de um conjunto de linhas de código bem mais complexo, que nos daria algum tipo de output.



Mas o relevante aqui não é o que o código faz, mas sim perceber que, executado este código, ele num processador sem capacidade de processamento “Out of Order”, ele vai correr sequencialmente, ou seja, pela ordem definida.

Ou seja, a primeira coisa que vai ser feita será a criação da variável, que será um numero inteiro, x, e à qual seria atribuído o valor 16.

A segunda coisa seria pegar no valor de x, somar 2, e substituir o valor anterior de x pelo novo valor, ou seja, 20.

A terceira, seria repetir o que se fez na primeira linha, mas agora para a variável inteira y, com o valor 25.

Ora neste código temos aqui uma dependência. Basicamente a segunda linha só pode ser executada após a atribuição de um valor inicial a x.



Mas a primeira e terceira linha não possuem qualquer dependência, podendo ser executadas imediatamente.

E sim, poder poderiam… não fosse o facto de este processador não suportar processamento “Out of Order”. E dessa forma,, como referido, as linhas são processadas sequencialmente, e isso quer dizer que y só é definido e recebe um valor, após x ter sido definido e atribuído um valor, e a operação seguinte de soma ter sido efetuada.

Resumidamente, temos isto:

int x = 16;
x=x+4; // Temos uma dependência da linha anterior
int y= 25; // Tem forçosamente de aguardar pelo processamento do que está antes, antes de poder ser processado.

O que isto quer dizer é que se fizermos a seguinte alteração ao código:



int y= 25;
int x = 16;
x=x+4; // Temos uma dependência da linha anterior

Não alteramos absolutamente nada no processamento, mas, mesmo indo sequencialmente pela ordem do código, y recebe logo uma atribuição, sem ter de esperar pelo cálculo que o prendia antes.

Ora isto é super relevante, pois num código e CPU capaz de multi threaded, que processa várias coisas ao mesmo tempo, um outro núcleo ou thread pode pegar no valor de Y e iniciar o processamento, sem ter de esperar pelo cálculo adicional feito à variável x.

Repitam isto milhões de vezes num código sequencial e cíclico, de um jogo, e temos aqui ganhos de performance tremendos por tempo que se poupa no processamento.

E neste caso a linha com dependência é uma coisa simples, mas esta poderia perfeitamente ser um cálculo complexo ou um subrotina completa.



Ora o que um CPU com capacidade de processamento “Out of Order” faria seria algo muito similar à alteração ao código que fizemos aqui. A diferença é que ele não alteraria a ordem das linhas de código, mas analisaria as mesmas a ver o que pode ser processado sem ter de esperar. Seria basicamente equivalente ao ajuste manual que acabamos de fazer, mas algo feito de forma automatizada e sem necessidade de intervenção manual.

Basicamente, com este exemplo simplificado, espero que tenham percebido o que é o processamento “Out of Order”, que como o nome indica, implica não seguir a ordem escrita, mas sim analisar de forma automatizada, dentro dos comandos recebidos, o que pode ser processado imediatamente, e o que tem de esperar, e o motivo pelo qual, PS4 e Xbox One, usaram CPUs com esta capacidade, reduzindo assim o tempo necessário para se optimizar os jogos.

 

 

 





14 Comentários
Antigos
Recentes
Inline Feedbacks
Ver todos os comentários
Juca
Juca
25 de Julho de 2022 16:05

off: Parece que trabalhar com um feedback da Epic para fazer o PS5 foi um grande acerto por parte da Sony. O Unreal Engine tem um bom rendimento em relação até aos melhores PC, e embora não tenha todo o poder bruto de muitos deles, consegue “trespassar” processos importantes para ter boa fluidez nos jogos.

https://www.eurogamer.net/digitalfoundry-2022-stray-plays-best-on-ps5-ps4-a-disservice-to-the-pc-version

Last edited 2 anos atrás by Juca
Juca
Juca
Responder a  Mário Armão Ferreira
25 de Julho de 2022 21:54

A compilação de shaders para cada computador, em especial onde isso fosse mais relevante, deveria ser feita logo na instalação do game no computador, mesmo demorando mais o processo, sei que em alguns casos é feita no primeiro acesso ao jogo como vocẽ mesmo já abordou noutro momento e que depois não precisa mais, mas como não é uma regra no PC, e fica a gosto de cada programador, isso é meio “chato”.

De qualquer forma, a questão dos shaders, até onde entendi, é dedução da DF para justificar os engasgos. No caso do Matrix, por exemplo, que sei que o que mais pesa ali é streaming, talvez ocorresse por outro motivo, mas mostrou como a Engine pode funcionar bem com o PS5 e nem tanto com um PC, logo, penso que foi um acerto da Sony desenvolver o console com um feedback e anseios da Epic quanto ao que uma máquina precisaria pra trabalhar bem com a engine deles, é um pouco nesse sentido o meu raciocínio.

Deto
Deto
25 de Julho de 2022 18:00

off:

quando vc achar algum “imparcial” falando “sonysta tb” manda esse print pra ele

[imgcomment image?1[/img]

[imgcomment image?1[/img]

[imgcomment image[/img]

o nojento fazendo fake news de jogo so pq não saiu no xbox caixão, eu vi a fonte fake, de um jogo que NÃO tem microtransações, SP, de qualidade, gráfico bonito, que AJUDA gatos de rua.

Depois tem os isentões aqui “combatendo o sonysmo” claro, tem que combater quem apoia jogos tipos Stray e defender esse pessoal ai do delírio club

Carlos Eduardo
Carlos Eduardo
Responder a  Deto
25 de Julho de 2022 18:25

Eu terminei o Stray ontem, minha first run durou quase 8 horas. É um jogo curto, mas não tão exagerado, até porque precisa de explorar os lugares para descobrir o que fazer. O jogo não é como Assassin’s Creed que tem um mapa te mostrando a localização exata para onde ir. Ou seja, o jogo te força a explorar o lugar se quiser avançar.

Na segunda run, já sabendo tudo o que precisa fazer, esse tempo cai facilmente para 2 horas, já que tu não precisa conversar com diversos robôs ou ficar tentando descobrir em qual lugar precisa ir, qual item pegar, onde subir, etc.

Um dos maiores problemas que vejo é que muita gente joga com guia porque quer platinar rapidamente e já pular para o próximo jogo. Cada um joga como quiser, mas eu acho muito injusto já rotularem o jogo como muito curto se baseando em troféu de speed run 2 horas. O gameplay real de quem está se divertindo (e não rushando/usando guia) pela primeira vez é muito mais longo do que 2 horas.

Deto
Deto
Responder a  Mário Armão Ferreira
25 de Julho de 2022 23:26

Adorei o jogo, tudo nele é bem feito… Te parte que me lembrou Uncharted nas partes que vc corre…

Ele tem um forte sendo de Jornada, se vc gosta de jogos com isso, vai adorar esse jogo

Tive um problema de Bug no HDR.

Se vc bota o PS5 com “suporte HDR quando disponível” o jogo vai para SDR, força HDR e fica bem melhor.

Acho q é BUG de não terem matado “HDR” no jogo…

Last edited 2 anos atrás by Deto
Deto
Deto
Responder a  Carlos Eduardo
25 de Julho de 2022 23:29

Eu adorei esse jogo, pretendo platinar ele daqui uns meses…

Vou esperar uns patchs para zerar mais uma vez normalmente e depois platinar

Netto
Netto
Responder a  Carlos Eduardo
26 de Julho de 2022 1:08

Gears of War 4 eu terminei de primeira no modo Hard em 6,5hs

Menos que no seu caso de Stray, isso óbvio cortando o tempo gasto assistindo as cutscenes (acredito eu)

Carlos Eduardo
Carlos Eduardo
25 de Julho de 2022 18:11

Interessante que quando se olha para aquela geração, a Microsoft poderia ter afundado a Sony de vez com seu PS3.

O Xbox clássico já fazia uso da arquitetura x86 com o Pentium III 733 mhz e usava a GPU da NVIDIA NV2A da arquitetura Kelvin. Era conhecido por ser mais fácil de se programar que o PS2, e também havia bastante paridade com o PC graças ao DX 8. Então a Microsoft desfez as parcerias com Intel (que na época lançou seu desastroso Pentium IV com 20 etapas do pipeline) e NVIDIA (onde nunca se acertavam nos preços), e faz as parcerias com IBM para a CPU PowerPC e ATI para a GPU Xenos.

Se a AMD tivesse comprado a ATI por volta de 2003 (aquisição feita em 2010), já seria plausível de se trabalhar em um formato unificado CPU + GPU do mesmo fabricante, usando Athlon 64 + Xenos. Embora todos os concorrentes estivessem no Power PC (PS3, Wii, WiiU), a Microsoft poderia ter continuado na arquitetura x86, e com a popularização da Steam naquela época que valorizou ainda mais o desenvolvimento de jogos usando x86, o Xbox 360 poderia ter obtido resultados ainda mais diferenciados, e talvez nem tivesse ocorrido o problema 3rl usando CPU x86. E o Xbox One talvez teria sido lançado com uma full retro com o Xbox 360.

É só uma confabulação mesmo, mas fica de aprendizado interessante sobre como a IBM por um tempo foi a única fabricante de CPU em todas as marcas de consolas do mercado.

Last edited 2 anos atrás by Carlos Eduardo
Juca
Juca
Responder a  Carlos Eduardo
25 de Julho de 2022 20:14

Novos negócios/produtos são uma aposta, quem arrisca no diferente tem maiores chances de estar na vanguarda do “padrão”, mas também de se lascar legal…

Deto
Deto
Responder a  Carlos Eduardo
25 de Julho de 2022 23:32

Acho que foi no Linus tech tips, que falaram que CPU x86_64 tem muito silício dedicado a retro de 20 anos atrás.

Será que não dá para Sony e MS personalizarem a CPU também?

Bom, a Sony andou alterando umas partes da CPU… Foi pouco, mas alterou.

Tem que cortar da CPU o que é inútil…

Last edited 2 anos atrás by Deto
error: Conteúdo protegido