# Processador multinúcleo

Um processador multinúcleo (do inglês multicore) tem dois ou mais núcleos de processamento de tarefas em paralelo (do inglês cores) no interior de um único chip. Estes são responsáveis por dividir as tarefas entre si, ou seja, permitindo trabalhar em um ambiente multitarefa/multiprocessamento. O sistema operacional do equipamento trata cada um desses núcleos como um processador diferente. Na maioria dos casos, cada unidade possui seu própria memória cache e pode processar várias instruções quase simultaneamente. Em 1989 especulou-se a da criação do multinúcleo no ano 2000.
Os dois núcleos não somam a capacidade de processamento, mas dividem as tarefas entre si. Por exemplo, um processador de dois núcleos com clock de 1.8 GHz não equivale a um processador de um núcleo funcionando com clock de 3.6 Ghz, e sim dois núcleos 1,8GHZ operando em paralelo.
O surgimento dos processadores multicore, tornou-se necessário principalmente devido a missão cada vez mais difícil de resfriar processadores singlecore (processadores de apenas um núcleo) com clocks cada vez mais altos; devido a concentração cada vez maior de transistores cada vez menores em um mesmo circuito integrado. Além de outras limitações dos processadores singlecore, existe a grande diferença entre a velocidade da memória e do processador, aliada à estreita banda de dados, que faz com que aproximadamente 75 por cento do uso do microprocessador seja gasto na espera por resultados dos acessos à memória.

## Descrição

Na maioria dos processadores de mais de um núcleo, cada núcleo pode possuir sua própria cache e alguns casos realizam acesso direto e independente à memória principal; possibilita-se, assim, que as instruções de aplicações sejam executadas em paralelo, ou seja, cada processador realiza os cálculos de que é requisitado concorrentemente com o outro, ganhando desempenho. Este, porém, depende muito dos algoritmos de software utilizados e de suas implementações.
Outra vantagem do processamento em paralelo é a capacidade de cada processador ficar responsável pela execução de um aplicativo, como por exemplo, quando o usuário está executando algum arquivo de som e ao mesmo tempo executando a varredura do antivírus.
Diferente do processamento paralelo, no processamento singlecore ocorre um gargalo (bottleneck) devido aplicativos executados simultaneamente.

## Surgimento

Embora a tecnologia de fabricação tenha melhorado, reduzindo o tamanho de processadores individuais, limites físicos de semicondutores baseados em microeletrônica haviam se tornado uma preocupação principal. Estas limitações físicas poderiam causar dissipação de calor significativa e problemas de sincronização de dados. Então, havia a necessidade de conseguir maior performance sem o consequente aumento geração de calor, a solução encontrada foi: ao invés de aumentar a frequência do processador singlecore, era necessário adicionar vários núcleos paralelos com frequência menores, para manter assim o mesmo consumo de energia e a geração de calor que ocorria no singlecore. Desde 1989 já havia-se pensado nesta forma de processamento, prevendo que seria possível cria-la no ano 2000.
Vários métodos são usados ​​para melhorar o desempenho da CPU, alguns paralelismos por nível de instrução (ILP), métodos como pipelining superescalares são adequados para muitas aplicações, mas são ineficientes para os que são difíceis de prever código. Muitas aplicações são mais adequadas para paralelismo por nível de thread (TLP), métodos e múltiplas CPUs independentes são comumente usados ​​para aumentar a TLP geral de um sistema. Uma combinação de espaço disponível aumentou (devido a processos de fabricação refinados) e a demanda por TLP aumento e levou ao desenvolvimento de CPUs multi-core.

### Incentivos Comerciais

Vários negócios impulsionaram o desenvolvimento da arquitetura multicore. Durante décadas, foi possível melhorar o desempenho de uma CPU, reduzindo a área do circuito integrado, que diminuiu o custo por dispositivo. Como alternativa, mais transistores poderiam ser utilizados no projeto, o que aumentou a funcionalidade, especialmente para as arquiteturas CISC. Eventualmente, estas técnicas atingiram o seu limite e não puderam continuar a melhorar o desempenho da CPU. Múltiplos processadores tiveram que ser empregados para ganhar velocidade no processamento. Vários núcleos foram usados ​​no mesmo chip para melhorar o desempenho, o que poderia então levar a melhores vendas de CPUs que tinham dois ou mais núcleos.

### Vantagens

Uma das principais vantagens dos processadores multicore é também um dos principais motivos da sua invenção. Essa vantagem é a sua maior capacidade - comparado aos singlecores - de resfriamento; o que ainda possibilitou e ainda possibilita o aumento do poder de processamento.
Economia no preço de licenciamento de softwares proprietários, passando a ter um maior poder de processamento sem necessitar de uma nova máquina.
Processadores multicore também permitem maior desempenho com menor energia. Isso pode ser um fator importante em dispositivos móveis que funcionam com baterias. Uma vez que cada núcleo em multicore é geralmente mais eficiente em termos energéticos, o chip se torna mais eficiente do que ter um grande núcleo único e monolítico.
As outras vantagens quase que por completo relacionam-se com a capacidade de processamento, principalmente quando se trata da execução de mais de um aplicativo ao mesmo tempo ou mesmo e aplicativos capazes de realizar o seu processamento paralelamente, conseguindo assim trabalhar com dois ou mais núcleos concomitantemente. Nos processadores mais recentemente desenvolvidos existe também uma melhora no acesso a memória e na troca de dados entre os próprios núcleos.
Porém, é importante destacar também que para que a qualidade de processamento paralelo dos multicores seja utilizada na sua totalidade os softwares instalados na máquina devem ser escritos para aproveitar esse recurso; para isso as aplicações devem ser escritas utilizando e armazenando os conceitos de threads, assim uma única aplicação utilizará o poder de processamentos dos dois ou mais processadores.

### Desvantagens

Processadores multicore possuem um bom desempenho, performance, disponibilidade e segurança a um menor custo. Por outro lado, esta tecnologia possui algumas desvantagens, entre as principais podemos destacar:
O aumento da utilização dos recursos computacionais fornecidos por processadores multicore requerem ajustes, tanto para o sistema operacional de apoio quanto para o software aplicativo já existente.
A capacidade dos processadores multi-core depende da utilização de vários segmentos dentro das aplicações para aumentar o desempenho da aplicação.

## Arquitetura

Com o surgimento dos multicores tornou-se necessário algumas adaptações a nível de arquitetura para o melhor aproveitamento dos seus núcleos, e as primeiras a serem feitas tem como objetivo melhorar o paralelismo a nível de threads e assim criar uma arquitetura que propicie o chamado paralelismo ao nível do chip.
Algumas vantagens da arquitetura são: a melhor localização dos dados em se comparando com outras arquiteturas de multiprocessamento; a melhor comunicação entre as unidades e o número reduzido de quantidade de espaço e energia necessários.
A arquitetura é geralmente um SMP, ou seja, um multiprocessamento simétrico; implementado em um circuito VLSI - Very Large Scale Integration. Essa é uma arquitetura onde dois ou mais processadores idênticos são ligados a uma única memória principal. Porém ao SMP existem outras alternativas de se criar uma arquitetura com variantes para o tratamento da memória ou até mesmo a comunicação entre os diversos núcleos presentes no processador. Algumas dessas variantes podem ser observadas nos artigos abaixo:
* Arquitetura Intel Core2
* Arquitetura AMD Athlon 64 X2

## Exemplos de Hardware

Segue abaixo alguns exemplos de hardware que utilizam a tecnologia multi-core.

### Comercial

* AMD
** Athlon 64, Athlon 64 FX e Athlon 64 X2, processadores AMD Athlon™ para desktops.
** Athlon II, processador AMD Athlon™ II Dual-Core para desktops.
** Phenom, processador AMD Phenom™ X4 de quatro núcleos e AMD Phenom™ X3 de três núcleos para desktops.
** Phenom II, processador multi-core. Oferece uma melhor experiência visual para entretenimento de alta definição, desempenho avançado em multitarefa e inovações de economia de energia, proporcionando máquinas menores e mais refrigeradas, com uso eficiente da energia.
** Sempron, processador AMD Sempron™ para desktops.
** Turion 64 X2, processador dual-core para laptop.
** Opteron, processador para servidores.
* IBM
** POWER5, processador dual-core, lançado em 2004.
** POWER6, processador dual-core, lançado em 2007.
** POWER7, processadores 4,6,8-core, lançados em 2010.
** PowerPC 970MP, processador dual-core usado na Apple Power Mac G5.
** Xenon, processador triple-core, usado pela Microsoft no Xbox 360.
* Intel
** Celeron Dual-Core, primeiro processador dual-core comercializado.
** Core Duo, processador dual-core.
** Core 2 Duo, processador dual-core.
** Core 2 Quad, 2 processadores dual-core embutido em um multi-chip.
** Core i3, Core i5 e Core i7, família de processadores multi-core. São os sucessores do Core 2 Duo e do Core 2 Quad.
** Itanium 2, processador dual-core.
** Pentium D, 2 single-core embutido em um multi-chip.
** Pentium Extreme Edition, 2 single-core embutido em um multi-chip.
** Pentium Dual-Core, processador dual-core.
** Xeon processadores dual-, quad-, hexa-, octo- e 12-core.
* Nvidia
** GeForce 9 Series multi-core, a Unidade de processamento gráfico possui 8 cores e 16 Scalar processor/Stream processing por core.
** GeForce 200 Series multi-core, a Unidade de processamento gráfico possui 10 cores e 24 Scalar processor/Stream processing por core.
** Tesla multi-core, a GPGPU possui 10 cores e 24 Scalar processor/Stream processing por core.

### Free

* OpenSPARC

## Futuro dos Multicore

O MIT, Instituto de Tecnologia de Massachusetts, anunciou um processador com 64 núcleos, cujo design difere drasticamente dos processadores existentes hoje. O novo chip, chamado Tile64, evita o que é hoje o maior gargalo no desempenho dos processadores multicores e ele consome menos energia.
Nos processadores multicores existentes hoje, cada núcleo se comunica com o outro através de um barramento comum. Se pensarmos em dois ou quatro núcleos dividindo um barramento, a performance não é muito afetada. Quando pensamos em 16 ou mais núcleos sendo usados ao mesmo tempo, a historia é completamente diferente. Este é o maior gargalo no desempenho dos processadores multicores.
O Tile64 não possui um barramento central. Ao invés disso, os núcleos estão diretamente conectados. Cada núcleo possui todas as características de um processador e memória. O novo conceito aplicado nesses processadores é a estrutura de malha na conexão entre os núcleos. Essa estrutura é similar à encontrada na Internet, uma rede que possui vários nós descentralizados. Uma razão que faz a Internet capaz de transmitir dado tão rapidamente é que os pacotes de informação são enviados através de uma vasta rede interligada, evitando assim o congestionamento desses pacotes. Essa nova arquitetura abre portas para que novos processadores recebam números cada vez maiores de núcleos. A existência de um número tão grande de cores, começa a requerer a utilização de um esquema de manipulação próximo a grades computacionais.