geopm
3.1.1.dev272+gdfb40a8d
GEOPM - Global Extensible Open Power Manager
|
Abstract base class for interprocess communication in geopm. More...
#include <Comm.hpp>
Public Types | |
enum | m_comm_split_type_e { M_COMM_SPLIT_TYPE_PPN1 , M_COMM_SPLIT_TYPE_SHARED , M_NUM_COMM_SPLIT_TYPE } |
enum | m_split_color_e { M_SPLIT_COLOR_UNDEFINED = -16 } |
Public Member Functions | |
Comm ()=default | |
Constructor for global communicator. More... | |
Comm (const Comm &other)=default | |
Comm & | operator= (const Comm &other)=default |
virtual | ~Comm ()=default |
Default destructor. More... | |
virtual std::shared_ptr< Comm > | split () const =0 |
virtual std::shared_ptr< Comm > | split (int color, int key) const =0 |
virtual std::shared_ptr< Comm > | split (const std::string &tag, int split_type) const =0 |
virtual std::shared_ptr< Comm > | split (std::vector< int > dimensions, std::vector< int > periods, bool is_reorder) const =0 |
virtual std::shared_ptr< Comm > | split_cart (std::vector< int > dimensions) const =0 |
virtual bool | comm_supported (const std::string &description) const =0 |
virtual int | cart_rank (const std::vector< int > &coords) const =0 |
Process rank within Cartesian communicator. More... | |
virtual int | rank (void) const =0 |
Process rank within communicator. More... | |
virtual int | num_rank (void) const =0 |
Number of ranks in the communicator. More... | |
virtual void | dimension_create (int num_ranks, std::vector< int > &dimension) const =0 |
Populate vector of optimal dimensions given the number of ranks the communicator. More... | |
virtual void | free_mem (void *base)=0 |
Free memory that was allocated for message passing and RMA. More... | |
virtual void | alloc_mem (size_t size, void **base)=0 |
Allocate memory for message passing and RMA. More... | |
virtual size_t | window_create (size_t size, void *base)=0 |
Create window for message passing and RMA. More... | |
virtual void | window_destroy (size_t window_id)=0 |
Destroy window for message passing and RMA. More... | |
virtual void | window_lock (size_t window_id, bool is_exclusive, int rank, int assert) const =0 |
Begin epoch for message passing and RMA. More... | |
virtual void | window_unlock (size_t window_id, int rank) const =0 |
End epoch for message passing and RMA. More... | |
virtual void | coordinate (int rank, std::vector< int > &coord) const =0 |
Coordinate in Cartesian grid for specified rank. More... | |
virtual std::vector< int > | coordinate (int rank) const =0 |
virtual void | barrier (void) const =0 |
Barrier for all ranks. More... | |
virtual void | broadcast (void *buffer, size_t size, int root) const =0 |
Broadcast a message to all ranks. More... | |
virtual bool | test (bool is_true) const =0 |
Test whether or not all ranks in the communicator present the same input and return true/false accordingly. More... | |
virtual void | reduce_max (double *send_buf, double *recv_buf, size_t count, int root) const =0 |
Reduce distributed messages across all ranks using specified operation, store result on all ranks. More... | |
virtual void | gather (const void *send_buf, size_t send_size, void *recv_buf, size_t recv_size, int root) const =0 |
Gather bytes from all processes. More... | |
virtual void | gatherv (const void *send_buf, size_t send_size, void *recv_buf, const std::vector< size_t > &recv_sizes, const std::vector< off_t > &rank_offset, int root) const =0 |
Gather bytes into specified location from all processes. More... | |
virtual void | window_put (const void *send_buf, size_t send_size, int rank, off_t disp, size_t window_id) const =0 |
Perform message passing or RMA. More... | |
virtual void | tear_down (void)=0 |
Clean up resources held by the comm. This allows static global objects to be cleaned up before the destructor is called. More... | |
Static Public Member Functions | |
static std::vector< std::string > | comm_names (void) |
static std::unique_ptr< Comm > | make_unique (const std::string &comm_name) |
static std::unique_ptr< Comm > | make_unique (void) |
Static Public Attributes | |
static const std::string | M_PLUGIN_PREFIX = "libgeopmcomm_" |
Abstract base class for interprocess communication in geopm.
|
default |
Constructor for global communicator.
|
default |
|
virtualdefault |
Default destructor.
|
pure virtual |
Allocate memory for message passing and RMA.
[in] | size | Size of the desired memory allocation. |
[out] | base | Address of allocated memory. |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Barrier for all ranks.
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Broadcast a message to all ranks.
[in,out] | buffer | Starting address of buffer to be broadcasted. |
[in] | size | Size of the buffer. |
[in] | root | Rank of the broadcast root (target). |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Process rank within Cartesian communicator.
[in] | coords | Coordinate of Cartesian communicator member whose rank we wish to know. |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
static |
|
pure virtual |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Coordinate in Cartesian grid for specified rank.
[in] | rank | Rank for which coordinates should be calculated |
[in,out] | coord | Cartesian coordinates of specified rank. The size of this vector should equal the number of dimensions that the Cartesian communicator was created with. |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Populate vector of optimal dimensions given the number of ranks the communicator.
[in] | num_ranks | Number of ranks that must fit in Cartesian grid. |
[in,out] | dimension | Number of ranks per dimension. The size of this vector dictates the number of dimensions in the grid. Fill indices with 0 for API to fill with suitable value. |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Free memory that was allocated for message passing and RMA.
[in] | base | Address of memory to be released. |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Gather bytes from all processes.
[in] | send_buf | Start address of memory buffer to be transmitted. |
[in] | send_size | Size of buffer to be sent. |
[out] | recv_buf | Start address of memory buffer to receive data. |
[in] | recv_size | The size of the buffer to be received. |
[in] | root | Rank of the target for the transmission. |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Gather bytes into specified location from all processes.
[in] | send_buf | Start address of memory buffer to be transmitted. |
[in] | send_size | Size of buffer to be sent. |
[out] | recv_buf | Start address of memory buffer to receive data. |
[in] | recv_sizes | Vector describing the buffer size per rank to be received. |
[in] | rank_offset | Offset per rank into target buffer for transmitted data. |
[in] | root | Rank of the target for the transmission. |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
static |
|
static |
|
pure virtual |
Number of ranks in the communicator.
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Process rank within communicator.
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Reduce distributed messages across all ranks using specified operation, store result on all ranks.
[in] | send_buf | Start address of memory buffer to be transmitted. |
[out] | recv_buf | Start address of memory buffer to receive data. |
[in] | count | Size of buffer in bytes to be transmitted. |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Clean up resources held by the comm. This allows static global objects to be cleaned up before the destructor is called.
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Test whether or not all ranks in the communicator present the same input and return true/false accordingly.
[in] | is_true | Boolean value to be reduced from all ranks. |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Create window for message passing and RMA.
[in] | size | Size of the memory area backing the RMA window. |
[in] | base | Address of memory that has been allocated for the window. |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Destroy window for message passing and RMA.
[in] | window_id | The window handle for the target window. |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Begin epoch for message passing and RMA.
[in] | window_id | The window handle for the target window. |
[in] | is_exclusive | Lock type for the window, true for exclusive lock, false for shared. |
[in] | rank | Rank of the locked window. |
[in] | assert | Used to optimize call. |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
Perform message passing or RMA.
[in] | send_buf | Starting address of buffer to be transmitted via window. |
[in] | send_size | Size in bytes of buffer to be sent. |
[in] | rank | Target rank of the transmission. |
[in] | disp | Displacement from start of window. |
[in] | window_id | The window handle for the target window. |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
pure virtual |
End epoch for message passing and RMA.
[in] | window_id | The window handle for the target window. |
[in] | rank | Rank of the locked window. |
Implemented in geopm::MPIComm, and geopm::NullComm.
|
static |