Outros Recursos
Agora que falamos sobre todos os principais recursos do novo núcleo Nehalem, falaremos agora um pouco sobre dois recursos importantes, o Hyper-Threading e a otimização feita para lidar com instruções SSE desalinhadas.
A tecnologia Hyper-Threading 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 Hyper-Threading 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.
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.
Figura 10: Arquitetura Nehalem é otimizada para instruções desalinhadas.
Respostas recomendadas
Crie uma conta ou entre para comentar
Você precisa ser um usuário para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar agora