'mpirun -np N': e se 'N' for maior que meus núcleos físicos?

5

Digamos que eu tenha uma estação de trabalho de 4 núcleos, o que o Linux (Ubuntu) faria se eu executasse

mpirun -np 9 XXX
  1. 9 correm imediatamente juntos ou serão executados 4 após 4?

  2. Eu suponho que usar 9 não seja bom, porque o resto 1 fará o computador ficar confuso, (eu não sei se vai ficar confuso ou a "cabeça" do computador vai decidir qual núcleo entre os 4 núcleos será usado?) Ou será escolhido aleatoriamente. Quem decide qual núcleo deve ser chamado?

  3. Se eu sentir que minha CPU não está ruim e minha memória RAM está boa e grande o suficiente, e meu caso não é muito grande. É uma boa ideia usar totalmente meu cpu e ram, que eu faço mpirun -np 8 XXX , ou mesmo mpirun -np 12 XXX .

por Daniel 30.05.2012 / 23:33

2 respostas

2
  1. Eles serão todos executados ao mesmo tempo
  2. A carga será distribuída pelo seu sistema operacional para ser trabalhada em tantos núcleos quantos estiverem disponíveis. O horário pode não ser proporcional ao número de encadeamentos. Aqui está um exemplo bobo do porquê. Suponha que você tenha um trabalho que você queira fazer três vezes, e ele leva a mesma quantidade de tempo a cada vez (1 unidade de tempo). Você tem dois núcleos. Suponha que não há mais nada em execução.
    • Caso 1: você tem apenas um segmento. Nesse caso, o encadeamento é executado em um núcleo e a coisa toda leva três unidades de tempo para ser concluída. Tempo total: 3
    • Caso dois: você tem dois tópicos. Em uma unidade de tempo, o trabalho é executado duas vezes (uma vez por núcleo). Você então tem que esperar uma unidade inteira de tempo para que a terceira iteração seja concluída. Tempo total: 2
    • Caso 3: você tem três tópicos. Seu sistema operacional tentará e tornará tudo justo, e assim dividirá o tempo de maneira uniforme entre os três processos. Até o final da unidade 1, NENHUM deles será concluído. Pela unidade 2, tudo será feito. (veja o caso acima). Tempo total: 2

Iniciar mais tópicos não afetará muito seu desempenho (o custo de iniciar um segmento é menor que 1 MB), mas também pode não ajudar.

A única maneira de saber o que seria mais rápido fazer é testá-lo, mas use as seguintes regras como guia: Use pelo menos o mesmo número de threads que você tem. Além disso, se o processo tiver muitos acessos à memória em todo o lugar, pode ser mais rápido ter mais threads do que núcleos (o acesso à memória é muito lento comparado à execução de outras instruções e o sistema operacional preencherá o tempo com a execução real de algo). outra coisa que não precisa esperar).

    
por 31.05.2012 / 02:28
1

De testes limitados e do meu entendimento (não muito profundo, apesar de ter usado algumas vezes) de computação paralela:

  1. Eles serão executados ao mesmo tempo.

  2. A carga será distribuída entre os núcleos. O computador não ficará "confuso", mas você terá muito pouco - ou nenhum - aumento de desempenho (porque cada núcleo está lidando com mais de uma tarefa). Na pior das hipóteses, pode retardar as coisas.

  3. No máximo, você quer executar um número equivalente ao seu número de núcleos; valores maiores (dentro da razão; se você der um número absurdamente grande, você pode ficar sem RAM ou o sistema fica muito lento) será executado, mas você pode não ter quaisquer benefícios, ou até mesmo pode ver a lentidão. Não faz mal tentar, no entanto.

por 31.05.2012 / 01:00