geopm::MPIComm(3) -- implementation of Comm using MPI
=====================================================


Namespaces
----------

The ``MPIComm`` class is a member of the ``namespace geopm``\ , but the
full name, ``geopm::MPIComm``\ , has been abbreviated in this manual.
Similarly, the ``std::`` namespace specifier has been omitted from the
interface definitions for the following standard types: ``std::vector``\ ,
``std::string``\ , and ``std::set``\ , to enable better rendering of this
manual.

Note that the ``MPIComm`` class is derived from :doc:`geopm::Comm(3) <geopm::Comm.3>` class.

Synopsis
--------

#include `"MPIComm.hpp" <https://github.com/geopm/geopm/blob/dev/libgeopm/src/MPIComm.hpp>`_

Link with ``-lgeopm`` **(MPI)**


.. code-block:: c++

       static string MPIComm::plugin_name(void);

       static unique_ptr<Comm> MPIComm::make_plugin(void);

       static MPIComm& MPIComm::comm_world(void);

       virtual shared_ptr<Comm> MPIComm::split() const override;

       virtual shared_ptr<Comm> MPIComm::split(int color, int key) const override;

       virtual shared_ptr<Comm> MPIComm::split(const string &tag, int split_type) const override;

       virtual shared_ptr<Comm> MPIComm::split(vector<int> dimensions, vector<int> periods, bool is_reorder) const override;

       virtual shared_ptr<Comm> MPIComm::split_cart(vector<int> dimensions) const override;

       virtual bool MPIComm::comm_supported(const string &description) const override;

       virtual int MPIComm::cart_rank(const vector<int> &coords) const override;

       virtual int MPIComm::rank(void) const override;

       virtual int MPIComm::num_rank(void) const override;

       virtual void MPIComm::dimension_create(int num_ranks, vector<int> &dimension) const override;

       virtual void MPIComm::alloc_mem(size_t size, void **base) override;

       virtual void MPIComm::free_mem(void *base) override;

       virtual size_t MPIComm::window_create(size_t size, void *base) override;

       virtual void MPIComm::window_destroy(size_t window_id) override;

       virtual void MPIComm::coordinate(int rank, vector<int> &coord) const override;

       virtual vector<int> MPIComm::coordinate(int rank) const override;

       virtual void MPIComm::window_lock(size_t window_id, bool is_exclusive, int rank, int assert) const override;

       virtual void MPIComm::window_unlock(size_t window_id, int rank) const override;

       virtual void MPIComm::barrier(void) const override;

       virtual void MPIComm::broadcast(void *buffer, size_t size, int root) const override;

       virtual bool MPIComm::test(bool is_true) const override;

       virtual void MPIComm::reduce_max(double *send_buf, double *recv_buf, size_t count, int root) const override;

       virtual void MPIComm::gather(const void *send_buf, size_t send_size, void *recv_buf,
                                    size_t recv_size, int root) const override;

       virtual void MPIComm::gatherv(const void *send_buf, size_t send_size, void *recv_buf,
                                     const vector<size_t> &recv_sizes, const vector<off_t> &rank_offset, int root) const override;

       virtual void MPIComm::window_put(const void *send_buf, size_t send_size, int rank, off_t disp, size_t window_id) const override;

       void MPIComm::tear_down(void) override;

Description
-----------

This class implements the Comm abstraction (:doc:`geopm::Comm(3) <geopm::Comm.3>`) using MPI
as the underlying communication mechanism.

For more details, see the
`doxygen page <https://geopm.github.io/geopm-runtime-dox/classgeopm_1_1_m_p_i_comm.html>`_.

See Also
--------

:doc:`geopm(7) <geopm.7>`\ ,
:doc:`geopm::Comm(3) <geopm::Comm.3>`