Pergunta

Eu tenho que implementar sistema de MPI em um cluster. Se alguém aqui tem alguma experiência com MPI (MPICH / OpenMPI), eu gostaria de saber o que é melhor e como o desempenho pode ser potenciado em um cluster de x86_64 caixas.

Foi útil?

Solução

MPICH tem sido em torno de muito mais tempo. É extremamente portátil e você encontrará anos no valor de dicas e truques online. É uma aposta segura e provavelmente é compatível com mais programas MPI lá fora.

OpenMPI é mais recente. Embora não seja tão portátil, ele suporta as plataformas mais comuns muito bem. A maioria das pessoas parecem pensar que ele é muito melhor em vários aspectos, especialmente para tolerância a falhas -. Mas para aproveitar isso, você pode ter que usar algumas de suas características especiais que não fazem parte do padrão MPI

Quanto ao desempenho, isso depende muito da aplicação; é difícil dar conselhos gerais. Você deve publicar uma pergunta específica sobre o tipo de cálculo que você deseja executar, o número de nós, e o tipo de hardware -. Incluindo o tipo de hardware de rede que você está usando

Outras dicas

Eu escrevi algumas aplicações paralelas para ambos os grupos Windows e Linux, e posso informar que agora MPICH2 é provavelmente a escolha mais segura. É, como o outro responder menciona, um muito maduro biblioteca. Além disso, existe um amplo suporte de radiodifusão (via MPI_Bcast ) agora, e de fato, MPICH2 tem alguns recursos muito interessantes, como scatter-and-reunir .

OpenMPI está ganhando algum terreno embora. Pinguim de computação (eles são um fornecedor conjunto grande, e eles como o Linux) na verdade tem algumas referências muito fortes, onde OpenMPI bate MPICH2 mãos para baixo em determinadas circunstâncias.

No que diz respeito o seu comentário sobre "impulsionar o desempenho", o melhor conselho que posso dar é para nunca enviar mais dados do que o absolutamente necessário se você estiver I / O limite, e nunca fazer mais trabalho do que o necessário, se você está CPU limite. Eu caí na armadilha de otimizar a peça errada do código mais de uma vez :) Espero que você não vai seguir os meus passos!

Confira os fóruns MPI - eles têm um monte de bom sobre rotinas MPI , eo Beowulf local tem um monte de perguntas interessantes respondidas.

'Better' é difícil de definir ... 'Faster' pode ser respondida por análise comparativa com o seu código, e seu hardware. Coisas como optimização coletiva & offload vai depender do seu hardware exata e também é bastante variável com relação a versões pilha do controlador, o Google deve ser capaz de encontrá-lo combinações de trabalho.

Quanto trabalho de otimização, que pouco depende do código, e um pouco sobre o hardware.

é o código de E / S ligados ao armazenamento? Caso em que algo melhor do que NFS investigação pode ajudar muito, ou usando MPI I / O, em vez de paralelo ingênuo I / O

Se você é obrigado rede, em seguida, olhando para localidade comunicação e comunicadores / computação sobreposição pode ajudar. A maior parte das várias implementações MPI tem opções de ajuste para o uso de memória compartilhada local em vez de rede para comms intranode, o que para alguns códigos podem reduzir significativamente a carga da rede.

A segregação de I / O e tráfego de MPI pode fazer uma grande diferença em alguns grupos, especialmente para clusters Gigabit Ethernet.

Nós usamos mpich simplesmente porque ele parecia mais disponível e melhor documentado, nós não colocar um monte de esforço em alternativas de testes. MPICH tem ferramentas razoáveis ??para implantação no Windows.
O principal problema de desempenho que tivemos foi que precisávamos para enviar os mesmos dados de base para todos os nós e MPICH não faz (ou não) de transmissão suporte - para implantar os dados iniciais foi o (n)

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