# Programação Paralela em Arquiteturas Multi-Core/Arquitetura Cell Broadband Engine

Este capítulo está estruturado da seguinte forma: primeiramente uma visão geral da arquitetura, para situar o leitor, seguido de um detalhamento da arquitetura e de seus componentes (PPE, SPE, EIB e FlexIO). Após segue uma seção sobre desenvolvimento para Cell, mostrando o modelo de programação e as ferramentas existentes. Finalmente segue uma listagem de aplicações e implementações existentes e uma discussão sobre o futuro da arquitetura. Ao final está uma listagem das referências.

## Visão geral

A arquitetura Cell foi criada em conjunto pela Sony, Toshiba e IBM. O Cell combina um processador PowerPC com coprocessadores com recursos multimídia e processamento vetorial.
O Cell é conhecido por ser o processador do PlayStation 3, uma entre as muitas aplicações desse processador.
Ele possui grosso modo quatro partes. Estrutura externa de entrada e saída (FlexIO), o processador principal (Power Processing Element - PPE), 8 coprocessadores (Synergistic Processing Elements - SPE) e um barramento circular de dados de alta banda que une as 3 partes (Element Interconnect Bus - EIB).
Entre as principais características estão:
* 64 bits.
* Não permite execução de instruções out-of-order.
* É capaz de despachar até duas instruções por ciclo.
* Composto por uma cache L2 de 512KiB, um cache L1 two-way de 32KiB de instruções e um cache four-way set-associative de dados.

## Arquitetura

O chip do processador Cell pode ser organizado em várias configurações diferentes. A mais comum é a utilização de uma unidade PPE, o Power Processor Element, e múltiplas SPEs, os Synergistic Processing Elements. A PPE e as SPEs são ligadas por um barramento interno de alta velocidade, o EIB (Element Interconnect Bus). Ficando dessa forma:
* 1 Power Processor Element (PPE)
* 8 Synergistic Processor Elements (SPEs)
* Element Interconnect Bus (EIB)
* Direct Memory Access Controller (DMAC)
* 2 Rambus XDR memory controllers
* Interface Rambus FlexIO (Input / Output)

### PPE

O PPE é uma unidade baseada na arquitetura POWER, que é a base das linhas POWER e PowerPc. O papel do PPE é servir como um controlador das várias SPEs, que serão responsáveis pela execução da maior parte da carga de trabalho. Como o PPE é muito similar a outros processadores PowerPc de 64 bits, será possível utilizá-lo com sistemas operacionais convencionais, já disponíveis para esta arquitetura.

### SPE

É um processador totalmente autônomo, capaz de suportar unicamente instruções SIMD. Tem um banco de registradores único. Baseado em arquitetura RISC, com registradores de 128 bits, capazes de guardar qualquer tipo de dados.

### FlexIO

As sete vias de transmissão e cinco de recebimento Rambus FlexIO tem a largura de um byte. Essas vias podem ser configuradas como duas interfaces lógicas. Com as vias Rambus FlexIO, operando a 5Ghz, as interfaces de I/O (Input/Output) atingem um pico de taxa de transferência de 30GB/s de saída e 25GB/s de entrada. Uma configuração típica pode ter uma interface de I/O configurada com taxas de transferência de 30GB/s para saída e 20GB/s para entrada, e outra interface com 5GB/s para saída e 5GB/s para entrada.
Dados e comandos na interface de I/O são transmitidos como pacotes. Além do comando, resposta e dado, cada pacote pode carregar informação como tag de dado, tamanho do dado, identificador de comando e informações para controle de fluxo, assim como outras informações. Por causa destes overheads e tempos de chegada de dados e comandos potencialmente não ótimos, a taxa de transferência efetiva nas duas interfaces pode ser menor, variando entre 50% a 80% da taxa bruta. Claro que outros fatores como tráfego de dados no EIB, alocação de recursos, velocidade dos dispositivos de I/O, características de ordenação do tráfego de dados de I/O e interrupções podem, potencialmente, reduzir a taxa de transferência mais ainda.

## Desenvolvimento

Algumas das principais características do desenvolvimento para Cell:
* Desenvolvimento em cima do Linux para PowerPC.
* Programação para as SPEs é baseada em C, com suporte parcial a C++ (Fortran sendo estudada).
* É responsabilidade do programador fazer o trabalho de consistência entre memória principal e LocalStore nas SPEs.
A pesquisa de ferramentas e frameworks para Cell busca prover uma camada de abstração acima do hardware, que permita que as aplicações sejam escaláveis na presença de outros processadores. Este processo demanda novas ferramentas, já que o paradigma de programação para o Cell envolve programas para cada um dos SPEs, que contém todas as suas instruções e seus dados. Este paradigma é diferente do utilizado por linguagens orientadas a objeto, como Java.
Essas e outras peculiaridades fazem a programação em Cell ser razoavelmente diferente e mais complicada, o que limita muito o número de desenvolvedores preparados.

### Modelo de programação

Como o modelo de programação do Cell é muito complexo e amplo, seguem alguns documentos que tratam dele com mais detalhes:
* A página 4 desse artigo fala sobre a anatomia de uma aplicação Cell.
* Arquivo explicando a arquitetura cell, e o modelo de programação.
* Descreve modelos de programação, técnicas e indica bibliotecas para facilitarem o desenvolvimento de aplicações.
* Tutorial bastante abrangente sobre programação no Cell.

### Ferramentas: SDKs, Compiladores e Bibliotecas

* Cell SDK.
* libspe2 - Biblioteca que simplifica a programação, abstraindo o modelo e permitindo programar de forma parecida com outras plataformas. Explicação passo a passo de como cross-compilar usando Linux.
* GDB - Ferramenta de depuração.
* Existem projetos chamados Single Source Compilers que seriam capazes de gerar código de máquina tanto para o PPE quanto para os SPEs.
* Octopiler - Projeto da IBM para facilitar a programação separando automaticamente um programa entre os várias cores.

## Aplicações e implementações

As principais aplicações do Cell são para multimídia e aplicações científicas.
Atualmente ele está sendo implementado em:
* PlayStation 3, um console de vídeo game produzido pela SONY.
* Computação científica, através da integração de vários PlayStation 3 em cluster
São previstas as seguintes implementações:
* Cinema em casa, a Toshiba anunciou que está considerando produzir televisões de alta definição usando o Cell. A empresa já apresentou um sistema que pode decodificar até 48 fluxos de vídeo MPEG-2 em telas de 1920x1080.
* Supercomputadores, o novo supercomputador sendo planejado pela IBM, o IBM Roadrunner, será um híbrido de um CISC de propósito geral e processadores Cell. Foi anunciado que provavelmente este será o primeiro supercomputador capaz de trabalhar na escala dos petaflops. Ele usará uma versão mais atualizada do Cell, feita com tecnologia de 65nm e SPUs (Synergistic Processing Unit) capazes de executar cálculos de dupla precisão em registradores de 128 bits, alcançando 100 gigaflops de precisão dupla.

## Futuro

A IBM já anunciou que pretende diminuir o tamanho dos transistores do Cell abaixo de 90 nm (tecnologia atual) para poder aumentar o clock sem gerar problemas térmicos e diminuir o consumo de energia.
Já estão sendo criados e produzidos os primeiros Cells de 65 nm, que reduzem o tamanho do chip de 230 mm² para 120 mm², diminuindo muito os gastos com a produção e permitindo um clock de 6 GHz a 1.3 V, permitindo uma performance de 384 GLFOPS, bem maior que os 204.8 GFLOPS do Cell de 90 nm.
Embora ainda não tenha sido mostrada nenhuma tecnologia para diminuir o tamanho além dos 65 nm, é possível que isso ocorra caso o Cell tenha muito sucesso, pois a aliança Sony, Toshiba e IBM anunciou que pretende chegar aos 45 nm e aos 32 nm (apesar de não ter mencionado que será com o Cell).

## Referências

* Pequena descrição sobre a arquitetura. Uma interessante introdução ao tema.
* Texto explicativo, com todos os detalhes da arquitetura.
* Apresenta por alto o funcionamento, o sistema de memória e cache e os componentes do processador.
* Explica bem o funcionamento dos processadores, o paralelismo e o sistema de memória.
* Principais características e funcionalidades do processador Cell. São apresentados detalhes do funcionamento de cada uma das estruturas que compõe a arquitetura Cell, e sua organização é comparada com a de outros processadores, dentre eles o Emotion Engine, core do console PlayStation 2.
* Utilização dos processadores Cell no PlayStation 3.
* Explica sobre a arquitetura do Cell e também apresenta uma discussão sobre o seu desempenho.
* Página com vários artigos sobre como desenvolver aplicações de alto desempenho para a arquitetura Cell.
* A página da Wikipédia sobre o Cell explica por alto as características da arquitetura e dá uma visão geral do processador.
* Explica o potencial do Cell para computação científica.
* Artigo de alunos da UNICAMP mostrando os benefícios que o processador Cell apresenta em relação ao paralelismo.
* Slides da IBM que justificam a necessidade de se usar Cell.
* Artigo explicando a arquitetura Cell, de forma relativamente simples, fornecendo alguns dados técnicos.
* Artigo explicando a arquitetura Cell, de forma relativamente simples, fornecendo alguns dados técnicos.
* Artigo explicando a arquitetura Cell, de forma relativamente simples, fornecendo alguns dados técnicos.
* Um site da Sony explicando minuciosamente a arquitetura. O domínio é japonês, mas está em inglês com PDF muito bons (e grandes). É bem detalhista, mas é bom para entender direito como é a arquitetura.
* Uma visão geral da arquitetura exemplificando eficiência, aplicações, etc.
* Um pouco mais abrangente relatando a estrutura do processador, fluxo de dados, programação para o Cell, entre outros.
* Notícia falando sobre o projeto de integrar o Cell Broadband Engine num poderoso mainframe da IBM para lidar com a nova geração de aplicações do mundo virtual, como a Internet 3D.
* Notícia falando sobre o uso do Cell Broadband Engine para criar imagens médicas.
* Artigo da Wikipédia falando sobre as duas versões do Cell já existentes hoje e das próximas versões a serem lançadas (de acordo com o Roadmap da Intel).
* [http://cag.csail.mit.edu/crg/papers/eichenberger05cell.pdf Artigo falando sobre estratégias que podem ser utilizadas por compiladores para aumentar a eficiência de utilização do Cell. Como evitar cenários onde a arquitetura está sujeita a grandes penalidades, o que ocorre, por exemplo, quando o compilador não consegue dar boas "dicas" de branch prediction em aplicações que possuem muitos comandos condicionais.
* PDF que apresenta uma visão clara da arquitetura do processador Cell, descrevendo seu funcionamento e mostrando suas vantagens.
* Uma explicação do processador através de sua utilização nos jogos.
* Visão geral das características de desempenho do Cell BE. São apresentadas informações referentes ao pipeline do processador e ao relacionamento com memórias cache. Além disso, são mostrados exemplos de aplicações e suas características de desempenho. Por exemplo, são mostradas comparações de resultados de desempenho envolvendo precisão dupla, decodificação de vídeo MPEG-2 e multiplicação de matrizes.
* Artigo que apresenta, de forma bastante resumida, as principais características e funcionalidades do processador Cell BE. Sua organização é comparada, inclusive, ao Emotion Engine, core do console PlayStation 2. Esse conteúdo pode ser bastante importante na auxílio à determinação de tópicos a serem explorados na discussão global sobre o processador em questão.
* Artigo bastante interessante que dá detalhes sobre a arquitetura e fala um pouco sobre o futuro do Cell.
* Apresentação sobre a arquitetura Cell.
* Apresentação da IBM sobre Cell Broadband Engine.
* Integração entre Cell Broadband Engine e Mainframe.
* Introdução à arquitetura Cell Broadband Engine. Dando enfoque à aplicações de processamento de sinal, pois é notado pelos autores que esta arquitetura se destaca nesta área. Os autores também explicam os atributos fundamentais da arquitetura que determinam estas vantagens de performance do Cell.
* Manual da arquitetura Cell Broadband Engine. São descritos, com minúcia, os detalhes técnicos da arquitetura e de todos seus componentes.
* Funcionamento, sistema de memória e cache e os componentes do processador.
* Explica bem o funcionamento dos processadores, o paralelismo e o sistema de memória.
* Ambiente de código aberto para Sistemas de software em Cell Broadband Engine
* Ambiente de código aberto para Sistemas de software em Cell Broadband Engine
* Apresentação da IBM sobre o projeto da eficiência do processador Cell.
* Artigo que apresenta diversos modelos de programação para o Cell Broadband Engine (CBE) Processor, dos mais simples aos mais avançados.
* Slides explicando detalhadamente a arquitetura do Cell, dando ênfase ao quesito performance.
* Uso da arquitetura Cell em um problema real com contém uma comparação de performance com o Core 2 Duo. Simulação de fluxo de sangue no cérebro humano.
* Editorial sobre as limitações do Cell para uso em aplicações científicas.
* Descreve a criação de um compilador de Fortran para o Cell.
* Exemplo de aplicação apresenta conclusões interessantes.
* Excelente artigo sobre programação no Cell.