summaryrefslogtreecommitdiff
path: root/libs/mpi/doc/c_mapping.qbk
diff options
context:
space:
mode:
Diffstat (limited to 'libs/mpi/doc/c_mapping.qbk')
-rw-r--r--libs/mpi/doc/c_mapping.qbk626
1 files changed, 626 insertions, 0 deletions
diff --git a/libs/mpi/doc/c_mapping.qbk b/libs/mpi/doc/c_mapping.qbk
new file mode 100644
index 0000000000..05864c4ef8
--- /dev/null
+++ b/libs/mpi/doc/c_mapping.qbk
@@ -0,0 +1,626 @@
+[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.
+
+[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`]] [unsupported]]
+
+ [[[@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`]] [unsupported]]
+ [[[@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]