Impacto no desempenho do Hyper-Threading

4

Acabei de ler um artigo sobre Heise Online (veja a tabela, o resto é em alemão ) que alegou, que o Hyper-Threading retarda programas single-threaded, embora eles não usam o segundo segmento de um núcleo. Ou seja se você desabilitar o HT no BIOS, o aplicativo single-threaded será executado um pouco mais rápido.

Isso é verdade ou isso é um erro de medição? Alguém tem fontes sobre benchmarks que afirmam o mesmo?

    
por Bonita Montero 12.01.2017 / 19:12

4 respostas

5

É provável que não é um erro de medição. Na verdade, esse é um debate eterno sobre o desempenho dos jogos, já que eles geralmente são projetados para ter o máximo de desempenho de núcleo único. De acordo com este artigo da Intel artigo da Intel o Hyperthreading é:

Hyper-Threading Technology from Intel allows one physical processor package to be perceived as two separate logical processors within the operating system. Processor resources enabled for Hyper-Threading Technology duplicate, tag, or share the majority of resources. Sharing resources allows a more efficient use of the processor for a significant performance increase, at less than 5% die size and power consumption increase compared to a single processor package. However, Hyper-Threading Technology cannot have performance expectations equivalent to that of multiprocessing where all the processor resources are replicated.

Na tabela que você mostrou, o Cinebench testa um único núcleo do processador. Em suma, o HT (HyperThreading) permite dois núcleos virtuais para um núcleo físico (aquele que será avaliado no teste). Se o teste se basear no lançamento de um único processo que não precisa ser dividido, o compartilhamento de recursos entre dois núcleos degrada o resultado do teste, pois o equilíbrio que ocorre quando ativo não ocorre quando é desativado (o Windows e o Cinebench só veem um processador único).

Se adicionarmos outro teste do Tom's Hardware ao compare com a tabela que você mostrou (Cinebench R11.5):

Emulti-threaded:

Os resultados no desempenho single-thread não são so diferentes dos que você mostrou em sua página. É importante observar que os dois processadores lógicos que possuem estados de execução separados compartilham recursos, como o barramento do sistema ou o cache, para que eles nem sempre possam paralelizar as tarefas, e isso pode acontecer às vezes encadeamento de encadeamento mencionado neste artigo isso significa que, no teste de estresse de thread único, o compartilhamento de recursos pode tender a enfileirar alguns threads, gerando um resultado de desempenho um pouco pior.

Você também pode ver aqui como diferentes cenários em diferentes jogos no artigo de overclock.net foram os resultados que afirmam que em alguns casos o desempenho é prejudicado. Eu não acredito que isso tem que ser tomado como "desabilitar HT melhora o desempenho single-thread", mas como "o jogo é otimizado para um máximo de 4 núcleos" ou "não está aproveitando o HT". A primeira suposição pode ser validada lendo alguns artigos como this , que mostra como o desempenho de núcleo único de um i3 melhora o desempenho se o HT estiver ativado comparando com o i7 que não o faz.

Para resumir, vimos que existem pequenos casos em que a desativação do HyperThreading apresenta melhorias mínimas em relação ao desempenho de thread único, mas a relação geral de custo-benefício não é suficiente para reivindicar a desativação do HyperThreading. No que diz respeito ao SO e ao software para a arquitetura HT, não vale a pena desativá-lo.

    
por 12.01.2017 / 21:37
1

Sim e deveria ser óbvio. Quando você ativa o HT, você anuncia o dobro de núcleos que existem.

Isso é projetado para permitir que mais paralelizações aconteçam com base no fato de que a maioria dos programas não é suficientemente multiencadeada. No entanto, se você executar um programa totalmente multi-thread, você supercompromete recursos e há uma queda de desempenho apenas por causa da sobrecarga extra por thread. Por menor que seja, com uma aplicação que não seja capaz de usar 100% de CPU sobre qualquer número de núcleos e processadores, habilitar o HT resultou em uma queda de aproximadamente 2-3% no desempenho.

Agora, no caso de um programa single-threaded isolado, parece que não deve importar, pois o programa em si não pode usar em excesso os recursos, mas lembre-se que o SO também acha que há núcleos extras e que podem comprometer os recursos. Mesmo se ainda houver núcleos não utilizados, pode-se medir a sobrecarga causada pelo escalonador, que não posiciona o segmento de maneira ideal e o bloqueia em um único núcleo real.

Essas observações são baseadas em mais de uma década de desenvolvimento de software em tempo real e benchmarks. Há claramente uma diferença observável, embora muito pequena, quando se tenta maximizar o desempenho de um sistema.

    
por 17.01.2018 / 17:49
0

Sem referências, mas provavelmente é verdade, com base no seguinte:

Do artigo da Wikipedia sobre "Hyper-threading":

... however, when running two programs that require full attention of the processor, it can actually seem like one or both of the programs slows down slightly when Hyper-Threading Technology is turned on. This is due to the replay system of the Pentium 4 tying up valuable execution resources, equalizing the processor resources between the two programs, which adds a varying amount of execution time.

Isso é algo que não se aplica quando o SMT é desativado - o sistema operacional distribui os threads entre os núcleos e não os hardwarethreads.

As modernas CPUs Intel (e AMD) fazem " execução especulativa " onde elas realmente buscam e pré-executam instruções antes o ponteiro de instrução atual, para ter os resultados prontos quando a execução real for alcançada.

Coisas como ramificações e interrupções não esperadas fazem com que a CPU jogue fora sua especulação e tenha que começar de novo, e parece que a SMT apresenta mais situações onde isso pode ocorrer. Para "tarefas diretas" que não se ramificam ou lidam com muitas condições (isto é, tarefas GPU-ish), provavelmente fornece um benefício.

    
por 13.01.2017 / 15:26
0

Quando você tem HT habilitado, a CPU se divide em duas CPUs lógicas, e ambas as CPUs são consideravelmente mais lentas do que o único núcleo de onde elas vieram, mas a potência combinada é superior a 100%. No Pentium 4 dias, você pode dividir um núcleo de CPU em dois núcleos lógicos que são aproximadamente 55% mais rápidos. Com o Hyper Threading adicionado de volta à arquitetura Core, ele ficou melhor que 55%.

O problema é que o sistema operacional tende a tratar os núcleos lógicos como núcleos físicos, portanto, uma tarefa de alta prioridade pode ser executada ao lado de uma tarefa de baixa prioridade no mesmo núcleo da CPU. Agora, os segmentos ou tarefas estão recebendo a mesma atenção da CPU, embora não devam ser devidos à diferença de prioridade. Quando você executa um benchmark, o SO pode agendar tarefas de baixa prioridade nos núcleos lógicos e atrasar o programa de benchmark. É claro que quando um núcleo lógico fica inativo, o HT é efetivamente desativado e o núcleo restante retorna a 100% de velocidade.

Imagine um servidor ocupado com um protetor de tela intensivo da CPU. A proteção de tela é ativada e, embora esteja configurada com baixa prioridade, ela acaba dividindo o núcleo da CPU em duas partes que são 65% mais rápidas. Agora, o servidor tem apenas 65% do núcleo da CPU disponível.

    
por 14.05.2018 / 23:23