NeighborhoodCommunicator Class Reference

NeighborhoodCommunicator Class Reference#

Reference API: gko::experimental::mpi::NeighborhoodCommunicator Class Reference
Reference API
gko::experimental::mpi::NeighborhoodCommunicator Class Referencefinal

#include <ginkgo/core/distributed/neighborhood_communicator.hpp>

Inheritance diagram for gko::experimental::mpi::NeighborhoodCommunicator:
[legend]

Public Member Functions

 NeighborhoodCommunicator (const NeighborhoodCommunicator &other)=default
 
 NeighborhoodCommunicator (NeighborhoodCommunicator &&other)
 
NeighborhoodCommunicatoroperator= (const NeighborhoodCommunicator &other)=default
 
NeighborhoodCommunicatoroperator= (NeighborhoodCommunicator &&other)
 
 NeighborhoodCommunicator (communicator base)
 
template<typename LocalIndexType , typename GlobalIndexType >
 NeighborhoodCommunicator (communicator base, const distributed::index_map< LocalIndexType, GlobalIndexType > &imap)
 
std::unique_ptr< CollectiveCommunicatorcreate_with_same_type (communicator base, const distributed::index_map_variant &imap) const override
 
std::unique_ptr< CollectiveCommunicatorcreate_inverse () const override
 
comm_index_type get_recv_size () const override
 
comm_index_type get_send_size () const override
 
template<typename SendType , typename RecvType >
request i_all_to_all_v (std::shared_ptr< const Executor > exec, const SendType *send_buffer, RecvType *recv_buffer) const
 
request i_all_to_all_v (std::shared_ptr< const Executor > exec, const void *send_buffer, MPI_Datatype send_type, void *recv_buffer, MPI_Datatype recv_type) const
 
- Public Member Functions inherited from gko::experimental::mpi::CollectiveCommunicator
 CollectiveCommunicator (communicator base=MPI_COMM_NULL)
 
const communicatorget_base_communicator () const
 
template<typename SendType , typename RecvType >
request i_all_to_all_v (std::shared_ptr< const Executor > exec, const SendType *send_buffer, RecvType *recv_buffer) const
 
request i_all_to_all_v (std::shared_ptr< const Executor > exec, const void *send_buffer, MPI_Datatype send_type, void *recv_buffer, MPI_Datatype recv_type) const
 

Protected Member Functions

request i_all_to_all_v_impl (std::shared_ptr< const Executor > exec, const void *send_buffer, MPI_Datatype send_type, void *recv_buffer, MPI_Datatype recv_type) const override
 

Friends

bool operator== (const NeighborhoodCommunicator &a, const NeighborhoodCommunicator &b)
 
bool operator!= (const NeighborhoodCommunicator &a, const NeighborhoodCommunicator &b)
 

Detailed Description

A CollectiveCommunicator that uses a neighborhood topology.

The neighborhood communicator is defined by a list of neighbors this rank sends data to and a list of neighbors this rank receives data from. No communication with any ranks that is not in one of those lists will take place.

Constructor & Destructor Documentation

◆ NeighborhoodCommunicator() [1/2]

gko::experimental::mpi::NeighborhoodCommunicator::NeighborhoodCommunicator ( communicator  base)
explicit

Default constructor with empty communication pattern

Parameters
basethe base communicator

◆ NeighborhoodCommunicator() [2/2]

template<typename LocalIndexType , typename GlobalIndexType >
gko::experimental::mpi::NeighborhoodCommunicator::NeighborhoodCommunicator ( communicator  base,
const distributed::index_map< LocalIndexType, GlobalIndexType > &  imap 
)

Create a NeighborhoodCommunicator from an index map.

The receiving neighbors are defined by the remote indices and their owning ranks of the index map. The send neighbors are deduced from that through collective communication.

Template Parameters
LocalIndexTypethe local index type of the map
GlobalIndexTypethe global index type of the map
Parameters
basethe base communicator
imapthe index map that defines the communication pattern

Member Function Documentation

◆ create_inverse()

std::unique_ptr< CollectiveCommunicator > gko::experimental::mpi::NeighborhoodCommunicator::create_inverse ( ) const
overridevirtual

Creates the inverse NeighborhoodCommunicator by switching sources and destinations.

Returns
CollectiveCommunicator with the inverse communication pattern

Implements gko::experimental::mpi::CollectiveCommunicator.

◆ create_with_same_type()

std::unique_ptr< CollectiveCommunicator > gko::experimental::mpi::NeighborhoodCommunicator::create_with_same_type ( communicator  base,
const distributed::index_map_variant &  imap 
) const
overridevirtual

Creates a new CollectiveCommunicator with the same dynamic type.

Parameters
baseThe base communicator
imapThe index_map that defines the communication pattern
Returns
a CollectiveCommunicator with the same dynamic type

Implements gko::experimental::mpi::CollectiveCommunicator.

◆ get_recv_size()

comm_index_type gko::experimental::mpi::NeighborhoodCommunicator::get_recv_size ( ) const
overridevirtual

Get the total number of received elements this communication patterns expects.

Returns
number of received elements.

Implements gko::experimental::mpi::CollectiveCommunicator.

◆ get_send_size()

comm_index_type gko::experimental::mpi::NeighborhoodCommunicator::get_send_size ( ) const
overridevirtual

Get the total number of sent elements this communication patterns expects.

Returns
number of sent elements.

Implements gko::experimental::mpi::CollectiveCommunicator.

◆ i_all_to_all_v() [1/2]

template<typename SendType , typename RecvType >
request gko::experimental::mpi::CollectiveCommunicator::i_all_to_all_v ( std::shared_ptr< const Executor exec,
const SendType *  send_buffer,
RecvType *  recv_buffer 
) const

Non-blocking all-to-all communication.

The send_buffer must have allocated at least get_send_size number of elements, and the recv_buffer must have allocated at least get_recv_size number of elements.

Template Parameters
SendTypethe type of the elements to send
RecvTypethe type of the elements to receive
Parameters
execthe executor for the communication
send_bufferthe send buffer
recv_bufferthe receive buffer
Returns
a request handle

◆ i_all_to_all_v() [2/2]

request gko::experimental::mpi::CollectiveCommunicator::i_all_to_all_v ( std::shared_ptr< const Executor exec,
const void *  send_buffer,
MPI_Datatype  send_type,
void *  recv_buffer,
MPI_Datatype  recv_type 
) const

◆ i_all_to_all_v_impl()

request gko::experimental::mpi::NeighborhoodCommunicator::i_all_to_all_v_impl ( std::shared_ptr< const Executor exec,
const void *  send_buffer,
MPI_Datatype  send_type,
void *  recv_buffer,
MPI_Datatype  recv_type 
) const
overrideprotectedvirtual

Non-blocking all-to-all communication.

The send_buffer must have allocated at least get_send_size number of elements, and the recv_buffer must have allocated at least get_recv_size number of elements.

Template Parameters
SendTypethe type of the elements to send
RecvTypethe type of the elements to receive
Parameters
execthe executor for the communication
send_bufferthe send buffer
recv_bufferthe receive buffer
Returns
a request handle

This implementation uses the neighborhood communication MPI_Ineighbor_alltoallv. See MPI documentation for more details.

Implements gko::experimental::mpi::CollectiveCommunicator.

Friends And Related Symbol Documentation

◆ operator!=

bool operator!= ( const NeighborhoodCommunicator a,
const NeighborhoodCommunicator b 
)
friend

Compares two communicators for inequality.

See also
operator==

◆ operator==

bool operator== ( const NeighborhoodCommunicator a,
const NeighborhoodCommunicator b 
)
friend

Compares two communicators for equality locally.

Equality is defined as having identical or congruent communicators and their communication pattern is equal. No communication is done, i.e. there is no reduction over the local equality check results.

Returns
true if both communicators are equal.

The documentation for this class was generated from the following file: