Pergunta

Eu entendo as diferenças entre um programa multithread e um programa de depender de comunicação inter-máquina. Meu problema é que eu tenho um programa multithreaded agradável escrito em 'C' que as obras e corre muito bem em uma máquina de 8 núcleos. Existe agora oportunidade de porto este programa a um cluster para ter acesso a mais núcleos. Vale a pena o esforço para arrancar o material pthread e retrofit MPI (que eu nunca usei) ou estamos melhor fora de recodificação a coisa toda (ou a maior parte dele) a partir do zero? Suponha que estamos "preso" com C então uma mudança por atacado da linguagem não é uma opção.

Foi útil?

Solução

Dependendo de como o software é escrito, não pode ou não haver vantagens de ir para a MPI sobre manter sua implementação pthread.

Infelizmente (ou felizmente), passagem de mensagens é um animal muito diferente do que pthreading - o pressuposto básico é bastante diferente. Eu amo esta citação de Joshua Phillips da equipe Maestro :" a diferença entre de passagem de mensagens e-estado compartilhado comunicação é equivalente à diferença entre o envio de um colega um e-mail solicitando-lhe para completar uma tarefa e abertura seu organizador para escrever a tarefa diretamente em sua lista de afazeres mais do que apenas ser rude, o último é provável confundi-la -. ela poderia apagá-lo, não notá-lo, ou acidentalmente priorizá-los incorretamente "

.

Infelizmente, a maneira como você compartilhar dados é muito diferente. Não há acesso direto aos dados em outros segmentos (já que pode ser em outras máquinas), por isso pode ser uma tarefa muito difícil para migrar de pthreads para MPI. Por outro lado, se o código é escrito de modo que cada segmento é isolado, pode ser uma tarefa fácil, e definitivamente vale a pena.

A fim de determinar o quão útil esta será, você precisa entender o código, eo que você espera alcançar por comutação. Ele pode ser útil como uma experiência de aprendizagem (você aprende muito sobre a sincronização e rosqueamento, trabalhando em MPI), mas pode não ser prático se os ganhos serão menores.

Outras dicas

Re. o seu comentário para Reed - Isso soa como um fácil baixa sobrecarga de conversão, a MPI. Só tome cuidado: nem todos MPI APIs suporte criação dinâmica de processos, ou seja, você começar o seu programa com processos de N (especificados na inicialização) e você está preso com processos de N durante todo o tempo de vida do programa

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top