Class MPIManager

Class Documentation

class MPIManager

MPI operation class. Maintains MPI related operations.

Public Functions

inline MPIManager(MPI_Comm communicator = MPI_COMM_WORLD)
inline MPIManager(int argc, char **argv)
inline MPIManager(const MPIManager &other)
inline ~MPIManager()
template<typename T>
inline auto getMPIDatatype() const -> MPI_Datatype

Find C++ data type’s corresponding MPI data type.

Template Parameters

T – C++ data type.

inline auto getRank() const -> std::size_t

Get the process rank in the communicator.

inline auto getSize() const -> std::size_t

Get the process number in the communicator.

inline auto getSizeNode() const -> std::size_t

Get the number of processes per node in the communicator.

inline MPI_Comm getComm() const

Get the communicator.

inline double getTime() const

Get an elapsed time.

inline auto getVendor() const -> const std::string&

Get the MPI vendor.

inline auto getVersion() const -> std::tuple<std::size_t, std::size_t>

Get the MPI version.

inline virtual auto get_cpp_mpi_type_map() const -> const std::unordered_map<std::string, MPI_Datatype>&
inline auto getMPIOpType(const std::string &op_str) const -> MPI_Op

Find operation string’s corresponding MPI_Op type.

Parameters

op_str – std::string of MPI_Op name.

template<typename T>
inline void Allgather(T &sendBuf, std::vector<T> &recvBuf, std::size_t sendCount = 1)

MPI_Allgather wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer.

  • recvBuf – Receive buffer vector.

  • sendCount – Number of elements received from any process.

template<typename T>
inline auto allgather(T &sendBuf) -> std::vector<T>

MPI_Allgather wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer.

  • sendCount – Number of elements received from any process.

Returns

recvBuf Vector of receive buffer.

template<typename T>
inline void Allgather(std::vector<T> &sendBuf, std::vector<T> &recvBuf)

MPI_Allgather wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer vector.

  • recvBuf – Receive buffer vector.

template<typename T>
inline auto allgather(std::vector<T> &sendBuf) -> std::vector<T>

MPI_Allgather wrapper.

Template Parameters

T – C++ data type.

Parameters

sendBuf – Send buffer vector.

Returns

recvBuf Vector of receive buffer.

template<typename T>
inline void Allreduce(T &sendBuf, T &recvBuf, const std::string &op_str)

MPI_Allreduce wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer.

  • recvBuf – Receive buffer.

  • op_str – String of MPI_Op.

template<typename T>
inline auto allreduce(const T &sendBuf, const std::string &op_str) const -> T

MPI_Allreduce wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer.

  • op_str – String of MPI_Op.

Returns

recvBuf Receive buffer.

template<typename T>
inline void Allreduce(std::vector<T> &sendBuf, std::vector<T> &recvBuf, const std::string &op_str)

MPI_Allreduce wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer vector.

  • recvBuf – Receive buffer vector.

  • op_str – String of MPI_Op.

template<typename T>
inline auto allreduce(std::vector<T> &sendBuf, const std::string &op_str) -> std::vector<T>

MPI_Allreduce wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer vector.

  • op_str – String of MPI_Op.

Returns

recvBuf Receive buffer.

template<typename T>
inline void Reduce(T &sendBuf, T &recvBuf, std::size_t root, const std::string &op_str)

MPI_Reduce wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer.

  • recvBuf – Receive buffer.

  • root – Rank of root process.

  • op_str – String of MPI_Op.

template<typename T>
inline void Reduce(std::vector<T> &sendBuf, std::vector<T> &recvBuf, std::size_t root, const std::string &op_str)

MPI_Reduce wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer vector.

  • recvBuf – Receive buffer vector.

  • root – Rank of root process.

  • op_str – String of MPI_Op.

template<typename T>
inline void Reduce(T *sendBuf, T *recvBuf, std::size_t length, std::size_t root, const std::string &op_str)

MPI_Reduce wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer.

  • recvBuf – Receive buffer vector.

  • root – Rank of root process.

template<typename T>
inline void Gather(T &sendBuf, std::vector<T> &recvBuf, std::size_t root)
template<typename T>
inline void Gather(std::vector<T> &sendBuf, std::vector<T> &recvBuf, std::size_t root)

MPI_Reduce wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer vector.

  • recvBuf – Receive buffer vector.

  • root – Rank of root process.

inline void Barrier()

MPI_Barrier wrapper.

template<typename T>
inline void Bcast(T &sendBuf, std::size_t root)

MPI_Bcast wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer.

  • root – Rank of broadcast root.

template<typename T>
inline void Bcast(std::vector<T> &sendBuf, std::size_t root)

MPI_Bcast wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer vector.

  • root – Rank of broadcast root.

template<typename T>
inline void Scatter(T *sendBuf, T *recvBuf, std::size_t dataSize, std::size_t root)

MPI_Scatter wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer.

  • recvBuf – Receive buffer.

  • root – Rank of scatter root.

template<typename T>
inline void Scatter(std::vector<T> &sendBuf, std::vector<T> &recvBuf, std::size_t root)

MPI_Scatter wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer vector.

  • recvBuf – Receive buffer vector.

  • root – Rank of scatter root.

template<typename T>
inline auto scatter(std::vector<T> &sendBuf, std::size_t root) -> std::vector<T>

MPI_Scatter wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer vector.

  • root – Rank of scatter root.

Returns

recvBuf Receive buffer vector.

template<typename T>
inline void Send(std::vector<T> &sendBuf, std::size_t dest)

MPI_Send wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer vector.

  • dest – Rank of send dest.

template<typename T>
inline void Recv(std::vector<T> &recvBuf, std::size_t source)

MPI_Recv wrapper.

Template Parameters

T – C++ data type.

Parameters
  • recvBuf – Recv buffer vector.

  • source – Rank of data source.

template<typename T>
inline void Sendrecv(T &sendBuf, std::size_t dest, T &recvBuf, std::size_t source, std::size_t tag = 0)

MPI_Sendrecv wrapper for a single element.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer.

  • dest – Rank of destination.

  • recvBuf – Receive buffer.

  • source – Rank of source.

  • tag – Tag for MPI message.

template<typename T>
inline void Sendrecv(std::vector<T> &sendBuf, std::size_t dest, std::vector<T> &recvBuf, std::size_t source, std::size_t tag = 0)

MPI_Sendrecv wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer vector.

  • dest – Rank of destination.

  • recvBuf – Receive buffer vector.

  • source – Rank of source.

  • tag – Tag for MPI message.

template<typename T>
inline void GatherV(std::vector<T> &sendBuf, std::vector<T> &recvBuf, std::size_t root, std::vector<int> &displacements)

MPI_GatherV wrapper for uniform receive counts.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer vector.

  • recvBuf – Receive buffer vector.

  • root – Rank of destination.

  • displacements – Elements shifted from each rank for gather.

template<typename T>
inline void GatherV(std::vector<T> &sendBuf, std::vector<T> &recvBuf, std::vector<int> &recvCounts, std::size_t root, std::vector<int> &displacements)

MPI_GatherV wrapper.

Template Parameters

T – C++ data type.

Parameters
  • sendBuf – Send buffer vector.

  • recvBuf – Receive buffer vector.

  • recvCounts – Number of elements received from each rank.

  • root – Rank of destination.

  • displacements – Elements shifted from each rank for gather.

template<typename T>
inline void Scan(T &sendBuf, T &recvBuf, const std::string &op_str)
inline auto split(std::size_t color, std::size_t key) -> MPIManager

Creates new MPIManager based on colors and keys.

Parameters
  • color – Processes with the same color are in the same new communicator.

  • key – Rank assignment control.

Returns

new MPIManager object.