
Estou interessado em executar algum processamento razoavelmente pesado em meu desktop/laptop (não tão ruim a ponto de exigir um cluster, mas precisa de uma boa máquina doméstica). Minha pergunta é quantos threads criar para realizar o trabalho mais rapidamente (suponha que o aplicativo distribua a carga de trabalho com pouquíssimas despesas gerais).
Eu normalmente criaria um thread por processador, mas queria saber se a capacidade de hyperthreading no Core i5/i7 significa que eu deveria realmente criar dois threads por processador (ou seja, um thread por processador virtual). Ninguem sabe?
*Obviamente, uma resposta razoável seria experimentar e ver. Como leva cerca de 12 horas para ser executado, prefiro acertar na primeira vez, mas ficarei feliz em postar os resultados se tiver a chance de executar nos dois sentidos.
Responder1
Esta é uma questão aberta que requer benchmarking caro. Eu pessoalmente vi isso acontecer nos dois sentidos. A menos que você realmente tenha estragado seu multithreading, a diferença será de cerca de +-10%, então vale a pena tentar dos dois lados. Mesmo que demore muito.
Muitos clusters de computação de alto desempenho criados a partir de componentes Intel têm o HT desativado. Isto é por uma boa razão, pois esses códigos tendem a saturar o hardware e, portanto, seu desempenho está muito ligado à saturação do acesso à memória - o que será pior no caso do HT, pois os threads estão competindo e ligando e desligando. Verhttp://semiaccurate.com/2012/04/25/does-disabling-hyper-threading-increase-performance/.
Mas se o seu código não estiver altamente ajustado, você poderá não experimentar o mesmo aumento de desempenho, consultehttp://semiaccurate.com/2012/04/25/does-disabling-hyper-threading-increase-performance/.
Parece que, para a computação de CPU única, desabilitar o hyperthreading pode aumentar alguns softwares em 1%, mas também prejudicar outros softwares significativamente mais. Talvez em cerca de 10%.
Isso significa que, a menos que seus benchmarks indiquem o contrário, você deve criar 1 thread por núcleo hiperthreaded/real em sua máquina desktop.
Responder2
Estou falando completamente de experiências com dobramento F@H aqui ao dizer que um único thread por núcleo (seja virtual ou físico) é melhor.
Ao dizer isso, pode ser uma boa ideia deixar um único núcleo livre para lidar com processos em segundo plano e tarefas gerais do computador, já que mesmo um pouco de uso pode deixar uma tarefa de joelhos.
Verifique a afinidade da CPU se quiser acompanhar onde as coisas estão sendo executadas. Como regra geral, atribua anúcleos físicos primeiro(ou seja:aténumerações), depois os núcleos do hyperthread.