Hyperthreading e como as aplicações se beneficiam disso

0

Estou interessado em hyper-threading e como as aplicações podem se beneficiar dele. Pelo que tenho lido, o hyper-threading é gerenciado diretamente pelo sistema operacional e está relacionado a como os threads virtuais executados em cada núcleo acessam unidades de execução compartilhadas em cada núcleo. A maioria das postagens estava sugerindo que é algo com o qual você não deveria se preocupar e deveria deixar o sistema operacional gerenciá-lo.

Eu estava bem com a resposta até que me deparei com um cenário em um jogo que me afastou completamente. Existe um jogo chamado Arma 3 que tem uma configuração "Hyper threading" nas opções. Eu me incomodei em google um pouco e tropeçou em um post do desenvolvedor que explica o que a configuração faz. Ele disse exatamente isso

what it does is tell the engine to use HT cores only for threads with minor tasks / micro jobs ... just remember that -cpuCount= negates the -enableHT

Agora, pelo que li sobre o HT e como ele funciona, não deve haver nenhuma maneira direta de dizer ao aplicativo para usar o hyper-threading. Aparentemente, a configuração "faz alguma mágica" dentro do mecanismo que informa é usar HT para tarefas específicas.

Alguém poderia me esclarecer isso? Porque é honestamente confuso. Obrigado.

    
por Erik9631 05.09.2018 / 00:51

1 resposta

0

Explicar a razão pela qual o Hyper Threading ajuda em tudo requer alguma explicação sobre o que exatamente é e, por sua vez, como os recursos são compartilhados em um processador.

Antecedentes

Uma tradicional CPU multi-core compartilha muito pouco em termos de recursos internos entre os núcleos. Na maioria dos casos mais antigos, apenas o cache L3 (e possivelmente o L4, se existisse) era compartilhado entre núcleos, todo o restante era exclusivo de cada núcleo. Por causa de como os computadores funcionam, isso acaba resultando na maioria das partes de um núcleo não sendo realmente usadas por todas as instruções executadas nele.

Lidar com essa ineficiência é onde entra o Hyper Threading. A ideia geral é que compartilhando muitos dos recursos entre dois (ou mais) núcleos, você pode alcançar quase a mesma quantidade de trabalho usando muito menos espaço (e energia) . A limitação para isso é, obviamente, que você não pode realmente executar 100% do que você poderia em uma CPU com um número de núcleos físicos igual ao número total de threads que você tem.

Provavelmente vale a pena notar que o Hyper Threading não é a mesma coisa que o MultiThreading Simétrico fornecido por algumas outras arquiteturas de CPU (POWER, SPARC e (provavelmente) chips Ryzen da AMD). O SMT é muito mais próximo de um design multi-core clássico e não sofre da maioria dos problemas que o Hyper Threading faz.

Então, se você não pode simplesmente executar qualquer coisa em todos os núcleos, para que serve exatamente isso?

Bem, na verdade é meio difícil de dizer. Para obter o maior benefício possível, você precisa agrupar código semelhante em pares de threads que compartilham recursos dentro da CPU, mas mesmo assim é difícil ter certeza se o Hyper Threading realmente ajudará muito. Alguns sistemas operacionais mais antigos não faziam esse tipo de agrupamento, e os resultados ainda são considerados um excelente exemplo da frase "patologicamente ruim". Sistemas mais recentes fazem algum nível de agrupamento, mas ainda não é perfeito.

Tarefas pesadas de E / S (por exemplo, servidores web e bancos de dados) tendem a beneficiar pelo menos algumas do Hyper Threading, mas o quanto elas se beneficiarão depende exatamente do que estão fazendo, e elas são uma das poucos casos que têm um benefício razoavelmente claro.

No entanto, é razoavelmente bem conhecido que tipos de cargas de trabalho pioram

com o SMT. Praticamente qualquer coisa que precise utilizar todos os núcleos do CPU com 100% de carga não vai conseguir muito, se é que algum, se beneficiar do SMT. Nos chips HT, na verdade, às vezes, ele fica mais lento do que com o HT desligado. Em algumas outras implementações, pode ou não melhorar ou piorar as coisas, dependendo do que está sendo feito (por exemplo, os chips SPARC fazem bem com tais cargas de trabalho, desde que não façam chamadas de função aninhadas muito profundamente).

OK, então o que há com essa coisa de Arma 3?

Como mencionado acima, o Hyper Threading pode fazer coisas muito ruins para o seu desempenho se você não estiver agrupando as coisas de maneira sensata em cada núcleo. A lógica necessária para fazer esse agrupamento geralmente é específica de um determinado software. O interruptor acima mencionado para o Arma 3 está apenas controlando se esta lógica está ativada ou não. Agora, por que não é autodetectada, não tenho certeza (não é difícil descobrir se o Hyper Threading está sendo usado ou não).

    
por 05.09.2018 / 21:33