![]() |
fpmas 1.6
|
#include <communication.h>
Public Member Functions | |
virtual std::unordered_map< int, std::vector< T > > | migrate (std::unordered_map< int, std::vector< T > > export_map)=0 |
virtual std::unordered_map< int, T > | allToAll (std::unordered_map< int, T > export_map)=0 |
virtual std::vector< T > | gather (const T &data, int root)=0 |
virtual std::vector< T > | allGather (const T &data)=0 |
virtual T | bcast (const T &data, int root)=0 |
virtual void | send (const T &data, int destination, int tag)=0 |
virtual void | Isend (const T &data, int destination, int tag, Request &req)=0 |
virtual void | Issend (const T &data, int destination, int tag, Request &req)=0 |
virtual void | probe (int source, int tag, Status &status)=0 |
virtual bool | Iprobe (int source, int tag, Status &status)=0 |
virtual T | recv (int source, int tag, Status &status=Status::IGNORE)=0 |
A conveniently templated MPI wrapper to handle any type of data.
Provides an intuitive API to send / receive objects of type T through MPI, without having to manually serialize / unserialize data and specify send / receive buffers.
Of course, serialization / unserialization rules must still be specified at the implementation level.
For example, implementations might be based on a JSON or XML serialization of T, on custom MPI Datatypes, or on any other custom protocol.
|
pure virtual |
Performs a migration of data across all processors.
The "migration" operation follows the same rules as MpiCommunicator::allToAll, except that vectors of T instances can be used, for convenience.
export_map | vectors of data to send to each process |
Implemented in fpmas::communication::detail::TypedMpi< Color, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< DistributedId, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< fpmas::api::graph::DistributedEdge< T > >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::graph::EdgePtrWrapper< T >, io::datapack::LightObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::DataUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::NodeUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< std::set< fpmas::api::graph::DistributedId >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< T, PackType >, and fpmas::communication::detail::TypedMpi< T, io::datapack::ObjectPack >.
|
pure virtual |
Performs a complete exchange of T
instances among processor.
Follows the same rules as MpiCommunicator::allToAll().
export_map | data to export to each process |
Implemented in fpmas::communication::detail::TypedMpi< Color, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< DistributedId, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< fpmas::api::graph::DistributedEdge< T > >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::graph::EdgePtrWrapper< T >, io::datapack::LightObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::DataUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::NodeUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< std::set< fpmas::api::graph::DistributedId >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< T, PackType >, and fpmas::communication::detail::TypedMpi< T, io::datapack::ObjectPack >.
|
pure virtual |
Gathers T
instances at root
.
Follows the same rules as MpiCommunicator::gather().
data | data to send to root |
root | rank of the root process |
rank == root
, a vector containing gathered T
objects, else an empty vector. Implemented in fpmas::communication::detail::TypedMpi< Color, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< DistributedId, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< fpmas::api::graph::DistributedEdge< T > >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::graph::EdgePtrWrapper< T >, io::datapack::LightObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::DataUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::NodeUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< std::set< fpmas::api::graph::DistributedId >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< T, PackType >, and fpmas::communication::detail::TypedMpi< T, io::datapack::ObjectPack >.
|
pure virtual |
Gathers T
instances on all processes.
Follows the same rules as MpiCommunicator::allGather().
data | to send to all processes |
Implemented in fpmas::communication::detail::TypedMpi< Color, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< DistributedId, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< fpmas::api::graph::DistributedEdge< T > >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::graph::EdgePtrWrapper< T >, io::datapack::LightObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::DataUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::NodeUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< std::set< fpmas::api::graph::DistributedId >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< T, PackType >, and fpmas::communication::detail::TypedMpi< T, io::datapack::ObjectPack >.
|
pure virtual |
Broadcasts a T
instance to all processes.
Follows the same rules as MpiCommunicator::bcast().
data | data to broadcast |
root | rank of the process from which data is sent |
root
Implemented in fpmas::communication::detail::TypedMpi< Color, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< DistributedId, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< fpmas::api::graph::DistributedEdge< T > >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::graph::EdgePtrWrapper< T >, io::datapack::LightObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::DataUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::NodeUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< std::set< fpmas::api::graph::DistributedId >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< T, PackType >, and fpmas::communication::detail::TypedMpi< T, io::datapack::ObjectPack >.
|
pure virtual |
Sends a T
instance to destination
(blocking).
Follows the same rules as MpiCommunicator::send().
data | reference to the T object to send to destination |
destination | rank of the destination process |
tag | message tag |
Implemented in fpmas::communication::detail::TypedMpi< Color, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< DistributedId, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< fpmas::api::graph::DistributedEdge< T > >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::graph::EdgePtrWrapper< T >, io::datapack::LightObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::DataUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::NodeUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< std::set< fpmas::api::graph::DistributedId >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< T, PackType >, and fpmas::communication::detail::TypedMpi< T, io::datapack::ObjectPack >.
|
pure virtual |
Sends a T
instance to destination
(non-blocking).
Follows the same rules as MpiCommunicator::Isend().
data | reference to the T object to send to destination |
destination | rank of the destination process |
tag | message tag |
req | output Request |
Implemented in fpmas::communication::detail::TypedMpi< Color, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< DistributedId, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< fpmas::api::graph::DistributedEdge< T > >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::graph::EdgePtrWrapper< T >, io::datapack::LightObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::DataUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::NodeUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< std::set< fpmas::api::graph::DistributedId >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< T, PackType >, and fpmas::communication::detail::TypedMpi< T, io::datapack::ObjectPack >.
|
pure virtual |
Sends a T
instance to destination
(non-blocking, synchronous).
Follows the same rules as MpiCommunicator::Issend().
data | reference to the T object to send to destination |
destination | rank of the destination process |
tag | message tag |
req | output Request |
Implemented in fpmas::communication::detail::TypedMpi< Color, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< DistributedId, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< fpmas::api::graph::DistributedEdge< T > >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::graph::EdgePtrWrapper< T >, io::datapack::LightObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::DataUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::NodeUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< std::set< fpmas::api::graph::DistributedId >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< T, PackType >, and fpmas::communication::detail::TypedMpi< T, io::datapack::ObjectPack >.
|
pure virtual |
Blocking probe.
Blocks until a message with the specified tag is received from source.
Upon return, the output status
contains information about the size of the message to receive.
source | source rank |
tag | recv tag |
status | MPI status |
Implemented in fpmas::communication::detail::TypedMpi< T, PackType >, fpmas::communication::detail::TypedMpi< T, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::graph::EdgePtrWrapper< T >, io::datapack::LightObjectPack >, fpmas::communication::detail::TypedMpi< std::set< fpmas::api::graph::DistributedId >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< DistributedId, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::NodeUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< fpmas::api::graph::DistributedEdge< T > >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< Color, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::DataUpdatePack< T >, io::datapack::ObjectPack >, and fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< T >, io::datapack::ObjectPack >.
|
pure virtual |
Non-blocking probe.
Returns true if and only if a message with the specified tag can be received from source.
Upon return, the output status
contains information about the size of the message to receive.
source | source rank |
tag | recv tag |
status | MPI status |
Implemented in fpmas::communication::detail::TypedMpi< T, PackType >, fpmas::communication::detail::TypedMpi< T, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::graph::EdgePtrWrapper< T >, io::datapack::LightObjectPack >, fpmas::communication::detail::TypedMpi< std::set< fpmas::api::graph::DistributedId >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< DistributedId, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::NodeUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< fpmas::api::graph::DistributedEdge< T > >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< Color, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::DataUpdatePack< T >, io::datapack::ObjectPack >, and fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< T >, io::datapack::ObjectPack >.
|
pure virtual |
Receives a T
object from source
.
source | rank of the process to receive from |
tag | message tag |
status | output MPI status |
Implemented in fpmas::communication::detail::TypedMpi< T, PackType >, fpmas::communication::detail::TypedMpi< T, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::graph::EdgePtrWrapper< T >, io::datapack::LightObjectPack >, fpmas::communication::detail::TypedMpi< std::set< fpmas::api::graph::DistributedId >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< DistributedId, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::NodeUpdatePack< T >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< fpmas::api::graph::DistributedEdge< T > >, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< Color, io::datapack::ObjectPack >, fpmas::communication::detail::TypedMpi< fpmas::synchro::DataUpdatePack< T >, io::datapack::ObjectPack >, and fpmas::communication::detail::TypedMpi< fpmas::api::utils::PtrWrapper< T >, io::datapack::ObjectPack >.