Meu programa:100% baseado em CPU e RAM, executacálculos matemáticos, lê os dados do HDD para a RAM no início.Nenhuma comunicação entre threads.Os fios, todos levam omesmo tempotambém (quase).
Pergunta:
Se meu programa usa threads iguais ao número de threads da CPU, que tipo de desempenho posso esperar de um sistema de 2 CPUs?
Digamos que eu use dois xeons de 8 núcleos, cada um com 16 threads, então 16x2 = 32 threads no total. Se meu programa usar 32 threads, todos com 100% de uso, obterei o dobro do desempenho em uma única CPU?
Responder1
Realmente, a melhor resposta que você pode dar é “provavelmente não, mas depende”. Você tem o dobro da potência bruta da CPU disponível, mas:
Você realmente não terá o dobro da largura de banda de memória utilizável.
Levará algum tempo para fazer "ping pong" em algumas linhas de cache entre CPUs.
Às vezes, um thread terá que esperar por outro e quanto mais threads você tiver, mais isso acontecerá.
Às vezes, mesmo que você tenha muito trabalho a fazer, não consegue fazer tudo de uma vez.
E assim por diante.
Em casos muito raros, você pode realmente obtermaisque o dobro do desempenho. Se uma operação for limitada em cache, ter mais núcleos pode significar que o thread poderá ser executado por mais tempo (porque o núcleo não terá outras coisas para fazer porque os outros núcleos estão fazendo isso), permitindo que os caches da CPU permaneçam quentes por mais tempo.
Responder2
A resposta definitiva para questões de desempenho é não adivinhe, teste!
Responder3
Parece que você está trabalhando em umembaraçosamente paralelotarefa de computação, caso em que a resposta é sim, sua taxa de transferência será dimensionada quase linearmente com o total de threads de CPU usados.