Que razões um programador pode ter para desativar o hyperthreading?

13

Minha empresa acabou de comprar novos computadores para substituir as antigas máquinas Windows XP de 2 GB. Alguém da minha equipe percebeu que eles vinham com o hyperthreading desativado e disse a todos para reiniciar e ativá-lo. Existe um benefício na programação em uma máquina com o hyperthreading desativado?

Pops
fonte
1
Que modelo de CPUs Intel você está usando, por exemplo, Core i5 ou i7?
JB rei
@ JBK Boa pergunta, eu não sei, eu não tenho uma dessas máquinas.
Pops
Em um notebook Pentium 4 antigo, reduza o calor e o ruído do ventilador e talvez faça a bateria durar mais alguns minutos. Não é uma resposta, porque deve ser uma história antiga e não deve ser aplicada no seu caso.
Steve314
No jogo de Lucasarts, Grim Fandango, o mecanismo de som entrou em uma condição de corrida ao rodar com hyperthreading.

Respostas:

14

Sim, trabalhei em um aplicativo com melhor desempenho ao executar em uma máquina com o HT desativado .

O que aconteceu foi que o código original criaria o dobro de threads quando executado em uma máquina com hiperencadeamento (o que você assumiria que é o ponto principal do HT). No entanto, a taxa de transferência desses encadeamentos era muito sensível à quantidade de cache disponível para o encadeamento. Com o dobro de encadeamentos lutando por uma quantidade fixa de cache, o cache disponível por encadeamento era muito baixo e ocorria problemas: haveria muito mais erros de cache, mais acessos à memória principal e o desempenho teve um impacto substancial comparado à execução com menos threads e mais cache por thread (que é o que você obtém se executou o aplicativo em uma máquina com HT desativado).

A melhor solução foi fazer com que o aplicativo verifique melhor a plataforma HW e leve em consideração o tamanho do cache e a quantidade de cache necessária para cada thread ao decidir quantos threads criar. De qualquer forma, o problema desapareceu rapidamente com a geração subsequente de CPUs, que dobrou o tamanho do cache (e na verdade começamos a ver um benefício modesto do HT). No entanto, todo o episódio deixou um legado longo e duradouro de recomendar que o HT sempre fosse desativado em qualquer plataforma em que o SW fosse executado, e respostas bruscas " essa máquina não tem o HT ativado, não é? ", Responde a qualquer problema de desempenho. (Eu acho que o problema fundamental é que a maioria dos não-geeks simplesmente não entende o que o HT realmente é.)

timday
fonte
11

Não conheço os detalhes técnicos, mas, aparentemente, se um aplicativo (ou o SO) não for otimizado para hyper-threading, o hyper-threading pode realmente diminuir o desempenho.

Até a Intel recomenda desativá-lo neste caso:

Os seguintes sistemas operacionais de desktop não são recomendados para uso com a tecnologia Hyper-Threading. Se você estiver usando um dos seguintes sistemas operacionais de desktop, é recomendável desabilitar a tecnologia Hyper-Threading no programa de instalação do BIOS do sistema: [...]

(Fonte: http://www.intel.com/support/processors/sb/CS-017343.htm )

Talvez o fabricante (ou o fornecedor) quisesse ter cuidado.

sleske
fonte
Também é conhecido por fazer alguns jogos rodarem mais devagar do que quando o hyperthreading é desativado.
Klaim
4
Seria interessante se eles estivessem preocupados com o desempenho dos jogos jogados no trabalho.
dietbuddha
Em um sistema com vários núcleos, dois threads podem ser alocados para dois hyperthreads no mesmo núcleo, deixando todos os outros núcleos inativos e fornecendo muito menos desempenho do que colocar cada thread em um núcleo diferente. Até sistemas operacionais tornar-se consciente da diferença entre um núcleo diferente e diferentes hyperthreads no mesmo núcleo ...
Steve314
1
@ Steve314: Esse certamente foi o caso do Windows2000 (e desabilitar o HT foi definitivamente uma boa idéia se você o executasse), mas o Windows XP deveria ter conhecimento de HT (consulte, por exemplo, download.microsoft.com/download/5/7/ 7 /… ) e não caia nessa armadilha. Presumo que uma lógica semelhante foi incorporada ao Linux a partir de alguma versão do kernel.
timday 22/07
6

Muito provavelmente, o OEM estava apenas sendo conservador. Os OEMs geralmente são enviados com os avançados avançados desativados (como HT, bit No-Execute, vt etc.) desativados. O motivo é que algumas circunstâncias raras podem fazer com que essas configurações falhem, e as pessoas que realmente desejam os recursos podem facilmente ativá-las.

Além disso, alguns erros raros nos SOs levam a possíveis problemas de segurança quando alguns recursos são ativados. A tecnologia de virtualização, por exemplo, já teve esse problema. Portanto, é apenas o fornecedor sendo conservador.

O hyperthreading geralmente é útil para áreas de trabalho interativas, como máquinas de programação. No entanto, algumas pessoas podem querer desativá-lo se seus aplicativos forem executados em servidores sem HT. Apenas para reduzir possíveis diferenças de hardware.

Erik Funkenbusch
fonte
2
Esse é quase sempre o caso das máquinas que vêm com o HT desativado. Compatibilidade máxima e salvando o fornecedor de uma enxurrada de chamadas de suporte estranhas.
Patrick Hughes
5

O Hyperthreading não adiciona novos núcleos à CPU. Você ainda tem uma unidade aritmética / lógica, uma unidade de ponto flutuante (...) por núcleo. Portanto, se você tiver vários processos / threads que fazem coisas muito diferentes, o HTT poderá melhorar o desempenho. Mas se você tiver vários threads fazendo mais ou menos as mesmas coisas (não incomum em aplicativos de processamento de números), o desempenho poderá sofrer muito com o HTT.

nikie
fonte
2

Talvez problemas de coerência de cache no código massivamente multithread? Se você tiver caches de CPU discretos, é teoricamente possível que dois threads tenham os mesmos dados em cache e modifiquem-no ao mesmo tempo com valores diferentes. Se você tiver um cache unificado em algum momento entre as CPUs e a memória principal (L2 ou L3), provavelmente existe algum mecanismo que evitará isso, mas em CPUs de ponta com caches menores, talvez não.

Como alternativa, pode ser possível que a ativação do hyperthreading em chips que não o suportem gere um código durante o POST, para que o fornecedor do BIOS o deixe apenas porque não sabe que tipo de CPU o sistema terá.

TMN
fonte
Meu palpite - existe um mecanismo para resolver esse problema de coerência, mas pode ter uma penalidade de desempenho significativa. IIRC, uma página específica da memória não pode ser carregada livremente em qualquer página de cache - normalmente existe um mecanismo de mapeamento de endereço para uma dessas poucas páginas. Talvez seja possível que dois threads lutem por algumas páginas de cache, deixando o restante sem uso? (talvez até com vários núcleos, embora presumivelmente com menos risco).
Steve314
0

Um motivo para não desativar o hyperthreading em uma máquina do desenvolvedor é que ele pode ocultar alguns erros sutis de vários threads. Mas isso realmente se aplica apenas a uma máquina com processador único e núcleo único. O multi-core exporá, se houver, mais erros de multi-threading durante o teste.

OTOH, duvido que você veja um processador de núcleo único com o hyperthreading desativado por padrão. Meu voto está na resposta de Sleskes.

Steve314
fonte
0

Muitos softwares antigos foram escritos em máquinas de núcleo único e podem ter erros ao executar em uma máquina com vários núcleos. Provavelmente, a instrução realmente pretendia dizer "Isso não funciona em máquinas com vários núcleos", mas apenas por um longo tempo o hyperthreading foi a única máquina com vários núcleos provável que você veria em uso comum.

JohnB
fonte