Ubuntu 12.04上的Boost.MPI

时间:2012-05-24 13:36:57

标签: c++ boost ubuntu mpi

背景

大家好,

我试图使用Boost :: MPI,目前我只想尝试从tutorial运行简单的第一个例子。我无法构建/运行它。

我使用apt-get安装了boost并安装了boost_mpi&使用synaptic包管理器的boost_serialization(1.48.0)。我使用apt-get安装了MPICH2。

即使从未明确安装过OpenMPI,它似乎在我的系统上,我认为这是Boost :: MPI的依赖,但看起来MPICH2和OpenMPI正在互相攻击。

信息

如果我使用

构建
g++ test.cpp -I/usr/include/mpich2 -L/usr/lib -lboost_mpi -lboost_serialization

然后使用

运行
mpiexec -n 2 ./a.out

它抛出了一堆似乎来自OpenMPI的错误。如果我尝试通过使用

链接OpenMPI库来构建
g++ test.cpp -L/usr/lib -lboost_mpi -lboost_serialization -lmpi -I/usr/include/openmpi

我收到以下错误:

/usr/bin/ld: /tmp/ccJ5ezv7.o: undefined reference to symbol 'ompi_op_set_cxx_callback'
/usr/bin/ld: note: 'ompi_op_set_cxx_callback' is defined in DSO /usr/lib/libmpi.so.0 so try adding it to the linker command line
/usr/lib/libmpi.so.0: could not read symbols: Invalid operation

如果我尝试使用mpic++使用以下命令构建

mpic++ test.cpp -lboost_mpi -lboost_serialization

它不会链接返回表格

的一堆错误
 /usr/lib/libmpich.so: undefined reference to `MPL_trid'

所以我尝试连接libmpi,即。

mpic++ test.cpp -lboost_mpi -lboost_serialization -lmpi

这构建但在使用mpiexec运行时会产生以下错误

Fatal error in PMPI_Errhandler_set: Invalid communicator, error stack:
PMPI_Errhandler_set(118): MPI_Errhandler_set(comm=0x370500, errh=0x370be0) failed
PMPI_Errhandler_set(70).: Invalid communicator

问题

在我看来,不知何故,OpenMPI和MPICH2正在交织在一起,真的不应该。有人知道如何只针对OpenMPI或MPICH2构建,然后使用正确的mpiexec运行吗?

1 个答案:

答案 0 :(得分:1)

通常不支持针对不同MPI库编译的混合代码。如果您的Boost :: MPI与Open MPI相关联,那么您必须在您的应用程序的其余部分使用Open MPI。

要获取mpic++以及其他编译器包装器和所有头文件,您应该为Open MPI安装-dev包。如果库已作为依赖项安装,则只有运行时部分存在。