Por Dentro da Microarquitetura Intel Nehalem
Por Gabriel Torres e Cássio Lima em 01 de setembro de 2008
Introdução
Nehalem é o codinome do novo processador da Intel com controlador de memória integrado que chegará ao mercado em breve e será chamado Core i7; esta arquitetura também será usada nos processadores para servidores (Xeon) e, daqui a alguns anos, também será usada nos processadores para PCs “populares”. Os processadores baseados nesta arquitetura terão um controlador de memória DDR3 integrado de três canais, três níveis de cache, a volta da tecnologia HyperThreading, um novo barramento externo chamado QuickPath e muito mais. Neste tutorial nós explicaremos o que há de novo nesta nova arquitetura. Confira.
Abaixo nós resumimos uma lista dos principais recursos da arquitetura Nehalem e explicaremos o que cada um deles significa ao longo deste artigo:
- Baseado na microarquitetura Intel Core.
- De dois a oito núcleos.
- Controlador de memória DDR3 integrado com três canais de memória.
- Caches de memória L2 individuais de 256 KB para cada núcleo.
- Cache de memória L3 de 8 MB.
- Novo conjunto de instruções SSE 4.2 (sete novas intruções).
- Tecnologia HyperThreading.
- Modo Turbo (overclock automático).
- Aprimoramentos na microarquitetura (suporte a fusão de instruções no modo de 64 bits, detector de laços aprimorado, seis portas de despacho, etc).
- Aprimoramentos na unidade de previsão de desvios, com a adição de um segundo Buffer de Desvios (BTB, Branch Target Buffer).
- Um segundo Buffer de Tradução de Endereços (TLB, Translation Look-aside Buffer) com 512 entradas.
- Otimizado para as instruções SSE desalinhadas.
- Aumento do desempenho da tecnologia de virtualização (melhora de 60% na latência de virtualização em relação aos processadores Core 2 de 65 nm e melhora de 20% em relação aos processadores Core 2 de 45 nm, segundo a Intel).
- Novo barramento externo QuickPath.
- Nova unidade de controle de energia.
- Tecnologia de fabricação de 45 nm no lançamento, com futuros modelos de 32 nm (processadores com codinome “Westmere”).
- Novo soquete com 1.366 pinos.
É importante lembrar que os processadores Core 2 fabricados com tecnologia de 45 nm têm recursos extras em relação aos processadores Core 2 com tecnologia de 65 nm. Todos esses recursos estão presentes nos processadores baseados na arquitetura Nehalem e os mais significativos deles são:
- Novo conjunto de instruções SSE4 (que traz 47 novas instruções SSE para o processador).
- Tecnologia de Desligamento Profundo (Deep Power Down, apenas nos processadores para notebooks, também conhecido como estado C6).
- Tecnologia de Aceleração Dinâmica Avançada (Enhanced Intel Dynamic Acceleration, apenas nos processadores para notebooks).
- Circuito divisor usando o algoritmo Raiz-16 (aprimoramento da unidade de ponto flutuante).
- Unidade “Shuffle” aprimorada (aprimoramento da unidade de ponto flutuante).
- Tecnologia de Virtualização Aprimorada (entre 25% e 75% de aumento de desempenho no tempo de transição entre máquinas virtuais).
Vamos agora discutir em detalhes as diferenças mais significativas introduzidas por esta nova arquitetura.
Controlador de Memória Integrado
Desde os primeiros processadores a Intel usa um barramento externo chamado barramento frontal (Front Side Bus, FSB) que é compartilhado entre a memória e os demais componentes do micro. Os processadores baseados na arquitetura Nehalem têm um controlador de memória integrado e, portanto, têm dois barramentos: um barramento de memória para conectar o processador à memória e um barramento de entrada/saída para conectar o processador ao mundo externo.
Esta mudança proporciona um aumento de desempenho no micro por dois motivos: primeiro porque agora nós temos dois caminhos de dados separados para o acesso à memória e aos dispositivos de entrada/saída. Segundo porque o acesso à memória é mais rápido já que o processador não precisa mais se comunicar primeiro com um controlador externo.
Nas Figuras 1 e 2 nós comparamos a arquitetura tradicional usada pelos processadores da Intel e a nova arquitetura que será usada pelos futuros processadores da Intel com controlador de memória integrado.
clique para ampliar
Figura 1: Arquitetura usada pelos atuais processadores da Intel.
clique para ampliar
Figura 2: Arquitetura usada pelos futuros processadores da Intel com controlador de memória integrado.Este novo barramento externo é chamado QuickPath Interconnect (QPI) e oferece dois caminhos de dados separados (uma para transmissão e outro para recepção dos dados) para o processador se comunicar com o chipset ou com outros processadores, no caso de servidores com mais de um processador instalado. Como você pode ver, este barramento é o equivalente ao HyperTransport usado nos processadores da AMD. A primeira versão do barramento QuickPath trabalhará com um clock de 3,2 GHz transferindo dois dados de 16 bits por pulso de clock, resultando em uma taxa de transferência máxima teórica de 12,8 GB/s em cada direção. Para mais informações sobre este novo barramento e também para compará-lo com o barramento local e com o barramento HyperTransport, leia nosso tutorial Tudo o Que Você Precisa Saber Sobre o Barramento QuickPath.
Os processadores para desktop terão apenas um barramento QuickPath, enquanto que os processadores para servidores terão dois barramentos independentes para permitir a comunicação entre eles em ambientes de multiprocessamento simétrico (SMP).
O controlador de memória integrado nos processadores baseados na arquitetura Nehalem oferece três canais de memória, o que significa que ele é capaz de acessar três módulos de memória ao mesmo tempo, em paralelo, aumentando assim o desempenho – em teoria a arquitetura de três canais oferece um aumento de 50% na largura de banda em relação a arquitetura de dois canais rodando com o mesmo clock.
Portanto para obter o maior desempenho possível com os processadores baseados na arquitetura Nehalem, como é o caso do Core i7, você precisará instalar três ou seis (caso sua placa-mãe tenha seis soquetes de memória, é claro) módulos de memória. Você terá que prestar atenção nesta mudança, já que a maioria das pessoas hoje costuma ter um micro com 2 GB ou 4 GB (dois ou quatro módulos de memória instalados na configuração de dois canais) enquanto que com o processador Core i7 você precisará ter um micro com 1,5 GB, 3 GB ou 6 GB para atingir o maior desempenho possível (três ou seis módulos de memória instalados na configuração de três canais).
Outra coisa que você precisa ter especial atenção é o fato de que algumas placas-mãe voltadas para os processadores Core i7 terão quatro soquetes de memória, como é o caso da placa-mãe "Smackover" da Intel, baseada no chipset Intel X58. Se você instalar quatro módulos de memória você terá mais memória disponível, mas diminuirá o desempenho do micro. Por exemplo, se você instalar 4 GB (quatro módulos de 1 GB), o micro acessará os primeiros 3 GB no modo de três canais, mas a área de memória entre 3 GB e 4 GB será acessada com o desempenho de um único canal. Portanto, a menos que você realmente precise de mais memória RAM, equipe o seu micro com 1,5 GB, 3 GB ou 6 GB de memória. Outros fabricantes já anunciaram que fabricarão placas-mãe com seis soquetes, portanto nestas placas você terá de instalar memórias de três em três para atingir o máximo desempenho possível.
Com o modo de três canais o processador acessará a memória a 192 bits por vez (3 x 64 bits), se você tiver três ou seis módulos de memória instalados, é claro. Isto resulta em uma taxa de transferência máxima teórica de 25,58 GB/s, caso memórias DDR3-1066 sejam usadas.
O controlador de memória integrado nos processadores Nehalem aceita apenas memórias DDR3 – sem suporte para memórias DDR2.
Por causa do controlador de memória integrado a Intel mudou o padrão de pinagem do processador para um novo soquete de 1.366 pinos. Portanto você não poderá fazer um upgrade do seu atual processador Intel para um processador Core i7 trocando apenas o processador; você terá que trocar também a placa-mãe e provavelmente as memórias, caso você não tenha memórias DDR3. Se você tem hoje memórias DDR3, você precisará comprar um módulo extra para habilitar o modo de três canais, caso você tenha apenas dois módulos.
Cache de Memória
No que diz respeito ao cache de memória, a Intel usará a mesma abordagem de cache que a AMD está usando em seus processadores Phenom, ou seja, caches L2 individuais para cada núcleo e um cache de memória L3 compartilhado. Cada cache de memória L2 será de 256 KB e o cache L3 será de 8 MB (pelo menos nos primeiros modelos lançados; a Intel poderá lançar processadores Xeon baseados na arquitetura Nehalem com um cache maior). O cache L1 permanece igual ao Core 2 Duo (64 KB, 32 KB para instruções e 32 KB para dados).
Os processadores Core 2 Duo têm apenas um cache de memória L2, que é compartilhado entre os dois núcleos do processador, mas os processadores de quatro núcleos da Intel, como o Core 2 Quad e o Core 2 Extreme têm dois caches L2, cada um compartilhado por cada grupo de dois núcleos. Para uma melhor compreensão nós resumimos as arquiteturas de cache disponíveis nas Figuras 3 e 4.
clique para ampliar
Figura 3: Uma comparação entre as arquiteturas de cache.
clique para ampliar
Figura 4: Uma comparação entre as arquiteturas de cache.Aprimoramentos no Pipeline do Processador
Como mencionamos, a arquitetura Nehalem (Core i7) é baseada na arquitetura usada pelo processador Core 2 Duo, adicionando alguns aprimoramentos na maneira como as instruções fluem dentro do processador. Nesta página descreveremos esses aprimoramentos.
O processador Core 2 Duo, a propósito, é baseado na arquitetura do Pentium M, que por sua vez é baseada na arquitetura usada pelos processadores Pentium III. Todos esses processadores são de 6ª geração (se você rodar a instrução CPUID todos eles retornarão “6” no campo “Família”). O Pentium 4 era um processador Intel de 7ª geração usando uma microarquitetura completamente diferente – os processadores Core 2 e Core i7 não têm nada a ver com o Pentium 4. Você pode achar estranho um fabricante usar em um produto novo uma arquitetura “antiga”, mas é exatamente isto o que aconteceu (a microarquitetura “antiga” provou ser mais eficiente do que a arquitetura “nova”).
Na Figura 5 você pode entender a genealogia da microarquitetura Nehalem. Nós também adicionamos os principais aprimoramentos trazidos por cada novo processador; cada processador tem todos os recursos do processador anterior mais os aprimoramentos mencionados. Claro que cada processador traz outros recursos; nós listamos apenas os recursos mais importantes.
clique para ampliar
Figura 5: Árvore genealógica da microarquitetura Nehalem.Para entender os aprimoramentos trazidos por esta nova microarquitetura você precisa lembrar que os programas são escritos usando instruções x86 (também chamadas “macro-ops” ou simplesmente “instruções”), que não são entendidas pelas unidades de execução do processador. Elas precisam primeiro ser decodificadas em microinstruções (também chamadas “micro-op” ou “µop”). Esta arquitetura híbrida CISC/RISC foi introduzida pelo Pentium Pro: o processador recebe instruções x86 (CISC), mas executa microinstruções proprietárias (RISC).
A microarquitetura Core, usada nos processadores Core 2, introduziu o conceito de fusão de instruções (“macro-fusion”), que é a capacidade de combinar duas instruções x86 dentro de apenas uma microinstrução. Isto aumenta o desempenho e diminui o consumo do processador, já que ele executará apenas uma microinstrução em vez de duas. Este esquema, no entanto, é limitado a instruções de desvio condicional e de comparação (ou seja, instruções CMP, TEST e Jcc).
A microarquitetura Nehalem aumenta a capacidade da fusão de instruções de duas formas. Primeiro adicionando suporte a várias instruções condicionais que não poderiam ser fundidas nos processadores Core 2. Segundo, nos processadores baseados na microarquitetura Nehalem a fusão de instruções é usada nos modos de 32 bits e de 64 bits, enquanto que nos processadores Core 2 a fusão de instruções funciona apenas quando o processador está trabalhando no modo de 32 bits.
A microarquitetura Core adicionou um detector de laços (“Loop Stream Detector”), basicamente um pequeno cache de 18 instruções entre as unidades de busca e de decodificação do processador. Quando o processador está executando um laço de repetição (mais conhecido como “loop”, parte de um programa que se repete várias vezes) o processador não precisa buscar as instruções requeridas novamente do cache L1 de instruções: elas já estão próximas da unidade de decodificação. Além disso, o processador desliga as unidades de busca e de previsão de desvio quando detecta a execução de um laço, fazendo com que o processador consuma menos energia.
Nos processadores baseados na microarquitetura Nehalem este pequeno cache foi movido para após da unidade de decodificação de instruções. Portanto, em vez de armazenar instruções x86 como nos processadores Core 2, este cache guarda até 28 microinstruções (micro-ops). Isto faz com que exista um aumento de desempenho quando o processador está executando um laço de repetição, já que agora ele não precisa decodificar as instruções presentes no laço: elas já estarão decodificadas dentro deste pequeno cache. Além disso, o processador pode agora desligar a unidade de decodificação de instruções além das unidades de busca e previsão de desvio quando detecta a execução de um laço, fazendo com que o processador economize ainda mais energia.
clique para ampliar
Figura 6: Localização do detector de laços nos processadores Core e Nehalem.A arquitetura Nehalem adicionou uma porta de despacho extra e agora tem 12 unidades de execução, como você pode ver abaixo. Com isso os processadores baseados nesta arquitetura podem ter mais microinstruções sendo executadas ao mesmo tempo do que os processadores anteriores.
clique para ampliar
Figura 7: Portas de despacho e unidades de execução.A microarquitetura Nehalem adicionou também dois buffers extras: um segundo Buffer de Tradução de Endereços (TLB, Translation Look-aside Buffer) com 512 entradas e um segundo Buffer de Desvios (BTB, Branch Target Buffer). A adição desses dois buffers aumenta o desempenho do processador.
O TLB é uma tabela usada pelo circuito de memória virtual para conversões entre endereços físicos e endereços virtuais. A memória virtual é uma técnica onde o processador simula mais memória RAM em um arquivo no disco rígido (chamado arquivo de troca) para permitir que o micro continue operando mesmo quando não há memória RAM suficiente disponível (o processador pega o que está na memória RAM, armazena neste arquivo de troca e então libera espaço na memória para uso).
A previsão de desvios é um circuito que tenta “adivinhar” os próximos passos de um programa, carregando para dentro do processador as instruções que ele acha que o processador tentará carregar. Se ele estiver certo, o processador não perderá tempo carregando essas instruções da memória, já que elas já estarão dentro do processador. Aumentando o tamanho desse buffer (ou adicionando um segundo buffer, no caso dos processadores baseados na microarquitetura Nehalem) permite que este circuito carregue antecipadamente ainda mais instruções, aumentando o desempenho do processador.
Aprimoramentos no Gerenciamento de Energia
Os transistores dentro do processador funcionam como chaves, com dois estados possíveis: condutivo (também chamado “modo de saturação”), funcionando como uma chave fechada, e não-condutivo (também chamado “modo de corte”), funcionando como uma chave aberta. O problema é que quando os transistores estão no estado não-condutivo eles teoricamente não deveriam permitir nenhum tipo de passagem de corrente, porém uma pequena quantidade acaba passando. Esta corrente é chamada corrente de fuga e se você somar todas as correntes de fuga você terá uma quantidade significativa de corrente (e conseqüentemente potência) sendo desperdiçada, gerando calor desnecessariamente. Atualmente um dos desafios nos projetos de processadores tem sido a tentativa de eliminar a corrente de fuga.
A arquitetura Nehalem traz uma unidade de controle de energia dentro do processador que é responsável por melhorar o gerenciamento de energia (veja na Figura 8). Esta unidade reduz a corrente de fuga além de permitir o novo “Modo Turbo”, que falaremos na próxima página. Basicamente, o processador pode agora alimentar com diferentes tensões e clocks cada núcleo, as unidades fora dos núcleos, o controlador de memória, o cache e as unidades de entrada/saída. Nos processadores anteriores todos os núcleos tinham de trabalhar com o mesmo clock, mas nos processadores Nehalem cada núcleo pode ser programado para rodar com um clock diferente com o objetivo de economizar energia.
clique para ampliar
Figura 8: Unidade de controle de energia.A unidade de controle de energia embutida pode agora desligar qualquer um dos núcleos do processador, recurso este não disponível em processadores Core 2 para notebooks. Na verdade agora o processador pode colocar qualquer núcleo no modo C6 (“desligamento profundo”) independente do estado de funciomanento dos outros núcleos. Isto permite a você economizar energia quando o micro está rodando normalmente porém com um ou mais núcleos ociosos e que podem ser desligados.
Modo Turbo
A unidade de controle de energia embutida também incluiu sensores da potência dissipada por cada núcleo. Dessa forma o processador sabe a potência que cada núcleo está consumindo e a quantidade de calor que está sendo dissipada. Isto permitiu a adição de um “Modo Turbo” no processador.
O Modo Turbo permite ao processador aumentar o clock do(s) núcleo(s) ativo(s). Esta idéia não é nova e o Core i7 não é o primeiro processador a usá-la (alguns processadores Xeon baseados na arquitetura Netburst – isto é, a arquitetura do Pentium 4 – têm este recurso, conhecido como tecnologia “Foxton”). Mas nas encarnações antigas desta tecnologia este recurso só podia ser usado quando os outros núcleos de processamento estavam ociosos.
Este novo modo é um sistema de laço fechado. O processador está constantemente monitorando sua temperatura e consumo. O processador fará um overclock dos núcleos ativos até que o processador atinja seu TDP máximo permitido, baseado no cooler que você estiver usando. Isto é configurado no setup da placa-mãe. Por exemplo, se você disser que o cooler do processador é capaz de dissipar 130 W, o processador aumentará (ou reduzirá) o seu clock de modo que a sua potência seja compatível com a quantidade de potência que o cooler do processador consegue dissipar. Portanto, se você, por exemplo, substituir o cooler do processador por um melhor, você terá que configurar no setup da sua placa-mãe o TDP do novo cooler (ou seja, a quantidade máxima de potência térmica que ele pode dissipar) para que o Modo Turbo aumente o clock do processador ainda mais.
Note que o processador não tem que necessariamente desligar os núcleos que não estejam sendo usados para habilitar o Modo Turbo. Mas como esta técnica de overclock dinâmica é baseada na quantidade de potência que você pode dissipar usando o cooler do seu processador, desligar os núcleos que não estejam sendo usados reduzirá o consumo do processador e a dissipação de potência e conseqüentemente permitirá um overclock maior.
O novo Modo Turbo é uma extensão da tecnologia SpeedStep e é por isso que ele é visto pelo micro como um recurso SpeedStep.
Ele funcionará apenas para os núcleos do processador, e por isso o controlador de memória e o cache de memória não serão afetados por esta tecnologia.
Tudo indica o Modo Turbo estará disponível apenas nos modelos “Extreme Edition”.
Outros Recursos
Agora que falamos sobre todos os principais recursos do novo núcleo Nehalem, falaremos agora um pouco sobre dois recursos importantes, o HyperThreading e a otimização feita para lidar com instruções SSE desalinhadas.
A tecnologia HyperThreading permite que cada núcleo do processador seja reconhecido como dois processadores. Dessa forma, se você tem um processador Core i7 com quatro núcleos o sistema operacional o reconhecerá como sendo um processador de oito núcleos. Esta tecnologia é baseada no fato de que quando o processador está trabalhando existem certos circuitos internos que ficam ociosos e que poderiam ser usados. Originalmente lançada para os processadores Pentium 4 esta é a primeira vez que a tecnologia HyperThreading está disponível nos processadores Intel de 6ª geração. Esta tecnologia também é chamada SMT ou Simultaneous Multi-Threading (SMT). Esta tecnologia não oferece o mesmo ganho de desempenho de como se núcleos “de verdade” fossem usados (ou seja, um processador com 8 núcleos é mais rápido do que um processador com 4 núcleos com tecnologia HT, desde que ambos estejam trabalhando com o mesmo clock e sejam baseados na mesma arquitetura); porém você está ganhando esses “núcleos extras” de graça.
Existem dois tipos de instruções SSE que acessam a memória: alinhadas e desalinhadas. As instruções alinhadas precisam que os dados requisitados estejam dentro do limite de endereçamento de 16 bytes (128 bits), enquanto que as instruções desalinhadas não. Veja na Figura 9 uma ilustração.
clique para ampliar
Figura 9: Instruções alinhadas vs. desalinhadas.Vamos traduzir o que foi dito para o português claro.
Imagine um micro com memórias de dois canais. O controlador de memória acessará a memória a 128 bits por vez. Portanto a memória será dividida em blocos de 128 bits (16 bytes). Em teoria o endereço que você for requisitar precisa estar no início de cada bloco para que você faça uma leitura (ou escrita) de 128 bits e obtenha o que você quer em apenas uma requisição. Esta é a requisição alinhada mostrada na parte superior da Figura 9.
Mas suponhamos que você envie uma instrução para ler um dado da memória, mas em vez de usar o primeiro endereço dentro do bloco você solicita o endereço no meio do bloco. Como você está requisitando um dado de 128 bits o que acontecerá é que metade do dado estará no primeiro bloco e a outra metade do dado estará no bloco seguinte – isto é mostrado na parte inferior da Figura 9. Como o dado que você requisitou será divido em dois blocos diferentes o controlador de memória terá que ler dois blocos de memória, não apenas um como aconteceu no exemplo anterior. Na primeira leitura você terá metade do dado que você quer e na segunda metade terá os dados restantes.
Apesar das requisições alinhadas serem mais eficientes elas são mais difíceis de serem usadas pelos programadores porque eles precisam conhecer a organização da memória. Por conta disso a maioria dos programadores acaba usando apenas instruções desalinhadas.
Os processadores anteriores da Intel foram otimizados para instruções alinhadas e as instruções desalinhadas eram mais lentas e eram traduzidas em múltiplas microinstruções (micro-ops) – em outras palavras, instruções desalinhadas eram mais fáceis para o programador, mas eram executadas mais lentamente. Os processadores Nehalem são otimizados para instruções desalinhadas, obtendo o mesmo desempenho das instruções alinhadas. A Figura 10 traz um resumo.
clique para ampliar
Figura 10: Arquitetura Nehalem é otimizada para instruções desalinhadas.Originalmente em http://www.clubedohardware.com.br/artigos/1471
© 1996-2009, Clube do Hardware. Todos os direitos reservados.
É expressamente proibida a reprodução total ou parcial do conteúdo deste site e dos textos disponíveis, seja através de mídia eletrônica, impressa, ou qualquer outra forma de distribuição. Os infratores serão indiciados e punidos com base na lei nº 9.610 de 19/02/1998.
Não nos responsabilizamos por danos materiais e/ou morais de qualquer espécie promovidos pelo uso das informações contidas no Clube do Hardware.