Compile programas para o PlayStation 3 em PC de 32 bits

Neste documento veremos de forma simples e objetiva, como efetuar uma compilação cruzada gerando um programa HelloWord para o famoso console PlayStation 3. A distribuição utilizada foi o OpenSuSE 10.3 e o equipamento foi um modesto PC de 32 bits.

[ Hits: 44.289 ]

Por: Alessandro de Oliveira Faria (A.K.A. CABELO) em 26/05/2008 | Blog: http://assuntonerd.com.br


O que CELL?



Cell é o nome atribuído para uma arquitetura de microprocessador desenvolvida numa joint-venture entre a Sony, Toshiba e IBM. Do projeto da arquitetura até a primeira implementação foram gastos quatro anos, começando em Março de 2001, num custo estimado pela IBM de 400 milhões de dólares.

Este novo processador, baseado na arquitetura Power 64 bits, suporta todo o legado do Power, PowerPC de 32 e 64 bits.

A utilização inicial deste processador foi destinada ao console de jogos PlayStation 3 da Sony. Porém a sua aplicabilidade é infinita. Dos pequenos computadores com aplicações para manipulação de vídeo até as plataformas altas (mainframes). Hoje os novos servidores IBM Blade QS20 para computação de alta-performance utilizam CELL BE, ainda na IBM mainframes receberão processadores CELL BE integrados por meio de adaptadores PCI. No dia-a-dia dos consumidores finais, aparelhos de televisão digital, media-centers, aparelhos com "Blue-ray" e dispositivos embarcados serão fabricados com processador CELL BE.

Como funciona a criança?



Os núcleos: A primeira característica marcante no processador CELL BE é sua divisão interna. Ele possui 9 núcleos de processamento, algo absolutamente inovador e sem comparativos no mercado atual. Destes 9 núcleos, 8 são SPEs e 1 PPE.

PPE: "Power Processor Element", é um processador PPC de 64 bits ("dual thread") que funciona tanto em 64bits quanto em 32bits. Possui um cache L1 de 32Kbytes e um cache L2 de 512Kbytes. O PPE é responsável pela direta comunicação com o sistema operacional, divisão de tarefas (para si, e para os SPEs) e alocação de recursos. Ele é otimizado para o processamento intensivo de tarefas.

SPE: "Synergistic Processor Element" são os processadores de núcleo RISC especializados em computação vetorial, ou seja, o processamento de uma mesma instrução para um grupo de dados em um vetor (Também chamado de Single Instruction Multiple Data, SIMD). Os núcleos SPE foram desenvolvidos para suportarem programação de alto nível (como C/C++) com instruções específicas relacionadas a manipulação de conteúdo rico, ou seja, computação gráfica de áudio, jogos, novos métodos de interação homem-máquina. O SPEs são otimizados para o processamento intensivo de dados computacionais.

Dessa forma os 9 núcleos do processador oferecem ao desenvolvedor de aplicações uma plataforma multi-processada com suporte real computação paralela.

Ambos PPE e SPE são dependentes um do outro, uma vez que o PPE está mais ligado ao controle de tarefas do Sistema Operacional e portanto direciona o fluxo de dados inicial de processamento, já os SPEs são independentes no que tange o processamento. Eles são capazes de executar seus próprios programas e threads ao mesmo tempo que outro SPE está rodando um programa diferente.

Cada SPE tem completo acesso a memória (shared memory) através de um controlador DMA para cada SPE, isso permite o fluxo simultâneo de dados entre memória e processador independente e ao mesmo tempo que os outros processadores. O método de acesso a memória dos núcleos SPE são a maior diferença em relação ao PPE e é a grande inovação presente no processador CELL BE, uma vez que com este recurso o ciclo de máquina permite uma execução de instruções mais rápida em com maior conteúdo vindo da memória.

EIB:

O EIB é o caminho de comunicação de comandos e dados entre os núcleos dos 8 processadores e os controladores de memória e I/O, pelo qual os núcleos do processador podem fazer acesso de leitura e gravação simultâneamente e independente da ação de outro núcleo. O EIB suporta completo acesso as áreas de memória e operações multi-processadas simétricas. Com este desenho o processador CELL BE está otimizado para construção de clusters de processadores.

MIC:

Outra parte do processador a ser detalhada é o MIC, "Memory Interface Controller". Trata-se de um dispositivo "on chip" responsável pela interface de controle de memória entre o EIB e a memória física a ser utilizada pelo processador. O MIC suporta até duas interfaces Rambus XDR que juntas podem variar de 64 Mbytes até 64 Gbytes de memória DRAM.

BEI:

A última parte a ser apresentada é a explicação do BEI, "Broadband Engine Interface", a área responsável pela comunicação com os dispositivos de entrada e saída. O BEI é composto por 3 interfaces de controle de I/O:
  • BIC, "Broadband Interface Controler"
  • IOC, "Input Output Controller"
  • IIC, "Internal Interrupt Controller"

Estas 3 interfaces juntas permitem o gerenciamento de transferência de dados entre o EIB e os dispositivos de entrada e saída de dados, bem como a tradução dos endereços de tais dispositivos e o processamento de comandos relacionados aos mesmos.

Instalando os pacotes e compilando o Hello Word para o PS3.

No seu sistema OpenSuse 10.3, abra o Yast e selecione na seção "SOFTWARE" o item "Gestão de Software". A seguir no listbox "FILTRO", selecione a opção PADROES. Agora basta selecionar o grupo Desenvolvimento Cell, clicar no botão ACEITAR e aguardar a conclusão da instalação.



Ao terminar, o YAST instalou os seguintes pacotes o seu sistema OpenSuse:
  • cross-spu-binutils - Ferramentas GNU binutils para o desenvolvimento;
  • cross-spu-gcc - O compilador GNU C para o processador Cell SPU;
  • cross-spu-newlib - Biblioteca GNU C.

Página anterior     Próxima página

Páginas do artigo
   1. PlayStation 3 - Um brinquedo de gente grande...
   2. O que CELL?
   3. HelloWord.c para Playstation 3
Outros artigos deste autor

CUDA: Programe a sua NVIDIA

Dia: O Editor de diagrama (Microsoft Visio) para Linux

Biblioteca VBMcgi: Crie aplicações Web CGI em C++ com acesso ao banco Interbase/Firebird sem mistério

Instalando leitores de impressão digital modelo Digital Persona no Linux

ePub - O MP3 dos livros

Leitura recomendada

Levelhead - Um jogo Print & Play (realidade aumentada)

Criação de Jogos com Godot

Jogos para Linux (parte 4)

Blender Game Engine: Uma introdução

Emulando o saudoso jogo ELITE em seu Linux

  
Comentários
[1] Comentário enviado por Pianista em 26/05/2008 - 10:34h

Ótimo artigo! xD.. gostei..

[2] Comentário enviado por rafastv em 26/05/2008 - 11:07h

Eu também quero meu PS3!!!
Para quem não sabe a Unicamp usa os bichinhos como um cluster rodando Linux em cima http://g1.globo.com/Noticias/Tecnologia/0,,MUL146410-6174,00-UNICAMP+USA+PLAYSTATION+PARA+REALIZAR+P...
Ótimo artigo, também queria ter um amigo que tivesse o console, ser liso é osso hehehe

[3] Comentário enviado por vodooo em 26/05/2008 - 11:24h

Primeiramente, parabéns pelo artigo!

Bom, enquanto não conseguirem desbloquear o PS3, rodar o Linux nele como usuário doméstico (Desktop) será apenas para "impressionar" os amigos, pois a performance obtida rodando sobre o Hypervisor (espécie de firewall da Sony que "capa" quase todos os recursos, incluindo recursos 3D do console) é equivalente a um Celeron D320 com 256 de ram.

Afirmo isso por experiência própia, pois tenho em casa um PS3 rodando Ubuntu 7.04.

Mas... o desenpenho e "potência" dos processadores Cell é inquestionável.

Abraços

[4] Comentário enviado por tjpp em 26/05/2008 - 11:36h

O problema não é desbloquear o PS3 nem o Hypervisor. O problema é que o forte do Cell são as SPUs, os cores adicionais. O Hypervisor roda em uma das SPU e, portanto, não afeta o desempenho. O que é bloqueado para o Linux é o acesso acelerado à placa gráfica; só isto! Para baratear os custos de fabricação, uma das SPUs é desativada, deixando 6 disponíveis. Uma camada como o hypervisor é o que é usado nos processos de virtualização, como o Xen.

Para usar estes cores adicionais é necessário modificar o fonte dos programas e de maneira radical. Esta é a razão pela qual temos poucos jogos para o PS3, comparado com o Wii. O artigo do Cabelo mostra como fazer a cross-compilation para o Cell, sem tocar nos SPUs (afinal é um "hello, world"). Sem usar as SPUs explicitamente, o Cell é um PowerPC com dois cores.

[5] Comentário enviado por SMarcell em 26/05/2008 - 12:21h

E eu aqui com um Xbox 360! =(

[6] Comentário enviado por marcosmiras em 26/05/2008 - 13:46h

Sempre arregaçando nos artigos...
[]'s

[7] Comentário enviado por anunakin em 26/05/2008 - 15:15h

Valeu CABELO!
1- Só uns comentários essa HelloWorld roda numa das SPUs ... para rodar na PPU (PPC 64/32bits) o gcc normal faz o trabalho...

2- O acesso à placa RSX (8800) com aceleração 2D/3D, não é bloqueado apenas não há drivers, há muita informação sobre isso aqui: http://ps2dev.org/

3- Há um projeto de fazer uma placa virtual rodando em uma das SPUs....

[8] Comentário enviado por asdf2 em 26/05/2008 - 16:25h

Nota 10, mano.

[9] Comentário enviado por tjpp em 26/05/2008 - 16:37h

anunakin,

no site que você postou tem o artigo sobre o bloqueio a RSX, que impede que o pessoal consiga desenvolver o driver 3D: tem http://ps2dev.org/News/Is_Sony_blocking_3D_access%3F

Quem não fez a atualização de firmware, ainda tem acesso.

[10] Comentário enviado por cesar em 26/05/2008 - 17:13h

Show,


Abraço.

[11] Comentário enviado por izavos em 26/05/2008 - 18:31h

Cabelo:

Com base no seu artigo que é de excelente nível técnico, verifiquei que sites publicaram que a Toshiba tem um prototipo de notebook com processador “ Intel Core 2 Duo” + “Cell de 1.5 GHz de 4 elementos” definido versão reduzida!

Esse realizou a seguinte demostração, o notebook converteu um filme de uma hora com resolução de 640×480 pixels em uma versão em alta-definição, a 1920×1080 pixels, aplicando alguns filtros para melhoria da imagem durante o processo. A operação, que levaria mais de 24 horas em um notebook equipado apenas com o chip da Intel, foi realizada em apenas três horas.

Fonte “http://alexandrequevedo.wordpress.com/2008/01/21/toshiba-demonstra-notebook-equipado-com-processador-cell/ “.

Em outro site mostra a cara por assim dizer da tecnologia batizada de “SpursEngine “ que deu esse empurrão no micrinho “http://crave.cnet.com/8301-1_105-9940771-1.html“.

Pegunta que não quer calar, sera que a Apple fez bem em abandonar a IBM com os PowerPc?

Sera que o Cell pode um dia ser uma ameaça para a Nvidia, ATI, AMD ou mesmo a Intel ???

Mistério !

[12] Comentário enviado por Gabriel_Silva em 27/05/2008 - 01:14h

Bela materia aqui no Orkut Linux, haaaaaaaaa.

[13] Comentário enviado por LéoUbuntu em 27/05/2008 - 10:45h

um dia tb terei um Ps3 !

[14] Comentário enviado por anunakin em 28/05/2008 - 13:28h

TJPP,

Há mais alguns artigos no site, aonde uns hacker demostram que não houve bloquei o que houve foi que a sony mudou os ponteiros, constantes e tudo mais no hypervisor, ou seja o que não há é documentação...

Por exemplo... a maioria dos processadores mais novos da linha ARM possuem aceleração 2D/3D (o iPhone é só 2D) mas vocÊ já viu algum rodando um openGL ? mesmo com a documentação ninguém fez um driver ... e isso dá muito trabalho...

A sony parece que soltaria um driver com aceleração 2D... pro Linux na PS3...

[15] Comentário enviado por izavos em 29/05/2008 - 16:27h

Muito bom o artigo de relevância técnica para user do “VOL” !

Mesmo considerando todo o poder do “C” como ferramenta de programação, nada substitui o “Assembly“ para que realmente quer aprender sobre processadores e por fim programação.

A IBM ou Sony já libero alem de esquemas do processador, alguma relação de instruções do “Cell”.

Alguma ferramenta tipo “assemblador” para o mesmo , ou no Linux portado para o PS3.

Alguem sabe como funciona o gerenciamento de memoria do “Cell”, interrupções, apontadores, registradores, relação de subrotinas se tiver alguma.

Alguem já fez um Dump de um seguimento de memoria para ver o resultado ?

Como não poderia deixar passar essa, quero afirmar que gosto da abordagem do autor do artigo. Sem essa de auto promoção de “Sinônimo de qualquer coisa que escrevem por ai” !

[16] Comentário enviado por octopos em 10/03/2009 - 23:05h

ÓTIMO texto, como sempre muita coisa para apreender =].

Vim só ressaltar que na minha distribuição, as lib se encontravam em locais diferentes, em /usr/lib/cell :

spu-gcc -W -Wall -Winline -Wno-main -I. -I /usr/lib/cell/toolchain/lib/gcc/spu/4.1.1/include -include spu_intrinsics.h -O3 -c hello.c

spu-gcc -o hello hello.o -Wl,-N /usr/lib/cell/sysroot/usr/spu/lib/libc.a

Ainda não testei, para saber se usei as lib certas, pois assim como muitos, não tenho PS3 :P

Mas assim que testar volto e reposto.


Boa Cabelo!!

[17] Comentário enviado por XimenesWambach em 04/06/2009 - 15:44h

Mandou bem, testei em meu PS3, e tudo ok...
Estou com Yellow Dog no meu PS3 e funcionou blz

[18] Comentário enviado por PietroPC em 04/02/2010 - 21:10h

XimenesWambach:
Eu estava instalando o YDL 6.2 no PS3, mas a instalação começou ontem dia 3 por volta das 19:00 e agora ainda não acabou.
Tipo o PS3 estava lendo o DVD, dava para ouvir, mas não saia da tela a mensagem:
"Iniciando o processo de instalação. Isso pode demorar vários minutos."
Não é possivel que em 1 dia não tenha copiado todo o conteúdo do DVD.
Eu selecionei a instalação de games, o GNOME, KDE, XFCE, ferramentas de desenvolvimento e desenvolvimento WEB.
Agora eu cancelei a instalação e vo ve se começo de novo!


Contribuir com comentário