Várias CPUs, desempenho multithread

0

Meu programa: 100% baseado em CPU e RAM , executa cálculos matemáticos , lê os dados do disco rígido para a RAM no começo. Nenhuma comunicação entre threads. Os tópicos, todos tomam o mesmo tempo também (quase).

Pergunta:

Se meu programa usa encadeamentos iguais ao número de encadeamentos de CPU, que tipo de desempenho posso esperar de um sistema de 2 cpu?

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 usa 32 threads, todos com 100% de uso, receberei o dobro da performance sobre uma única CPU?

    
por ShadowHero 05.12.2013 / 03:47

3 respostas

3

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:

  1. Você realmente não terá o dobro da largura de banda de memória utilizável.

  2. Levará tempo para "pingue-pongue" algumas linhas de cache entre as CPUs.

  3. Às vezes, um thread terá que esperar por outro e quanto mais segmentos você tiver, mais isso acontecerá.

  4. Às vezes, mesmo que você tenha muito trabalho a fazer, não é possível fazer tudo de uma vez.

E assim por diante.

Em casos muito raros, você pode realmente obter mais do que o dobro do desempenho. Se uma operação é limitada em cache, ter mais núcleos pode significar que o thread pode 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. / p>     

por 05.12.2013 / 04:07
0

A resposta final para perguntas de desempenho é não adivinhe, teste!

    
por 05.12.2013 / 04:14
0

Parece que você está trabalhando em uma tarefa de computação embaraçosamente paralela . Nesse caso, a resposta é sim. a taxa de transferência será dimensionada quase linearmente com o total de threads da CPU usado.

    
por 05.12.2013 / 06:43