123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632 |
- [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]
|