633 lines
28 KiB
Plaintext
633 lines
28 KiB
Plaintext
[section:c_mapping Mapping from C MPI to Boost.MPI]
|
|
|
|
This section provides tables that map from the functions and constants
|
|
of the standard C MPI to their Boost.MPI equivalents. It will be most
|
|
useful for users that are already familiar with the C or Fortran
|
|
interfaces to MPI, or for porting existing parallel programs to Boost.MPI.
|
|
|
|
Note that this is not a perfect one to one mapping, the Boost.MPI will sometime
|
|
use function from the C API in a way that is transparent for the end user.
|
|
For example, [@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node50.html#Node50
|
|
`MPI_Probe and friends`] can be used to implement asynchronous send/recv.
|
|
|
|
[table Point-to-point communication
|
|
[[C Function/Constant] [Boost.MPI Equivalent]]
|
|
|
|
[[`MPI_ANY_SOURCE`] [`any_source`]]
|
|
|
|
[[`MPI_ANY_TAG`] [`any_tag`]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node40.html#Node40
|
|
`MPI_Bsend`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node51.html#Node51
|
|
`MPI_Bsend_init`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node42.html#Node42
|
|
`MPI_Buffer_attach`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node42.html#Node42
|
|
`MPI_Buffer_detach`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node50.html#Node50
|
|
`MPI_Cancel`]]
|
|
[[memberref boost::mpi::request::cancel
|
|
`request::cancel`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node35.html#Node35
|
|
`MPI_Get_count`]]
|
|
[[memberref boost::mpi::status::count `status::count`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node46.html#Node46
|
|
`MPI_Ibsend`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node50.html#Node50
|
|
`MPI_Iprobe`]]
|
|
[[memberref boost::mpi::communicator::iprobe `communicator::iprobe`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node46.html#Node46
|
|
`MPI_Irsend`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node46.html#Node46
|
|
`MPI_Isend`]]
|
|
[[memberref boost::mpi::communicator::isend
|
|
`communicator::isend`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node46.html#Node46
|
|
`MPI_Issend`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node46.html#Node46
|
|
`MPI_Irecv`]]
|
|
[[memberref boost::mpi::communicator::isend
|
|
`communicator::irecv`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node50.html#Node50
|
|
`MPI_Probe`]]
|
|
[[memberref boost::mpi::communicator::probe `communicator::probe`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node53.html#Node53
|
|
`MPI_PROC_NULL`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node34.html#Node34 `MPI_Recv`]]
|
|
[[memberref boost::mpi::communicator::recv
|
|
`communicator::recv`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node51.html#Node51
|
|
`MPI_Recv_init`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node47.html#Node47
|
|
`MPI_Request_free`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node40.html#Node40
|
|
`MPI_Rsend`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node51.html#Node51
|
|
`MPI_Rsend_init`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node31.html#Node31
|
|
`MPI_Send`]]
|
|
[[memberref boost::mpi::communicator::send
|
|
`communicator::send`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node52.html#Node52
|
|
`MPI_Sendrecv`]] [[memberref boost::mpi::communicator::sendrecv
|
|
`communicator::sendrecv`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node52.html#Node52
|
|
`MPI_Sendrecv_replace`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node51.html#Node51
|
|
`MPI_Send_init`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node40.html#Node40
|
|
`MPI_Ssend`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node51.html#Node51
|
|
`MPI_Ssend_init`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node51.html#Node51
|
|
`MPI_Start`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node51.html#Node51
|
|
`MPI_Startall`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node47.html#Node47
|
|
`MPI_Test`]] [[memberref boost::mpi::request::wait `request::test`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node47.html#Node47
|
|
`MPI_Testall`]] [[funcref boost::mpi::test_all `test_all`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node47.html#Node47
|
|
`MPI_Testany`]] [[funcref boost::mpi::test_any `test_any`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node47.html#Node47
|
|
`MPI_Testsome`]] [[funcref boost::mpi::test_some `test_some`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node50.html#Node50
|
|
`MPI_Test_cancelled`]]
|
|
[[memberref boost::mpi::status::cancelled
|
|
`status::cancelled`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node47.html#Node47
|
|
`MPI_Wait`]] [[memberref boost::mpi::request::wait
|
|
`request::wait`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node47.html#Node47
|
|
`MPI_Waitall`]] [[funcref boost::mpi::wait_all `wait_all`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node47.html#Node47
|
|
`MPI_Waitany`]] [[funcref boost::mpi::wait_any `wait_any`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node47.html#Node47
|
|
`MPI_Waitsome`]] [[funcref boost::mpi::wait_some `wait_some`]]]
|
|
]
|
|
|
|
Boost.MPI automatically maps C and C++ data types to their MPI
|
|
equivalents. The following table illustrates the mappings between C++
|
|
types and MPI datatype constants.
|
|
|
|
[table Datatypes
|
|
[[C Constant] [Boost.MPI Equivalent]]
|
|
|
|
[[`MPI_CHAR`] [`signed char`]]
|
|
[[`MPI_SHORT`] [`signed short int`]]
|
|
[[`MPI_INT`] [`signed int`]]
|
|
[[`MPI_LONG`] [`signed long int`]]
|
|
[[`MPI_UNSIGNED_CHAR`] [`unsigned char`]]
|
|
[[`MPI_UNSIGNED_SHORT`] [`unsigned short int`]]
|
|
[[`MPI_UNSIGNED_INT`] [`unsigned int`]]
|
|
[[`MPI_UNSIGNED_LONG`] [`unsigned long int`]]
|
|
[[`MPI_FLOAT`] [`float`]]
|
|
[[`MPI_DOUBLE`] [`double`]]
|
|
[[`MPI_LONG_DOUBLE`] [`long double`]]
|
|
[[`MPI_BYTE`] [unused]]
|
|
[[`MPI_PACKED`] [used internally for [link
|
|
mpi.tutorial.user_data_types serialized data types]]]
|
|
[[`MPI_LONG_LONG_INT`] [`long long int`, if supported by compiler]]
|
|
[[`MPI_UNSIGNED_LONG_LONG_INT`] [`unsigned long long int`, if
|
|
supported by compiler]]
|
|
[[`MPI_FLOAT_INT`] [`std::pair<float, int>`]]
|
|
[[`MPI_DOUBLE_INT`] [`std::pair<double, int>`]]
|
|
[[`MPI_LONG_INT`] [`std::pair<long, int>`]]
|
|
[[`MPI_2INT`] [`std::pair<int, int>`]]
|
|
[[`MPI_SHORT_INT`] [`std::pair<short, int>`]]
|
|
[[`MPI_LONG_DOUBLE_INT`] [`std::pair<long double, int>`]]
|
|
]
|
|
|
|
Boost.MPI does not provide direct wrappers to the MPI derived
|
|
datatypes functionality. Instead, Boost.MPI relies on the
|
|
_Serialization_ library to construct MPI datatypes for user-defined
|
|
classes. The section on [link mpi.tutorial.user_data_types user-defined
|
|
data types] describes this mechanism, which is used for types that
|
|
marked as "MPI datatypes" using [classref
|
|
boost::mpi::is_mpi_datatype `is_mpi_datatype`].
|
|
|
|
The derived datatypes table that follows describes which C++ types
|
|
correspond to the functionality of the C MPI's datatype
|
|
constructor. Boost.MPI may not actually use the C MPI function listed
|
|
when building datatypes of a certain form. Since the actual datatypes
|
|
built by Boost.MPI are typically hidden from the user, many of these
|
|
operations are called internally by Boost.MPI.
|
|
|
|
[table Derived datatypes
|
|
[[C Function/Constant] [Boost.MPI Equivalent]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node56.html#Node56
|
|
`MPI_Address`]] [used automatically in Boost.MPI for MPI version 1.x]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-20-html/node76.htm#Node76
|
|
`MPI_Get_address`]] [used automatically in Boost.MPI for MPI version 2.0 and higher]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node58.html#Node58
|
|
`MPI_Type_commit`]] [used automatically in Boost.MPI]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node55.html#Node55
|
|
`MPI_Type_contiguous`]] [arrays]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node56.html#Node56
|
|
`MPI_Type_extent`]] [used automatically in Boost.MPI]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node58.html#Node58
|
|
`MPI_Type_free`]] [used automatically in Boost.MPI]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node55.html#Node55
|
|
`MPI_Type_hindexed`]] [any type used as a subobject]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node55.html#Node55
|
|
`MPI_Type_hvector`]] [unused]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node55.html#Node55
|
|
`MPI_Type_indexed`]] [any type used as a subobject]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node57.html#Node57
|
|
`MPI_Type_lb`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node56.html#Node56
|
|
`MPI_Type_size`]] [used automatically in Boost.MPI]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node55.html#Node55
|
|
`MPI_Type_struct`]] [user-defined classes and structs with MPI 1.x]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-20-html/node76.htm#Node76
|
|
`MPI_Type_create_struct`]] [user-defined classes and structs with MPI 2.0 and higher]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node57.html#Node57
|
|
`MPI_Type_ub`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node55.html#Node55
|
|
`MPI_Type_vector`]] [used automatically in Boost.MPI]]
|
|
]
|
|
|
|
MPI's packing facilities store values into a contiguous buffer, which
|
|
can later be transmitted via MPI and unpacked into separate values via
|
|
MPI's unpacking facilities. As with datatypes, Boost.MPI provides an
|
|
abstract interface to MPI's packing and unpacking facilities. In
|
|
particular, the two archive classes [classref
|
|
boost::mpi::packed_oarchive `packed_oarchive`] and [classref
|
|
boost::mpi::packed_iarchive `packed_iarchive`] can be used
|
|
to pack or unpack a contiguous buffer using MPI's facilities.
|
|
|
|
[table Packing and unpacking
|
|
[[C Function] [Boost.MPI Equivalent]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node62.html#Node62
|
|
`MPI_Pack`]] [[classref
|
|
boost::mpi::packed_oarchive `packed_oarchive`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node62.html#Node62
|
|
`MPI_Pack_size`]] [used internally by Boost.MPI]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node62.html#Node62
|
|
`MPI_Unpack`]] [[classref
|
|
boost::mpi::packed_iarchive `packed_iarchive`]]]
|
|
]
|
|
|
|
Boost.MPI supports a one-to-one mapping for most of the MPI
|
|
collectives. For each collective provided by Boost.MPI, the underlying
|
|
C MPI collective will be invoked when it is possible (and efficient)
|
|
to do so.
|
|
|
|
[table Collectives
|
|
[[C Function] [Boost.MPI Equivalent]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node73.html#Node73
|
|
`MPI_Allgather`]] [[funcref boost::mpi::all_gather `all_gather`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node73.html#Node73
|
|
`MPI_Allgatherv`]] [most uses supported by [funcref boost::mpi::all_gather `all_gather`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node82.html#Node82
|
|
`MPI_Allreduce`]] [[funcref boost::mpi::all_reduce `all_reduce`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node75.html#Node75
|
|
`MPI_Alltoall`]] [[funcref boost::mpi::all_to_all `all_to_all`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node75.html#Node75
|
|
`MPI_Alltoallv`]] [most uses supported by [funcref boost::mpi::all_to_all `all_to_all`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node66.html#Node66
|
|
`MPI_Barrier`]] [[memberref
|
|
boost::mpi::communicator::barrier `communicator::barrier`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node67.html#Node67
|
|
`MPI_Bcast`]] [[funcref boost::mpi::broadcast `broadcast`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node69.html#Node69
|
|
`MPI_Gather`]] [[funcref boost::mpi::gather `gather`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node69.html#Node69
|
|
`MPI_Gatherv`]] [most uses supported by [funcref boost::mpi::gather `gather`],
|
|
other usages supported by [funcref boost::mpi::gatherv `gatherv`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node77.html#Node77
|
|
`MPI_Reduce`]] [[funcref boost::mpi::reduce `reduce`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node83.html#Node83
|
|
`MPI_Reduce_scatter`]] [unsupported]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node84.html#Node84
|
|
`MPI_Scan`]] [[funcref boost::mpi::scan `scan`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node71.html#Node71
|
|
`MPI_Scatter`]] [[funcref boost::mpi::scatter `scatter`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node71.html#Node71
|
|
`MPI_Scatterv`]] [most uses supported by [funcref boost::mpi::scatter `scatter`],
|
|
other uses supported by [funcref boost::mpi::scatterv `scatterv`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-20-html/node145.htm#Node145
|
|
`MPI_IN_PLACE`]] [supported implicitly by [funcref boost::mpi::all_reduce
|
|
`all_reduce` by omitting the output value]]]
|
|
]
|
|
|
|
Boost.MPI uses function objects to specify how reductions should occur
|
|
in its equivalents to `MPI_Allreduce`, `MPI_Reduce`, and
|
|
`MPI_Scan`. The following table illustrates how
|
|
[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node78.html#Node78
|
|
predefined] and
|
|
[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node80.html#Node80
|
|
user-defined] reduction operations can be mapped between the C MPI and
|
|
Boost.MPI.
|
|
|
|
[table Reduction operations
|
|
[[C Constant] [Boost.MPI Equivalent]]
|
|
|
|
[[`MPI_BAND`] [[classref boost::mpi::bitwise_and `bitwise_and`]]]
|
|
[[`MPI_BOR`] [[classref boost::mpi::bitwise_or `bitwise_or`]]]
|
|
[[`MPI_BXOR`] [[classref boost::mpi::bitwise_xor `bitwise_xor`]]]
|
|
[[`MPI_LAND`] [`std::logical_and`]]
|
|
[[`MPI_LOR`] [`std::logical_or`]]
|
|
[[`MPI_LXOR`] [[classref boost::mpi::logical_xor `logical_xor`]]]
|
|
[[`MPI_MAX`] [[classref boost::mpi::maximum `maximum`]]]
|
|
[[`MPI_MAXLOC`] [unsupported]]
|
|
[[`MPI_MIN`] [[classref boost::mpi::minimum `minimum`]]]
|
|
[[`MPI_MINLOC`] [unsupported]]
|
|
[[`MPI_Op_create`] [used internally by Boost.MPI]]
|
|
[[`MPI_Op_free`] [used internally by Boost.MPI]]
|
|
[[`MPI_PROD`] [`std::multiplies`]]
|
|
[[`MPI_SUM`] [`std::plus`]]
|
|
]
|
|
|
|
MPI defines several special communicators, including `MPI_COMM_WORLD`
|
|
(including all processes that the local process can communicate with),
|
|
`MPI_COMM_SELF` (including only the local process), and
|
|
`MPI_COMM_EMPTY` (including no processes). These special communicators
|
|
are all instances of the [classref boost::mpi::communicator
|
|
`communicator`] class in Boost.MPI.
|
|
|
|
[table Predefined communicators
|
|
[[C Constant] [Boost.MPI Equivalent]]
|
|
|
|
[[`MPI_COMM_WORLD`] [a default-constructed [classref boost::mpi::communicator `communicator`]]]
|
|
[[`MPI_COMM_SELF`] [a [classref boost::mpi::communicator `communicator`] that contains only the current process]]
|
|
[[`MPI_COMM_EMPTY`] [a [classref boost::mpi::communicator `communicator`] that evaluates false]]
|
|
]
|
|
|
|
Boost.MPI supports groups of processes through its [classref
|
|
boost::mpi::group `group`] class.
|
|
|
|
[table Group operations and constants
|
|
[[C Function/Constant] [Boost.MPI Equivalent]]
|
|
|
|
[[`MPI_GROUP_EMPTY`] [a default-constructed [classref
|
|
boost::mpi::group `group`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node97.html#Node97
|
|
`MPI_Group_size`]] [[memberref boost::mpi::group::size `group::size`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node97.html#Node97
|
|
`MPI_Group_rank`]] [memberref boost::mpi::group::rank `group::rank`]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node97.html#Node97
|
|
`MPI_Group_translate_ranks`]] [memberref boost::mpi::group::translate_ranks `group::translate_ranks`]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node97.html#Node97
|
|
`MPI_Group_compare`]] [operators `==` and `!=`]]
|
|
[[`MPI_IDENT`] [operators `==` and `!=`]]
|
|
[[`MPI_SIMILAR`] [operators `==` and `!=`]]
|
|
[[`MPI_UNEQUAL`] [operators `==` and `!=`]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node98.html#Node98
|
|
`MPI_Comm_group`]] [[memberref
|
|
boost::mpi::communicator::group `communicator::group`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node98.html#Node98
|
|
`MPI_Group_union`]] [operator `|` for groups]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node98.html#Node98
|
|
`MPI_Group_intersection`]] [operator `&` for groups]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node98.html#Node98
|
|
`MPI_Group_difference`]] [operator `-` for groups]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node98.html#Node98
|
|
`MPI_Group_incl`]] [[memberref boost::mpi::group::include `group::include`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node98.html#Node98
|
|
`MPI_Group_excl`]] [[memberref boost::mpi::group::include `group::exclude`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node98.html#Node98
|
|
`MPI_Group_range_incl`]] [unsupported]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node98.html#Node98
|
|
`MPI_Group_range_excl`]] [unsupported]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node99.html#Node99
|
|
`MPI_Group_free`]] [used automatically in Boost.MPI]]
|
|
]
|
|
|
|
Boost.MPI provides manipulation of communicators through the [classref
|
|
boost::mpi::communicator `communicator`] class.
|
|
|
|
[table Communicator operations
|
|
[[C Function] [Boost.MPI Equivalent]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node101.html#Node101
|
|
`MPI_Comm_size`]] [[memberref boost::mpi::communicator::size `communicator::size`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node101.html#Node101
|
|
`MPI_Comm_rank`]] [[memberref boost::mpi::communicator::rank
|
|
`communicator::rank`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node101.html#Node101
|
|
`MPI_Comm_compare`]] [operators `==` and `!=`]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node102.html#Node102
|
|
`MPI_Comm_dup`]] [[classref boost::mpi::communicator `communicator`]
|
|
class constructor using `comm_duplicate`]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node102.html#Node102
|
|
`MPI_Comm_create`]] [[classref boost::mpi::communicator
|
|
`communicator`] constructor]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node102.html#Node102
|
|
`MPI_Comm_split`]] [[memberref boost::mpi::communicator::split
|
|
`communicator::split`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node103.html#Node103
|
|
`MPI_Comm_free`]] [used automatically in Boost.MPI]]
|
|
]
|
|
|
|
Boost.MPI currently provides support for inter-communicators via the
|
|
[classref boost::mpi::intercommunicator `intercommunicator`] class.
|
|
|
|
[table Inter-communicator operations
|
|
[[C Function] [Boost.MPI Equivalent]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node112.html#Node112
|
|
`MPI_Comm_test_inter`]] [use [memberref boost::mpi::communicator::as_intercommunicator `communicator::as_intercommunicator`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node112.html#Node112
|
|
`MPI_Comm_remote_size`]] [[memberref boost::mpi::intercommunicator::remote_size] `intercommunicator::remote_size`]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node112.html#Node112
|
|
`MPI_Comm_remote_group`]] [[memberref boost::mpi::intercommunicator::remote_group `intercommunicator::remote_group`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node113.html#Node113
|
|
`MPI_Intercomm_create`]] [[classref boost::mpi::intercommunicator `intercommunicator`] constructor]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node113.html#Node113
|
|
`MPI_Intercomm_merge`]] [[memberref boost::mpi::intercommunicator::merge `intercommunicator::merge`]]]
|
|
]
|
|
|
|
Boost.MPI currently provides no support for attribute caching.
|
|
|
|
[table Attributes and caching
|
|
[[C Function/Constant] [Boost.MPI Equivalent]]
|
|
|
|
[[`MPI_NULL_COPY_FN`] [unsupported]]
|
|
[[`MPI_NULL_DELETE_FN`] [unsupported]]
|
|
[[`MPI_KEYVAL_INVALID`] [unsupported]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node119.html#Node119
|
|
`MPI_Keyval_create`]] [unsupported]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node119.html#Node119
|
|
`MPI_Copy_function`]] [unsupported]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node119.html#Node119
|
|
`MPI_Delete_function`]] [unsupported]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node119.html#Node119
|
|
`MPI_Keyval_free`]] [unsupported]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node119.html#Node119
|
|
`MPI_Attr_put`]] [unsupported]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node119.html#Node119
|
|
`MPI_Attr_get`]] [unsupported]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node119.html#Node119
|
|
`MPI_Attr_delete`]] [unsupported]]
|
|
]
|
|
|
|
Boost.MPI will provide complete support for creating communicators
|
|
with different topologies and later querying those topologies. Support
|
|
for graph topologies is provided via an interface to the
|
|
[@http://www.boost.org/libs/graph/doc/index.html Boost Graph Library
|
|
(BGL)], where a communicator can be created which matches the
|
|
structure of any BGL graph, and the graph topology of a communicator
|
|
can be viewed as a BGL graph for use in existing, generic graph
|
|
algorithms.
|
|
|
|
[table Process topologies
|
|
[[C Function/Constant] [Boost.MPI Equivalent]]
|
|
|
|
[[`MPI_GRAPH`] [unnecessary; use [memberref boost::mpi::communicator::as_graph_communicator `communicator::as_graph_communicator`]]]
|
|
[[`MPI_CART`] [unnecessary; use [memberref boost::mpi::communicator::has_cartesian_topology `communicator::has_cartesian_topology`]]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node133.html#Node133
|
|
`MPI_Cart_create`]] [[classref boost::mpi::cartesian_communicator `cartesian_communicator`]
|
|
constructor]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node134.html#Node134
|
|
`MPI_Dims_create`]] [[funcref boost::mpi::cartesian_dimensions `cartesian_dimensions`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node135.html#Node135
|
|
`MPI_Graph_create`]] [[classref
|
|
boost::mpi::graph_communicator
|
|
`graph_communicator ctors`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node136.html#Node136
|
|
`MPI_Topo_test`]] [[memberref
|
|
boost::mpi::communicator::as_graph_communicator
|
|
`communicator::as_graph_communicator`], [memberref
|
|
boost::mpi::communicator::has_cartesian_topology
|
|
`communicator::has_cartesian_topology`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node136.html#Node136
|
|
`MPI_Graphdims_get`]] [[funcref boost::mpi::num_vertices
|
|
`num_vertices`], [funcref boost::mpi::num_edges `num_edges`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node136.html#Node136
|
|
`MPI_Graph_get`]] [[funcref boost::mpi::vertices
|
|
`vertices`], [funcref boost::mpi::edges `edges`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node136.html#Node136
|
|
`MPI_Cartdim_get`]] [[memberref boost::mpi::cartesian_communicator::ndims `cartesian_communicator::ndims` ]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node136.html#Node136
|
|
`MPI_Cart_get`]] [[memberref boost::mpi::cartesian_communicator::topology `cartesian_communicator::topology` ]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node136.html#Node136
|
|
`MPI_Cart_rank`]] [[memberref boost::mpi::cartesian_communicator::rank `cartesian_communicator::rank` ]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node136.html#Node136
|
|
`MPI_Cart_coords`]] [[memberref boost::mpi::cartesian_communicator::coordinates `cartesian_communicator::coordinates` ]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node136.html#Node136
|
|
`MPI_Graph_neighbors_count`]] [[funcref boost::mpi::out_degree
|
|
`out_degree`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node136.html#Node136
|
|
`MPI_Graph_neighbors`]] [[funcref boost::mpi::out_edges
|
|
`out_edges`], [funcref boost::mpi::adjacent_vertices `adjacent_vertices`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node137.html#Node137
|
|
`MPI_Cart_shift`]] [[memberref boost::mpi::cartesian_communicator::shifted_ranks `cartesian_communicator::shifted_ranks` ]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node138.html#Node138
|
|
`MPI_Cart_sub`]] [[classref boost::mpi::cartesian_communicator `cartesian_communicator`]
|
|
constructor]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node139.html#Node139
|
|
`MPI_Cart_map`]] [unsupported]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node139.html#Node139
|
|
`MPI_Graph_map`]] [unsupported]]
|
|
]
|
|
|
|
Boost.MPI supports environmental inquires through the [classref
|
|
boost::mpi::environment `environment`] class.
|
|
|
|
[table Environmental inquiries
|
|
[[C Function/Constant] [Boost.MPI Equivalent]]
|
|
|
|
[[`MPI_TAG_UB`] [unnecessary; use [memberref
|
|
boost::mpi::environment::max_tag `environment::max_tag`]]]
|
|
[[`MPI_HOST`] [unnecessary; use [memberref
|
|
boost::mpi::environment::host_rank `environment::host_rank`]]]
|
|
[[`MPI_IO`] [unnecessary; use [memberref
|
|
boost::mpi::environment::io_rank `environment::io_rank`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node143.html#Node147
|
|
`MPI_Get_processor_name`]]
|
|
[[memberref boost::mpi::environment::processor_name
|
|
`environment::processor_name`]]]
|
|
]
|
|
|
|
Boost.MPI translates MPI errors into exceptions, reported via the
|
|
[classref boost::mpi::exception `exception`] class.
|
|
|
|
[table Error handling
|
|
[[C Function/Constant] [Boost.MPI Equivalent]]
|
|
|
|
[[`MPI_ERRORS_ARE_FATAL`] [unused; errors are translated into
|
|
Boost.MPI exceptions]]
|
|
[[`MPI_ERRORS_RETURN`] [unused; errors are translated into
|
|
Boost.MPI exceptions]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node148.html#Node148
|
|
`MPI_errhandler_create`]] [unused; errors are translated into
|
|
Boost.MPI exceptions]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node148.html#Node148
|
|
`MPI_errhandler_set`]] [unused; errors are translated into
|
|
Boost.MPI exceptions]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node148.html#Node148
|
|
`MPI_errhandler_get`]] [unused; errors are translated into
|
|
Boost.MPI exceptions]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node148.html#Node148
|
|
`MPI_errhandler_free`]] [unused; errors are translated into
|
|
Boost.MPI exceptions]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node148.html#Node148
|
|
`MPI_Error_string`]] [used internally by Boost.MPI]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node149.html#Node149
|
|
`MPI_Error_class`]] [[memberref boost::mpi::exception::error_class `exception::error_class`]]]
|
|
]
|
|
|
|
The MPI timing facilities are exposed via the Boost.MPI [classref
|
|
boost::mpi::timer `timer`] class, which provides an interface
|
|
compatible with the [@http://www.boost.org/libs/timer/index.html Boost
|
|
Timer library].
|
|
|
|
[table Timing facilities
|
|
[[C Function/Constant] [Boost.MPI Equivalent]]
|
|
|
|
[[`MPI_WTIME_IS_GLOBAL`] [unnecessary; use [memberref
|
|
boost::mpi::timer::time_is_global `timer::time_is_global`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node150.html#Node150
|
|
`MPI_Wtime`]] [use [memberref boost::mpi::timer::elapsed
|
|
`timer::elapsed`] to determine the time elapsed from some specific
|
|
starting point]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node150.html#Node150
|
|
`MPI_Wtick`]] [[memberref boost::mpi::timer::elapsed_min `timer::elapsed_min`]]]
|
|
]
|
|
|
|
MPI startup and shutdown are managed by the construction and
|
|
destruction of the Boost.MPI [classref boost::mpi::environment
|
|
`environment`] class.
|
|
|
|
[table Startup/shutdown facilities
|
|
[[C Function] [Boost.MPI Equivalent]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node151.html#Node151
|
|
`MPI_Init`]] [[classref boost::mpi::environment `environment`]
|
|
constructor]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node151.html#Node151
|
|
`MPI_Finalize`]] [[classref boost::mpi::environment `environment`]
|
|
destructor]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node151.html#Node151
|
|
`MPI_Initialized`]] [[memberref boost::mpi::environment::initialized
|
|
`environment::initialized`]]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node151.html#Node151
|
|
`MPI_Abort`]] [[memberref boost::mpi::environment::abort
|
|
`environment::abort`]]]
|
|
]
|
|
|
|
Boost.MPI does not provide any support for the profiling facilities in
|
|
MPI 1.1.
|
|
|
|
[table Profiling interface
|
|
[[C Function] [Boost.MPI Equivalent]]
|
|
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node153.html#Node153
|
|
`PMPI_*` routines]] [unsupported]]
|
|
[[[@http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node156.html#Node156
|
|
`MPI_Pcontrol`]] [unsupported]]
|
|
]
|
|
|
|
[endsect:c_mapping]
|