
Por causa do hyper-threading, minha CPU possui 2 processadores lógicos por núcleo. Se bem entendi a premissa do hyper-threading, ele permite que cada núcleo tenha um cache separado e um ponteiro de instrução para 2 threads separados simultaneamente, mas nãonãopermite a execução simultânea de 2 threads por um único núcleo. Como tal, basicamente apenas atenua a alta sobrecarga da troca de threads, o que significa que o impacto negativo no desempenho que ocorre por ter mais threads em execução do que núcleos para executá-los é reduzido. Contudo, eu ainda esperaria que houvessealgunsdespesas gerais envolvidas, ealgunsimpacto negativo no desempenho ao executar, por exemplo, 16 threads em um sistema com apenas 8 núcleos físicos.
Parece que o software em execução no meu sistema acredita que tenho 16 núcleos de CPU, devido ao meu hyper-threading com 8 núcleos físicos. Existem alguns softwares, como certos sistemas de construção, que usam como padrão todos os núcleos disponíveis para maximizar a paralelização. Eu sei que posso especificar o número de threads por meio de argumentos para o software em que estou pensando. Estou correto ao pensar que ir além de 8 threads não trará nenhum benefício para o desempenho? Estou correto ao pensar que ir além de 8 threads realmente impedirá o desempenho? Devo, portanto, instruir os programas a usarem no máximo 8 threads?
Responder1
Depende.
Em geral, executar um thread de software por thread de CPU proporcionará o melhor desempenho. Vejo regularmente acelerações de 10% ao executar um thread de software por núcleo da CPU - então, em vez de ter um thread de software rodando a 100%, tenho dois threads de software, cada um rodando a 55%.
Mas também vi melhor desempenho em execuçãomenosprocessos do que os núcleos da CPU se vários núcleos compartilharem o mesmo cache. Isto, no entanto, é excepcionalmente raro.
Normalmente você deve usar todos os 16 threads da CPU, mas a única maneira de saber com certeza em seu sistema é medindo.