Boost :: MPI ou MPI C para aplicações científicas de alto desempenho?

16

O que mais detesto no MPI é lidar com tipos de dados (isto é, mapas de dados / máscaras) porque eles não se encaixam muito bem com o C ++ orientado a objetos. boost::mpino entanto, apenas suporta o MPI 1.1 no site:

O boost :: mpi é uma interface amigável em C ++ para a Interface de transmissão de mensagens padrão… O Boost.MPI pode criar tipos de dados MPI para tipos definidos pelo usuário usando a biblioteca Boost.Serialization

Alguém já teve alguma experiência com boost::mpicomputação científica séria? Você recomendaria isto? Você teve algum problema (problemas de escala, problemas de compilação, erros, recursos não implementados, necessidade de alguns recursos do mpi 2.2)?

Você pode comentar sobre o uso em boost::mpivez de usar a implementação MPI C do C ++? Você pode combinar os dois (use boost :: mpi quando puder, C-MPI em outro lugar)?

Você conhece algum código científico grande usando boost::mpi?

gnzlbg
fonte
Você também deve consultar esta página boost.org/doc/libs/1_50_0/doc/html/mpi/… para garantir que todas as funções necessárias sejam suportadas. A possibilidade de implementá-los você mesmo também deve ser considerada.
Alexander Alexander
11
A melhor razão pela qual consigo pensar em usar o Boost :: MPI é que ele suporta a serialização de tipos C ++ automaticamente. A interface MPI C não pode fazer isso por conta própria e você teria que criar tipos de dados MPI para todos os seus objetos C ++ para passá-los via Enviar / Recv etc., a menos que você queira fazer sua própria serialização por outros meios.
Jeff
A interface MPI Elementar (libelemental.org) ( github.com/elemental/Elemental/blob/master/src/core/imports/… ) faz a detecção automática de tipo de maneira elegante. No entanto, ele não tenta fazer muitas das coisas que o Boost :: MPI faz.
Jeff

Respostas:

13

Sempre achei que deveríamos usá-lo em nosso próprio projeto, deal.II, porque é de nível superior ao MPI puro e pode salvar algumas linhas de código aqui e ali. Dito isso, o que aprendi ao longo dos anos é que a maioria dos códigos de alto nível não tem muito código MPI para começar - as 600.000 linhas de código em negociação. Isso certamente é muito menos do que um pacote como o PETSc, mas acho que é verdade que a maioria dos códigos tem menos chamadas MPI do que se esperaria a princípio e que, consequentemente, o benefício de usar algo de nível mais alto não é tão bom quanto esse. pode pensar à primeira vista.

O que isso se resume então é que você considere quais são as compensações. Quanto MPI você precisará usar e como isso se compara ao esforço adicional necessário para criar e vincular a uma biblioteca externa.

Wolfgang Bangerth
fonte
6

Tanto quanto eu sei, boost::mpié apenas um c++invólucro em torno da CAPI. Dessa forma, você poderá usar boost::mpie alternar para a CAPI sempre que alguma funcionalidade não for implementada. De fato, em sua página da web:

As abstrações finas no Boost.MPI permitem combiná-lo facilmente com as chamadas para a biblioteca C MPI subjacente.

Eu mesmo não o usei e não conheço uma grande biblioteca, mas espero que seja apenas um invólucro leve e, como tal, não se preocupe com o desempenho comparado à CAPI.

GradGuy
fonte
2
Boost :: MPI é um wrapper em torno de um subconjunto de MPI; pelo que me lembro, ele suporta apenas o MPI 1.2, que está muito longe dos padrões MPI-2.2 ou MPI-3 em meus aspectos.
21313 Jeff Jeff