Um processo que preenche todos os núcleos lógicos tem um impacto negativo no desempenho?

Um processo que preenche todos os núcleos lógicos tem um impacto negativo no desempenho?

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.

informação relacionada