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?
13
Respostas:
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 é.)
fonte
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:
(Fonte: http://www.intel.com/support/processors/sb/CS-017343.htm )
Talvez o fabricante (ou o fornecedor) quisesse ter cuidado.
fonte
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.
fonte
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.
fonte
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á.
fonte
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.
fonte
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.
fonte