mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-05-25 10:52:31 -04:00
55 lines
1.6 KiB
C++
55 lines
1.6 KiB
C++
// Copyright (C) 2007 Trustees of Indiana University
|
|
|
|
// Authors: Douglas Gregor
|
|
// Andrew Lumsdaine
|
|
|
|
// Use, modification and distribution is subject to the Boost Software
|
|
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
// http://www.boost.org/LICENSE_1_0.txt)
|
|
#include <boost/mpi/intercommunicator.hpp>
|
|
#include <boost/mpi/environment.hpp>
|
|
#include <boost/mpi/group.hpp>
|
|
|
|
namespace boost { namespace mpi {
|
|
|
|
intercommunicator::intercommunicator(const communicator& local,
|
|
int local_leader,
|
|
const communicator& peer,
|
|
int remote_leader)
|
|
{
|
|
MPI_Comm comm;
|
|
BOOST_MPI_CHECK_RESULT(MPI_Intercomm_create,
|
|
((MPI_Comm)local, local_leader,
|
|
(MPI_Comm)peer, remote_leader,
|
|
environment::collectives_tag(), &comm));
|
|
comm_ptr.reset(new MPI_Comm(comm), comm_free());
|
|
}
|
|
|
|
boost::mpi::group intercommunicator::local_group() const
|
|
{
|
|
return this->group();
|
|
}
|
|
|
|
int intercommunicator::remote_size() const
|
|
{
|
|
int size;
|
|
BOOST_MPI_CHECK_RESULT(MPI_Comm_remote_size, ((MPI_Comm)*this, &size));
|
|
return size;
|
|
}
|
|
|
|
boost::mpi::group intercommunicator::remote_group() const
|
|
{
|
|
MPI_Group gr;
|
|
BOOST_MPI_CHECK_RESULT(MPI_Comm_remote_group, ((MPI_Comm)*this, &gr));
|
|
return boost::mpi::group(gr, /*adopt=*/true);
|
|
}
|
|
|
|
communicator intercommunicator::merge(bool high) const
|
|
{
|
|
MPI_Comm comm;
|
|
BOOST_MPI_CHECK_RESULT(MPI_Intercomm_merge, ((MPI_Comm)*this, high, &comm));
|
|
return communicator(comm, comm_take_ownership);
|
|
}
|
|
|
|
} } // end namespace boost::mpi
|