Workshop Cell

20 11 2006

Acabei de receber um e-mail da IBM noticiando que haverá mais um workshop de programação CELL, o mesmo que eu participei a pouco tempo atrás. Vale a pena, pra quem pode, assistir o workshop aprende-se muito sobre arquitetura, C e programação paralela!

O workshop acontecerá nos dias 30 de Novembro e 1 de Desembro, no Instituto Eldorado. 50 Vagas, se tiver interesse, corra!!

A 2-day Cell BE programming workshop is scheduled for Nov 30 and Dec 1,
2006 at Instituto Eldorado, Campinas, Brazil.

The registration is limited to 50, so please register as soon as possible.
I hope to see all of you at the workshop in 10 days.

Announcement of the workshop:
http://www-128.ibm.com/developerworks/views/global/techbriefing.jsp?expand=Latin+America&topic_by=All+Topics&geo_by=All+Geographies&sort_order=asc&lcl_sort_order=asc&start_no=1&show_abstract=true&sort_by=Location&end_no=100&show_all=false&S_TACT=106AH50W&S_CMP=LPTCHBRF

Workshop registration:
https://www-926.ibm.com/events/dWLive/dwlive2006.nsf/enrollall?OpenForm&seminar=kwo4011&enroll=kwe4723&pages=kwa1343&S_TACT=106AH50W&S_CMP=LPTCHBRF

Address of Instituto Eldorado:

Instituto de Pesquisas Eldorado
Rodovia Campinas Mogi-Mirim, Km 118,5
Condomínio CPqD – Prédio 12 (Oficina do Futuro)
Campinas – SP

Directions:
- By car:
Pela Rodovia Campinas Mogi Mirim, passar em frente ao condomínio
Alphaville. Aguardar placa “Polo II de Alta Tecnologia”, em frente ao Posto
Texaco. Pegar esse retorno, passando por baixo da ponte da rodovia, como se fosse retornar. Manter-se ŕ direita da rodovia e pegar a 1a rua ŕ direita, em frente a um ponto de ônibus. Passará em frente ŕ empresa X-TAL e seguir em frente. Estará no Condomínio CPqD.

Boa Sorte!

ps. GG para com essas putarias ae!! Visita assim não conta ¬¬





TechnicalBrief – Cell (Dia2)

26 10 2006

Fim das aulas! Foi rápido, mas foi bom enquanto durou! Depois de dois dias com bombardeios massivos de informação eu estou esgotado(dirigir mata também!), precisando de uma boa noite de sono! Mas antes, ao blog! Escrever enquanto as coisas ainda estão frescas na cabeça! Vou manter o mesmo esquema de ontem que parece que funcionou bem!

Arquitetura
Tenho para acrescentar aqui alguns detalhes técnicos que pude observar enquanto estavamos fazendo as pequenas aplicações para o cell.

1. O processador como um todo tem… 128 registradores de uso geral!!!!!! Comparado à arquitetura x86 (4 registradores) e com a x86_64 (8 registradores) a arquitetura cell obviamente tem muuuiiiito mais registradores!! Enquanto estavamos avaliando o desenpenho de um aplicativo (multiplicação de matrizes) foram usados 41 registradores… nem perto número total de registradores.
2. Cada um desses 128 registradores guardam 4 posições de 32bits cada (128bits no total), o que facilita as operações vetoriais.

3. Cada SPU tem dois pipelines! Um somente para funções aritiméticas outro para branchs, etc etc.

4. Os SPU não têm previsões de branch, então toda e qualquer previsação que seja feita e realizada via compilador = [

5. O cell está suportando executáveis até 256Kb… ou seja, se precisar de mais chore! Classes virtuais e Typedefs mal definidos podem causar vááários problemas!

Programação
Hoje tivemos contato com a vetorização de problemas, que pelo que entendi pode ser aplicado em poucos casos, mas que quando processado nos processadores cell têm um ganho de desenpenho de praticamente quatro vezes, se não mais. Todo esse ganho de desenpenho acontece por causa de uma característica da arquitetura que citei acima. Já que cada registrador apresentar 4 posições de um vetor, então, por exemplo, quando se quer somar dois vetores, as somas serão feitas entre blocos de quatro posições(ou seja a soma entre dois registradores). Além da soma existem várias operções entre vetores, que eu me lembre as aritméticas e as de seleção, porém existem várias funções nas bibliotecas nativas. Mas retomando,em outras palavras, na arquitetura x86 o atômo seria uma posição do vetor certo ? Na arquitura cell o atômo é um vetor de quatro posições.

O que nos leva a um problema! Se o atômo do cell é um vetor de 4 posições, como são feitas operações com inteiros simples, ou floats simples ?? Você deve estar imaginando, mas não quer aceitar… Sim… os inteiros(qualquer escalar de forma geral) são convertidos para vetores, os vetores são somados, e o vetor é convertido para int novamente! Veja, enquanto uma operação a+1 exige somente uma instrução para x86, para a arquitetura cell, são necessárias SEIS, isso mesmo SEIS, instruções. Agora imagine você um “FOR”, ele ficaria 6 vezes mais lento cada vez que sua repetição for executada! Agora amplie isso para todo uma aplicação, se em sua maioria ela fizer processamento de valores escalares, ela será bem mais lenta que a mesma aplicação rodando em x86. Viu? Cell não é bom para tudo, definitivamente.

Não sei se ficou claro no Post anterior, mas o PPE é equivalente a um PowerPC, mas o C, é o exatamente o mesmo que nós estamos acostumado, só algumas funções são diferentes por causa das bibliotecas. O mesmo se aplica ao SPE.

Conclusão
Continuo com a mesma impressão que tive ontem, Cell parece ser muito bom para algumas tarefas, as que podem ser subdivididas e processadas vetorialmente. Fora isso, esqueça Cell, os x86, x86_64 fazem muito bem o trabalho com programação escalar! Sobre a programação, também continuo a afirmar que o SDK está precoce! Mas tenho que admitir! Valeu a pena!

Primera Turma TechnicalBrief da Améria Latina
Pessoal Presente no TechnicalBrief

Break, Time to mails!
Intervalinho, hora de ler e-mails!

UFSCar
Ping-Pong no canto inferior direito da foto!





TechnicalBrief – Cell (Dia1)

25 10 2006

Fim do primeiro dia do Technical Brief!

Finalmente depois de uma viagem de São Carlos até Campinas (2horas) chegamos na UNICAMP e adivinha só ? Não estavamos na lista dos participantes! Depois de alguns telefonemas e um belo chá de cadeira fomos incluidos na lista! X D

Já lá dentro e com a palestra rolando (uma baita introdução sobre a arquitetura do Processador Cell) conseguimos uma HD externa com a imagem de vmware de meros… 8.1Gb! Depois de perder algumas horas copiando na partição onde eu tinha o MacOSX, tive problemas com o maldito VMware Player… corrigidos os problemas de memória, pude finalmente rodar minha imagem! Aeeee.

ScreenShot da Emulação

Com a imagem rodando pude emular um terminal com dois processadores Cell!! Muuuiiito lento… o processador fica constantemente com 100% de uso… mas tenho que adimitir! Valeu a pena! Toda a teoria que aprendi na matéria de Sistemas Operacionais foi aplicada nessas 6 horas de aula!

Arquitetura Cell

O esquema de funcionamento do cell pode ser traduzido (basicamente) por uma imagem! Que demostra os oito SPU que formam o SPE, estes são os núcleos mais poderosos do processador que teoricamente deveriam processar tarefas específicas, por exemplo, um core cuidaria do som, outro do vídeo, etc etc etc. Além do SPE existe o PPE que é composto po um processador de menor poder de processamento que funciona como regulador dos SPU.
O mais interessante nessa parte é que o SPU nada mais é que um PowerPc.

Arquitetura Cell

Alias, faltou dizer que TODO acesso a memória é feito por DMA! cada SPU tem um buffer (desculpas mas eu não me lembro quanto), tudo isso geralmente é sincronizado por Mailboxes (finalmente uma utilidade pra aula de S.O).

Programação

A programação foi feita em C, o que facilitou bastante nossa vida! Como os programas desenvolvidos em aula eram simples sem nenhum segredo, qualquer um que tiver acesso a documentação pode desenvolver fácilmente softwares para cell. Só precisa dedicar um bom tempo para descobrir o que cada função obscura faz, hehehehe. Mas acredito alguns detalhes merecem destaque:

O desenvolvimento básico é constituido de duas partes: Programação da PPE e da SPE, ou seja, é necessário programar um gerenciador de threads(PPE) e o que cada thread irá realizar(SPE), “simplesmente isso” então são basicamente dois arquivos, um que cria mailboxes e threads, e outro que consome as mailboxes (ou as alimenta) e definem o que cada thread irá realizar.

Existem também detalhes sobre o acesso a memória no desenvolvimento, ao meu ver, sem ter visto qualquer coisa sobre, pode se tornar um grande pesadelo! Como o acesso é feito diretamente a memória (DMA) vários cálculos tem de ser feitos quando se quer acessar ou escrever alguma dos SPUs! (Geralmente usar a função que retorna o ponteiro da primeira posição do buffer do SPU e somar a posição no buffer). Portanto muito cuidado ao acessar a memória.

Conclusão

Não posso dizer que não fiquei empolgado, o tecnologia parece ser bem interessante para casos de multiprocessamento, onde uma tarefa pode ser dividida e processada em vários processadores… mas… a viabilidade para desenvolver hoje para Cell, como nos foi passado é praticamente nula! As bibliotecas ainda têm funções problemáticas, como por exemplo, ao criar um thread ainda não é possível escolher qual SPU ela será executada… Simplesmente é joga-se um valor genérico (-1) para a função que indica que o thread pode ser processado em qualquer SPU.

Portanto vamos ver amanhã com o processamento vertorial (não faço a mínima idéia de como isso funciona!) se a viabilidade aumenta um pouco.





Programação Cell

24 10 2006

Estou arrumando as malas!!! Na verdade só arrumando a mochila do Note = P

Mala
Estou indo pra Campinas amanhã cedinho, assistir e participar do Technical Brief sobre o processador Cell da IBM, também conhecido como BroadBand ou processador do Playstation3. Eu e mais três colegas aqui da federal estaremos lá e o pessoal da IBM disse que veremos:

  • Uma visão geral da arquitetura cell (multi-core!)
  • Ambiente de desenvolvimento (esclarecimentos sobre o SDK)
  • E muiiiita mão na massa!

Serão dois dias de aulas e práticas. Vou ver se consigo transmitir o máximo que eu aprender por lá, aqui no blog!

[]’s Pacu

ps. Preciso arranjar um jeito de colocar as fotos do Flickr aqui no blog!!