Saltar para o conteúdo

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

Origem: Wikilivros, livros abertos por um mundo aberto.

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.

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.

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)

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.

É 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.

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

[editar | editar código-fonte]

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

[editar | editar código-fonte]

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. [1]
  • Arquivo explicando a arquitetura cell, e o modelo de programação.[2]
  • Descreve modelos de programação, técnicas e indica bibliotecas para facilitarem o desenvolvimento de aplicações.[3]
  • Tutorial bastante abrangente sobre programação no Cell.[4]

Ferramentas: SDKs, Compiladores e Bibliotecas

[editar | editar código-fonte]
  • 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. [5]
  • Octopiler - Projeto da IBM para facilitar a programação separando automaticamente um programa entre os várias cores. [6]

Aplicações e implementações

[editar | editar código-fonte]

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.

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).