# SPARC

SPARC (acrónimo para Scalable Processor ARChitecture, significa Arquitetura de Processadores Escaláveis) é uma arquitetura de processador aberta desenvolvida pela Sun em meados de 1987 baseada na arquitetura RISC. A empresa desenvolveu a sua própria implementação SPARC (UltraSPARC) e também licenciou a arquitetura para outros fabricantes, como a Fujitsu, para que produzissem processadores compatíveis. A arquitetura SPARC possui sua organização de registradores e o seu conjunto de instruções fortemente baseados no modelo RISC.
Inicialmente o processador SPARC possuía 32 bits e foi utilizado primeiramente nas estações de trabalho Sun-4, substituindo as máquinas anteriores desenvolvidas pela Sun, as quais utilizavam processadores Motorola 68000. Em 1994, os processadores SPARC evoluíram para 64 bits.
É uma arquitetura orientada a registrador, onde as únicas instruções que referenciam memória são LOAD e STORE. Seguindo modelo RISC, possui um conjunto de instruções simples, onde as operações mais complexas são realizadas via “software”.
A SPARC International é a organização criada em 1989 para gerenciar as marcas comercias SPARC e fornecer testes de conformidade. Essa organização deixou a arquitetura aberta esperando que a concorrência entre os fabricantes aumentasse o desempenho e diminuemsse os custos. Outro ponto fundamental que motivou manter arquitetura aberta foi visar um ecossistema maior para o projeto, tentando concorrer com a Intel no mundo dos computadores pessoais.
Os mais recentes projetos usando processadores SPARC são o “Venus" de oito núcleos da empresa Fujitsu Laboratories introduzido em Junho de 2009, o supercomputador "K computer", SPARC64 X "Athena" introduzido em Agosto de 2012 e o SPARC T5 de 16 núcleos desenvolvido pela Oracle Corporation, em março de 2013, rodando a 3,6 GHz.
A plataforma SPARC foi muito utilizada em institutos de pesquisa, principalmente na área de bioengenharia, onde auxiliou a sequenciar o genoma humano.

## Recursos

A arquitetura SPARC tem profunda influência nos projetos RISC I e II da Universidade da Califórnia em Berkeley. Esses projetos originais possuíam um reduzido conjunto de instruções com o objetivo de executá-las a uma taxa de quase uma instrução por ciclo de clock. Isso fez da SPARC uma arquitetura muito similar a MIPS em vários aspectos, incluindo a não existência de instruções de multiplicar ou dividir. Outra característica do SPARC influenciada pelo movimento RISC é o Branch Delay Slot.
O processador SPARC possui normalmente até 160 registradores de uso geral. Desses 32 estão visíveis para o software, sendo 8 um conjunto de registradores globais (apenas 7 estão disponíveis, pois um é o g0, que possui sempre o valor 0) e os outros 24 são registradores de pilha. Esses 24 formam o que é chamado de Janela de Registro. Essa janela é usada para passar parâmetros de função e retorno de valores, sendo movida para cima e para baixo da pilha de registro. Cada janela tem 8 registradores locais.
A palavra Escalável vem de que o SPARC permite implementações em escala de processadores embarcados para grandes servidores, todos compartilhando o mesmo núcleo e conjunto de instruções. Um dos parâmetros que podem escalar é o numero de janelas de registros aplicadas. Pode-se implementar de 3 a 32 janelas. Optando por implementar todos os 32 para proporcionar o máximo de eficiência da pilha de chamadas ou apenas 3 para reduzir os custos e a complexidade.
A arquitetura já passou por diversas revisões. Entre as principais estão, o surgimento de múltiplos Hardwares e funcionalidades de divisão na versão 8. E a evolução da arquitetura para 64 bits completos (endereços e registradores) na versão 9, publicada em 1994.
A ordenação da arquitetura SPARC V8 de 32bits é puramente big-endian. Big-endian quer dizer que os bits de maior ordem são salvos nos menores endereços, e nos maiores são armazenados os que possuem menor ordem, litte-endiam é exatamente o contrário de big-endian. A versão 9 do SPARC com 64 bits também é big-endian, porém nessa versão é possível acessar dados em qualquer ordem de byte seja no nível de instrução (load/store) ou no nível da página de memória.

## História

Na década de 1970, os Unixes eram muito populares nas universidades, mas nenhum computador pessoal era capaz de executá-los. Alunos de tais universidades eram obrigados a utilizar sistemas de tempo compartilhado, executando nos DEC PDP-11, VAX (muitas vezes sobrecarregados).
Motivado (entenda-se: frustrado) por esta situação, o estudante alemão Andy Bechtolsheim, durante sua pós-graduação em Stanford (1981), constrói uma estação de trabalho a partir de peças e componentes encontrados no mercado. Esta máquina, utilizando uma CPU Motorola 68020, recebeu a alcunha "SUN-1" (de Stanford University Network).
Vinod Khosla, indiano graduado em Stanford, viu nestas máquinas uma boa oportunidade de negócios. Juntamente com Bill Joy e Scott McNealy, fundaram a Sun Microsystems em 1982.
As máquinas sucessoras do "Sun-1", a Sun-2 e a Sun-3 continuaram utilizando CPUs da Motorola e assim como a Sun-1, logo se tornaram um sucesso, pois eram máquinas poderosas para a época e projetadas para trabalhar em rede, possuindo conexão Ethernet utilizando software TCP/IP para se conectar com a Arpanet, a antecessora da atual internet.
Em meados de 1987, a empresa resolveu projetar sua própria CPU tendo como base o projeto RISC II da Universidade da Califórnia em Berkeley. Surgiu o SPARC (Scalable Processor ARChitecture, que significa Arquitetura de Processadores Escaláveis). Essa nova CPU, tornou-se a base do "Sun-4" e em pouco tempo de todos os projetos da Sun Microsystems.
Inicialmente a SPARC era uma maquina com endereços e registradores de 32 bits funcionando em 36 MHz. Possuía 3 formatos de instruções com somente 55 instruções no total. Continha também uma unidade de ponto flutuante adicionando mais 14 instruções.
A arquitetura passou por duas grandes revisões. A primeira delas foi em 1990, com a publicação da SPARC Versão 8 (V8). As principais mudanças em relação à Versão 7 foram à adição de instruções de multiplicação e divisão de inteiros, e a atualização da aritmética de ponto flutuante que era de 80 bits "precisão estendida" e passou a ser de 128 bits "quad-precision". O processador SPARC V8 serviu de base para o padrão IEEE 1754-1994, um padrão IEEE para uma arquitetura de microprocessador de 32 bits.
A segunda grande modificação foi o desenvolvimento da arquitetura SPARC V9. A nona versão possuía endereços de 64 bits e registradores de 64 bits. A primeira estação de trabalho a implementar essa versão foi a UltraSPARC lançada em 1994. A UltraSPARC era retro compatível, ou seja, era compatível binária com as de 32 bits existentes.
A UltraSPARC surgiu com o intuito de manipular imagens, vídeos e outros arquivos multimídia, diferentemente das máquinas anteriores que foram projetadas para executar programas como processadores de textos e planilhas. Além de se tornar uma arquitetura de 64 bits, outras 23 instruções surgiram incluindo as VIS (Visual Instruction Set) que eram destinadas a aumento tamanho de imagens, girá-las e algumas para compreensão e descompressão de vídeos em tempo real. Além disso, a UltraSPARC visou aplicações de grandes servidores.
Em 2002 a Sun e a Fujitsu lançaram a Joint Programming Specification 1-JPS1 (Especificação de programação conjunta 1) descrevendo as funções de processador que foram identicamente implementadas nas CPUs de ambas as empresas. As primeiras CPUs seguindo a JPS1 foram a UltraSPARC III pela Sun e a SPARC64 V pela Fujitsu. As funcionalidades que não estão contidos no JPS1 são documentados para cada processador em "Suplementos de Implementação".
No início de 2006, a Sun lançou uma especificação de arquitetura estendida, Arquitetura UltraSPARC 2005. Nela, incluiu a maioria das partes privilegiadas do SPARC V9, e também todas as extensões de arquiteturas desenvolvidas através das gerações de processadores de UltraSPARC III, IV, IV +. Arquitetura UltraSPARC 2005 inclui extensões padrão da Sun e continua a ser compatível com a especificação completa SPARC V9 Nível 1.
Em Agosto de 2012 a Oracle Corporation disponibilizou uma nova especificação. A Oracle SPARC Architecture 2011, que além da atualização geral da referência, adiciona as três instruções VIS em sua especificação
A arquitetura SPARC forneceu compatibilidade binária contínua de aplicativos desde a primeira implementação SPARC V7 em 1987 até as implementações da arquitetura Sun UltraSPARC.
Entre as várias implementações de SPARC, as SuperSPARC e UltraSPARC-I da Sun eram muito populares e eram usados como sistemas de referência para benchmarks como SPEC CPU95 e CPU2000. O UltraSPARC-II de 296 MHz é o sistema de referência para o benchmark SPEC CPU2006.

## Suporte ao Sistema Operacional

Máquinas SPARC têm em geral utilizado SunOS, Solaris ou OpenSolaris, mas outros sistemas operacionais também são usados como NeXTSTEP, RTEMS, FreeBSD, OpenBSD, NetBSD, e Linux.

## Supercomputadores

Na Lista do TOP 500 computadores de Novembro de 2014, bem como na lista de Junho desse mesmo ano, o K Computer da empresa Japonesa Fujitsu, figura em 4º lugar. O mesmo já esteve em primeiro lugar nas listas de junho e novembro de 2011. O K Computer possui 88128 CPUS SPARC64 de 8 núcleos cada, operando a uma frequência de 2.0 GHz em 672 racks, e é capaz de desempenhar 10,51 quatrilhões de operações de ponto flutuante por segundo (10,51 Petaflops).