Tecnologia Intel® Hyper-Threading: respostas para suas perguntas

O que é?
A tecnologia Intel® Hyper-Threading é uma funcionalidade de desempenho existente em nosso novo processador Intel® Core™ i7 e nos processadores da série Xeon® 5500. De forma simplificada: ela permite que um núcleo no processador apareça como se fossem 2 núcleos para o sistema operacional. Isso duplica os recursos de execução disponíveis para o sistema operacional, o que pode aumentar o desempenho do seu sistema em geral. Você pode obter mais informações sobre a tecnologia Intel® Hyper-Threading clicando aqui.

Falar em núcleos, threads e Hyper-threads pode ser um pouco confuso. Para simplificar, neste artigo, Hyper-Threads serão chamadas de threads de hardware, e as threads do sistema operacional serão chamadas de threads de software. Um núcleo é uma CPU (física). Cada processador da série Core™ i7 ou Xeon® 5500 possui hoje 4 núcleos (poderemos oferecer outras versões no futuro).

Como posso saber se meu sistema está utilizando a tecnologia Hyper-Threading?
É necessário que tanto o processador quanto o chipset, o sistema operacional e a BIOS suportem essa tecnologia. Felizmente, esse não é um grande problema. Muitas das plataformas de servidores e desktops com processadores Nehalem incluem esse suporte. A maioria dessas plataformas permite ativar ou desativar a tecnologia Hyper-Threading em uma opção da BIOS (que deve estar ativada na configuração original). Você poderá visualizar as informações da sua CPU através do Gerenciador de tarefas do Windows*, ou através do comando /proc/cpuinfo, no Linux*. Se você possuir uma plataforma que suporta a tecnologia Hyper-Threading e esta estiver ativada, você visualizará o dobro do número de CPUs, como se você possuísse mais núcleos físicos em sua plataforma. Por exemplo, em um servidor com dois processadores da série Xeon® 5500 (cada um deles com 4 núcleos), você visualizará 16 CPUs (16 threads de hardware rodando em 8 núcleos físicos, 2 threads por núcleo).

HyperThreading_Disabled.JPG  HyperThreading_Enabled.JPG
CPUs disponíveis na mesma plataforma com a tecnologia Hyper-Threading ativada (à direita) e desativada (à esquerda).

Posso executar 2 aplicativos ao mesmo tempo em 2 threads diferentes no mesmo núcleo?
Sim. Duas threads de software rodando em um único núcleo não precisam ser threads de um mesmo processo. Elas podem ser de um mesmo processo (no caso de software que utiliza multithreading), ou podem ser processos de 2 aplicativos diferentes. Qual das 2 threads de software irá rodar nas 2 threads de hardware de um núcleo Hyper-Threaded é uma decisão do sistema operacional. Ou seja: sim, você pode ter 2 aplicativos diferentes rodando no mesmo núcleo ao mesmo tempo. (Se você irá obter o mesmo desempenho neste cenário que obteria com 2 aplicativos rodando em núcleos separados já é uma questão diferente – veja a pergunta 6).

Como a tecnologia é implementada dentro do processador?
A pipeline do núcleo do processador Nehalem é construída para reconhecer 2 fluxos distintos de instruções (um para cada thread de hardware). Vários eventos podem fazer com que a pipeline alterne entre decodificar e enviar um fluxo ou outro fluxo. Todos os recursos da pipeline são compartilhados ou duplicados entre as 2 threads de hardware. Para obter mais informações, consulte o Manual do desenvolvedor do software das arquiteturas Intel® 64 e IA-32, Volume 1, seção 2.2.8.

Posso dar prioridade a uma thread de hardware ou garantir que ela não fique ociosa?
Como desenvolvedor, existem várias formas de otimizar seu código para a tecnologia Hyper-Threading (todas elas têm a ver com otimização de código para threads em geral); entretanto, você não pode dar prioridade a uma thread de hardware (embora haja algumas ferramentas no sistema operacional que lhe permitem atribuir prioridades a processos e atrelar esses processos a threads de hardware específicas). A implementação da tecnologia Hyper-Threading não garante que uma thread de hardware não fique ociosa. O que você pode fazer é utilizar ferramentas como o Intel® VTune™ Performance Analyzer e Intel® Thread Profiler para verificar se está utilizando threads de hardware de forma eficiente e então otimizar seu software.

Que benefícios de desempenho eu obterei utilizando a tecnologia Intel® Hyper-Threading?
A tecnologia Hyper-Threading oferece benefícios de diversas maneiras diferentes. Em um desktop, ela pode permitir que um usuário execute mais aplicativos simultaneamente. Para um desenvolvedor, ela fornece mais núcleos para a execução de threads de software. Em um servidor com alta utilização de CPU, ela pode ampliar o desempenho em cada núcleo. De um modo geral, você verá o maior benefício da tecnologia Hyper-Threading ao executar threads de software que utilizem grande quantidade de memória ou apresente outras latências. Suponha, por exemplo, que você possua 2 threads de software rodando em 2 threads de hardware - as duas rodando no mesmo núcleo. Se cada uma das 2 threads de software possuir algum acesso de I/O e longo acesso à memória, ou tempos de hibernação, você provavelmente perceberá um benefício mais significativo. (Porque 2 threads de hardware permitem uma utilização mais eficiente dos recursos durante longos períodos de espera). Muitos sites de avaliação têm publicado resultados de comparativos de desempenho, mostrando os benefícios da tecnologia Intel® Hyper-Threading.
Finalmente, uma última coisa a notar é que você ainda poderá executar aplicativos com uma única thread em uma plataforma com a tecnologia Hyper-Threading ativada. A Intel® Hyper-Threading foi projetada para não reduzir o desempenho desses aplicativos de thread única.

Tags:
Para obter mais informações sobre otimizações de compiladores, consulte Aviso sobre otimizações.