Embora o chip de célula possa ter várias configurações diferentes, a configuração básica é um chip multi-core composto por um “Elemento Processador de Potência” (“EPI”) (às vezes chamado de “Elemento Processador”, ou “PE”), e vários “Elementos de Processamento Sinergético” (“SPE”). Os EPIs e SPEs são ligados entre si por um barramento interno de alta velocidade denominado “Elemento de Interligação de Barramento” (“EIB”).
Elemento Processador de Potência (EPI) Editar
O EPI é o núcleo da CPU PowerPC, de dupla emissão em ordem de dois sentidos, com um pipeline de 23 estágios atuando como controlador para os oito EPIs, que lidam com a maior parte da carga de trabalho computacional. O EPI tem capacidades limitadas de execução fora de ordem; pode executar cargas fora de ordem e tem pipelines de execução atrasada. O EPI irá trabalhar com sistemas operacionais convencionais devido à sua semelhança com outros processadores PowerPC de 64 bits, enquanto os EPIs são projetados para execução de código de ponto flutuante vetorizado. O PPE contém um cache de 64 KiB nível 1 (32 instruções KiB e 32 dados KiB) e um cache de 512 KiB nível 2. O tamanho de uma linha de cache é de 128 bytes. Além disso, a IBM incluiu uma unidade AltiVec (VMX) que é totalmente encanada para ponto flutuante de precisão única (Altivec 1 não suporta vetores de ponto flutuante de precisão dupla.), Unidade de Ponto Fixo de 32 bits (FXU) com arquivo de registro de 64 bits por thread, Unidade de Carga e Armazenamento (LSU), Unidade de Ponto Flutuante de 64 bits (FPU), Unidade de Ramificação (BRU) e Unidade de Execução de Ramificação (BXU).PPE consiste em três unidades principais: Unidade de Instrução (IU), Unidade de Execução (XU), e Unidade de Execução Vectorial/escalar (VSU). IU contém cache de instruções L1, hardware de previsão de filial, buffers de instruções e login de verificação de dependência. XU contém unidades de execução inteira (FXU) e unidade de carga (LSU). VSU contém todos os recursos de execução para FPU e VMX. Cada PPE pode completar duas operações de precisão dupla por ciclo de relógio usando uma instrução escalar fused-multiply-add, que se traduz para 6.4 GFLOPS a 3.2 GHz; ou oito operações de precisão simples por ciclo de relógio com uma instrução vetorial fused-multiply-add, que se traduz para 25.6 GFLOPS a 3.2 GHz.
Xenon no Xbox 360Edit
O PPE foi projetado especificamente para o processador Cell mas durante o desenvolvimento, a Microsoft se aproximou da IBM querendo um núcleo de processador de alto desempenho para o seu Xbox 360. A IBM atendeu e fez o processador tri-core Xenon, baseado em uma versão ligeiramente modificada do EPI com extensões VMX128 adicionadas.
Synergistic Processing Elements (SPE)Edit
Each SPE é um processador dual em ordem composto de uma “Synergistic Processing Unit”, SPU, e um “Memory Flow Controller”, MFC (DMA, MMU, e interface de barramento). Os SPEs não têm nenhum hardware de previsão de ramificação (por isso há uma pesada carga sobre o compilador). Cada SPE tem 6 unidades de execução divididas em pipelines ímpares e pares em cada SPE : O SPU executa um conjunto de instruções especialmente desenvolvido (ISA) com organização SIMD de 128 bits para instruções de precisão simples e dupla. Com a geração atual da célula, cada SPE contém um SRAM embutido de 256 KiB para instruções e dados, chamado “Local Storage” (não confundir com “Local Memory” nos documentos da Sony que se referem à VRAM) que é visível para o PPE e pode ser endereçado diretamente pelo software. Cada SPE pode suportar até 4 GiB de memória de armazenamento local. A loja local não funciona como um cache de CPU convencional uma vez que não é transparente para o software nem contém estruturas de hardware que prevêem quais os dados a carregar. Os SPEs contêm um arquivo de registro de 128 bits, com 128 entradas e mede 14,5 mm2 em um processo de 90 nm. Um SPE pode operar com dezesseis inteiros de 8 bits, oito inteiros de 16 bits, quatro inteiros de 32 bits ou quatro números de ponto flutuante de precisão única em um único ciclo de relógio, assim como uma operação de memória. Note que o SPU não pode acessar diretamente a memória do sistema; os endereços de memória virtual de 64 bits formados pelo SPU devem ser passados do SPU para o controlador de fluxo de memória SPE (MFC) para configurar uma operação DMA dentro do espaço de endereços do sistema.
Em um cenário de uso típico, o sistema irá carregar os SPEs com pequenos programas (semelhantes a threads), encadeando os SPEs para lidar com cada passo em uma operação complexa. Por exemplo, um set-top box pode carregar programas para leitura de um DVD, decodificação de vídeo e áudio, e exibição e os dados seriam passados do SPE para o SPE até finalmente terminar na TV. Outra possibilidade é particionar o conjunto de dados de entrada e ter vários SPEs executando o mesmo tipo de operação em paralelo. Em 3.2 GHz, cada SPE dá um desempenho teórico de 25.6 GFLOPS de precisão única.
Comparado com os seus computadores pessoais contemporâneos, o desempenho relativamente alto do ponto flutuante geral de um processador de células aparentemente anula as capacidades da unidade SIMD em CPUs como o Pentium 4 e o Athlon 64. Contudo, comparar apenas as capacidades de ponto flutuante de um sistema é uma métrica unidimensional e específica da aplicação. Ao contrário de um processador de células, tais CPUs de desktop são mais adequadas ao software de uso geral geralmente executado em computadores pessoais. Além de executar múltiplas instruções por relógio, os processadores da Intel e da AMD possuem preditores de ramo. A Célula é projetada para compensar isso com a assistência do compilador, no qual são criadas instruções de preparação para a ramificação. Para operações de ponto flutuante de dupla precisão, como às vezes usado em computadores pessoais e frequentemente usado em computação científica, o desempenho da Célula cai por uma ordem de magnitude, mas ainda atinge 20,8 GFLOPS (1,8 GFLOPS por SPE, 6,4 GFLOPS por PPE). A variante PowerXCell 8i, que foi especificamente projetada para dupla precisão, atinge 102,4 GFLOPS em cálculos de dupla precisão.
Testes da IBM mostram que os SPEs podem atingir 98% de seu desempenho teórico de pico de desempenho rodando multiplicação de matriz paralela otimizada.
Toshiba desenvolveu um co-processador alimentado por quatro SPEs, mas sem EPIs, chamado SpursEngine, projetado para acelerar efeitos 3D e de filmes em eletrônica de consumo.
Cada SPE tem uma memória local de 256 KB. No total, os SPEs têm 2 MB de memória local.
Barramento de Interligação de Elementos (EIB)Editar
O EIB é um barramento de comunicação interno ao processador Cell que liga os vários elementos do sistema on-chip: o processador PPE, o controlador de memória (MIC), os oito coprocessadores SPE e duas interfaces I/O off-chip, para um total de 12 participantes no PS3 (o número de SPU pode variar em aplicações industriais). O BEI também inclui uma unidade de arbitragem que funciona como um conjunto de semáforos. Em alguns documentos, a IBM refere-se aos participantes do BEI como “unidades”.
O BEI é actualmente implementado como um anel circular composto por quatro canais unidireccionais de 16 bytes de largura, que contra-rotam aos pares. Quando os padrões de tráfego o permitem, cada canal pode transmitir até três transacções em simultâneo. Como o BEI funciona a metade do relógio do sistema, a taxa efectiva do canal é de 16 bytes em cada dois relógios do sistema. No máximo, com três transacções activas em cada um dos quatro toques, a largura de banda instantânea de pico do BEI é de 96 bytes por relógio (12 transacções simultâneas × 16 bytes de largura / 2 relógios de sistema por transferência). Embora este número seja frequentemente citado na literatura da IBM, é irrealista simplesmente escalar este número por velocidade do relógio do processador. A unidade de arbitragem impõe restrições adicionais.
IBM Engenheiro Sênior David Krolak, designer-chefe do EIB, explica o modelo de concorrência:
Um anel pode iniciar uma nova operação a cada três ciclos. Cada transferência leva sempre oito batidas. Essa foi uma das simplificações que fizemos, é otimizada para a transmissão de muitos dados. Se você fizer pequenas operações, não funciona tão bem. Se pensarmos nos comboios de oito carruagens que circulam por esta via, desde que os comboios não se cruzem, podem coexistir na via.
Cada participante no EIB tem uma porta de leitura de 16 bytes e uma porta de escrita de 16 bytes. O limite para um único participante é ler e escrever a uma taxa de 16 bytes por relógio EIB (por simplicidade muitas vezes considerada 8 bytes por relógio do sistema). Cada processador SPU contém uma fila dedicada de gestão DMA capaz de programar sequências longas de transacções para vários pontos finais sem interferir nos cálculos em curso do SPU; estas filas DMA podem ser geridas local ou remotamente também, proporcionando flexibilidade adicional no modelo de controlo.
Fluxos de dados num canal EIB passo a passo em torno do anel. Como há doze participantes, o número total de passos ao redor do canal de volta ao ponto de origem é de doze. Seis passos é a distância mais longa entre qualquer par de participantes. Um canal BEI não pode transmitir dados que exijam mais de seis passos; esses dados devem seguir o percurso mais curto em torno do círculo na outra direcção. O número de passos envolvidos no envio do pacote tem muito pouco impacto na latência de transferência: a velocidade do relógio que conduz os passos é muito rápida em relação a outras considerações. No entanto, as distâncias de comunicação mais longas são prejudiciais para o desempenho global do BEI, na medida em que reduzem a concorrência disponível.
Apesar do desejo original da IBM de implementar o EIB como uma barra transversal mais potente, a configuração circular que adoptaram para poupar recursos raramente representa um factor limitador do desempenho do chip da célula como um todo. No pior dos casos, o programador deve ter um cuidado extra para programar padrões de comunicação onde o EIB é capaz de funcionar a níveis de concorrência elevados.
David Krolak explicou:
Bem, no início, no início do processo de desenvolvimento, várias pessoas estavam a empurrar para um interruptor de barra transversal, e da forma como o barramento é concebido, você poderia realmente puxar o EIB para fora e colocar um interruptor de barra transversal se estivesse disposto a dedicar mais espaço de silício no chip à cablagem. Tivemos de encontrar um equilíbrio entre a conectividade e a área e não havia espaço suficiente para colocar um interruptor de barra transversal completo. Por isso criámos esta estrutura de anéis que achamos ser muito interessante. Ela se encaixa dentro das restrições de área e ainda tem uma largura de banda muito impressionante.
Avaliação da largura de bandaEditar
Em 3.2 GHz, cada canal flui a uma taxa de 25.6 GB/s. Vendo o BEI isoladamente dos elementos do sistema que liga, conseguindo doze transacções simultâneas a esta taxa de fluxo, obtém-se uma largura de banda abstracta do BEI de 307,2 GB/s. Com base nesta visão, muitas publicações da IBM descrevem a largura de banda disponível do BEI como “superior a 300 GB/s”. Este número reflecte a largura de banda instantânea de pico do BEI escalonada pela frequência do processador.
No entanto, outras restrições técnicas estão envolvidas no mecanismo de arbitragem para pacotes aceites no autocarro. O grupo IBM Systems Performance explicou:
Cada unidade do EIB pode simultaneamente enviar e receber 16 bytes de dados em cada ciclo do bus. A largura de banda máxima de dados de todo o EIB é limitada pela taxa máxima a que os endereços são bisbilhotados em todas as unidades do sistema, que é de um por ciclo de barramento. Como cada pedido de endereço bisbilhotado pode potencialmente transferir até 128 bytes, a largura de banda teórica de dados de pico do BEI a 3,2 GHz é de 128Bx1,6 GHz = 204,8 GB/s.
Esta citação representa aparentemente toda a extensão da divulgação pública deste mecanismo pela IBM e o seu impacto. A unidade de arbitragem do BEI, o mecanismo de bisbilhotice e as falhas de interrupção de geração no segmento ou de tradução de páginas não estão bem descritos na documentação ainda tornada pública pela IBM.
Na prática, a largura de banda efectiva do BEI também pode ser limitada pelos participantes do anel envolvidos. Enquanto cada um dos nove núcleos de processamento pode suportar 25,6 GB/s de leitura e escrita simultaneamente, o controlador de interface de memória (MIC) está ligado a um par de canais de memória XDR permitindo um fluxo máximo de 25,6 GB/s para leitura e escrita combinadas e os dois controladores IO estão documentados como suportando uma velocidade de entrada combinada de pico de 25,6 GB/s e uma velocidade de saída combinada de pico de 35 GB/s.
Para acrescentar ainda mais confusão, algumas publicações mais antigas citam a largura de banda EIB assumindo um relógio de sistema de 4 GHz. Este quadro de referência resulta num valor instantâneo de 384 GB/s de largura de banda EIB e um valor de 256 GB/s.
Todos os aspectos considerados o número teórico de 204,8 GB/s mais frequentemente citado é o melhor a ter em conta. O grupo IBM Systems Performance tem demonstrado fluxos de dados centrados em SPU alcançando 197 GB/s em um processador Cell rodando a 3.2 GHz, então este número é um reflexo justo na prática também.
Controladores de memória e I/OEdit
Cell contém uma macro Rambus XIO de canal duplo que faz interface com a memória Rambus XDR. O controlador de interface de memória (MIC) é separado da macro XIO e é projetado pela IBM. O link XIO-XDR roda a 3.2 Gbit/s por pino. Dois canais de 32 bits podem fornecer um máximo teórico de 25,6 GB/s.
A interface de E/S, também um design Rambus, é conhecida como FlexIO. A interface FlexIO é organizada em 12 pistas, sendo cada pista um caminho unidirecional ponto-a-ponto de 8 bits de largura. Cinco faixas de 8 bits de largura ponto-a-ponto são de entrada para Cell, enquanto as sete restantes são de saída. Isto fornece uma largura de banda teórica de pico de 62,4 GB/s (36,4 GB/s de saída, 26 GB/s de entrada) a 2,6 GHz. A interface FlexIO pode ser cronometrada independentemente, digite a 3,2 GHz. 4 faixas de entrada + 4 de saída suportam a coerência da memória.