Obrigada Playstation 3 pelo Cell

ps31[1]

Talvez muitos não se apercebam disso, mas um dos grandes responsáveis pela evolução das técnicas de programação e pelos resultados que se obtêm atualmente nas consolas de nova geração foi… o Cell!

ps31[1]

Com o lançamento da Playstation 3 os programadores viram-se perante um dilema. Havia uma consola que requeria uma programação radicalmente diferente da que estavam habituados. E ao contrário da Xbox 360 onde as mesmas técnicas seriam sempre bem vindas, mas não era uma obrigação implementar algo de novo, no Cell era o tudo ou nada. Ou as técnicas evoluíam ou não se poderia nunca tirar partido da sua performance.

Apesar de a Xbox One ter um processador de 3 núcleos, os mesmos eram inicialmente usados na base comum para a altura. Basicamente tudo era processado no núcleo principal, com os restantes a fazerem cálculos acessórios. Aliás muitos dos jogos iniciais da PS3 basicamente apenas usavam o PPU.

Mas com o Cell foi necessário aprender-se a paralelizar o código. Processar completamente em paralelo pois o único núcleo do processador central da PS3 não se revelava de forma alguma suficiente.

Esta paralelização tornou-se fulcral para as melhorias que temos visto nas performances no uso dos CPUs de vários núcleos, e é mesmo o principal ponto de focagem e benefício do futuro DirectX 12. Algo que o API da PS3 iniciou!

Na nova geração o problema volta a surgir, desta vez em ambas as consolas com a programação dos GPUs. No fundo estes são sistemas de processamento paralelo e que estarão agora numa posição muito mais benéfica para poderem ser explorados do que o que aconteceria se o Cell não tivesse forçado ao desenvolvimento de técnicas de paralelização de código.

Tal programação obrigou a uma outra alteração. Uma concepção do software para funcionar com um conceito radicalmente diferente denominado de “data-driven“. Basicamente este é um paradigma de programação muito menos linear e onde o programa define os dados a serem usados e o processo requerido em vez de definir os passos a serem tomados. Neste tipo de programação são os dados que controlam o fluxo do programa e não a lógica do mesmo. Basicamente aplica-se um conjunto de regras ao programa e são os dados que chegam que definem qual a regra a utilizar. Ou seja não há uma lineariedade fixa.


Num exemplo muito básico:

Se temos associado ao nome Joao a morada Porto, e ao nome Joaquim a morada Madrid, num código normal o que faríamos caso pretendêssemos obter a morada seria algo do género:

Se nome = João escrever “Porto, Portugal”;
Se nome=Joaquim escrever “Madrid, Espanha”

Em código.

data_joao = {'nome': 'João', 'morada': 'Porto }
data_joaquim = {'nome': 'Joaquim', 'morada': 'Lisboa' }
go = function(x) 
    if x.nome == 'João' 
    then 
        print("Porto, Portugal") 
    else 
        print("Madrid, Espanha") 
end

Ou seja, uma condição para cada caso.

Num caso de programação por fluxo de dados o código seria mais simples, escrevendo logo a morada conforme o nome que chegasse nos dados.

Seria algo do género:

data_joao = {'nome': 'João', 'morada': function(){ print("Porto, Portugal") }
data_joaquim = {'nome': 'Joaquim', 'morada': function(){ print("Madrid, Espanha") }
go = function(x)
    x.morada()
end

Ou seja, no primeiro caso a decisão de escolher o resultado está implementado na lógica do programa. Já no segundo caso o resultado é determinado pelo nome que é passado à função. Daí que se refere que o resultado é conduzido pelos dados (Data-Driven).

As vantagens desta situação são muitas e permitiram a criação de mundos muito mais abertos. Não há condições a aplicar aos diversos locais, mas sim regras gerais que são aplicadas de acordo com os dados que chegam ao mundo.

E mais uma vez, o Cell, ao necessitar deste tipo de situação para poder funcionar com os seis vários SPEs que não comunicavam entre si, e que forçavam à implementação deste tipo de processamento no seu processador central, ajudou à criação de técnicas que permitiram mundos maiores e mais abertos.

Mas onde as técnicas aprendidas com o Cell terão grande uso será na computação assíncrona que será necessária para os GPUs. Apesar de a programação de um GPU ser muito diferente da dos SPEs do Cell, as técnicas básicas são as mesmas. Isso quer dizer que, mesmo com grandes diferenças, rotinas não optimizadas e com processos muito embrionários,  os programadores não entrarão completamente às cegas. E devemos agradecer isso em grande parte ao Cell.

Daí que cremos que se impõem dizer. Obrigada Playstation 3 pelo Cell! Sem ele os jogos atuais seriam provavelmente muito menos avançados.

Publicidade

Posts Relacionados