Hi all,
I was a happy user of Boost.MPI that was working
together with the underlying OpenMPI. However, MPI_THREAD_MULTIPLE
support of OpenMPI is quite clumsy and it hangs frequently (OpenMPI
developers call this as being "lightly tested"). So, I installed MPICH2
that claims to supports thread-safe MPI.
At the same time, I didn't want to remove my working OpenMPI
implementation and my old Boost libraries built on top of that.
Therefore, I rebuilt Boost (--with-mpi) using the new
mpicxx of MPICH (so that it finds the correct MPICH2 directories, etc) on a different location
.
Everything went ok during compilation and
installation. However, I have compilation errors when trying to run any
mpi program. For example, with the test suite provided by Boost.MPI
itself, I get errors like (this is for all_gather.cpp specifically but
I get similar ones with every other test):
-------------------------------------
/tmp/ccbyPLBK.o: In function `void boost::mpi::detail::all_gather_impl<int>(boost::mpi::communicator const&, int const*, int, int*, mpl_::bool_<true>)':all_gather_test.cpp:(.gnu.linkonce.t._ZN5boost3mpi6detail15all_gather_implIiEEvRKNS0_12communicatorEPKT_iPS6_N4mpl_5bool_ILb1EEE[void boost::mpi::detail::all_gather_impl<int>(boost::mpi::communicator const&, int const*, int, int*, mpl_::bool_<true>)]+0x1c): undefined reference to `boost::mpi::communicator::operator int() const'
/tmp/ccbyPLBK.o: In function `void boost::mpi::detail::broadcast_impl<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >
>(boost::mpi::communicator const&, std::basic_string<char,
std::char_traits<char>, std::allocator<char> >*, int,
int, mpl_::bool_<false>)':all_gather_test.cpp:(.gnu.linkonce.t._ZN5boost3mpi6detail14broadcast_implISsEEvRKNS0_12communicatorEPT_iiN4mpl_5bool_ILb0EEE[void boost::mpi::detail::broadcast_impl<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >
>(boost::mpi::communicator const&, std::basic_string<char,
std::char_traits<char>, std::allocator<char> >*, int,
int, mpl_::bool_<false>)]+0x27): undefined reference to
`boost::mpi::communicator::operator int() const'
-------------------------------------
I
"quadruple-checked" to see that the versions of
mpicxx/libraries/include directories all belong to the new installation
of MPICH2 and not remainders of old OpenMPI installation. Thus, I
don't think that is a binary incompatibility issue.
MPICH2 implementation works OK alone (without boost) and the old Boost+OpenMPI installation libraries also still work.
But the new Boost+MPICH2 libraries... ihhh :(
Any suggestions and pointers will be appreciated.
Thanks,
-- Aydin