É mais rápido executar um processo que gera N threads ou executa N processos?

1

Eu preciso executar ~ 1500 trabalhos no servidor do meu laboratório. O programa que estou usando ( blastpgp se alguém se importa) é capaz de rodar em modo paralelo, a opção "-a" define quantos encadeamentos ele irá lançar. O servidor em questão tem 40 CPUs Opteron de 64 bits disponíveis.

Eu tenho as seguintes opções:

  1. Execute os trabalhos um por um, sequencialmente, permitindo que blastpgp ocupe todos os 40 núcleos iniciando 40 threads ( -a 40 ).

  2. Execute 40 trabalhos em paralelo, permitindo que cada um inicie apenas um thread.

Qual dessas duas opções será mais rápida? Eles são equivalentes? Eu imagino que pode depender dos detalhes específicos de hardware / software / trabalho, mas existe uma regra geral ao executar um programa paralelo nativo em um cluster?

    
por terdon 07.01.2013 / 14:42

1 resposta

1

Eu fiz uma pergunta semelhante (não idêntica) no stackoverflow e o consenso geral parece ser que o multi-threading será mais rápido porque:

  1. Os segmentos são mais leves que os processos, colocam menos pressão sobre o sistema
  2. Encadear significa iniciar o programa apenas uma vez, portanto, qualquer tarefa de inicialização só precisa ser executada uma vez.
  3. O SO geralmente é melhor que o userland no gerenciamento de memória e agendamento, portanto, é melhor iniciar vários threads e deixar o SO resolvê-los.

Estou marcando isso como wiki da comunidade porque é apenas um resumo das respostas que recebi no stackoverflow.

    
por 31.01.2013 / 03:56