
(1) You must initialize MPI with MPI_Init_thread() instead of MPI_Init(). The boost::mpi::communicator ctor uses MPI_Init(), so you must run the initialization yourself and *then* create the communicator object. For instance:: MPI_Init_thread(&argc, &argv, MPI_THREAD_SERIALIZED) // ... mpi::communicator world;
Riccardo, I have the following code in my main: int main(int argc, char* argv[]) { boost::mpi::environment env(argc, argv); const int mpi_thread_support = MPI::Init_thread(argc, argv, MPI_THREAD_SERIALIZED ); if (mpi_thread_support != MPI_THREAD_SERIALIZED) { std::cerr<< "MPI implementation does not support threads" <<std::endl; return 1; } boost::mpi::communicator world; ... } This prints an error however: Calling MPI_Init or MPI_Init_thread twice is erroneous. How does 1 avoid that the mpi::communicator constructor calling MPI_INIT twice? Perhaps it's the environment constructor that calls MPI_INIT? rds,